From 3125499a8c2b497b0f964e23c53d9c9fe3fe4e58 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 19 Apr 2021 21:25:21 +0000 Subject: optex its own format, so directly under tex/ and doc/ git-svn-id: svn://tug.org/texlive/trunk@58918 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/luatex/optex/README | 120 - Master/texmf-dist/doc/luatex/optex/omls.tex | 832 - Master/texmf-dist/doc/luatex/optex/optex-doc.pdf | Bin 1380041 -> 0 bytes Master/texmf-dist/doc/luatex/optex/optex-doc.tex | 114 - Master/texmf-dist/doc/luatex/optex/optex-math.tex | 1662 -- .../texmf-dist/doc/luatex/optex/optex-techdoc.tex | 290 - .../texmf-dist/doc/luatex/optex/optex-userdoc.tex | 2019 --- Master/texmf-dist/doc/optex/README | 120 + Master/texmf-dist/doc/optex/omls.tex | 832 + Master/texmf-dist/doc/optex/optex-doc.pdf | Bin 0 -> 1380041 bytes Master/texmf-dist/doc/optex/optex-doc.tex | 114 + Master/texmf-dist/doc/optex/optex-math.tex | 1662 ++ Master/texmf-dist/doc/optex/optex-techdoc.tex | 290 + Master/texmf-dist/doc/optex/optex-userdoc.tex | 2019 +++ Master/texmf-dist/tex/luatex/optex/base/alloc.opm | 173 - .../tex/luatex/optex/base/basic-macros.opm | 130 - .../tex/luatex/optex/base/bib-iso690.opm | 906 -- .../tex/luatex/optex/base/bib-simple.opm | 164 - .../texmf-dist/tex/luatex/optex/base/cite-bib.opm | 271 - Master/texmf-dist/tex/luatex/optex/base/colors.opm | 394 - Master/texmf-dist/tex/luatex/optex/base/doc.opm | 276 - .../tex/luatex/optex/base/f-adventor.opm | 22 - Master/texmf-dist/tex/luatex/optex/base/f-antt.opm | 32 - .../tex/luatex/optex/base/f-baskerville.opm | 22 - .../texmf-dist/tex/luatex/optex/base/f-bonum.opm | 24 - .../tex/luatex/optex/base/f-comicneue.opm | 23 - .../texmf-dist/tex/luatex/optex/base/f-cursor.opm | 22 - .../texmf-dist/tex/luatex/optex/base/f-dejavu.opm | 31 - .../tex/luatex/optex/base/f-ebgaramond.opm | 37 - .../tex/luatex/optex/base/f-garamondl.opm | 26 - .../tex/luatex/optex/base/f-gfsbodoni.opm | 22 - .../texmf-dist/tex/luatex/optex/base/f-heros.opm | 244 - .../texmf-dist/tex/luatex/optex/base/f-kerkis.opm | 32 - .../texmf-dist/tex/luatex/optex/base/f-kpfonts.opm | 45 - .../tex/luatex/optex/base/f-libertine-s.opm | 50 - .../tex/luatex/optex/base/f-libertine.opm | 60 - .../tex/luatex/optex/base/f-libertinus.opm | 36 - .../tex/luatex/optex/base/f-librecaslon.opm | 22 - Master/texmf-dist/tex/luatex/optex/base/f-lido.opm | 48 - .../texmf-dist/tex/luatex/optex/base/f-lmfonts.opm | 186 - .../tex/luatex/optex/base/f-merriweather.opm | 33 - .../texmf-dist/tex/luatex/optex/base/f-pagella.opm | 24 - .../tex/luatex/optex/base/f-poltawski.opm | 34 - .../texmf-dist/tex/luatex/optex/base/f-roboto.opm | 59 - .../texmf-dist/tex/luatex/optex/base/f-schola.opm | 24 - .../tex/luatex/optex/base/f-sourcepro.opm | 39 - .../tex/luatex/optex/base/f-technika.opm | 31 - .../texmf-dist/tex/luatex/optex/base/f-termes.opm | 24 - .../tex/luatex/optex/base/f-xcharter.opm | 24 - .../texmf-dist/tex/luatex/optex/base/fams-ini.opm | 214 - Master/texmf-dist/tex/luatex/optex/base/fnotes.opm | 191 - .../tex/luatex/optex/base/fonts-catalog.opm | 136 - .../tex/luatex/optex/base/fonts-opmac.opm | 226 - .../tex/luatex/optex/base/fonts-preload.opm | 36 - .../tex/luatex/optex/base/fonts-resize.opm | 354 - .../tex/luatex/optex/base/fonts-select.opm | 846 - .../texmf-dist/tex/luatex/optex/base/graphics.opm | 445 - .../texmf-dist/tex/luatex/optex/base/hi-syntax.opm | 223 - .../tex/luatex/optex/base/hisyntax-c.opm | 66 - .../tex/luatex/optex/base/hisyntax-html.opm | 31 - .../tex/luatex/optex/base/hisyntax-python.opm | 82 - .../tex/luatex/optex/base/hisyntax-tex.opm | 38 - .../tex/luatex/optex/base/hyperlinks.opm | 157 - .../tex/luatex/optex/base/hyphen-lan.opm | 245 - .../texmf-dist/tex/luatex/optex/base/if-macros.opm | 313 - Master/texmf-dist/tex/luatex/optex/base/keyval.opm | 82 - .../texmf-dist/tex/luatex/optex/base/languages.opm | 188 - Master/texmf-dist/tex/luatex/optex/base/lists.opm | 128 - Master/texmf-dist/tex/luatex/optex/base/logos.opm | 61 - .../tex/luatex/optex/base/luatex-ini.opm | 136 - .../texmf-dist/tex/luatex/optex/base/makeindex.opm | 463 - .../texmf-dist/tex/luatex/optex/base/maketoc.opm | 154 - .../texmf-dist/tex/luatex/optex/base/margins.opm | 80 - .../tex/luatex/optex/base/math-macros.opm | 1079 -- .../tex/luatex/optex/base/math-preload.opm | 227 - .../tex/luatex/optex/base/math-unicode.opm | 266 - .../texmf-dist/tex/luatex/optex/base/mathclass.opm | 1591 -- .../tex/luatex/optex/base/more-macros.opm | 284 - .../tex/luatex/optex/base/multicolumns.opm | 114 - Master/texmf-dist/tex/luatex/optex/base/optex.ini | 107 - Master/texmf-dist/tex/luatex/optex/base/optex.lua | 356 - Master/texmf-dist/tex/luatex/optex/base/others.opm | 106 - .../texmf-dist/tex/luatex/optex/base/outlines.opm | 108 - Master/texmf-dist/tex/luatex/optex/base/output.opm | 267 - .../tex/luatex/optex/base/parameters.opm | 588 - .../tex/luatex/optex/base/pdfuni-string.opm | 127 - .../tex/luatex/optex/base/plain-macros.opm | 346 - .../texmf-dist/tex/luatex/optex/base/prefixed.opm | 298 - .../tex/luatex/optex/base/print-unimath.opm | 56 - .../texmf-dist/tex/luatex/optex/base/ref-file.opm | 141 - .../tex/luatex/optex/base/references.opm | 94 - .../texmf-dist/tex/luatex/optex/base/sections.opm | 469 - Master/texmf-dist/tex/luatex/optex/base/slides.opm | 247 - Master/texmf-dist/tex/luatex/optex/base/styles.opm | 120 - Master/texmf-dist/tex/luatex/optex/base/table.opm | 526 - .../texmf-dist/tex/luatex/optex/base/uni-lcuc.opm | 15944 ------------------- .../tex/luatex/optex/base/unimath-codes.opm | 439 - .../tex/luatex/optex/base/unimath-table.opm | 2471 --- Master/texmf-dist/tex/luatex/optex/base/usebib.opm | 398 - .../texmf-dist/tex/luatex/optex/base/verbatim.opm | 372 - .../tex/luatex/optex/demo/op-biblist.bib | 298 - .../texmf-dist/tex/luatex/optex/demo/op-demo.tex | 127 - .../tex/luatex/optex/demo/op-letter-cs.tex | 41 - .../tex/luatex/optex/demo/op-letter-en.tex | 38 - .../texmf-dist/tex/luatex/optex/demo/op-ring.png | Bin 512984 -> 0 bytes .../tex/luatex/optex/demo/op-slides-bg.png | Bin 62385 -> 0 bytes .../texmf-dist/tex/luatex/optex/demo/op-slides.tex | 322 - Master/texmf-dist/tex/luatex/optex/pkg/emoji.opm | 55 - .../texmf-dist/tex/luatex/optex/pkg/plain-at.opm | 43 - Master/texmf-dist/tex/luatex/optex/pkg/qrcode.opm | 2707 ---- Master/texmf-dist/tex/luatex/optex/pkg/vlna.opm | 193 - Master/texmf-dist/tex/optex/base/alloc.opm | 173 + Master/texmf-dist/tex/optex/base/basic-macros.opm | 130 + Master/texmf-dist/tex/optex/base/bib-iso690.opm | 906 ++ Master/texmf-dist/tex/optex/base/bib-simple.opm | 164 + Master/texmf-dist/tex/optex/base/cite-bib.opm | 271 + Master/texmf-dist/tex/optex/base/colors.opm | 394 + Master/texmf-dist/tex/optex/base/doc.opm | 276 + Master/texmf-dist/tex/optex/base/f-adventor.opm | 22 + Master/texmf-dist/tex/optex/base/f-antt.opm | 32 + Master/texmf-dist/tex/optex/base/f-baskerville.opm | 22 + Master/texmf-dist/tex/optex/base/f-bonum.opm | 24 + Master/texmf-dist/tex/optex/base/f-comicneue.opm | 23 + Master/texmf-dist/tex/optex/base/f-cursor.opm | 22 + Master/texmf-dist/tex/optex/base/f-dejavu.opm | 31 + Master/texmf-dist/tex/optex/base/f-ebgaramond.opm | 37 + Master/texmf-dist/tex/optex/base/f-garamondl.opm | 26 + Master/texmf-dist/tex/optex/base/f-gfsbodoni.opm | 22 + Master/texmf-dist/tex/optex/base/f-heros.opm | 244 + Master/texmf-dist/tex/optex/base/f-kerkis.opm | 32 + Master/texmf-dist/tex/optex/base/f-kpfonts.opm | 45 + Master/texmf-dist/tex/optex/base/f-libertine-s.opm | 50 + Master/texmf-dist/tex/optex/base/f-libertine.opm | 60 + Master/texmf-dist/tex/optex/base/f-libertinus.opm | 36 + Master/texmf-dist/tex/optex/base/f-librecaslon.opm | 22 + Master/texmf-dist/tex/optex/base/f-lido.opm | 48 + Master/texmf-dist/tex/optex/base/f-lmfonts.opm | 186 + .../texmf-dist/tex/optex/base/f-merriweather.opm | 33 + Master/texmf-dist/tex/optex/base/f-pagella.opm | 24 + Master/texmf-dist/tex/optex/base/f-poltawski.opm | 34 + Master/texmf-dist/tex/optex/base/f-roboto.opm | 59 + Master/texmf-dist/tex/optex/base/f-schola.opm | 24 + Master/texmf-dist/tex/optex/base/f-sourcepro.opm | 39 + Master/texmf-dist/tex/optex/base/f-technika.opm | 31 + Master/texmf-dist/tex/optex/base/f-termes.opm | 24 + Master/texmf-dist/tex/optex/base/f-xcharter.opm | 24 + Master/texmf-dist/tex/optex/base/fams-ini.opm | 214 + Master/texmf-dist/tex/optex/base/fnotes.opm | 191 + Master/texmf-dist/tex/optex/base/fonts-catalog.opm | 136 + Master/texmf-dist/tex/optex/base/fonts-opmac.opm | 226 + Master/texmf-dist/tex/optex/base/fonts-preload.opm | 36 + Master/texmf-dist/tex/optex/base/fonts-resize.opm | 354 + Master/texmf-dist/tex/optex/base/fonts-select.opm | 846 + Master/texmf-dist/tex/optex/base/graphics.opm | 445 + Master/texmf-dist/tex/optex/base/hi-syntax.opm | 223 + Master/texmf-dist/tex/optex/base/hisyntax-c.opm | 66 + Master/texmf-dist/tex/optex/base/hisyntax-html.opm | 31 + .../texmf-dist/tex/optex/base/hisyntax-python.opm | 82 + Master/texmf-dist/tex/optex/base/hisyntax-tex.opm | 38 + Master/texmf-dist/tex/optex/base/hyperlinks.opm | 157 + Master/texmf-dist/tex/optex/base/hyphen-lan.opm | 245 + Master/texmf-dist/tex/optex/base/if-macros.opm | 313 + Master/texmf-dist/tex/optex/base/keyval.opm | 82 + Master/texmf-dist/tex/optex/base/languages.opm | 188 + Master/texmf-dist/tex/optex/base/lists.opm | 128 + Master/texmf-dist/tex/optex/base/logos.opm | 61 + Master/texmf-dist/tex/optex/base/luatex-ini.opm | 136 + Master/texmf-dist/tex/optex/base/makeindex.opm | 463 + Master/texmf-dist/tex/optex/base/maketoc.opm | 154 + Master/texmf-dist/tex/optex/base/margins.opm | 80 + Master/texmf-dist/tex/optex/base/math-macros.opm | 1079 ++ Master/texmf-dist/tex/optex/base/math-preload.opm | 227 + Master/texmf-dist/tex/optex/base/math-unicode.opm | 266 + Master/texmf-dist/tex/optex/base/mathclass.opm | 1591 ++ Master/texmf-dist/tex/optex/base/more-macros.opm | 284 + Master/texmf-dist/tex/optex/base/multicolumns.opm | 114 + Master/texmf-dist/tex/optex/base/optex.ini | 107 + Master/texmf-dist/tex/optex/base/optex.lua | 356 + Master/texmf-dist/tex/optex/base/others.opm | 106 + Master/texmf-dist/tex/optex/base/outlines.opm | 108 + Master/texmf-dist/tex/optex/base/output.opm | 267 + Master/texmf-dist/tex/optex/base/parameters.opm | 588 + Master/texmf-dist/tex/optex/base/pdfuni-string.opm | 127 + Master/texmf-dist/tex/optex/base/plain-macros.opm | 346 + Master/texmf-dist/tex/optex/base/prefixed.opm | 298 + Master/texmf-dist/tex/optex/base/print-unimath.opm | 56 + Master/texmf-dist/tex/optex/base/ref-file.opm | 141 + Master/texmf-dist/tex/optex/base/references.opm | 94 + Master/texmf-dist/tex/optex/base/sections.opm | 469 + Master/texmf-dist/tex/optex/base/slides.opm | 247 + Master/texmf-dist/tex/optex/base/styles.opm | 120 + Master/texmf-dist/tex/optex/base/table.opm | 526 + Master/texmf-dist/tex/optex/base/uni-lcuc.opm | 15944 +++++++++++++++++++ Master/texmf-dist/tex/optex/base/unimath-codes.opm | 439 + Master/texmf-dist/tex/optex/base/unimath-table.opm | 2471 +++ Master/texmf-dist/tex/optex/base/usebib.opm | 398 + Master/texmf-dist/tex/optex/base/verbatim.opm | 372 + Master/texmf-dist/tex/optex/demo/op-biblist.bib | 298 + Master/texmf-dist/tex/optex/demo/op-demo.tex | 127 + Master/texmf-dist/tex/optex/demo/op-letter-cs.tex | 41 + Master/texmf-dist/tex/optex/demo/op-letter-en.tex | 38 + Master/texmf-dist/tex/optex/demo/op-ring.png | Bin 0 -> 512984 bytes Master/texmf-dist/tex/optex/demo/op-slides-bg.png | Bin 0 -> 62385 bytes Master/texmf-dist/tex/optex/demo/op-slides.tex | 322 + Master/texmf-dist/tex/optex/pkg/emoji.opm | 55 + Master/texmf-dist/tex/optex/pkg/plain-at.opm | 43 + Master/texmf-dist/tex/optex/pkg/qrcode.opm | 2707 ++++ Master/texmf-dist/tex/optex/pkg/vlna.opm | 193 + Master/tlpkg/libexec/ctan2tds | 10 +- 209 files changed, 44491 insertions(+), 44493 deletions(-) delete mode 100644 Master/texmf-dist/doc/luatex/optex/README delete mode 100644 Master/texmf-dist/doc/luatex/optex/omls.tex delete mode 100644 Master/texmf-dist/doc/luatex/optex/optex-doc.pdf delete mode 100644 Master/texmf-dist/doc/luatex/optex/optex-doc.tex delete mode 100644 Master/texmf-dist/doc/luatex/optex/optex-math.tex delete mode 100644 Master/texmf-dist/doc/luatex/optex/optex-techdoc.tex delete mode 100644 Master/texmf-dist/doc/luatex/optex/optex-userdoc.tex create mode 100644 Master/texmf-dist/doc/optex/README create mode 100644 Master/texmf-dist/doc/optex/omls.tex create mode 100644 Master/texmf-dist/doc/optex/optex-doc.pdf create mode 100644 Master/texmf-dist/doc/optex/optex-doc.tex create mode 100644 Master/texmf-dist/doc/optex/optex-math.tex create mode 100644 Master/texmf-dist/doc/optex/optex-techdoc.tex create mode 100644 Master/texmf-dist/doc/optex/optex-userdoc.tex delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/alloc.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/basic-macros.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/bib-iso690.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/bib-simple.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/cite-bib.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/colors.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/doc.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-adventor.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-antt.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-baskerville.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-bonum.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-comicneue.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-cursor.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-dejavu.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-ebgaramond.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-garamondl.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-gfsbodoni.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-heros.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-kerkis.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-kpfonts.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-libertine-s.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-libertine.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-libertinus.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-librecaslon.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-lido.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-lmfonts.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-merriweather.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-pagella.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-poltawski.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-roboto.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-schola.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-sourcepro.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-technika.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-termes.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/f-xcharter.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/fams-ini.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/fnotes.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/fonts-catalog.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/fonts-opmac.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/fonts-preload.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/fonts-resize.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/fonts-select.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/graphics.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/hi-syntax.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/hisyntax-c.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/hisyntax-html.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/hisyntax-python.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/hisyntax-tex.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/hyperlinks.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/hyphen-lan.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/if-macros.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/keyval.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/languages.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/lists.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/logos.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/luatex-ini.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/makeindex.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/maketoc.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/margins.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/math-macros.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/math-preload.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/math-unicode.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/mathclass.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/more-macros.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/multicolumns.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/optex.ini delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/optex.lua delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/others.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/outlines.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/output.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/parameters.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/pdfuni-string.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/plain-macros.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/prefixed.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/print-unimath.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/ref-file.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/references.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/sections.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/slides.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/styles.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/table.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/uni-lcuc.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/unimath-codes.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/unimath-table.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/usebib.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/base/verbatim.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/demo/op-biblist.bib delete mode 100644 Master/texmf-dist/tex/luatex/optex/demo/op-demo.tex delete mode 100644 Master/texmf-dist/tex/luatex/optex/demo/op-letter-cs.tex delete mode 100644 Master/texmf-dist/tex/luatex/optex/demo/op-letter-en.tex delete mode 100644 Master/texmf-dist/tex/luatex/optex/demo/op-ring.png delete mode 100644 Master/texmf-dist/tex/luatex/optex/demo/op-slides-bg.png delete mode 100644 Master/texmf-dist/tex/luatex/optex/demo/op-slides.tex delete mode 100644 Master/texmf-dist/tex/luatex/optex/pkg/emoji.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/pkg/plain-at.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/pkg/qrcode.opm delete mode 100644 Master/texmf-dist/tex/luatex/optex/pkg/vlna.opm create mode 100644 Master/texmf-dist/tex/optex/base/alloc.opm create mode 100644 Master/texmf-dist/tex/optex/base/basic-macros.opm create mode 100644 Master/texmf-dist/tex/optex/base/bib-iso690.opm create mode 100644 Master/texmf-dist/tex/optex/base/bib-simple.opm create mode 100644 Master/texmf-dist/tex/optex/base/cite-bib.opm create mode 100644 Master/texmf-dist/tex/optex/base/colors.opm create mode 100644 Master/texmf-dist/tex/optex/base/doc.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-adventor.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-antt.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-baskerville.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-bonum.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-comicneue.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-cursor.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-dejavu.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-ebgaramond.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-garamondl.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-gfsbodoni.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-heros.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-kerkis.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-kpfonts.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-libertine-s.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-libertine.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-libertinus.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-librecaslon.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-lido.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-lmfonts.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-merriweather.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-pagella.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-poltawski.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-roboto.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-schola.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-sourcepro.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-technika.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-termes.opm create mode 100644 Master/texmf-dist/tex/optex/base/f-xcharter.opm create mode 100644 Master/texmf-dist/tex/optex/base/fams-ini.opm create mode 100644 Master/texmf-dist/tex/optex/base/fnotes.opm create mode 100644 Master/texmf-dist/tex/optex/base/fonts-catalog.opm create mode 100644 Master/texmf-dist/tex/optex/base/fonts-opmac.opm create mode 100644 Master/texmf-dist/tex/optex/base/fonts-preload.opm create mode 100644 Master/texmf-dist/tex/optex/base/fonts-resize.opm create mode 100644 Master/texmf-dist/tex/optex/base/fonts-select.opm create mode 100644 Master/texmf-dist/tex/optex/base/graphics.opm create mode 100644 Master/texmf-dist/tex/optex/base/hi-syntax.opm create mode 100644 Master/texmf-dist/tex/optex/base/hisyntax-c.opm create mode 100644 Master/texmf-dist/tex/optex/base/hisyntax-html.opm create mode 100644 Master/texmf-dist/tex/optex/base/hisyntax-python.opm create mode 100644 Master/texmf-dist/tex/optex/base/hisyntax-tex.opm create mode 100644 Master/texmf-dist/tex/optex/base/hyperlinks.opm create mode 100644 Master/texmf-dist/tex/optex/base/hyphen-lan.opm create mode 100644 Master/texmf-dist/tex/optex/base/if-macros.opm create mode 100644 Master/texmf-dist/tex/optex/base/keyval.opm create mode 100644 Master/texmf-dist/tex/optex/base/languages.opm create mode 100644 Master/texmf-dist/tex/optex/base/lists.opm create mode 100644 Master/texmf-dist/tex/optex/base/logos.opm create mode 100644 Master/texmf-dist/tex/optex/base/luatex-ini.opm create mode 100644 Master/texmf-dist/tex/optex/base/makeindex.opm create mode 100644 Master/texmf-dist/tex/optex/base/maketoc.opm create mode 100644 Master/texmf-dist/tex/optex/base/margins.opm create mode 100644 Master/texmf-dist/tex/optex/base/math-macros.opm create mode 100644 Master/texmf-dist/tex/optex/base/math-preload.opm create mode 100644 Master/texmf-dist/tex/optex/base/math-unicode.opm create mode 100644 Master/texmf-dist/tex/optex/base/mathclass.opm create mode 100644 Master/texmf-dist/tex/optex/base/more-macros.opm create mode 100644 Master/texmf-dist/tex/optex/base/multicolumns.opm create mode 100644 Master/texmf-dist/tex/optex/base/optex.ini create mode 100644 Master/texmf-dist/tex/optex/base/optex.lua create mode 100644 Master/texmf-dist/tex/optex/base/others.opm create mode 100644 Master/texmf-dist/tex/optex/base/outlines.opm create mode 100644 Master/texmf-dist/tex/optex/base/output.opm create mode 100644 Master/texmf-dist/tex/optex/base/parameters.opm create mode 100644 Master/texmf-dist/tex/optex/base/pdfuni-string.opm create mode 100644 Master/texmf-dist/tex/optex/base/plain-macros.opm create mode 100644 Master/texmf-dist/tex/optex/base/prefixed.opm create mode 100644 Master/texmf-dist/tex/optex/base/print-unimath.opm create mode 100644 Master/texmf-dist/tex/optex/base/ref-file.opm create mode 100644 Master/texmf-dist/tex/optex/base/references.opm create mode 100644 Master/texmf-dist/tex/optex/base/sections.opm create mode 100644 Master/texmf-dist/tex/optex/base/slides.opm create mode 100644 Master/texmf-dist/tex/optex/base/styles.opm create mode 100644 Master/texmf-dist/tex/optex/base/table.opm create mode 100644 Master/texmf-dist/tex/optex/base/uni-lcuc.opm create mode 100644 Master/texmf-dist/tex/optex/base/unimath-codes.opm create mode 100644 Master/texmf-dist/tex/optex/base/unimath-table.opm create mode 100644 Master/texmf-dist/tex/optex/base/usebib.opm create mode 100644 Master/texmf-dist/tex/optex/base/verbatim.opm create mode 100644 Master/texmf-dist/tex/optex/demo/op-biblist.bib create mode 100644 Master/texmf-dist/tex/optex/demo/op-demo.tex create mode 100644 Master/texmf-dist/tex/optex/demo/op-letter-cs.tex create mode 100644 Master/texmf-dist/tex/optex/demo/op-letter-en.tex create mode 100644 Master/texmf-dist/tex/optex/demo/op-ring.png create mode 100644 Master/texmf-dist/tex/optex/demo/op-slides-bg.png create mode 100644 Master/texmf-dist/tex/optex/demo/op-slides.tex create mode 100644 Master/texmf-dist/tex/optex/pkg/emoji.opm create mode 100644 Master/texmf-dist/tex/optex/pkg/plain-at.opm create mode 100644 Master/texmf-dist/tex/optex/pkg/qrcode.opm create mode 100644 Master/texmf-dist/tex/optex/pkg/vlna.opm diff --git a/Master/texmf-dist/doc/luatex/optex/README b/Master/texmf-dist/doc/luatex/optex/README deleted file mode 100644 index b8f925e47c1..00000000000 --- a/Master/texmf-dist/doc/luatex/optex/README +++ /dev/null @@ -1,120 +0,0 @@ -OpTeX: the LuaTeX format based on Plain TeX and OPmac - -Author: Petr Olsak, - -This software is in public domain. - -See http://petr.olsak.net/optex - -Files: - -base/ ... basic set of macro files used when optex.fmt is generated - and more basic macros loaded on demand during document processing. -demo/ ... examples: short document: op-demo.tex, short letter: op-letter.tex, - presentation slides: op-slides.tex. -pkg/ ... external macros. Maybe, they can be created by other authors if - the macro file conforms to the rules given in the section 2.2.5 - in the OpTeX documentation. -doc/ ... PDF version of the OpTeX documentation and sources. - -History: - -<1.01> Mar. 2021 - Minor code fixes (thanks to reports from users). - LibreCaslon font file added. - two new callbacks from new LuaTeX 1.13 added to optex.lua - active * (in lists) works as normal in math mode. - f-heros(\slides): additional font XITSMath loaded (to the base FiraMath font). - \_xhsize seting added to \margins. -<1.00> Feb. 2021 - The OMLS (OpTeX Markup Language Standard) was developed. It helps to create - convertors from/to OpTeX documents and similar applications. - \pdfunidef re-imeplemted. - \thisoutline introduced. - \verbchar introduced instead \activettchar. - Bugs fixing. -<0.19> Jan. 2021 - emoji support as pkg/emoji.opm. - non-braakable places generated by luavlna, suported as pkg/vlna.opm. - \begblock...\endblock introduced. - comment character allowed after \begtt. - more robust macros: \replstring, \table. - complete revision of documentation, spelling corrections. - Several bugs fixed. -<0.18> Dec. 2020 - Font support for next 9 families added. - Font selection system improved. - Documentation (especially about font selection system) corrected. - Macros supporting key=value included to the format. - \foreach macro improved. - Concept of multilang in bib rewritten. - \opwarning format changed (line numbers are printed too). - Several bugs fixed. -<0.17> Nov. 2020 - optex.lua introduced (instead external ltluatex.lua) - hyph.patterns are loaded directly by \patterns, not using lua code - \commentchars introduced (comments which are able to interrupt verbatim mode) -<0.16> Oct. 2020 - callback.register_x introduced, namespaces for packages corrected - kerkis and EBGaramond fontfiles added - little corrections - optex-math manual: Index added -<0.15> Jun. 2020 - Release for Overleaf - TL2020. - More vertical space above in \chap and \secc. -<0.14> Jun. 2020 - Typeseting Math with OpTeX: new document added. - Math macros corrected. - In-line verbatim in section titles allowed. - \eqbox implemented. - "\mnote up", "\displaylines to" (new features implemented) -<0.13> May 2020 - \table have more features: \tabskip, \table to, \table pxto, \vspan - The \eqalign reimplemented to be more flexible. - The boundary character ":" introduced in the \table. - \| undefined in 8bit math: bug fixed. - \isnextchar: \let\tmp=#1 -> \let\tmp= #1 -<0.12> May 2020 - The external macro qrcode.opm introduced - New directory structure: base/, demo/, pkg/, doc/ introduced. - \load macro introduced - \newif: bug fixed, other bug fixed. -<0.11> Apr. 2020 - \phi, \varpi in Unicode: bug fixed - \mathstyles introduced. -<0.10> Apr. 2020 - Technical documentation added - \_famdecl instedad \_fontdecl in font family files (incompatible change). -<0.09> Syntax highlighting implemented. -<0.08> \numberedpar implmented. \emergencystretch=20pt added as default. - \inoval, \incircle, \clipinoval, \clipincircle imlemented. - \puttext, \putpic x,y instead -y,x (incompatible change!) - footnotes have separated color stack now. - \fnotelinks implemented. - Lists by \begitems...\enditems improved (\novspaces \_vspacehalf, \ilevel). -<0.07> demos: op-letter.tex and op-slides.tex added. - \inkinspic, \transformbox, \slides added. - documentation improved and updated. -<0.06> tables re-implemented, opmac-rest removed. - footnotes, marginal notes reimplemented. - sections.opm, graphics.opm, colors.opm, languages re-implemented - Cite-bib re-implemented. - Index, sorting re-implemented. -<0.05> \boldmath reimplemented - \fontcolor, \letterspacing implemented - font catalogue improved -<0.04> references.opl, hyperlinks.opl re-implemented. - \fontfam, f-* rewritten: no usage of boundary "..." in \_fontnamegen - \fnote{...} corrected: (parameter is not really parameter) - verbatim.opl re-implemented + doc added - file-ref.opl implemented (new \_Xrefversion{3}) - bugfixing -<0.03> optex-doc optex.1 included, - verbatim.opm re-implmented, - math-unicode implemented, - usebib.opm + bib-style.opm included - \catcodetable stack implemented - bugfixing of macros. - catcodes.opl: removed, one can use \catcodetable, ... primitives, - pdfuni-string: lua code for lua5.3 fixed. -<0.02> Released. diff --git a/Master/texmf-dist/doc/luatex/optex/omls.tex b/Master/texmf-dist/doc/luatex/optex/omls.tex deleted file mode 100644 index bcc5749a512..00000000000 --- a/Master/texmf-dist/doc/luatex/optex/omls.tex +++ /dev/null @@ -1,832 +0,0 @@ -\fontfam[lm] - -\adef<#1>{\ifcsname s:#1\endcsname - \link[s:#1]{}{\Blue$\langle$\hbox{\it#1\/}$\rangle$}% - \else {\Blue$\langle$\hbox{\it#1\/}$\rangle$}\fi} -\everyintt={\catcode`<=13 \Red} -\verbchar` -\enlang -\enquotes - -\def\r[#1]{\label[#1]\wlabel{\the\_itemnum}} -\def\:{$\to$} -\let\_narrowlastlinecentered=\ignoreit -\_def\_printsecc#1{\_par - \_abovetitle{\_penalty-200}{\_medskip\_smallskip} - {\_seccfont \_noindent \_raggedright \_printrefnum[@\_quad]% - \_label[\the\_secnum.\the\_seccnum]\wlabel{\the\_secnum.\the\_seccnum}#1\_nbpar}% - \_nobreak \_belowtitle{\_medskip}% - \_firstnoindent -} -\def\.`{\bgroup\catcode`\ =12 \scancs} -\def\scancs#1{\egroup - \immediate\_wref\Xknowncs{\string#1{\the\_secnum.\the\_seccnum}}% - \ea`\string#1% -} -\def\printcs#1{\ea\printcsred\csstring#1;~\ref[#1] \ } -\def\printcsred,#1;{{\Red\tt \bslash#1}} -\def\printknowncs{\ifx\knowncslist\undefined \let\knowncslist=\empty \fi - \ifx\knowncslist\empty TeX me again...\else - \_dosorting\knowncslist \ea\xargs \ea\printcs \knowncslist;\fi} - -\def\~`<#1>`{<#1>\sxdef{s:#1}{}\dest[s:#1]} - -\refdecl{ - \def\knowncslist{}^^J - \def\Xknowncs#1#2{% - \sxdef{,\csstring#1}{#2}% - \global\ea\addto\ea\knowncslist\ea{\csname,\csstring#1\endcsname}% - } -} -\sdef{_item:c}{\pdfsave\llap{\pdfscale{1.3}{1.3}$\circ$\enspace}\pdfrestore} - -%\parindent=15pt \iindent=\parindent \ttindent=\parindent -%\ttindent=0pt -\everylist={\advance\ttindent by-1em} -\hyperlinks \Green \Green -\def\cskip{\par\nobreak} -\def\begblock{\medskip\hbox\bgroup\vrule\vbox\bgroup\hrule\smallskip - \_fnset\leftskip=\parindent \rightskip=\parindent \medskip\noindent} -\def\endblock{\medskip\hrule\egroup\vrule\egroup} - -\def\raggedright{\rightskip=10pt plus1fil\relax} -\def\optexmanual{\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf]{\OpTeX/ manual}} - -\titskip=1cm - -\hfill Version 0.1 - -\tit \OpTeX/ Markup Language Standard - -{\it\hfil Petr Olšák, 2021}\bigskip - -The \OpTeX/ markup language standard (OMLS) declares a list of control -sequences used in \OpTeX/ documents including their syntax and sematic. The -listed control sequences in OMLS in section~\ref[listcs] in table~\ref[alistcs] -are called {\it known} and other control sequences are {\it unknown}. - -The main reason for OMLS is to give instructions on how to program convertors -from \OpTeX/ documents to another formats (Html, Markdown, \LaTeX/) or how -to interpret the \OpTeX/ document sources in such applications as -{\tt texcount} or text editors\fnote -{We suppose advanced editor features: color highlighting, sections/chapters folding, - auto-completions, etc.}. -These converters and applications are called {\it cnv-programs} in this document. - -We suppose that if you need absolute control over the typography of the -document when it is converted to PDF pages, then you use \OpTeX/ itself. If -you need to create other formats of the same document then you can use a -cnv-program which accepts OMLS. The result is a document without -typographical instructions like dimensions of pages, margins, paginations -and headers, selection of a font-family, dimensions of the fonts, etc.\ You can -imagine the result of such a conversion as a single Html page where more -typographical features can be controlled in a different way, for example by -an external CSS file. This is a reason why control sequences like `\fontfam` or -`\margins` are ignored by cnv-programs. - -Obviously, \TeX/ and \OpTeX/ itself gives possibility to declare various -input formats for various purposes. Sometimes (in very special cases) there -exists a good reason to declare a different and special input format by -\TeX/ macros. But if the source of the document respects the OMLS then it is -reasonably transformable to other formats by cnv-programs. We hope that -OMLS-ready documents cover a very large set of typical documents used these -days. - -We suppose that cnv-programs work internally with strings of source lines -without tokenization. This is one of the great differences in processing the -document directly by \OpTeX/ and using a cnv-program. The second difference is -that the expansion process of macros is not implemented in cnv-programs in -its full range. We respect that the result of cnv-programs will be different -than from processing directly by \OpTeX/. But this is not a bug, this is -the feature. We concentrate on the fixed syntax and sematic given by OMLS of the -\OpTeX/ document and we throw behind the head the typographical -exactness of the document which can be done only directly by \TeX/ (and it is -exactly described in \TeX/book, for example). - -\notoc\nonum\sec Table of contents - -\begmulti 2 -\maketoc -\endmulti -\vfil\break - -\sec Syntactical rules - -The syntactical elements are described as strings here. No \TeX/'s tokenization is -taken into account. The rule with a smaller number has precedence. - -\begitems \style n -* end of line or end of file \: \~``.\r[eol] -* `%%:` at beginning of the line \: \~``, see section~\ref[cnv-decl]. -* `` is interpreted specially. -* space or a tab-character \: \~``. -* non-empty sequence of ``s \: \~``.\r[spcs] -* an empty line or a line only with `` \: \~``. -* a character `a`--`z` or `A`--`Z` \: \~``. -* a `` or `_` \: \~``. -* a character different from previous rule or `` or `` \: \~`` -* `\` \: \~``.\r[scs] -* a non-empty sequence of ``s \: \~``. -* `\` \: \~````. -* `%` \: `` and it is completely ignored including ``.\r[com] -* `` at beginning of the line marks that the line as {\it indented}. -* `` at beginning of the line \: are ignored.\r[bspace] -* `` or `` \: ``.\r[eolrm] -* `` \: ``.\r[csspace] -* `` or `` \: \~``.\r[cs] -* `` \: ``.\r[sspace] -* `~` \: non-breakable space. -* text where all pairs `{` and `}` match at arbitrary level \: \~``.\r[balt] -* `{}` can be interpreted as a parameter of a ``, see section~\ref[listcs]. -* The `{` alone not used by previous rule opens a group and the `}` alone closes the same group.\r[group] -* There are two main modes: h-mode, v-mode\fnote - {this is great simplification of real \TeX/ modes.}. - The document processing starts in v-mode. -* In v-mode: a `` character or a control sequence listed - in table~\ref[vtohmode] swithes to h-mode. -* In h-mode: an `` or a control sequence listed in table~\ref[htovmode] switches to v-mode.\r[htov] -* The switching from v-mode to h-mode \: a paragraph begins. -* The switching from h-mode to v-mode \: the current paragraph ends. -* `$$` or `$$$$` \: process `` in math-mode, see section~\ref[math]. -* a non-empty sequence of digits with optional `+` or `-` in the front \: \~``. -* `` with optional dot inside the sequence of digits \: \~``. -* a pair of letters listed in the table~\ref[tex-units] \: \~``. -* optional space, i.e.\ `` or nothing \: \~``. -* `` \: \~``. -* `` not listed in table~\ref[alistcs] nor in configuration \: \~``.\r[unkncs] -* `=` or `` \: \~``. -* `` \: should be completely ignored.\r[eqdim] -* `` \: should be completely ignored. -* `={}` \: should be completely ignored. -* `[]` \: should be completely ignored.\r[ibkt] -* `` \: should be ignored.\r[ignore] -* ``s are processed as described in section~\ref[listcs] or - by a configuration of the cnv-program. -\enditems - -\bigskip -\label[vtohmode]\caption/t -List of control sequences which switch from v-mode to h-mode. -\cskip -\begblock -`\`, -`\hfil`, -`\hfill`, -`\hskip`, -`\hss`, -`\indent`, -`\leavevmode`, -`\noindent`, -`\quad`, -`\qquad`, -`\vrule`. -\endblock - -\bigskip -\label[htovmode]\caption/t -List of control sequences which switch from h-mode to v-mode. -\cskip -\begblock -`\begblock`, -`\begitems`, -`\begmulti`, -`\begtt`, -`\bib`, -`\bigskip`, -`\bye`, -`\caption`, -`\chap`, -`\cskip`, -`\end`, -`\endblock`, -`\enditems`, -`\endmulti` -`\hrule`, -`\medskip`, -`\par`, -`\sec`, -`\secc`, -`\secl`, -`\smallskip`, -`\vfil`, -`\vskip`. -\endblock - -\bigskip -\label[tex-units]\caption/t -List of \TeX/ units. -\cskip -\begblock -`bp`, -`cc`, -`cm`, -`dd`, -`em`, -`ex`, -`in`, -`mm`, -`pc`, -`pt`, -`sp`. -\endblock - -\nonum\secc Examples - -\begitems -* `\%` is `` by rules \ref[scs], \ref[cs]. It does not start - comment, because rule \ref[scs] has precedence before rule \ref[com]. -* `\%`: the `` is kept, but `\foo`: the space is removed - by rule~\ref[csspace]. -* `wordAwordB` is `wordAwordB` by rules~\ref[bspace], - \ref[eolrm], and~\ref[sspace]. -* `\kern-3pt` should be ignored, because `\kern` is `` and rule - \ref[eqdim] is applied. -* `\vskip42mm` should finalize paragraph in h-mode by rule~\ref[htov] and then it - is ignored by rule~\ref[eqdim] because `\vskip` is - `` not listed in table~\ref[alistcs]. -* `\typosize[12/16]` is ignored by rule~\ref[ibkt]. -* `\foo{text}` is `{text}` (i.e. `text` in a group) by rules~\ref[ignore] and~\ref[group]. -\enditems - -\sec Scanning parameters - -If a control sequence listed in rules above or in the section~\ref[listcs] -has a parameter, the parameter is scanned -as a string with interpretation only those rules which are needed to -determine the boundary of the parameters. For example `\tit <eol>` -applies only rule~\ref[eol] during scanning the parameter, i.e.\ `<title>` -is a string telemetered by the end of the line or the end of the file. -Or `\fnote{<balanced-text>}` applies only rule~\ref[balt]. - -If the parameter is in the format `{<something>}` then the `<something>` is -always meant as `<balanced-text>`. We don't specify the type `<balanced-text>` -explicitly here, so we refer to `\fnote{<text>}` and not -`\fnote{<balanced-text>}`, for example. - -The spaces before the scanned parameter are optional -and they are ignored. Spaces inside `{`...`}` are not ignored. - -If the parameter is in the format `{<something>}` and the first non-space -character is not `{` then the parameter is this first non-space character or -a `<control-sequence>` if the first non-space character is~`\`. For example -`\fnote a` is equal to `\fnote{a}`. The difference from this rule is given -for `\input`, `\verbinput`,`\inspic` and `\inkinspic` control sequences in -section~\ref[listcs]. - -If the parameter is scanned as a string already then -all syntactical rules are applied when it is used. For example: -\begtt -\tit This is a title -\endtt -the parameter is scanned as `This is a title` and the rules~\ref[spcs] -and~\ref[sspace] are applied when it is used. - - -\sec Declaration and text parts of the document - -A typical \OpTeX/ document has two parts. A declaration part, where -macros are defined by `\def` and friends, fonts and sizes are declared, etc. -This part should be ignored by cnv-programs. -The second part includes the document text with a markup using well-declared control -sequences. The cnv-program has to interpret the second part. - -So, the cnv-program starts in declaration-skipping mode and it switches to -the text mode later. - -When cnv-program is in declaration-skipping mode then all indented lines are -ignored. And lines which begins by `}` or by a <control-sequence> not listed -in table~\ref[textopen] are ignored too. - -If the line begins by a character other than `}` or by a <control-sequence> -listed in table~\ref[textopen] then cnv-program switches to text mode. All -texts are interpreted from this line including this one. - -User can say explicitly where the second part of the document starts by -`%%:text` given at beginning of a line. Moreover, if `%%:decl` is given at -beginning of a line, then all text between `%%:decl` and `%%:text` is -ignored, only other possible `<cnv-declarator>`s are processed here. -It means that the declaration part and the text part of the document can be -simply determined by the pair `%%:decl` and `%%:text`. - -\bigskip -\label[textopen]\caption/t -List of control sequences which start the text mode. -\cskip -\begblock \raggedright -`\address`, -`\begblock`, -`\begitems`, -`\begmulti`, -`\begtt`, -`\bf`, -`\bi`, -`\bib`, -`\caption`, -`\cite`, -`\clipinoval`, -`\clipincircle`, -`\ecite`, -`\fnote`, -`\frame`, -`\hfil`, -`\hfill`, -`\ii`, -`\iid`, -`\incircle`, -`\inkinspic`, -`\inoval`, -`\inspic`, -`\it`, -`\LaTeX`, -`\LuaTeX`, -`\maketoc`, -`\mnote`, -`\OpTeX`, -`\putpic`, -`\puttext`, -`\rcite`, -`\rm`, -`\rotbox`, -`\sec`, -`\secc`, -`\secl`, -`\table`, -`\TeX`, -`\tit`, -`\usebib`, -`\verbinput`. -\endblock - - -\sec[cnv-decl] The `%%:` declarators - -The `%%:` declarators are ignored when the document is processed by \TeX/ -but they can give instructions to cnv-programs. The `%%:` must be placed at -beginning of the line. The list of `%%:` declarators follows: - -\begitems -* `%%:decl` -- the following text is ignored until `%%:text` occurs. Only - other `%%:` declarators are interpreted. -* `%%:text` -- the following text must be interpreted in text mode. -* `%%:to <format> <config-file>` -- if the cnv-program converts to the - <format> then it has to use the <config-file>. For example: - \begtt - %%:to html html-mydocument.cfg - %%:to markdown markdown-mydocument.cfg - %%:to latex preamble-mydocument.cfg - \endtt - The language of the config files are not a part of this standard, we - suppose something to be natural for used cnv-program. The config file should - give additional rules for interpreting control sequences not listed in the - section~\ref[listcs] (see rule~\ref[unkncs]). For example a tool for - defining a behavior of unknown control sequences can be here. - These definitions can depend on the converted document and on the output - format and they can be given in the configuration files. -* `%%:app <application> <config-file>` -- behaves like `%%;to` but the - cnv-program name instead output format is given here. -* `%%:do <format-or-app> <action>` -- does an `<action>` if `<format-or-app>` - is output format or used cnv\hbox{-}program name. The `<action>` syntax depends - on used cnv-program and it typicaly does a change in its configuration or - give a command to it. -* `%%:skip <formats-or-apps>` -- ignores all following lines until another `%%:` occurs - if the output format or application name is included in the `<formats-or-apps>` - space-separated list. Example: - \begtt - %%:skip html markdown - This text is not interpreted when Html or Markdown output is generated. - %%: - \endtt - If the `<formats-or-apps>` is empty then the `%%:skip` is applied for - each cnv-program and for each output. -* `%%:if <formats-or-apps>` -- processes following lines until another `%%:` - only if the output format or application name is included in the - `<formats-or-apps>` space-separated list. Other cnv-programs or output formats - not mentioned here skip these lines. Note that \TeX/ processes such lines always. - But you can use `\ignoreit{<text>}` which is processed as - `{<text>}` by cnv-programs (see rule~\ref[ignore]) but it is ignored by \OpTeX. - Example: - \begtt - %%:if html latex - \ignoreit{\input{file.tex}} - %%: - \endtt - The `file.tex` in this example is processed only if \LaTeX/ or Html output is generated. -* `%%:use` -- the next single line is fully interpreted unless cnv-program ignores - declarations by `%%:decl` or because it is in declaration-skipping mode. - Example: - \begtt - %%:use - \verbchar` \picdir={img/} - \endtt - The example shows how cnv-program is able to read `\verbchar` or - `\picdir` settings in the declaration\hbox{-}skipping mode although these control - sequences are not listed in table~\ref[textopen]. -* `%%:quotes <qql> <qqr> <ql> <qr>` -- declares \~`<qql>` and \~`<qqr>` (left - and right double quotation marks), \~`<ql>` and \~`<qr>` (left and right single - quotation mark). They are used when `\"` or `\'` control sequences are - processed. Default: unset, i.e.\ `\"` and `\'` are interpreted as - unknown control sequences. -\enditems - - -\sec[listcs] List of known control sequences - -The phrase \"should be" is used very often when the interpretation of -control sequences is declared here. It means that this is only a common -interpretation, but differences are possible due to the type of the output -format and used cnv-program. For example, when we convert to \LaTeX\, then -`\-` and `\/` are not ignored but they are re-written without change to the -output of the \LaTeX/ source file. - -\bigskip -\label[alistcs] -\caption/t List of known control sequences alphabeticaly sorted. -\cskip -\begblock -\raggedright \printknowncs -\endblock - - -\secc Character-like control sequences - -\begitems -* \.`\%`, \.`\$`, \.`\&`,\.`\#` respectively \: should be normal characters - `%`, `$`, `&`, `#` respectively. -* \.`\bslash` \: normal character `\`. -* \.`\space`, `\<space>`, `\<eol>` \: space. -* `\,` \: should be small space or space. -* \.`\quad`, \.`\qquad` \: should be bigger space or more spaces. -* \.`\-`, \.`\/` \: should be ignored. -* \.`\"<text>"` or \.`\'<text>'` \: `<qql><text><qqr>` or `<ql><text><qr>`, - only if `%%:quotes` are set. -\enditems - -\secc Input files - -\begitems -* \.`\input {<file-name>}` or `\input <file-name><space>` should redirect the - input to given file. At the end of the input-ed file or at \.`\endinput` the - reading of the current file continues. The file is read from the current - directory, but the <file-name> should include the full path to the file - or relative path starting from the current directory. First, the file - `<file-name>.tex` is tried to read and if it doesn't exist then - the file `<file-name>` is read. -* \.`\picdir <o-equal>{<text>}` saves `<text>` to `<picdir-value>`. By - default, `<picdir-value>` is empty. -* \.`\inspic {<file-name>}` or `\inspic <file-name><space>` should include the - given picture from the `<picdir-value><file-name>`. -* \.`\inkinspic {<file-name>}` or `\inkinspic <file-name><space>` behaves like - `\inspic`. -* \.`\verinput <ignore> (<lines>) <file-name><space>` should include the - <file-name> (only given lines) as a verbatim text, i.\,e. without any - syntactical interpretation. -* \.`\usebib/<letter> (<style>) <file-names>` should use files from - `<file-names>` to generate the list of bib references. The `<file-names>` - is comma separated list (the `.bib` extension is appended to - each such file name). Only cited bib records should be used in this - bib-references, i.e. their label must be used in a `\cite[<labels>]` or - `\rcite[<labels>]` or `\ecite[<label>]`. - What bib fields are used in bib records depends on the cnv-program and - on its configuration. Maybe, simple cnv-programs should generate nothing here. -\enditems - -\secc Titles - -\begitems -* \.`\tit <title><eof>` should be a title of the document. -* \.`\chap <title><eof>` or `\chap [<label>] <title><eof>` is the title of - first level. -* \.`\sec <title><eof>` or `\sec [<label>] <title><eof>` is the title of - second level. -* \.`\secc <title><eof>` or `\secc [<label>] <title><eof>` is the title of - third level. -* \.`\secl<level> <title><eof>` is the title of given level. -\enditems - -\secc Fonts - -\.`\rm` selects upright normal font (it is selected by default), \.`\it` selects -italic, \.`\bf` selects upright bold font, \.`\bi` selects bold italic and -\.`\tt` selects a monospaced font, \.`\em` select italic (if upright is current) or upright -(if italic is current). The font sizes or other font features are typically ignored -by cnv-programs. The actual font selection is closed at the end of the current group. -The groups are given: -\begitems -* explicitly by `{` and `}` characters (which are not delimiters of - parameters of known control sequences), -* implicitly: parameters of control sequences listed in table~\ref[groupcs] - are processed in a group and blocks of text enclosed by - `\begitems`...`\enditems`, `\begblock`...`\endblock`, `\begmulti`...`\endmulti` - are processed in a group. - Each item in `\table` is in a group. -\enditems - -\label[groupcs] -\caption/t Parameters of following control sequences are processed in a group. -\cskip -\begblock -`\caption`, -`\chap`, -`\fnote`, -`\mnote`, -`\sec`, -`\secc`, -`\tit`. -\endblock - -\secc Colors - -\.`\Red`, \.`\Green`, \.`\Blue`, \.`\Cyan`, \.`\Magenta`, \.`\Yellow`, \.`\White`, -\.`\Black`, and \.`\Brown` should select the given color of the font. The selection -is closed at the end of the current group (like font selectors). - -\secc Blockquotes - -The blockquote\fnote -{The terminology is borrowed from Markdown.} -is opened by \.`\begblock` and closed by \.`\endblock`. -Blockquotes can contain multiple paragraphs and can contain nested -blockquotes. - -\secc Lists - -The list is opened by \.`\begitems` and closed by \.`\enditems`. The `*` starts -a new item in this environment. Nested lists are allowed. - -The type of items (ordered/unordered) -is given by \.`\style <character>`, see section 1.4.5 in the -\optexmanual. Default type is unordered (bullets are used). - - -\secc Code blocks (verbatim texts) - -Code blocks are inline verbatim or display verbatim. - -\begitems -* \.`\begtt <ignored><eol><text>\endtt<ignored><eol>` processes `<text>` in - \"display verbatim mode", i.\,e. there are no special characters, each character - is processed without special interpretation, the <eol>s are end of lines. - The text at the same line after `\begtt` and after `\endtt` (if any) is - ignored. -* \.`\verbchar <character>` declares `<verbchar>`. By default, it is undeclared.\nl - New `\verbchar <character>` rewrites previous setting. The setting is - local in the group. -* Inline verbatim is enclosed in the pairs of `<verbchar>`s. - The text between two `<verbchar>`s is processed without special interpretation. - Only possibly <eol>s are replaced by space. - Example: - \begtt - %%:use - \verbchar` - Now, `$this %text ~\` is processed as inline verbatim. - \endtt - gives: Now, `$this %text ~\` is processed as inline verbatim. -* \.`\code{<text>}` processes `<text>` like inline verbatim, but - all `\<character>` are processed as `<character>`, specially `\{` and `\}` - are `{` and `}` but without taking them into `<balanced-text>` rule, - `\\` is `\` but do not create a `<control-sequence>`, etc. -\enditems - - -\secc Multicolumns - -\.`\begmulti <number><space>` opens the group and \.`\endmulti` -closes the group. If output format allows multi-columns then -the text enclosed between `\begmulti <number><space>` and matching -`\endmulti` should be printed in `<number>` balanced columns. - - -\secc Links - -\begitems -* \.`\url{<text>}` creates `<text>` as an external link which points to `<text>`. - The `\<character>` is interpreted as `<character>` in `<text>` with one - exception: `\|` is ignored. -* \.`\ulink[<url>]{<text>}` creates `<text>` as an external link which points - to `<url>`. The `\<character>` is interpreted as `<character>` only in - `<url>` parameter. -* \.`\label[<label>]` sets the `<label>`. First following occurence of `\chap`, `\sec`, - `\secc`, `\caption` or `\eqmark` sets this `<label>` as bounded to its - position in the document. -* \.`\ref[<label>]` should create an internal link to the position given by - `\chap`, `\sec`, `\secc`, `\caption` or `\eqmark`, - if `[<label>]` is used as the parameter of this control sequence - else if `<label>` is bounded here by previous `\label[<label>]` - The visual aspect of the link - is not declared by OMLS because we don't suppose that the chapters, - sections, equations, etc.\ are automatically numbered by exactly the same way as in - \OpTeX/. A recommendation should be: create a simple sequence of numbers over - all internal links. -* \.`\pgref[<label>]` should be replaced by `??` if cnv-program generates single-page - output (like Html, Markdown). Unfortunately, we get the irrelevant phrases in the output: - \"{\tt The problem is shown at the page ??}". - Users can declare `%%:skip` for such cases. -* \.`\bib[<label>]` or `\bib[<label>]<o-space>=<o-space>{<ignored>}` should open the new bib - record. More exactly, it closes previous paragraph (if h-mode is current) - and opens new h-mode. Then prints an auto-generated reference number in - `[...]`. Following text is interpreted as a bib record until the h-mode ends. -* \.`\cite[<labels>]` should create internal links to corresponding bib - records generated by `\usebib` or by `\bib`. The `<labels>` is a comma-separated list - of labels used in `.bib` files or in `\bib` commands to indicate - the corresponding bib record. The labels should be replaced by auto-generated - reference numbers used in bib records. All reference numbers created by - single `\cite` should be enclosed by single `[...]`. These numbers are - internal links. If the cnv-program does not implement this complicated - bib machinery then `\cite[<labels>]` should print only `[<labels>]`. -* \.`\rcite[<labels>]` does the same as `\cite[<labels>]` but doesn't print - outer `[...]`. -* \.`\ecite[<label>]{<text>}` creates the link to corresponding bib record, - `<text>` is is hyperlinked (no the auto-generated reference number). -* \.`\maketoc` should create a list of titles from all `\chap`, `\sec` and `\secc` - used in the document if they are not preceded by \.`\notoc`. All lines in - this list should include internal links to the position where the corresponding title - is used. -\enditems - -\secc Tables - -\begitems -* \.`\caption/<letter>` opens a caption. More exactly, if current mode is - h-mode, then switch to v-mode first (i.e.\ close the current paragraph). - Then switch from v-mode to h-mode and put a <caption-head>. The following - text should be interpreted as the caption text until h-mode ends. - If <letter> is `t` then <caption-head> is `Table` followed - by an auto-generated number. If the <letter> is `f` then <caption-head> is - `Figure` followed by an auto-generated number. The configuration of - cnv-programs shoud allow different words than default `Table` or `Figure` (for - example, if another language is used). -* \.`\table<ignored>{<declaration>}{<data>}` should create a table. The fidelity - rate of created output depends heavily on the used cnv-program and the output - format. We don't suppose that all aspects of \OpTeX/ tables are implemented. - The following features are listed in their priority of implementation. - \begitems \style c - * Items in `<data>` are separated by `&`. - The last item in each row is separated by end-row separator: \.`\cr`, \.`\crl`, \.`\crll`, - \.`\crli`, \.`\crlli`, or \.`\crlp{<list>}`. If there are $n$ columns in - the table then we have $n-1$ `&` separators and one end-row separator - for each table row. - There can be an optional end-row separator at the first item in `<data>` and - it should be ignored. The `<data>` can end without the end-row separator, it - should be added here. - * Spaces around `&` and before end-row separator are ignored. - * \.`\noalign{<text>}` and \.`\tskip <dimen>` should be ignored. - * Colum declarators in <declaration> should be interpreted: `l` (left aligned), `c` (center - aligned), `r` (right aligned) or `p{<ignored>}` (paragraph-like item). - * The `<number><letter>` or `<number>{<text>}` should be interpreted as - `<number>`-times repeated `<letter>` or `<text>` in `<declaration>`. - * \.`\vspan<decimal-number>{<text>}` should be an item with only `<text>`. - * \.`\mspan<number>[<decl>]{<text>}` should create `<text>` as an item which - spans over `<number>` columns. It is used instead `<number>` real - items, i.e.\ `<number>`$-1$ separators `&` aren't used here. - * Rules in the table should be interpreted, i.e. `|` in <declaration> - should be not ignored and - various end-row separators should be distinguished (see \optexmanual, - section 1.4.6). - * The aligning of `p{<p-data>}` columns should be interpreded by reading - \.`\fL`, \.`\fR`, \.`\fC`, \.`\fS` and \.`\fX` control sequences in `<p-data>`. - See \optexmanual, section 1.4.6. - \enditems -\enditems - -\secc Footnotes, marginal notes - -\begitems -* \.`\fnote{<text>}` should create a footnote link as an auto-generated - reference number. - The `<text>` should be appended at the end of the document labeled by this - reference number. Another alternative (for Html output, for example): the mouse over - the reference number riases an auto-popup `<text>`. -* \.`\fnotemark<number>` should create a pointer to a next declared - footnote as auto-generated reference number. The `<text>` of the footnote is - declared after that by \.`\fnotetext{<text>}`. Exact behavior: if the - reference number of the last processed `\fnote` is $n$ then - `\fnotemark<number>` uses the value - $n+{}$`<number>` as its reference number. A set of `\fnotemark`s - is followed by an equally large set of `\fnotetext{<text>}`. First one - have reference number $n+1$, second $n+2$, etc. When whole set of `\fnotetext{<text>}` - is processed then $n$ is reset to the last reference number used here. -* \.`\mnote <ignored>{<text>}` should be created as auto-popup `<text>` or the `<text>` - is inserted at the margin. -\enditems - -\secc Tagging for index - -We don't suppose that the cnv-program can generate the alphabetically sorted -index. So, the markup for creating the index should be ignored: - -\begitems -* \.`\ii <word><space>` (where `<word>` is a sequence of non-space characters) - should be ignored. -* \.`\iid <word><space>` is `<word><space>` by default, but - if `,` or `.` follows after `<space>` then the `<space>` is removed. -\enditems - -\secc Logos - -\.`\TeX`, \.`\LuaTeX`, \.`\OpTeX`, \.`\LaTeX`, respectively \: -`TeX`, `LuaTeX`, `OpTeX`, `LaTeX`, respectively. If `/` follows -these control sequences then it is ignored. Other logos should be declared -in the configuration of the cnv-program. - -\secc What should be ignored - -\begitems -* \.`\def<text>{<text>}` and other variants with \.`\gdef`, \.`\edef`, \.`\xdef`. - Reason: user can insert a special definition in the `%%:text` part of the - document in order to solve a problem. But cnv-program should ignore~it. -* \.`\outlines{<text>}`, \.`\insertoutline{<text>}` and \.`\thisoutline{<text>}`. -\enditems - - -\sec[math] Math mode processing - -There are two math modes, inline: `$<formula>$` or display: `$$<formula>$$`. -We suppose that `<formula>` will be processed by MathJax or similar -software. So, the `<formula>` should be kept without changes in cnv-program -output, but there are exceptions: - -\begitems -* `$<sign><decimal-number>$` should be transformed to non-math text - `<sign><decimal-number>`. The `<sign>` is~`+` or~`-` or nothing. - The `<decimal-number>` can include `,` (comma) instead `.` (period). - If the `<sign>` is~`-` (character U+002D) then - it must be converted to `−` (character U+2212, math minus). -* `{\bbchar <text>}` should be converted to `\mathbb{<text>}`, because - MathJax doesn't understand `\bbchar`. `$\bbchar <text>$` should be - converted to `$\mathbb{<text>}$`. -* `{\frak <text>}` or `$\frak <text>$` \: - `\mathfrak{<text>}` or `$\mathfrak{<text>}$`. -* `{\script <text>}` or `$\script <text>$` \: - `\mathscr{<text>}` or `$\mathscr{<text>}$`. -* `\eqmark`, `\eqmark[<label>]` \: `\leqno (<num>)`, where `<num>` is - auto-generated number. Or it should be completely ignored. -* It is strongly recommended to allow users to declare another replacement - rules over `<formula>` in configuration files of cnv-programs. -\enditems - - -\sec Notes on various conversions - -The cnv-programs behave differently because output formats have different -concepts and are intended for different purposes. The following sections -mention the main differences for typical conversions. - -\secc To Html - -The Html document is one single page. If we want to split the document to more -pages, then we can use `%%:do html <action>` in positions where the document -should be split (the syntax of `<action>` depends on the used cnv-program.) - -The design of Html pages should be declared by CSS files. - -Pictures inserted by `\inspic` should be inserted into the Html page as -\code{<img src="...">}, so the picture files must be installed in -the webserver to render the Html page correctly in a web browser. - -The `\maketoc` used in the \OpTeX/ document means that the Table of contents should -be here. It should be generated by the cnv-program, two-pass processing is -needed because the cnv-program needs to read all titles of `\chap`, `\sec` and -`\secc`. Another approach is to read the `.ref` file produced by \OpTeX/. - - -\secc To Markdown - -Markdown source file is \"one-page document" too. The principles a -re similar to conversion to Html. - -\secc From Markdown - -The cnv-program which does such a reverse conversion should be very useful for -people they prefer even clearer markup than in \OpTeX/. - -\secc To \LaTeX - -\LaTeX/ gives the same main feature as \OpTeX/: it can generate PDF -output from a source file. But different macros, a different concept, and -a different markup are used. - -The main reason for such conversion is that journal editors -require \LaTeX/ source file, but user want to prepare their real document in -more comfortable (\OpTeX/) markup and with more simple macros. - -This conversion should keep almost all features. For example, the -`\pgref[<label>]` is converted to `\pageref{<label>}`. The cnv-program -needs not to generate a Table of contents, bibliography references, etc. Only -appropriate \LaTeX/ markup must be used. - -The contents of generated \LaTeX/ preamble should be configurable. - - -\secc From \LaTeX - -The reverse conversion from \LaTeX/ to \OpTeX/ can be usable -for people, they want to switch to creating their documents in \OpTeX/. - -The cnv-program must solve additional problem in this type of conversion. -There are various math \LaTeX/ environments, they must be converted to -plain~\TeX/ syntax of math typesetting. For example:\nl -`\begin{array}...\end{array}` \: `\matrix{...}`,\nl -`\begin{align*}...\end{align*}` \: `$$\eqalign{...}$$`\nl -`\frac{...}{...}` \: `{...\over...}`. - -\bye diff --git a/Master/texmf-dist/doc/luatex/optex/optex-doc.pdf b/Master/texmf-dist/doc/luatex/optex/optex-doc.pdf deleted file mode 100644 index a4df4f013ab..00000000000 Binary files a/Master/texmf-dist/doc/luatex/optex/optex-doc.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/luatex/optex/optex-doc.tex b/Master/texmf-dist/doc/luatex/optex/optex-doc.tex deleted file mode 100644 index 9f2fadeeb4a..00000000000 --- a/Master/texmf-dist/doc/luatex/optex/optex-doc.tex +++ /dev/null @@ -1,114 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% Run optex optex-doc -% (three times) to generate OpTeX documentation including references and the index. - -\load [doc.opm] \let\enddocument=\endinput - -\typosize[10/12] % Main size (used in techdoc) - -\begingroup \typosize [11/13.5] % Different size used in useroc. - -\insertoutline{OpTeX} % PDF outlines generated from TOC - -% Title: - -\vglue1cm -\centerline{\setfontsize{at50pt}\rm\OpTeX} -\vskip-8mm - -\tit Format Based on Plain \TeX/ and OPmac\fnotemark1 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\hfill Version 1.01 - -\centerline{\it Petr Olšák, 2020, 2021} - -\bigskip -\centerline{\url{http://petr.olsak.net/optex}} - -\fnotetext {OPmac package is a set of simple additional macros to Plain \TeX{}. -It enables users to take advantage of \LaTeX/ functionality but keeps -Plain \TeX/ simplicity. See -\url{http://petr.olsak.net/opmac-e.html} for more information about it.} - -\bigskip -\noindent -\OpTeX/ is \LuaTeX/ format with Plain \TeX/ and OPmac. Only \LuaTeX/ engine -is supported. - -\OpTeX/ should be a modern Plain \TeX/ with power from OPmac (Fonts -Selection System, colors, graphics, references, hyperlinks, -indexing, bibliography, ...) with preferred Unicode fonts. - -The main goal of \OpTeX/ is: - -\begitems -* \OpTeX/ keeps the simplicity (like in Plain \TeX/ and OPmac macros). -* There is no old obscurities concerning various 8-bit encodings and - various engines. -* \OpTeX/ provides a powerful Fonts Selection System (for Unicode font - families, of course). -* \OpTeX/ supports hyphenations of all languages installed in your \TeX/ system. -* All features from OPmac macros are copied. For example sorting words in - the Index\fnotemark1, reading `.bib` files directly\fnotemark1, syntax - highlighting\fnotemark1, colors, graphics, hyperlinks, references). - \fnotetext{All these features are implemented by \TeX/ macros, no external - program is needed.} -* Macros are documented in the same place where code is. -* User namespace of control sequences is separated from the internal namespace - of \OpTeX/ and primitives (`\foo` versus `\_foo`). - The namespaces for macro writers are designed too. -\enditems - -If you need to customize your document or you need to use something -very specific, then you can copy relevant parts of \OpTeX/ macros into your macro -file and do changes to these macros here. This is a significant difference from -\LaTeX/ or ConTeXt, which is an attempt to create a new user level with a -plenty of non-primitive parameters and syntax hiding \TeX/ internals. -The macros from \OpTeX/ are simple and straightforward because they solve only -what is explicitly needed, they do not create a new user level for -controlling your document. We are using \TeX/ directly in this case. -You can use \OpTeX/ macros, understand them, and modify them. - -\OpTeX/ offers a markup language for authors of texts (like \LaTeX), -i.\,e.\ the fixed set of tags to define the structure of the document. This -markup is different from the \LaTeX{} markup. It may offer to write the -source text of the document somewhat clearer and more attractive. - -The manual includes two parts: user documentation and technical -documentation. The second part is generated directly from the sources of -\OpTeX/. There are many hyperlinks from one part to second and vice versa. - -This manual describes \OpTeX/ features only. We suppose that the user knows \TeX/ -basics. They are described in many books. You can see a short -document \ulink[http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf] -{\TeX/ in nutshell} too. - -\vfil\break - -\insertoutline{CONTENTS} \outlines{0} - -\notoc\nonum \sec Contents -\maketoc - -\thisoutline {USER DOCUMENTATION} - -\chap User documentation - -\input optex-userdoc -\endgroup - -%\end - -\input optex-techdoc - -\vfil\break - -\def\_printchap#1{\noindent{\_printrefnum[@]\_secfont #1}\medskip} - -\nonum\chap Index - -\begmulti 3 \tt \makeindex \endmulti - -\bye diff --git a/Master/texmf-dist/doc/luatex/optex/optex-math.tex b/Master/texmf-dist/doc/luatex/optex/optex-math.tex deleted file mode 100644 index 789dd5a1877..00000000000 --- a/Master/texmf-dist/doc/luatex/optex/optex-math.tex +++ /dev/null @@ -1,1662 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% Run optex optex-math (two times) to generate this document -% or look at PDF here: http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf - -\fontfam[lmfonts] - -\font\ttlib=[LiberationMono-Regular] -\def\ttspec{\let\_ttfont=\ttlib} - -\report - -\def\new #1 {\mnote{\Red$\blacktriangleleft$\,\sans\setfontsize{at9pt}\rm#1}} -\fixmnotes\right -\enquotes -\verbchar` -\catcode`\<=13 -\def<#1>{$\langle\hbox{\it#1\/}\rangle$} -\everyintt={\catcode`\<=13 } -\def\ss#1{$\vrule height3pt#1\vrule height3pt$} - -\addto\_secfont\Blue \addto\_seccfont\Blue -\_def\_printsec#1{\_par - \_abovetitle{\_penalty-400}\_bigskip - {{\_secfont \_noindent \_raggedright \llap{\_printrefnum[@\_quad]}#1}\_nbpar}\_insertmark{#1}% - \_nobreak \_belowtitle{\_medskip}% - \_firstnoindent -} -\_def\_printsecc#1{\_par - \_abovetitle{\_penalty-200}\_medskip - {{\_seccfont \_noindent \_raggedright \llap{\_printrefnum[@\_quad]}#1}\_nbpar}% - \_nobreak \_belowtitle{\_medskip}% - \_firstnoindent -} - -\def\i #1 {\ii .#1 \iis .#1 {{\code{\\#1}}}} -\def\x`{\bgroup\_setverb\xx} -\bgroup \lccode\string`\.=\string`\` \lowercase{\egroup \def\xx #1#2.{\i #2 \egroup `#1#2.}} - - -\hyperlinks\Green\Green - -\insertoutline{MATH} -\outlines{0} - - - -\tit Typesetting Math with \OpTeX/ - -\hfill Version 03, January 2021 - -\author Petr Olšák - - -This document is a brief summary of typesetting math. It describes \TeX/, -Plain \TeX/ and \OpTeX/ features concerned to math. The first two types of -features are documented in \TeX/book in chapters 16, 17, and 18, but it is -summarized here in short again in order to give a complete guide about math -typesetting for \OpTeX/ users. - -\new {} -The \OpTeX/ features which differs from standard \TeX/ or Plain \TeX/ are -documented with the red triangle at the margin (like in this paragraph). -Reader can simply distinguish between \"standard" features (given by -\TeX/ or Plain \TeX/) and new \OpTeX/ features. - -There are more types of extensions: e\TeX, lua\TeX/, Unicode math and -\OpTeX/ macros. The appropriate label (e\TeX, Lua\TeX/, Unicode, \OpTeX/) -is appended to the red triangle to inform you about the extension type. -Nevertheless, \OpTeX/ user doesn't have to worry about it, all extensions -are available if Unicode Math font is loaded (e.g., by the command -`\fonfam[lmfonts]`). See section 1.3.3 in \OpTeX/ documentation about -loading Unicode math fonts. - -{\iindent=2em -\bigskip -\maketoc } -\vfil\break - -\sec Basics structure of math formulas - -\secc General rules and terminology - -The \ii in-line/math in-line math (in the paragraph) is created by `$<math list>$`. The -\ii display/math display math (a standalone line between paragraphs) is created by `$$<math list>$$`. -More than one line can be here if an appropriate macro is used. In-line math is -processed in a \TeX/ group in \ii in-line/math/mode {\em in-line math mode}. The display math is -processed in a \TeX/ group in \ii display/math/mode {\em display math mode}. Spaces are -ignored in math modes, so `$x+y$` and `$x + y$` gives the same result: $x+y$. - -The \ii math/list <math list> is a sequence of \ii math/atom,atom {\em math atoms} and -\ii other/material {\em other material}. -The math atoms are \ii single/math/object {\em single math objects} or -\ii composed/math/atom composed math atoms. - -\begitems \hfuzz=.6pt -* The single math object is a single character to be printed in math mode - like `x`, `+`, `\int`. -* The math atom is constructed in general by `{<math list 1>}^{<math list 2>}_{<math list 3>}`. - It consists from \ii nucleus {\em nucleus} <math list 1>, \ii exponent exponent <math list 2> - and \ii subscript subscript <math list 3>. Each part of the atom should be empty. - If <math list 2> or <math list 3> is empty, we need not to write brackets and - the prefix `^` or `_`. - If the <math list 1> or <math list 2> or <math list 3> - consist only from a single math object then we need not use brackets. - For example - `x^2` is a math atom with `x` in the nucleus, `2` in the exponent, and with empty subscript. - Or `a_{i,j}` is a math atom with `a` in the nucleus, empty exponent, and `i,j` in the subscript.% - \fnote{In \OpTeX/, the character `_` can be interpreted as a part of - the control sequence name, not as the subscript constructor. But in common cases, - constructions of math atoms are interpreted exactly as in plain \TeX. See sections - 2.2.2 and 2.14 of \OpTeX/ documentation for more details. If you want to - be sure that `_` is just a subscript constructor in \OpTeX/ then you can set \code{\\catcode`\\_=8} - but after this, you cannot use control sequences with `_` character.} - The constructors for exponent `^` and subscript `_` can be used in arbitrary order - after the nucleus, for example, `z_1^{x+y}` is the same math atom as - `z^{x+y}_1`. The single math objects not followed by `^` nor `_` are - considered as math atoms with this object in the nucleus and with empty - exponent and subscript (this is a very common case). - \TeX/ assigns the \ii class {\em class} for each math atom, see section~\ref[class]. -* Other material can be \TeX/ box or glue (space) or `\kern` or `\vrule` etc. -\enditems - -Example: The `Z = \int``_\Omega x^{2y} + z\, dx` generates -$Z = \int_\Omega x^{2y} + z\, dx$ and it is <math list> which consists from: - -\begitems -* `Z` is math atom with empty exponent and subscript, class: Ord, -* `=` is math atom with empty exponent and subscript, class: Rel, -* `\int``_\Omega` is math atom with empty exponent and with subscript `\Omega`, class: Op, -* `x^{2y}` is math atom with exponent `2y` and empty subscript, class: Ord, - \begitems \let\_bullet=\circ - * `2` is math atom with empty exponent and subscript, class: Ord, - * `y` is math atom with empty exponent and subscript, class: Ord, - \enditems -* `+` is math atom with empty exponent and subscript, class: Bin, -* `z` is math atom with empty exponent and subscript, class: Ord, -* `\,` is another material, the glue (space) in this case, -* `d` is math atom with empty exponent and subscript, class: Ord, -* `x` is math atom with empty exponent and subscript, class: Ord. -\enditems - -\secc[class] Classes of math atoms - -\TeX/ assigns \ii class {\em a class} for each math atom.\fnote -{Using terminology of \TeX/book, each single math object has its {\em class} but the - math atom has its {\em kind} derived from this class. I use only one word - for both meanings in this document.} -This data type is used when -\TeX/ decides about \ii horizontal/spacing horizontal spaces between atoms in the output. (Note -that spaces in the input are ignored.) For example, -`$xy$` prints two atoms without space between them but `$x+y$` is printed with -small spaces around the `+` binary operator. Compare: $xy$ and $x+y$. - -The class is assigned depending on the nucleus of the atom. If the nucleus is -not a single math object, i.e. it is constructed by `{<math list>}` with braces -then the atom has its class Ord. If the nucleus is a single math object constructed -without braces then the class of the atom depends on this single math -object. Each single math object must be declared in \TeX/ with its default -class. The following table lists the classes with typical examples. -The full set of all math objects used in math typesetting -is listed in section~\ref[objects] with their default classes. - -\bigskip -\noindent\hfil\table{llll}{ - & \ii class Class & Meaning & Example \crl - 0 & \iid Ord & ordinary object & variables, digits, $x, {\bbchar R}, \Gamma, 0, 1$ \cr - 1 & \iid Op & big opertator & $\sum, \int, \bigcup$ \cr - 2 & \iid Bin & binary operator & $+, \times, -, \pm, \cup$ \cr - 3 & \iid Rel & reations & $=, \ne, \leq, \supseteq, \succsim$ \cr - 4 & \iid Open & opening bracket & $\{, (, [, \langle$ \cr - 5 & \iid Close & closing bracket & $\}, ), ], \rangle$ \cr - 6 & \iid Punct & punctuation & comma \cr - & \iid Inner & left-right & \code{\\left...\\right} outputs, see section~\ref[delims] -} -\bigskip - -There are \ii horizontal/spacing,spacing three space types used -by the algorithm for horizontal spacing in the math formulas. - -\begitems -* \ii thin/space Thin space: \x`\thinmuskip` primitive register, `\,` macro. Used around Op atoms. -* \ii medium/space Medium space: \x`\medmuskip` primitive register, `\>` macro. Used around Bin atoms. -* \ii thick/space Thick space: \x`\thickmusip` primitive register, `\;` macro. Used around Rel atoms. -\enditems - -\puttext 7.8cm -3.7cm {\rotbox{90}{Left atom}} -\puttext 11.5cm -.5cm {Right atom} -\puttext 8.2cm -4.4cm {\typosize[9/11] -\thistable{\def\_enspace{ }}% -\table {l|8c|} { - \omit & Ord & Op & Bin & Rel & Open & Close & Punct & \omit \hfil Inner \crlp{2-9} - Ord & 0 & 1 & 2 & 3 & 0 & 0 & 0 & 1 \cr - Op & 1 & 1 & & 3 & 0 & 0 & 0 & 1 \cr - Bin & 2 & 2 & & & 2 & & & 2 \cr - Rel & 3 & 3 & & 0 & 3 & 0 & 0 & 3 \cr - Open & 0 & 0 & & 0 & 0 & 0 & 0 & 0 \cr - Close & 0 & 1 & 2 & 3 & 0 & 0 & 0 & 1 \cr - Punct & 1 & 1 & & 1 & 1 & 1 & 1 & 1 \cr - Inner & 1 & 1 & 2 & 3 & 1 & 0 & 1 & 1 \crlp{2-9} -}} - -\hangindent=-8.7cm \hangafter=0 -Ord atoms are printed without spaces between them. The spaces are not -cumulated, so the rule about spaces mentioned above is only a rough idea. -The exact rule for horizontal spaces is given for each pairs of atoms -in the table here. The symbol 0 means no space, 1 thin space, 2 medium space, -and 3 means thick space. - -\hangindent=-8.7cm \hangafter-2 -The Bin atom is automatically transformed to the -Ord atom if no atom precedes or if Op, Bin, Rel, Open, or Punct atom -precedes. And it is transformed to the Ord atom if Rel, Close or Punct atom -follows. This corresponds to the empty cells in the table. -Why such behavior? Compare \"\hbox{$0-3$}" and \"$-3$". The Bin atom in -the second case behaves like Ord atom because it is \ii unary/minus {\em unary minus}. -There is no space between the unary minus and the following object. - -All medium spaces and thick spaces and some thin spaces from this table are -omitted if the <math list> is processed in -\ii script/style,scriptscript/style script or scriptscript styles -(smaller size). See section~\ref[styles] about math styles. - -You can overwrite the default class derived from the nucleus of the atom by -\TeX/ primitives \x`\mathord`, \x`\mathop`, \x`\mathbin`, \x`\mathrel`, \x`\mathopen`, -\x`\mathclose`, \x`\mathpunct` and \x`\mathinner`. They can precede a nucleus of -the atom and they set the class of the atom. -For example, `x \mathrel+ y` behaves like `x = y` from a spacing point of view but + -is printed. Another example: `\mathop{\rm lim} z` creates the atom `lim` in -roman font of class Op. So, the thin space is inserted between lim and $z$. - -There are more special kinds of math atoms: fractions, math accents, -radicals. They are constructed in a special way (see next sections) but they behave -like Ord atom in the horizontal spacing algorithm. - -\secc[styles] Math styles - -When a formula (or a sub-formula) is processed by \TeX/ then one from four -\ii math/style,display/style,text/style,script/style,scriptscript/style -styles is active: display style ($D$), text style ($T$), script style ($S$) or -scriptscript style ($SS$). - -\ii T/style,D/style,S/style,SS/style The $T$ style is started in in-line math mode `$...$` and the $D$ -style is started in display math mode `$$...$$`. The first level of exponents or -subscripts is processed in $S$ style and the second and more levels of -exponents or indexes are processed in $SS$ style. -There are special rules for math styles when fractions are constructed, see -section~\ref[frac]. - -The $D$ and $T$ styles use basic \ii font/size font size, $S$ uses smaller font size (typically -70~\%) and $SS$ style uses more smaller font size (typically 50~\%). Next -levels of \"more smaller fonts" are not used due to classical typographic rules. - -The \ii nucleus nucleus of \iid Op atoms (big operators, $\sum$, $\int$, etc.) have typically bigger versions -of the character shape for $D$ style than for $T$ style. -So, there are four sizes for such math -objects: one size for each math style. All other math objects (with non Op -class) are printed only in three sizes: The sizes for $T$ and $D$ styles are equal. - -The \iid Op atom puts its \iid exponent and \iid subscript above and below the nucleus in $D$ -style but right to the nucleus in other styles: -$$ - `\sum``_{i=1}^\infty` \quad \hbox{gives}\quad \sum_{i=1}^\infty \hbox{ in $D$ style and} - \quad \textstyle \sum_{i=1}^\infty \hbox{ in $T$ style}. -$$ -This default behavior of the Op atom -can be modified by placing \x`\limits` or \x`\nolimits` or -\x`\displaylimits` \TeX/ primitive just after its nucleus before the constructors -of exponent and/or index. The `\nolimits` puts exponent and subscript right -to the nucleus (regardless of the current style) and `\limits` puts these -objects above and below the nucleus (regardless of the current style). There -can be more such primitives in a queue (due to a macro expansion, for -instance). Then the last primitive in the queue wins. -If the last primitive is \x`\displaylimits` then -the default behavior is processed regardless there are \x`\limits` or \x`\nolimits` -before it. -$$ - `\sum\nolimits``_{i=1}^\infty` \quad \hbox{gives}\quad \sum\nolimits_{i=1}^\infty - \hbox{ in $D$ style and}\quad \textstyle\sum\nolimits_{i=1}^\infty - \hbox{ in $T$ style}. -$$ -Atoms of all other classes have their exponents and/or subscripts only right -to their nucleus without any exception. - -The primitives \x`\displaystyle`, \x`\textstyle`, \x`\scriptstyle` and -\x`\scriptscriptstyle` set the given style regardless the default rules. For -example, you can create a formula in in-line math mode and in $D$ style by -`$\displaystyle <fomula>$` or a formula in display mode and $T$ style can be printed -by `$$\textstyle <fomrula>$$`. - -If a subformula is placed below something (below a line from root symbol, -below a fraction line), then the processed style $D, T, S$ or $SS$ is -\ii cramped/style {\em cramped}. -The exponents are positioned slightly lower than in -\ii non-cramped/style non-cramped style. The selectors `\displaystyle`\,\dots -`\scriptscriptstyle` mentioned above select non-cramped style. The -non-cramped style is selected when math mode starts too. -\new \OpTeX/ -You can select a cramped style by the macro \x`\cramped` at the start of the -math formula or after the math-style selectors: `\scriptstyle\cramped` for -example. - -Several macros need to know what math style is currently processed (for -example they need to draw something in an appropriate size). But it -not possible simply due to the syntax of fractions (section~\ref[frac]). -This syntax requires to process all math lists in two steps: the first step -expands all macros and creates structured data of processed math list. The -second step reads the output of the first step, switches between math -styles and creates definitive output. So, macros (working in the first step) -cannot know the current math -style because it is set only in the second step. \TeX/ supports the primitive -\x`\matchchioce``{<D>}{<T>}{<S>}{<SS>}` which prepares four math lists in the -first step and only one of these four lists are used in the second step. We -can put different macros into each of the four parameters of `\mathchoice`. -Plain \TeX/ supports the macro \x`\mathpalette` which gives a more comfortable -interface of \x`\mathchoice` to the macro programmer. -The cramped/non-cramped variants of the current style are kept when `\mathchioce` -is used. - -\new \OpTeX/ -We describe another interface for creating macros depending on the current -style. You can use \x`\mathstyles``{<math list>}`. It -behaves like `{<math list>}`, moreover, you can use the following commands inside such -<math list>: -\begitems -* The macro \x`\currstyle`. It expands to - `\displaystyle`, `\textstyle`, - `\scriptstyle` or `\scriptscriptstyle` depending on the current math style - when the `\mathstyles` was opened. -* The \x`\dobystyle``{<D>}{<T>}{<S>}{<SS>}` is expandable macro. It expands its - parameter `<D>`, `<T>`, `<S>` or `<SS>` depending on the current math style - when `\mathstyles` was opened. -* The value of the \x`\stylenum` register is 0, 1, 2 or 3 - depending on the current math style when `\mathstyles` was opened. -\enditems -% -Example of usage of \x`\mathstyles`: -\def\mysymbol{\mathbin\mathstyles - {\kern1pt\vrule height\mysymbolA width\mysymbolA\kern1pt}} -\def\mysymbolA{\dobystyle{5pt}{5pt}{3.5pt}{2.5pt}} -\begtt -\def\mysymbol{\mathbin\mathstyles - {\kern1pt\vrule height\mysymbolA width\mysymbolA\kern1pt}} -\def\mysymbolA{\dobystyle{5pt}{5pt}{3.5pt}{2.5pt}} -Test: $a\mysymbol b_{c \mysymbol d}$ or $a\mysymbol b\over c$. -\endtt -This example gives Test: $a\mysymbol b_{c \mysymbol d}$ or $a\mysymbol b\over c$. - -The \x`\mathstyles` macro mentioned above uses \TeX/ primitive \x`\mathchoice`, so it -creates four math lists and only one is used. It may take more -computer time in special cases. -\new Lua\TeX/ -Lua\TeX/ supports the \x`\mathstyle` primitive -(no \"`s`" at the end of this control sequence) which -expands to values 0 to 7 depending on the current style: -$D, D', T, T', S, S', SS, SS'$ -(where $X'$ means cramped variant of the style). This primitive does -not use `\mathchoice` but it simply ignores the fraction syntax, so -`$a\mysymbol b\over c$` cannot work if `\mysymbol` is defined using the `\mathstyle` -primitive. See section 7.3.1 of Lua\TeX/ documentation for more information. - - -\secc[frac] Fractions - -The \iid fraction can be constructed by `{<numerator>`\x`\over``<denominator>}`. If the -fraction is only a single object in the whole math mode (between dollars), -you need not use the outer braces, so you can write `$1\over2$` to get $1\over2$. - -The \ii numerator,denominator <numerator> and <denominator> are printed in \"smaller" math style than -current math style. More exactly the following schema is used. -$D$: $T\over T$., $T$: $S\over S$, $S$: $SS\over SS$, $SS$: $SS\over SS$. -For example -$$ - `{a+b \over c}` \quad \hbox{is printed as } - {a+b\over c} \hbox{ in $D$ style and as } - \textstyle {a+b\over c} \hbox{ in $T$ style}. -$$ - -The \LaTeX/ macro \x`\frac``{<numerator>}{<denominator>}` is not supported in -Plain \TeX/ nor in \OpTeX/ but you can define such macro if you want. - -The syntax with \x`\over` is more preferred because it is more human-readable -notation. You can write the fraction in the same manner as you can read it. -You can compare: `$1\over2$` (one over two) with `$\frac12$` (frac twelve). - -Besides the `\over` primitive, there are analogical \TeX/ primitives which -create \"generalized" fractions. The result is similar to `{<above>\over <below>}` -but there is something extra: - -\begitems -* `{<above>`\x`\atop``<below>}` does `{<above>\over<below>}` but - without the fractional rule. -* `{<above>`\x`\above``<dimen><below>}` creates fractional rule with <dimen> thickness. -* `{<above>`\x`\overwithdelims``<delim-l><delim-r><below>}` adds the <delim-l> left to - the fraction and the <delim-r> right to the fraction. -* `{<above>`\x`\atopwithdelims``<delim-l><delim-r><below>}` is analogical to - `\overwithdelims` but without fractional rule. -* `{<above>`\x`\abovewithdelims``<delim-l><delim-r><dimen><below>}` behaves as - `\overwithdelims` but the fractional rule has <dimen> thickness. -\enditems -% -The `\...withdelims` variants read <delim-l> and <delim-r>, they must be -declared as {\em math delimiter} in \TeX. They are vertically scalable -math objects, typically brackets. See section~\ref[delims] for more -information about math delimiters. Example: -$$ - `{n \atopwithdelims() k}`\quad \hbox{ creates } - {n \choose k} \hbox{ in $D$ style and } - \textstyle {n \choose k} \hbox{ in $T$ style}. -$$ -The \x`\choose` macro is defined by `\def\choose{\atopwithdelims()}`, so the -user can write `{n\choose k}` in order to get binomial coefficients. - - -\secc[delims] Vertically scalable objects: math delimiters - -The vertically scalable objects are called \ii delimiters {\em delimiters}. For example, -all types of brackets are declared as delimiters. -This means that you can use a bracket in arbitrary -vertical size.\fnote{ -This is not exactly true, because traditional typography says that they -cannot be scaled continuously but by visible steps. This means that there is -a sequence of increasing brackets in the font, the reader must see a difference -between every two sizes of brackets.} - -The following objects are declared as delimiters (i.e.\ vertically scalable): - -\bigskip -{\tt \adef!{\bslash} -\table{l 14c}{ - \rm source: & ( & ) & [ & ] & \code{\\\{} & \code{\\\}} & / - & !backslash & !langle & !rangle - & | & \code{\\|} & \cr - \rm output: &$($&$)$&$[$&$]$& $\{$ & $\}$ & $/$ - & $\backslash$ & $\langle$ & $\rangle$ - & $|$ & $\|$ -} -\medskip -\table{l 14c}{ - \rm source: & !lfloor & !rfloor & !lceil & !rceil \cr - \rm output: & $\lfloor$ & $\rfloor$ & $\lceil$ & $\rceil$ -} -\medskip -\table{l 14c}{ - \rm source: & !uparrow & !Uparrow & !dowarrow & !Downarrow - & !updownarrow & !Updownarrow \cr - \rm output: & $\uparrow$ & $\Uparrow$ & $\downarrow$ & $\Downarrow$ - & $\updownarrow$ & $\Updownarrow$ -}} -\bigskip -\noindent \new Unicode -If you can produce the characters $\langle$, $\rangle$,\fnote - {Do not confuse $\string<, >$ and $\langle, \rangle$. The first pair are Rel atoms - with meaning \"less than" or \"greater than", but the second pair are special - types of brackets. They are not directly available at computer keyboards without - using a keyboard macro.} -$\lfloor$, $\rfloor$, ... $\updownarrow$, $\Updownarrow$ -directly in your text editor then you can use these Unicode characters in your source instead of control -sequences `\langle`, `\rangle`, `\lfloor`, `\rfloor` ... `\updownarrow`, `\Updownarrow`. -For many users (including me), there is more simple to type `\lfloor` than to find -how to create the $\lfloor$ character in my text editor. Note that there exist -text editors (Emacs, for example) -enabling you to type `\lfloor` and this control sequence is immediately -converted to the $\lfloor$ Unicode character. -Your source text looks pretty and you can use classical \TeX/ sequences. - -\new Unicode -There are more \ii delimiters delimiters, but it heavily depends on loaded Unicode Math -font. For example, this document is printed in `latinmodern-math` font and -there are six more delimiters `\lBrack`~$\lBrack$, `\rBrack`~$\rBrack$, -`\lAngle` $\lAngle$, `\rAngle` $\rAngle$, `\lgroup` $\lgroup$, `\rgroup` $\rgroup$. -See section~\ref[objects] for table of all Unicode symbols for math typesetting. - -Arbitrary tall formula can be surrounded by a pair of delimiters using -\x`\left` and \x`\right` \TeX/ primitives: `\left<delim> <formula> \right<delim>`. -The delimiters are scaled to the height and depth of the <formula> -and vertically centered to the {\em math axis}.\fnote -{Math axis is a horizontal line passing through the center of symbols $+$ - and $-$. All vertically scalable objects are vertically centered with - respect to this axis.} -Example: -$$ - `+ \left\{ \sum_{i=1}^\infty x_i \right)` \quad \hbox{ gives } - + \left\{ \sum_{i=1}^\infty x_i \right). -$$ -The pair `\left<delim> <formula> \right<delim>` creates the formula in a -\TeX/ group. Such group can be nested with another groups. -Each `\left` must have its `\right` counterpart at the same group level. -If you don't want to create visible delimiter, use dot instead <delim>. -Example: -$$ - `\left. \int``_0^t e^{x^2}\,dx\, \right|_{t=42}` \quad \hbox{ gives } - \left. \int_0^t e^{x^2} \,dx\, \right|_{t=42} -$$ - -\new e\TeX/ -You can use \x`\middle``<delim>` inside the <formula> which is surrounded by -`\left...\right`. Then the given <delim> is scaled to the same size like -their `\left` and `\right` counterparts. - -When a delimiter is used without `\left` nor `\right` prefix, then it is the -Open, Close, Ord or Bin atom by its natural meaning: -$(, [, \{, \ldots, \lfloor, \lceil$ are Open atoms, -$], ], \}, \ldots, \rfloor, \rceil$ are Close atoms, -$/, \backslash, |, \|$ are Ord atoms and -$\uparrow, \Uparrow, \ldots, \Updownarrow$ are Bin atoms. You can overwrite -this default setting, for example `\mathclose(`. If delimiters are used with -`\left` and `\right` prefixes then `\left<delim>` behaves like Open atom, -`\right<delim>` behaves like Close atom and the math list -`\left<delim><formula>\right<delim>` is encapsulated as a single Inner atom. -The `\middle<delim>` behaves like Open atom at its left side and like Close -atom at its right side. - -The sequence of increasing delimiters can be printed by the following -macros: -$$ - `(` \to (,\quad \x`\big``(` \to \big(,\quad \x`\Big``(` \to \Big(,\quad - \x`\bigg``(` \to \bigg(, \quad \x`\Bigg``(` \to \Bigg(. -$$ -The `\Bigg<delim>` is not the maximal size of the bracket. Try -`\left(\vbox to5cm{}\right.`, for example. You can see that the font -\"cheats" from certain sizes, because there are not all infinity number of -sizes of brackets drawn in the font, of course. - -The `\big<delim>` creates Ord atom. We need to create Open atom -for opening bracket and Close atom for closing bracket more often. -Then we can use macros -\x`\bigl``<delim>`, -\x`\Bigl``<delim>`, -\x`\biggl``<delim>`, -\x`\Biggl``<delim>` for creating Open atoms and -\x`\bigr``<delim>`, -\x`\Bigr``<delim>`, -\x`\biggr``<delim>`, -\x`\Biggr``<delim>` for creating Close atoms. Unfortunately, the source is not -too attractive when more sizes of brackets are used, but typographic -traditions say that we have to distinguish brackets by the size in math -mode if they are in equal types: -$$ - `\Bigl( f\bigl( 2(x+y) + z\bigr) \Bigr)'` \quad \hbox{gives } - \Bigl(f\bigl(2(x+y)+z\bigr)\Bigr)'. -$$ - -\secc Horizontally scalable objects: math accents - -Arbitrary wide formula can be covered by \ii math/accent,accent {\em scalable math accent}. -Example: -$$ - \x`\overrightarrow`` {a+b+c+d+e+f}` \quad \hbox{gives } \overrightarrow {a+b+c+d+e+f}. -$$ -The usage is: control sequence of selected math accent followed by `{<math list>}`. - -Standard scalable math accents are: -\x`\overline` $\overline{abc}$, -\x`\overbrace` $\overbrace{abc}$, -\x`\overrightarrow` $\overrightarrow{abc}$, -\x`\overleftarrow`~$\overleftarrow{abc}$, -\x`\underline` $\underline{abc}$, -\x`\underbrace` $\underbrace{abc}$. - -An Op atom is created. The exponents and subscripts are centered above -and below the nucleus of this atom (regardless of the current style). Example: -$$ - `\overbrace {b\cdot b\cdot b \cdots b}^{k\times}` \quad \hbox{gives } - \overbrace {b\cdot b\cdot b \cdots b}^{k\times} -$$ -There are scalable accents with a limited maximum width: -\x`\widehat` $\widehat{abc}$ and \x`\widetilde` $\widetilde{abc}$. If the -formula is wider than the font can cover then the widest variant from the -font is used and it is horizontally centered. - -\new Unicode -There are more scalable accents in Unicode math fonts: -\x`\overparen` $\overparen{abc}$, \x`\underparen` $\underparen{abc}$, -\x`\overbracket` $\overbracket{abc}$, \x`\underbracket` $\underbracket{abc}$, -\x`\overleftrightarrow` $\overleftrightarrow{abc}$, -\x`\overleftharpoon` $\overleftharpoon{abc}$, -\x`\overrightharpoon` $\overrightharpoon{abc}$, - - -\secc Fixed math accents - -Fixed \ii math/accent,accent math accents can be applied to single math object or to the `{<math list>}`. -The accent is centered (with respect of slanting axis) and the result is a -nucleus of Ord -atom. For example `\dot x` gives $\dot x$. The list of fixed math accents -follows: \x`\acute`` x` $\acute x$, \x`\bar`` x` $\bar x$, -\x`\breve`` x` $\breve x$, \x`\check`` x` $\check x$, -\x`\dot`` x` $\dot x$, \x`\ddot`` x` $\ddot x$, -\x`\grave`` x` $\grave x$, \x`\hat`` x` $\hat x$, -\x`\vec`` x` $\vec x$, \x`\tilde`` x` $\tilde x$. - -\new Unicode -The additional fixed accents depends on used Unicode math font. The -`latinmodern-math` supports: -\x`\ovhook`` x` $\ovhook x$, \x`\ocirc`` x` $\ocirc x$, -\x`\leftharpoonaccent`` x` $\leftharpoonaccent x$, \x`\rightharpoonaccent`` x` $\rightharpoonaccent x$, -\x`\dddot`` x` $\dddot x$, \x`\ddddot`` x` $\ddddot x$, -\x`\widebridgeabove`` x` $\widebridgeabove x$, \x`\asteraccent`` x` $\asteraccent x$. - -There exist one special math accent `'` (single quote, ASCII 39) -which can be appended after a symbol like this: `f'` -and it creates $f'$ (typical meaning is the -derivation of the given function). You can put more such accents, for -example `g'''` gives $g'''$. - -\secc Roots - -There is a macro \x`\sqrt``{<math list>}` to create \ii square/root square root. For example: -$$ - `\sqrt{\sqrt{\sqrt{x+1}+1}+1}` \quad \hbox{gives } - \sqrt{\sqrt{\sqrt{x+1}+1}+1} -$$ -The \ii root $n$-th root is created by the macro \x`\root`` <n>\of{<math list>}`. For -example `\root k+1\of x` gives $\root k+1\of x$. - -\secc Math alphabets - -Letters \ii math/alphabet $a\dots z$, $A\dots Z$ and $\alpha$\dots$\omega$ are printed in italic -in math mode. This follows the traditional typographic rule. -All other math symbols, digits, and uppercase Greek letters must be -upright.\fnote -{French typographic convention says that uppercase Greek letters have to be - in italic too. Use `\_itGreek` declaration in this case.} -These rules are independent of the current variant of surrounding text font. - -If we want to use the letters or digits -in another than this default shape, then we can use -\ii math/alphabet/selector {\em math alphabet selectors}: -\x`\mit`, \x`\rm`, \x`\it`, \x`\bf`, \x`\cal`. -\new \OpTeX/ -\OpTeX/ supports more such selectors \x`\script`, \x`\frak`, \x`\bbchar`, \x`\bi`, see -section 1.3.3 in the \OpTeX/ documentation. The math selectors have local -validity in the group. - -The control sequences \x`\rm`, \x`\it`, \x`\bf`, and \x`\bi` act as variant selectors -of fonts in non-math mode (text mode) and they act -as math alphabet selectors in math mode. This \"overlaying" concept -is given by Plain \TeX/. Example: math operators lim, sin, cos, -log, etc.\ must be printed unslanted. We are using `\lim`, `\sin`, `\cos`, -`\log` etc.\ in math mode in order to comply with this typographic convention. For -example `\sin` is defined as: -\begtt -\def\sin {\mathop{\rm sin}\nolimits} -\endtt -The `\rm` is used here as math alphabet selector, no variant selector of -text fonts. - -The list of all predefined `\rm`-like math operators follows: \x`\arccos`, -\x`\arcsin`, \x`\arctan`, \x`\arg`, \x`\cos`, \x`\cosh`, \x`\cot`, \x`\coth`, \x`\deg`. -\x`\det`, \x`\dim`, \x`\exp`, \x`\gcd`, \x`\hom`, \x`\inf`, \x`\ker`, \x`\lg`, \x`\lim`, -\x`\liminf`, \x`\limsup`, \x`\ln`, \x`\log`, \x`\max`, \x`\min`, \x`\Pr`, \x`\scs`, \x`\sin`, -\x`\sinh`, \x`\sup`, \x`\tan`, \x`\tanh`, You can define another such operator -analogically. - -\new Unicode -Unicode font can include the following math alphabets: -\begtt \typosize[9/11] -\_rmvariables % upright letters A-Z, a-z -\_bfvariables % bold letters A-Z, a-z -\_itvariables % italic letters A-Z, a-z -\_bivariables % bold italic letters A-Z, a-z -\_calvariables % calligraphic letters A-Z, a-z -\_bcalvariables % calligraphic letters A-Z, a-z -\_frakvariables % fraktur A-Z, a-z -\_bfrakvariables % bold fraktur A-Z, a-z -\_sansvaraibales % sans serif letters A-Z, a-z -\_bsansvaraibales % bold sans serif letters A-Z, a-z -\_isansvaraibales % slanted sans serif letters A-Z, a-z -\_bisansvaraibales % bold slanted sans serif letters A-Z, a-z -\_ttvariables % monospace, typewriter letters A-Z, a-z -\_bbvariables % double struck A-Z, a-z -\_rmdigits % upright digits 0..9 -\_bfdigits % bold digits 0..9 -\_sansdigits % sans serif digits 0..9 -\_bsansdigits % bold sans serif digits 0..9 -\_ttdigits % monospace typewriter digits 0..9 -\_bbdigits % double-struck digits 0..9 -\_rmgreek % upright Greek letters \alpha-\omega -\_itgreek % slanted Greek letters \alpha-\omega -\_bfgreek % bold Greek letters \alpha-\omega -\_bigreek % bold italic Greek letters \alpha-\omega -\_bsansgreek % bold sans serif Greek letters \alpha-\omega -\_bisansgreek % bold slanted snas serif Greek letters \alpha-\omega -\_itGreek % slanted Greek letters \Alpha-\Omega -\_bfGreek % bold Greek letters \Alpha-\Omega -\_biGreek % bold italic Greek letters \Alpha-\Omega -\_bsansGreek % bold sans serif Greek letters \Alpha-\Omega -\_bisansGreek % bold slanted snas serif Greek letters \Alpha-\Omega -\endtt -% -Not all Unicode math fonts include all math alphabets listed here. Typically, -the lowercase letters of calligraphic shape and all letters of -bold calligraphic shape are missing. - -\new \OpTeX/ -\OpTeX/ defines internal math alphabet selectors as mentioned in the -previous listing of math alphabets and sets as default: -\begtt \typosize[10/12] -\_itvariables \_rmdigits \_itgreek \_rmGreek -\endtt -% -Moreover, it defines the alphabet selectors at user level (see section 1.3.3 -of the \OpTeX/ manual). For example -\begtt \typosize[10/12] -\def\rm {\_tryload\_tenrm \_inmath{\_rmavariables \_rmdigits}} -\endtt -% -The first part -\new \OpTeX/ -`\_tryload\_tenrm` is applicable for text fonts and the -`\_inmath` part is processed only in math mode and sets the math alphabets. -You can see the file `unimath-codes.opm` where all user-level selectors are -defined. You can redefine them. For example, \OpTeX/ defines `\bf` as a math -alphabet selector that selects sans serif bold in math. This is the common -notation for vectors, tensors, and matrices. If you dislike this, then you can define: -\begtt \typosize[10/12] -\def\bf {\_tryloadbf\_tenbf \_inmath{\_bfvariables\_bfdigits\_bfgreek\_bfGreek}} -\endtt - - -\secc[objects] List of single math objects - -\new Unicode -All \ii single/math/object single math objects are listed in the `unimath-table.opm` or -`unicode-math-table.tex` file. You can -look into this file. The codes, \TeX/ sequences, classes, and comments -for all possible math codes are here. Maybe, your Unicode math font which is loaded -does not support all these codes. -\new \OpTeX/ -You can try all codes of the currently loaded font by -\begtt -\input print-unimath.opm -\endtt -The `unimath-table` is printed with characters available in the loaded font. -\new \OpTeX/ -If the character is unsupported by the font then the slot is empty and only -\TeX/ sequence and the class of the code is printed in the table. -For example, this document loads `latimodern-math.otf` font. -And the result from `\input print-unimath.opm` looks like the following ten -pages. - -Unsupported characters can be replaced by characters from other Unicode math -font, see -\ulink[http://petr.olsak.net/optex/optex-tricks.html\#addumathfont]{OpTeX trick 0030} -or section~\ref[newfam]. - - -\label[listA]\wlabel{} - -\bigskip -\input print-unimath.opm -\bigskip - -\label[listB]\wlabel{} - -It isn't very comfortable to find something in the previous table -if you know the shape. You can try the online web tool \ii Detexify -\ulink[https://detexify.kirelabs.org/classify.html]{Detexify}. -You can draw the symbol here and the suggestion of \TeX/ sequence is -printed. - -\def\g#1{{\tt\string#1}~$#1$} - -The generic \TeX/ sequences for the Greek letters \ii Greek/letters can be used: -\g\alpha, \g\beta, \g\gamma, \g\delta, \g\varepsilon, \g\zeta, \g\eta, -\g\theta, \g\iota, \g\kappa, \g\lambda, \g\mu, \g\nu, \g\xi, -\g\omicron, \g\pi, \g\rho, \g\varsigma, \g\sigma, \g\tau, \g\upsilon, -\g\varphi, \g\chi, \g\psi, \g\omega, \g\vardelta, \g\epsilon, \g\vartheta, -\g\varkappa, \g\phi, \g\varrho, \g\varpi\ -and -\g\Alpha, \g\Beta, \g\Gamma, \g\Delta, \g\Epsilon, \g\Zeta, \g\Eta, \g\Theta, -\g\Iota, \g\Kappa, \g\Lambda, \g\Mu, \g\Nu, \g\Xi, \g\Omicron, \g\Pi, \g\Rho, -\g\Sigma, \g\Tau, \g\Upsilon, \g\Phi, \g\Chi, \g\Psi, \g\Omega. - -\new \OpTeX/ -The variant of Greek letters in the output -(upright, italic, bold, bold sans serif, etc.) -written by the sequences `\alpha`, `\beta` etc. depends on the math alphabet -selected by `\_itgreek`, `\_rmgreek`, etc. selectors. The user-level -selectors `\bf` and `\bi` set `\_bsansgreek` and `\_bisansgreek`, so -`{\bi\delta}` produces $\bi\delta$. - -\new Unicode -All characters available in the math font can be accessed by \TeX/ control -sequence or by directly using the Unicode character in the document source. -Example: -\begtt \adef/{} -$$ - \sum/_{k=0}^\infty e^{(\alpha+i\beta/_k)} = - e^\alpha \sum/_{k=0}^\infty e^{i\beta/_k} = - e^\alpha \sum/_{k=0}^\infty (\cos\beta/_k + i\sin\beta/_k). -$$ -\endtt -or -\begtt \ttspec -$$ - ∑_{k=0}^∞ e^{(α + iβ_k)} = e^α ∑_{k=0}^∞ e^{iβ_k} - = e^α ∑_{k=0}^∞ (\cos β_k + i\sin β_k). -$$ -\endtt -both gives the same result: -$$ - ∑_{k=0}^∞ e^{(α + iβ_k)} = e^α ∑_{k=0}^∞ e^{iβ_k} - = e^α ∑_{k=0}^∞ (\cos β_k + i\sin β_k). -$$ -\medskip - - -\sec Other specialities - -\secc The `\not` prefix - -You can apply \x`\not` before a following math object. -The slash $/$ is overprinted such math object, for example -`$a \not= b$` gives $a \not= b$. - -\new \OpTeX/ -If there exists a direct Unicode character for the negation of a relation symbol -(for example `\ne` creates $\ne$ directly as a character U+2260) -then `\not<char>` expands to appropriate Unicode character. -For example `\not=` expands to `\ne` or `\not\in` expands to `\notin`. -If such character does not exist then -the centered $/$ is overprinted over the next character. - - -\secc The `\buildrel` macro: text over the relation - -The macro \x`\buildrel`` <text>\over <relation>` creates a new atom Rel with the -<relation> and with the smaller <text> above this <relation>. Example: -`$M \buildrel\rm def\over= X\cup Y$` gives $M\buildrel\rm def\over= X\cup Y$. - - -\secc Spaces - -Spaces between atoms are created automatically as were mentioned in -section~\ref[class]. But sometimes you have to help \TeX/ to create -appropriate space. You can use following macros: - -\begitems -* `\,` is \ii thin/space {\em thin space} used around Op atoms, after comma, etc.: \ss\,, -* `\!` is \ii negative/thin/space negative thin space, -* `\>` is \ii medium/space {\em medium space} used around Bin atoms: \ss\>, -* `\;` is \ii thick/space {\em thick space} used around Rel atoms: \ss\;, -* \x`\quad` is \ii em/space {\em em space}: \ss\quad, -* \x`\qquad` is \ii double/em/space {\em double em space}: \ss\qquad. -\enditems -% -Of course, you can use \ii direct/space {\em direct space} {\visiblesp`\ `} which is \TeX/ primitive -and gives interword space: \ss\ \ -or you can use \x`\hskip`` <value>` to put arbitrary space. - -The space size of `\,`, `\!` resp. `\>`, resp. `\;` is given by -`\thinmuskip`, resp. `\medmuskip`, resp. `\thickmuskip` values. You can see -in the `plain.tex` file that these default values differ very little in their basic -size but there is no stretchability/shrinkability in the `\,` space, there is small -stretchability in the `\>` space, and more stretchability in the `\;` space. - -The registers \x`\thinmuskip`, \x`\medmuskip`, and \x`\thickmuskip` store so-called -\ii mu/values {\em mu values} given by math unit `mu`. It is 1/18 em and this unit depends -on the current font size used in the math formula ($S$ or $SS$ styles use -smaller font size, the `mu` unit is smaller here). You can use \x`\muskip` -instead `\hskip` or \x`\mukern` instead `\kern` if you want to use this -special mu unit. It is allowed only in math mode. - -The \x`\quad` and \x`\qquad` spaces have fixed width and they can be used in text -mode too. (\OpTeX/ allows to use `\,` in text mode too). -Use `\quad` or `\qquad` if you want to separate more formulas created in -single math mode. Examples of typical usage of spaces: - -\begtt \adef/{} \typosize[10/12] -$$ \alpha\,(x+y), \qquad \int/_a^b \!\! f(x)\,{\rm d}x, \qquad \Gamma/_{\!i}. $$ -\endtt -$$ \alpha\,(x+y), \qquad \int_a^b \!\! f(x)\,{\rm d}x, \qquad \Gamma_{\!i}. $$ - - -\secc Texts in math mode - -If you write `$Hello world!$` (i.e.\ Hello world in math mode), then you get -$Hello world!$. It is interpreted as the product of variables $H$, and $e$, and -$l^2$, and $o$, etc., followed by the symbol ! used for factorial. -The non-ASCII letters (with accents) don't work at all because they are -never used as symbols for variables. Spaces are ignored. - -If you want to write a short text in the math mode, then you can use -`\hbox{<text>}`. The \x`\hbox` primitive initializes text mode regardless of -the \"outer mode". Example: - -\begtt \adef/{} \typosize[10/12] -$$ \sum/_{n=0}^\infty (-1)^n a_n \hbox{ converges, if $a_n\searrow 0$.} $$ -\endtt -$$ \sum_{n=0}^\infty (-1)^n a_n \hbox{ converges, if $a_n\searrow 0$.} $$ -% -Note the space before the word \"converges". The space before `\hbox` is -irrelevant. Second notice: the example shows the text mode inside math mode -and the in-line math mode inside this text mode. The same result can be -produced by: - -\begtt \adef/{} \typosize[10/12] -$$ \sum/_{n=0}^\infty (-1)^n a_n \hbox{ converges, if } a_n\searrow 0. $$ -\endtt -% -The difference can be visible if the formula $a_n\searrow 0$ includes a -fraction, for example ${1\over2}a_n\searrow 0$. The first example prints the -fraction in the text style and the second example prints it in the display style. - -The disadvantage of `\hbox` is that it starts in the text mode independently -of the current style, but we want to use smaller font in $S$ or $SS$ styles. -\new \OpTeX/ -You can use \x`\mathbox``{<text>}` in such situations. This macro behaves like -`\hbox` but the text is appropriately smaller in $S$ and $SS$ styles. -Example: -$$ - `{\mathbox{cena}\over\mathbox{výkon}}` \quad \hbox{gives } - {\mathbox{cena}\over\mathbox{výkon}} \hbox{ in $D$ style and } - \textstyle {\mathbox{cena}\over\mathbox{výkon}} \hbox{ in $T$ style.} -$$ -Note that $\mathbox{cena}\over\mathbox{výkon}$ means $\rm price\over performance$ -and you can write `$\rm price\over performance$` when you are using only -words without spaces and accented letters. But phrases with spaces or accented letters -should be printed in text mode using `\hbox` or `\mathbox`. - -\secc `\vcenter` - -The \x`\vcenter` primitive behaves like `\vbox`, but it can be used only in -math mode and its result is vertically centered to the math axis. -For example, matrices, are created by tables in `\vcenter`. - -All big objects in math formula are centered on the math axis and the baseline is -ignored. In the following example, we create a new big math operator by -`\vcenter`: -\begtt -$$ - \def\myop#1{\mathop{\vcenter{\frame{\vbox to2em{\vss\hbox{ $#1$ }\vss}}}}} - F(x) = \myop{x(i)}_{i=1}^\infty -$$ -\endtt -\vskip-2em -$$ - \def\myop#1{\mathop{\vcenter{\frame{\vbox to2em{\vss\hbox{ $#1$ }\vss}}}}} - F(x) = \myop{x(i)}_{i=1}^\infty -$$ - - -\secc Three dots - -You can write `$1,2,\dots,n$` to get $1,2,\dots,n$. The \x`\dots` macro puts -thin space between dots and after the last dot, so the five object: comma, -dots, comma are exactly equidistant. - -Typographic conventions say that you have to use the repeating symbol -before and after three dots (comma in the previous example) and the three dots -should be at baseline if the repeating symbol is at baseline. Or they should be -at the math axis if the repeating symbol is at the math axis. We have to use \x`\cdots` instead -`\dots` in the second case. Example: -$$ - `a_1, a_2, \dots, a_n, \quad a_1 + a_2 + \cdots + a_n` \qquad - a_1, a_2, \dots, a_n, \quad a_1 + a_2 + \cdots + a_n -$$ -\vskip-.7em -There are \x`\vdots` $\vdots$, \x`\ddots` $\ddots$ and \x`\adots` $\adots$ which -can be used in matrices. - -\new Unicode -Three dots like the output of the `\dots` macro are present as a single -character in fonts too. This character is called ellipsis. Font designers -typically suggest this character with smaller spaces between dots than we -need in math mode. So the rule about equidistant \"comma, three dots, comma" -is not met when this character is used. You can try `$1,2,\unicodeellipsis, n$` -and `$1+2+\unicodecdots + n$`. You get $1,2,\unicodeellipsis, n$ and -$1+2+\unicodecdots + n$. If you feel that this is better, then you can set: -`\let\dots=\unicodeellipsis \let\cdots=\unicodecdots`. - -The Unicode fonts includes compact variants `\unicodevdots` $\unicodevdots$, -`\unicodeddots` $\unicodeddots$ and `\unicodeadots` $\unicodeadots$ too. - - -\secc Phantoms and `\smash` - -The \x`\phantom``{<math list>}` macro creates an invisible subformula equal to -the formula generated by <math list>. It has its size, so it can -interfere with surrounding visible subformulas. This macro is very useful for -aligning with special requirements. Examples are shown in -sections~\ref[matrix] and~\ref[elines]. - -The \x`\vphantom``{<math list>}` has only its vertical size (i.e.\ its height -and depth), the width is zero. The \x`\hphantom``{<math list>}` has only its -width. - -The \x`\smash``{<math list>}` is the opposite of `\vphantom`. It creates visible -subformula but it has only its width. Its height and depth are zero. - -The result of these macros is the nucleus of an Ord atom. You can use `\mathop`, -`\mathbin`, etc. primitives to change this class. For example -`$a\mathrel{\phantom{=}}b$` creates the same formula as $a=b$ with the same -distance from $a$ to $b$ but without the equal sign: -$a\mathrel{\phantom{=}}b$. - -These macros work in the text mode too. Then their argument is -the <horizontal list>. - - -\sec Structured objects - -\secc[matrix] Matrices - -The macro \x`\matrix``{<data>}` creates a vertically centered table of items. -The <data> includes <items> separated by `&` and rows are separated by -`\cr`. The number of columns and rows are unlimited. Columns are printed centered -and separated by the `\quad` space. The vertically scalable -brackets around the table are not printed. You can use \x`\pmatrix``{<data>}` -instead `\matrix{<data>}`: the vertically scalable parentheses () are inserted -around the table. Examples: - -\begtt -$$ - {\bf A} = \pmatrix{a_{1,1} & a_{1,2} & \cdots & a_{1,n} \cr - a_{2,1} & a_{2,2} & \cdots & a_{2,n} \cr - \vdots & \vdots & \ddots & \vdots \cr - a_{m,1} & a_{m,2} & \cdots & a_{m,n} }, -$$ -\endtt -$$ - {\bf A} = \pmatrix{a_{1,1} & a_{1,2} & \cdots & a_{1,n} \cr - a_{2,1} & a_{2,2} & \cdots & a_{2,n} \cr - \vdots & \vdots & \ddots & \vdots \cr - a_{m,1} & a_{m,2} & \cdots & a_{m,n} }, -$$ -or: - -\begtt -\def\qmatrix[#1]{\left[\matrix{#1}\right]} -$$ - \qmatrix[a&b&c\cr d&e&f\cr g&h&i] \cdot \qmatrix[x_1\cr x_2\cr x_3] - = \qmatrix[b_1\cr b_2\cr b_3]. -$$ -\endtt -$$ - \def\qmatrix[#1]{\left[\matrix{#1}\right]} - \qmatrix[a&b&c\cr d&e&f\cr g&h&i] \cdot \qmatrix[x_1\cr x_2\cr x_3] - = \qmatrix[b_1\cr b_2\cr b_3]. -$$ - -If you need to align the columns by another way than to center, then you can -use the phantom. Compare: - -\begtt -$$ - \pmatrix{ 1 & -1 & 0 \cr - 0 & 2 & 13 \cr - -3 & 0 & 5 } \quad \hbox{or} \quad - \def\0{\phantom0} \def\+{\phantom+} - \pmatrix { \+1 & -1 & \00 \cr - \+0 & \+2 & 13 \cr - -3 & \+0 & \05 } -$$ -\endtt -$$ - \pmatrix{ 1 & -1 & 0 \cr - 0 & 2 & 13 \cr - -3 & 0 & 5 } \quad \hbox{or} \quad - \def\0{\phantom0} \def\+{\phantom+} - \pmatrix { \+1 & -1 & \00 \cr - \+0 & \+2 & 13 \cr - -3 & \+0 & \05 } -$$ - -\new\OpTeX/ -Another option to set the right aligned matrix is setting the \x`\lmfil`: -Its value is used on the left side in each `\matrix` item. The right side is -set directly to `\hfil`. -\begtt -$$ - \lmfil={\hfill} % left matrix filler = \hfill - \pmatrix{ 1 & -1 & 0 \cr 0 & 2 & 13 \cr -3 & 0 & 5 } -$$ -\endtt - -\new \OpTeX/ -If you want to draw a vertical line inside the matrix, you can use `\adef|` -as in the following example: -\begtt -$$ - \adef|{\kern-.2em&\strut\vrule&\kern-.2em} - \def\+{\phantom+} - \pmatrix{1 & 2 & 3 | 0 \cr 4 & 5 & 6 | 1 \cr 7 & 8 & 9 | 2 } \sim - \pmatrix{1 & \+2 & \+3 | 0 \cr 0 & -3 & -6 | 1 \cr 0 & -6 & -12 | 2} \sim - \pmatrix{1 & 2 & 3 | 0 \cr 0 & 1 & 2 | -1/3 \cr 0 & 0 & 0 | 1 } -$$ -\endtt -$$ - \adef|{\kern-.2em&\strut\vrule&\kern-.2em} - \def\+{\phantom+} - \pmatrix{1 & 2 & 3 | 0 \cr 4 & 5 & 6 | 1 \cr 7 & 8 & 9 | 2 } \sim - \pmatrix{1 & \+2 & \+3 | 0 \cr 0 & -3 & -6 | 1 \cr 0 & -6 & -12 | 2} \sim - \pmatrix{1 & 2 & 3 | 0 \cr 0 & 1 & 2 | -1/3 \cr 0 & 0 & 0 | 1 } -$$ - -If you want to put something before the opening bracket in the matrix, you can -use another `\matrix`. Example: - -\begtt -$$ - \adef|{\kern-.2em&\strut\vrule&\kern-.2em} - \def\+{\phantom+} - \def\r{{\bf r}} - \pmatrix{1 & 2 & 3 | 0 \cr 4 & 5 & 6 | 1 \cr 7 & 8 & 9 | 2 } \ \sim \ - \matrix{\cr 2.\r - 4\cdot 1.\r: \cr 3.\r -7\cdot 1.\r: } - \pmatrix{1 & \+2 & \+3 | 0 \cr 0 & -3 & -6 | 1 \cr 0 & -6 & -12 | 2} -$$ -\endtt -$$ - \adef|{\kern-.2em&\strut\vrule&\kern-.2em} - \def\+{\phantom+} - \def\r{{\bf r}} - \pmatrix{1 & 2 & 3 | 0 \cr 4 & 5 & 6 | 1 \cr 7 & 8 & 9 | 2 } \ \sim \ - \matrix{\cr 2.\r - 4\cdot 1.\r: \cr 3.\r -7\cdot 1.\r: } - \pmatrix{1 & \+2 & \+3 | 0 \cr 0 & -3 & -6 | 1 \cr 0 & -6 & -12 | 2} -$$ - -Plain \TeX/ defines the \x`\bordermatrix` macro which allows you to create a -top row above the brackets and left column before the opening bracket. -\TeX/book shows the following example: - -\begtt -$$ - M = \bordermatrix{ &C&I&C'\cr - C&1&0&0 \cr I&1-b&0 \cr C'&0&a&1-a } -$$ -\endtt -$$ - M = \bordermatrix{ &C&I&C'\cr - C&1&0&0 \cr I&1-b&0 \cr C'&0&a&1-a } -$$ - -The `\matrix` macro used in $D$ style creates all its items in $T$ style. -\new \OpTeX/ -If you are using the `\matrix` macro in $T$ style or $S$ style (but not in -fractions nor another matrices) then the resulting table is appropriately -smaller and all its items are processed in $S$ style. -If you are using `\matrix` in $SS$ style then the items are in $SS$ style too. -The following example shows one-column matrix in script style: -$$ - `\sum``_{\matrix{i\in M\cr j\in N\cr k\in P}} x_{i,j,k}` \ \hbox{ creates: } - \sum_{\matrix{i\in M\cr j\in N\cr k\in P}} x_{i,j,k} -$$ - - -\secc Cases - -The \x`\cases` macro can be used as in the following example: - -\begtt -$$ - f(x) = \cases{ 1 & for $x\le 0$, \cr - 100-x\over 100 & when $0 < x \le 100$, \cr - 0 & in other cases. } -$$ -\endtt -$$ - f(x) = \cases{ 1 & for $x\le 0$, \cr - 100-x\over 100 & when $0\string< x\le 100$, \cr - 0 & in other cases. } -$$ - -The `\cases` macro behaves like a special `\matrix` with two left-aligned -columns and with left vertically scaled brace $\{$. -The first column is processed in math mode and $T$ style, the second column -is processed in text mode. We have to use `$...$` in the second column if -there is math material. - - -\sec Lines in display mode - -\secc General principles - -The \ii display/math,display/math/mode -`$$<formula>$$` finalizes previous paragraph, prints centered <formula> on -single line with a vertical space above and below and opens next paragraph -with no indentation. - -From \TeX/'s point of view, the text above `$$<formula>$$` plus text -below is a single paragraph interrupted by display <formula>. If there is no -text above (i.e. the opening `$$` are in vertical mode), then the internal -`\noindent` is processed first and the empty line above <formula> is created. -Thus, it is definitely a bad idea to open display mode in vertical mode: never -put an empty line before `$$<formula>$$`. On the other hand, the empty line -just after `$$<formula>$$` says that the paragraph is finalized by the -<formula> and the next text (after the empty line) opens the next paragraph with -indentation. Summary: - -\begitems -* \"Text above `$$<formula>$$` text below": the <formula> interrupts the - paragraph with \"Text above" and \"text below". The \"text below" is - without indentation. -* \"Text above `$$<formula>$$` empty line Text below": the \"Text below" - opens new paragraph with indentation. -* \"Empty line `$$<formula>$$`" is bad practice. -\enditems - -In contrast with the paragraph breaking, there is no built-in algorithm for -breaking display <formula> to more lines. If the <formula> is too wide then -overfull `\hbox` occurs and human must decide about splitting the <formula> -to more lines. The macros `\displaylines` and `\eqalign` are intended to -such task, see sections~\ref[dlines] and~\ref[elines]. - -On the other hand, the in-line math <formula>, i.e.\ the `$<formula>$` in a -paragraph, can be broken after a Bin atom (with penalty `\binoppenalty`) or -after a Rel atom (with penalty `\relpenalty`). If you don't want to break -such a formula at a specific place then use `\nobreak`, for example -`$a+\nobreak b$`. If you want never to break such formulas then you can set -`\binoppenalty=10000`, `\relpenalty=10000`. (Default values are 700 and 500.) - - -\secc References to display lines - -The `$$<formula>`\x`\eqno``<mark>$$` \ii mark prints centered <formula> and the <mark> at -right margin. The `$$<formula>`\x`\leqno``<mark>$$` prints centered <formula> and -the <mark> at left margin. Examples: - -\begtt -$$ a^2 + b^2 = c^2 \eqno (1) $$ -\endtt -$$ - a^2 + b^2 = c^2 \eqno (1) -$$ -\begtt \aftergroup\nobreak -$$ a^2 + b^2 = c^2 \leqno \rm Py $$ -\endtt -$$\predisplaypenalty=10000 - a^2 + b^2 = c^2 \leqno \rm Py -$$ -The <mark> \ii mark is processed in math mode and $T$ style. If you want to put a -text here then you have to use `\rm <text>` or `\hbox{<text>}`. - -\new \OpTeX/ -The auto-generated <mark> can be created by `$$<formula>`\x`\eqmark``$$`. The -<label> can be used previously declared by \x`\label``[<label>]`. -Then it is associated to such -auto-generated <mark> and you can write a reference in the form -`see equation~\ref[<label>]`. You can write `\eqmark[<label>]` instead of -`\label[<label>]...\eqmark`. See the \OpTeX/ manual, section~1.4.3. - -\secc[dlines] The `\displaylines` macro - -This macro creates more horizontally centered formulas in one display mode. -The syntax is -\begtt \catcode`\<=13 -$$ \displaylines{ - <formula> \cr - <formula> \cr - ... \cr - <formula> -} $$ -\endtt -Usage of \x`\displaylines` is more -prefered than doing more display modes just behind each other. -Example: -\begtt -$$ \displaylines{ - (3x^3 + 4x^2 + 5x + 6) \cdot (x^6 + x^2 + 5) = \cr - = 3x^9 + 4x^8 + 5x^7 + 6x^6 + 3x^5 + 4x^4 + 20x^3 + 26x^2 + 25x + 30. -} $$ -\endtt -$$ \displaylines{ - (3x^3 + 4x^2 + 5x + 6) \cdot (x^6 + x^2 + 5) = \cr - = 3x^9 + 4x^8 + 5x^7 + 6x^6 + 3x^5 + 4x^4 + 20x^3 + 26x^2 + 25x + 30. -} $$ - -The output from `\displaylines` macro is breakable to more pages because -the lines are not encapsulated in one box. The macro uses a special feature of -`\halign` primitive. The disadvantage is that you cannot use `\eqno` nor -`\leqno` nor `\eqmark`. - -\new \OpTeX/ -\OpTeX/ provides alternative form: `\displaylines to<dimen> {<data>}`. -Then the centered formulas are encapsulated in a `\vcenter` box of width <dimen> and -usage of `\eqno` or `\leqno` or `\eqmark` is allowed. -The individual lines have the form `\hbox to<dimen>` and formulas are centered using -`\hss` from both sides. This means that you can set arbitrary <dimen> -without visual change of the formulas. Use smaller <dimen> value than -`\hsize` (or `\displaywidth`\fnote -{`\displaywith` = `\hsize` in most cases but it is -real display width when `\parshape` or `\hangindent` is used.}) -if you want to center formulas with `\eqno` appended. -The internal \TeX/ rule says: the formula with `\eqno` (or `\leqno`) is centered -if its width is less or equal `\displaywidth-4<mark-width>`. So -\begtt \catcode`\<=13 -$$ \displaylines to\hsize-8em {<formula>\cr<formula>}\eqno (1) $$ -\endtt -does global centering, because size of `(1)` is less than 2\,em. -You can do more experiments with this example, -for example `\diplaylines to\hsize{...}` -puts the `\eqno` mark to the next line in the display environment. Read -\TeX/book or \TeX/book naruby, where the precise explanation about such -positioning is. - -\new \OpTeX/ -You can use \"`\displaylines to<dimen>`" for more applications. For example, -you can put more -\"`\displaylines to<dimen>`" in single display mode, one next to second in order -to creating more centered columns with formulas; the width of such columns -are controlled by the <dimen> parameter. -Or, you can give an exception for several lines: - -\begtt \catcode`\<=13 -$$\displaylines to 10cm {<formula>\hfill \cr - <formula>\cr - <formula>\cr - \hfill <formula>} -$$ -\endtt -The example above gives similar result as the \LaTeX/ `multline` environment: -$$\displaylines to \hsize { - (3x^3 + 4x^2 + 5x + 6) \cdot (x^6 + x^2 + 5) = \hfill \cr - = 3x^9 + 3x^5 + 15x^3 + 4x^8 + 4x^4 + 20x^2 + 5x^7 + 5x^3 + 25x - + 6x^6 + 6x^2 + 30 = \cr - \hfill = 3x^9 + 4x^8 + 5x^7 + 6x^6 + 3x^5 + 4x^4 + 20x^3 + 26x^2 + 25x + 30. } -$$ - - -\secc[elines] The `\eqalign` macro - -The \ii .eqalign \iis .eqalign {{\code{\\eqalign}}} usage is: -\begtt \catcode`\<=13 -$$ \eqalign { <left-side> & <right-side> \cr - <left-side> & <right-side> \cr - ... \cr - <left-side> & <right-side> -} $$ -\endtt -The `\vcenter` box is created with two columns, left column is right aligned -and right column is left aligned. Example: - -\vbox{ -\begtt -$$ \eqalign{ - x + 2y + 3z &= 600 \cr - 12x + y - 3z &= 7 \cr - 4x - y + 5z &= -5 \cr -} $$ -\endtt -\vskip-5.7\baselineskip -{\hsize=1.35\hsize -$$ \eqalign{ - x + 2y + 3z &= 600 \cr - 12x + y - 3z &= 7 \cr - 4x - y + 5z &= -5 \cr -} $$}} - -\bigskip\noindent -The tab \"`&`" should be used just before a relation, i.e. `&=` is right, `=&` -is wrong. All lines are aligned to the used tab. - -Maybe you want more precise alignment in the example above. You can use -`\phantom`: - -\par\nobreak\vbox{ -\begtt -$$ \def\1{\phantom1} \def\+{\phantom+} - \eqalign{ - x + 2y + 3z &= 600 \cr - 12x + \1y - 3z &= \+7 \cr - 4x - \1y + 5z &= -5 \cr -} $$ -\endtt -\vskip-5.7\baselineskip -{\hsize=1.35\hsize -$$ \def\1{\phantom1} \def\+{\phantom+} - \eqalign{ - x + 2y + 3z &= 600 \cr - 12x + \1y - 3z &= \+7 \cr - 4x - \1y + 5z &= -5 -} $$}} -\bigskip -Another typical usage of the `\eqalign` macro: - -\begtt \typosize[10/12] -$$ \eqalign{ - p(x)\,q(x) &= (3x^3 + 4x^2 + 5x + 6) \cdot (x^6 + x^2 + 5) = \cr - &= 3x^9 + 4x^8 + 5x^7 + 6x^6 + 3x^5 + 4x^4 + 20x^3 + 26x^2 + 25x + 30. -} $$ -\endtt -$$ \eqalign{ - p(x)\,q(x) &= (3x^3 + 4x^2 + 5x + 6) \cdot (x^6 + x^2 + 5) = \cr - &= 3x^9 + 4x^8 + 5x^7 + 6x^6 + 3x^5 + 4x^4 + 20x^3 + 26x^2 + 25x + 30. -} $$ - -In \OpTeX/, \new\OpTeX/ -the `\eqalign` macro is more flexible. You can set the -`\baselineskip` value by the \x`\eqlines` parameter and math style -by the \x`\eqstyle` parameter. -For example, you need to put the system of \"equations" as a subscript of a sum -operator: -\begtt \typosize[10/12] \adef/{} -$$ - \sum/_{\eqlines{\baselineskip=.7\baselineskip}\eqstyle{\scriptstyle}\eqalign{ - i &\in A \cr - \quad j &\in B\cup C \cr - m &\in C }} - i + j + m -$$ -\endtt -$$ - \sum_{\eqlines{\baselineskip=.7\baselineskip}\eqstyle{\scriptstyle}\eqalign{ - i &\in A \cr - \quad j &\in B\cup C \cr - m &\in C }} - i + j + m -$$ - -\indent \new\OpTeX/ -You can write more equation systems one next second: -\begtt -$$\eqalign{ - x + y + z &= 1 && a + b + c &= -1 \cr - u + v &= 20 && f + g &= -20 \cr - i &= j -}$$ -\endtt -You can use the third column for centered equations -without aligning point. For example: -\begtt \catcode`\<=13 -$$ \left( \eqspace=0pt \eqalign{&& <first equation>\cr - && <second equation>} \right) $$ -\endtt -The \x`\eqspace` is additional space used in the third column to separate -equation systems one next second. - -\new \OpTeX/ -\OpTeX/ extensions summary: -\begitems -* `\eqlines` and `\eqstyle` set baselineskip and math style of the formulas. -* `\eqalign` allows more than two columns: - The first column is right-aligned (no space). The second is left-aligned (no space). - The third column (if used) - is centered with `\eqspace/2` at the left and right boundary of the column. - The fourth is the same as the first. The fifth is the same as second etc. The number - of columns that can be used in `\eqalign` is unlimited. -\enditems - -\secc The `\eqalign` macro with references - -You can give common mark to whole equation system by -`$$\eqalign{<data>}\eqno <mark>$$`. If you want to give marks to individual -lines of the equation system, then you can use another macro: -\x`\eqalignno`. The usage is similar as `\eqalign` but the -third column (if used) is intended to the equation mark. Example: - -\begtt -$$ \eqalignno{ - x + 2y + 3z &= 600 & \rm(A) \cr - 12x + y - 3z &= 7 & \rm(B) \cr - 4x - y + 5z &= -5 & \rm(C) \cr -} $$ -\endtt -\vskip-\baselineskip -$$ \eqalignno{ - x + 2y + 3z &= 600 & \rm(A) \cr - 12x + y - 3z &= 7 & \rm(B) \cr - 4x - y + 5z &= -5 & \rm(C) \cr -} $$ - -The `\leqalignno` macro is similar to `\eqalignno` but the marks are at the left -margin. The \OpTeX/ extensions of `\eqalign` are not available in -`\eqalignno` nor `\leqalignno` macros. - -\new \OpTeX/ -You can use auto-generated marks by `\eqmark` macro: -`$$\eqalign{<data>}\eqmark$$` or: -\begtt -$$ \eqalignno{ - x + 2y + 3z &= 600 & \eqmark[A] \cr - 12x + y - 3z &= 7 & \eqmark[B] \cr - 4x - y + 5z &= -5 & \eqmark[C] \cr -} $$ -\endtt - - -\sec Concept of loading math fonts - -\secc[fams] Math families - -\TeX/ can use more than one math font in math mode. This was a -necessity in the old days when only 128-characters fonts existed. -Each math font used in math mode has its \ii math/family {\em math family} represented by a number. -Math family is a collection of three (almost) equal fonts in three sizes: -first for `\textstyle` and `\displaystyle`, second for `\scriptstyle` -and third for `\scriptscriptstyle`. - -\new Unicode -When Unicode math font is loaded then it includes all three optical sizes and -all characters needed for typesetting math formula. -Theoretically, we can use only one math family with this single font. But more math families -(i.e.\ more fonts in math mode) is still possible. You can combine -characters from more fonts (Unicode fonts and old TFM fonts together) in one math formula. - -\new \OpTeX/ -\OpTeX/ loads the main Unicode math font into math family 1. The math -families 2 and 3 are reserved for specific \TeX/nical reasons, family 4 is -used for `\script` font and families 5, 6, 7, etc. can be used by user for -loading more fonts. The default macro for loading math fonts looks like: - -\begtt \typosize[10/12] -\_def\_normalunimath{% - \_loadumathfamily 1 {\_unimathfont}{} % Main Unicode math font - \_loadmathfamily 4 rsfs % \script (old TFM font) - \_setunimathdimens % set dimen parameters used in math formulas internally -}% -\let\_normalmath=\_normalunimath % this is done when Unicode math is initialized -\endtt -% -Whenever \OpTeX/ needs to resize math fonts (for example in footnotes or -titles), it calls the `\_normalmath` macro to reload all math -families to the desired size. If you want to add the next font, you can add -`\_loadunimathfamily <family> {<Unicode-font>}{<features>}` or -`\_loadmathfamily <family> <TFM-font>` into the `\_normalmath` macro. -The example in section~\ref[newfam] shows how to do it. - -\secc Two variants of math fonts: normal and bold - -All math formulas in the whole document need only one Unicode font (or only one collection -of math fonts as mentioned in section~\ref[fams]). But this -is not really true if titles are in bold font. If a math formula is present in -such a bold title then all characters of this formula must be bolder. -For example \"normal" variables must be in bold italic in titles, symbols -like `+` `=` must be bold and \"normal bold" letters -(e.g., indicating vectors in math formula) must be extra bold in titles. -It means that all fonts from the collection of math fonts must be bolder. -We need a second collection of math fonts with bolder -shape. Unfortunately, it is not always available. - -\new \OpTeX/ -If you have bold variant of used Unicode math font, then you can use -\ii .loadmath \iis .loadmath {{\code{\\loadmath}}} \x`\loadboldmath` command, for example: -\begtt -\loadmath {[xitsmath-regular]} -\loadboldmath {[xitsmath-bold]} \to {[xitsmath-regular]} -\endtt -% -\OpTeX/ uses `\_normalmath` macro for loading collection of math fonts in -\"normal" cases and `\_boldmath` macro for bold titles. The font declared by -\x`\loadboldmath` is used in second case. But if the bold variant of the font is -not available (this is unfortunately more typical), then \OpTeX/ uses faked -bold of main Unicode math font (the `embolden` internal font feature is -used). So, the default `\_boldmath` macro defined by \OpTeX/ looks like: - -\begtt \typosize[10/12] -\_def\_boldunimath{% - \_ifx\_unimathboldfont \_undefined - \_loadumathfamily 1 {\_unimathfont}{embolden=1.7;} % Main faked bold - \_else - \_loadumathfamily 1 {\_unimathboldfont}{} % Main real bold font - \_fi - \_loadmathfamily 4 rsfs % rsfs in not in bold, unfortunately - \_setunimathdimens -}% -\let\_boldmath=\_boldunimath % this is done when Unicode math is initialized -\endtt - -\secc[newfam] Example of using additional math font - -The font `bbold10.tfm` includes double stroked characters, for example, -double stroked plus, double stroked Greek letters and digits. -Try to run `pdftex testfont`, then answer the question about the name of the -font: `bbold10` and then type command `\table\end`. The `testfont.pdf` is -printed with the table of characters of this font. -Most of these characters cannot be found in Unicode math fonts. - -\new \OpTeX/ -We show an example of how to add this font to the collection of used math fonts. -We can re-define the `\_normalmath` macro by: -\begtt \typosize[10/12] -\addto\_normalmath {\_loadmathfamily 5 bbold } - -\_regtfm bbold 0 bbold5 5.5 bbold6 6.5 bbold7 7.5 bbold8 8.5 bbold9 - 9.5 bbold10 11.1 bbold12 15 bbold17 * % using all bbold*.tfm -\_normalmath % reload the math fonts collection -\endtt -% -The string \"`bbold`" is declared by `\_regtfm` as a collection of all -`bbold*.tfm` fonts, the optical sizes are supported. - -\addto\_normalmath {\_loadmathfamily 5 bbold } -\_regtfm bbold 0 bbold5 5.5 bbold6 6.5 bbold7 7.5 bbold8 8.5 bbold9 - 9.5 bbold10 11.1 bbold12 15 bbold17 * % using all bbold*.tfm -\_normalmath -\Umathchardef \bbplus 2 5 "2B -\Umathchardef \bble 3 5 "3C -\Umathchardef \bbge 3 5 "3E - -Finally, we must to declare new \TeX/ sequences for accessing the characters -from the new font, for example: - -\begtt \typosize[10/12] -\Umathchardef \bbplus 2 5 "2B -\Umathchardef \bble 3 5 "3C -\Umathchardef \bbge 3 5 "3E -\endtt -% -The \x`\Umathchardef` \TeX/ primitive declares new \TeX/ sequence used in math -typesetting. The first parameter is a class number (2 means Bin, 3 means Rel, -see the table in the section~\ref[class]). The second parameter is a math -family number. It is 5, see the redefinition of the `\_normalmath` macro above. -The third parameter is a slot in the font. Now you can try to use these characters: -$$ - `a \bbplus b \bbge c` \quad \hbox{gives} \quad a \bbplus b \bbge c. -$$ -% -Maybe, you want to declare a special math selector which can be used as -`$\bball a+b>c$` in order to get $\bbchar a \bbplus b \bbge c$. -Then you can define: - -\begtt \typosize[10/12] -\def\bball {\bbchar \Umathcodenum `+ \bbplus - \Umathcodenum `> \bbge - \Umathcodenum `< \bble } -\endtt - -If you want to add all double stroked Greek letters into `\bball` -selector, then you can do something like this: - -\begtt \typosize[10/12] -\def\setbbgreek #1 {\tmpnum=#1\xargs\setbbgreekA} -\def\setbbgreekA #1{\Umathcode \_ea`#1 0 5 \tmpnum \advance\tmpnum by1 } - -\addto\bball {% - \setbbgreek "0B \alpha \beta \gamma \delta \epsilon \zeta \eta - \theta \iota \kappa \lambda \mu \nu \xi \pi \rho \sigma - \tau \upsilon \phi \chi ; - \setbbgreek "7F \omega ; - \setbbgreek "00 \Gamma \Delta \Theta \Lambda \Xi \Pi \Sigma \Upsilon - \Phi \Psi \Omega ; } -\endtt -% -The \x`\Umathcode`` <input-code> <class> <family> <font-slot>` primitive is used -here. The control sequences `\alpha`, `\beta`, `\gamma` etc. are macros which expand -to the Unicode character of appropriate (non-math) Greek letter. We set the -Umathcode to such character, for example -\code{\\Umathcode `}$\_rmgreek\alpha$` 0 5 "0B` is processed. - -The bold variant of the font `bbold*.tfm` is not available, unfortunately. -We have to settle for normal version of the font in the `\_boldmath` macro: - -\begtt \typosize[10/12] - \addto \_boldmath {\_loadmathfamily 5 bbold } -\endtt - -Another approach of using more Unicode math fonts in a single formula is -shown in -\ulink[http://petr.olsak.net/optex/optex-tricks.html\#addumathfont]{OpTeX trick 0030}. - -\sec Index - -Control sequences listed at pages \pgref[listA]--\pgref[listB] are not -mentioned here again. - -\begmulti 3 -\makeindex -\endmulti - -\bye diff --git a/Master/texmf-dist/doc/luatex/optex/optex-techdoc.tex b/Master/texmf-dist/doc/luatex/optex/optex-techdoc.tex deleted file mode 100644 index 4ae25a9c7ec..00000000000 --- a/Master/texmf-dist/doc/luatex/optex/optex-techdoc.tex +++ /dev/null @@ -1,290 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% This file is read from optex-doc.tex -% Use: optex optex-doc -% (three times) to create whole documentation including all references and the index. - -\load [doc.opm] - -\thisoutline {TECHNICAL DOCUMENTATION} - -\chap Technical documentation - -This documentation is written in the source files `*.opm` between -the `\_doc` and `\_cod` pairs or after the `\_endcode` command. -When the format is generated by -\begtt -luatex -ini optex.ini -\endtt -then the text of the documentation is ignored and the format `optex.fmt` is -generated. On the other hand, if you run -\begtt -optex optex-doc.tex -\endtt -then the same `*.opm` files are read when the second chapter of this -documentation is printed. - -A knowledge about \TeX/ is expected from the reader. -You can see a short document -\ulink[http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf]{\TeX/ in a Nutshell} -or more detail -\ulink[https://eijkhout.net/texbytopic/texbytopic.html]{\TeX/ by topic}. - -Notices about hyperlinks. -If a control sequence is printed in red color in this documentation then -this denotes its \"main documentation point". Typically, the listing where -the control sequence is declared follows immediately. If a control sequence is -printed in the blue color in the listing or in the text -then it is an active link that points (usually) to the main documentation point. -The main documentation point can be an active link that points to a previous -text where the control sequence was -mentioned. Such occurrences are active links to the main documentation point. - -\sec[init] The main initialization file - -The `optex.ini` file is read as the main file when the format is generated. - -{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip} - \def\docfile{optex.ini} - -\verbinput (-4) optex.ini -% -Category codes are set first. Note that the `_` is set to category code -\"letter", it can be used as a part of control sequence names. -Other category codes are set as in the plain \TeX/. - -\verbinput (6-20) optex.ini -% -The \`\optexversion` and \`\fmtname` are defined. - -\verbinput (22-25) optex.ini -% -We check if \LuaTeX/ engine is used at `-ini` state. And the `^^J` character -is set as `\newlinechar`. - -\verbinput (27-36) optex.ini -% -The basic macros for macro file syntax is defined, i.\,e.\ -`\_endcode`, `\_doc` and `\_cod`. -The `\_codedecl` will be re-defined later. - -\verbinput (38-42) optex.ini -% -Individual `*.opm` macro files are read. - -\verbinput (44-87) optex.ini -% -The file `optex.lua` is embedded into the format as byte-code. -It is documented in section~\ref[lua]. - -\verbinput (89-92) optex.ini - -The `\everyjob` register is initialized and the format is saved by -the `\dump` command. - -\verbinput (94-102) optex.ini - -} - -\printdoctail prefixed.opm -\secc The implementation of the namespaces -\printdoc prefixed.opm - -\sec pdf\TeX/ initialization -\printdoctail luatex-ini.opm -\printdoc luatex-ini.opm - -\sec Basic macros -We define first bundle of basic macros. -\printdoc basic-macros.opm - -\sec Allocators for \TeX/ registers -\printdoctail alloc.opm -\printdoc alloc.opm - -\sec If-macros, loops, is-macros -\printdoc if-macros.opm - -\sec Setting parameters -\printdoctail parameters.opm -\printdoc parameters.opm - -\sec More \OpTeX/ macros -The second bundle of \OpTeX/ macros is here. -\printdoc more-macros.opm - -\sec Using key=value format in parameters -\printdoctail keyval.opm -\printdoc keyval.opm - -\sec Plain \TeX/ macros -All macros from plain \TeX/ are rewritten here. -Differences are mentioned in the documentation below. -\printdoc plain-macros.opm - -\sec Preloaded fonts for text mode -\printdoctail fonts-preload.opm -\printdoc fonts-preload.opm - -\printdoctail fonts-resize.opm -\printdoc fonts-resize.opm - -\printdoctail fonts-select.opm -\secc Implementation of the Font Selection System -\printdoc fonts-select.opm - -\sec [math-preload] Preloaded fonts for math mode -\printdoctail math-preload.opm -\printdoc math-preload.opm - -\sec[math-macros] Math macros -\printdoc math-macros.opm - -\sec Unicode-math fonts -\printdoctail math-unicode.opm - -\sec[opmac-fonts] Scaling fonts in document (high-level macros) -These macros are documented in section~\ref[sizes] from the user point of view. -\printdoc fonts-opmac.opm - -\sec[output] Output routine -\printdoctail output.opm -\printdoc output.opm - -\sec Margins -The `\margins` macro is documented in the section~\ref[marg]. -\printdoc margins.opm - -\sec[colors] Colors -\printdoctail colors.opm -\printdoc colors.opm - -\sec[ref-file] The \code{.ref} file -\printdoctail ref-file.opm -\printdoc ref-file.opm - -\sec[references] References -\printdoctail references.opm -\printdoc references.opm - -\sec Hyperlinks -\printdoctail hyperlinks.opm -\printdoc hyperlinks.opm - -\sec[maketoc] Making table of contents -\printdoc maketoc.opm - -\sec PDF outlines -\secc Nesting PDF outlines -\printdoctail outlines.opm -\printdoc outlines.opm -\secc Strings in PDF outlines -\printdoctail pdfuni-string.opm -\printdoc pdfuni-string.opm - -\sec[sections] Chapters, sections, subsections -\printdoc sections.opm - -\sec[lists] Lists, items -\printdoc lists.opm - -\sec Verbatim, listings -\secc[verb] Inline and \"display" verbatim -\printdoc verbatim.opm -\secc[hisyntax] Listings with syntax highlighting -\printdoctail hi-syntax.opm -\printdoc hi-syntax.opm - -\sec Graphics -\printdoctail graphics.opm -\printdoc graphics.opm - -\sec[table] The \code{\\table} macro, tables and rules -\printdoctail table.opm -\secc[table.impl] Implemetation of the \code{\\table} macro and friends -\printdoc table.opm - -\sec Balanced multi-columns -\printdoc multicolumns.opm - -\sec Citations, bibliography -\secc[bib] Macros for citations and bibliography preloaded in the format -\printdoc cite-bib.opm -\secc[usebib] The \code{\\usebib} command -\printdoctail usebib.opm -\secc The \code{usebib.opm} macro file loaded when \code{\\usebib} is used -\printdoc usebib.opm - -\secc[isobib] Usage of the \code{bib-iso690} style -{\everyintt={\catcode`\<=13 \visiblesp} -\printdoctail bib-iso690.opm } - -\secc Implementation of the \code{bib-iso690} style -\printdoc bib-iso690.opm - -\sec[makeindex] Sorting and making Index -\printdoc makeindex.opm - -\sec[fnotes] Footnotes and marginal notes -\printdoc fnotes.opm - -\sec Styles - \OpTeX/ provides three styles: `\report`, `\letter` and `\slides`. - Their behavior is documented in user part of the manual in the section - \ref[styles] and `\slides` style (for presentations) is documented in - `op-slides.pdf` which is an example of the presentation. -\secc \code{\\report} and \code{\\letter} styles -\printdoc styles.opm -\secc[slides] \code{\\slides} style for presentations -\printdoc slides.opm - -\sec Logos -\printdoc logos.opm - -\sec Multilingual support -\secc Lowercase, uppercase codes -\printdoctail uni-lcuc.opm -\secc Hyphenations -\printdoc hyphen-lan.opm -\printdoctail hyphen-lan.opm -\secc[langphrases] Multilingual phrases and quotation marks -\printdoc languages.opm - -\sec Other macros -Miscellaneous macros are here. -\printdoc others.opm - -\sec[lua] Lua code embedded to the format - -The file `optex.lua` is loaded into the format in `optex.ini` as byte-code -and initialized by `\everyjob`, see section~\ref[init]. - -The file implements part of the functionality from `luatexbase` namespace, -nowadays defined by \LaTeX/ kernel. `luatexbase` deals with modules, -allocators, and callback management. Callback management is a nice extension -and is actually used in \OpTeX/. Other functions are defined more or less just -to suit luaotfload's use. - -\newtoks \_hisyntaxlua -\_hisyntaxlua={% - \_hicolor C \Green - \_replfromto {--}{^^J} {\z C{--#1}^^J}% -} - -{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip} - \commentchars-- \def\docfile{optex.lua} \ttline=-1 - \_def\_printcomments{\_medskip - {\_catcodetable0 \_typosize[10/12]\_everypar={}\_scantextokens\_ea{\_vcomments}\par}% - \_bigskip - } - -\verbinput \hisyntax{lua} (4-) optex.lua -} - - -\sec Printing documentation -\printdoctail doc.opm -\printdoc doc.opm - -\enddocument - diff --git a/Master/texmf-dist/doc/luatex/optex/optex-userdoc.tex b/Master/texmf-dist/doc/luatex/optex/optex-userdoc.tex deleted file mode 100644 index a70cedcf4d8..00000000000 --- a/Master/texmf-dist/doc/luatex/optex/optex-userdoc.tex +++ /dev/null @@ -1,2019 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% This file is read from optex-doc.tex -% Use: optex optex-doc (three times) to create whole documentation. - -\let\new=\relax - -\sec Starting with \OpTeX/ -%%%%%%%%%%%%%%%%%%%%%%%%% - -\new -\OpTeX/ is compiled as a format for \LuaTeX/. Maybe there is a command -`optex` in your \TeX/ distribution. Then you can write into the command line - -\begtt -optex document -\endtt -% -You can try to process `optex op-demo` or `optex optex-doc`. - -If there is no `optex` command, see more information about installation -\OpTeX/ at \url{http://petr.olsak.net/optex}. - -A minimal document should be - -\begtt -\fontfam[LMfonts] -Hello World! \bye -\endtt - -The first line \~`\fontfam[LMfonts]` tells that Unicode Latin Modern -fonts (derived from Computer Modern) are used. If you omit this line then -preloaded Latin Modern fonts are used but preloaded fonts cannot be in -Unicode\fnote -{This is a technical limitation of \LuaTeX/ for fonts downloaded in formats: -only 8bit fonts can be preloaded.}. -So the sentence `Hello World` will be OK without the first line, but you -cannot print such sentence in other languages (for example `Ahoj světe!`) -where Unicode fonts are needed -because the characters like `ě` are not mapped correctly in preloaded -fonts. - -A somewhat larger example with common settings should be: - -\begtt \catcode`!=0 -\fontfam[Termes] % selecting Unicode font family Termes (section !ref[fontfam]) -\typosize[11/13] % setting default font size and baselineskip (sec. !ref[sizes]) -\margins/1 a4 (1,1,1,1)in % setting A4 paper, 1 in margins (section !ref[marg]) -\cslang % Czech hyphenation patterns (section !ref[lang]) - -Tady je zkušební textík v českém jazyce. -\bye -\endtt -% -You can look at `op-demo.tex` file for a more complex, but still simple example. - -\sec Page layout -%%%%%%%%%%%%%%%% - -\secc[marg] Setting the margins -%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -The \^`\margins` command declares margins of the document. This command have -the following parameters: - -\begtt \catcode`\<=13 -\margins/<pg> <fmt> (<left>,<right>,<top>,<bot>)<unit> - example: -\margins/1 a4 (2.5,2.5,2,2)cm -\endtt - -Parameters are: - -\begitems -* <pg> \dots\ `1` or `2` specifies one-page or two-pages design. -* <fmt> \dots\ paper format (a4, a4l, a5, letter, etc. or user defined). -* <left>, <right>, <top>, <bot> \dots\ gives the amount of left, right, - top and bottom margins. -* <unit> \dots\ unit used for values <left>, <right>, <top>, <bot>. -\enditems - -Each of the parameters <left>, <right>, <top>, <bot> can be empty. -If both <left> and <right> are nonempty then `\hsize` is set. Else `\hsize` -is unchanged. If both <left> and <right> are empty then typesetting area is -centered in the paper format. The analogical rule works when <top> or <bot> -parameter is empty (`\vsize` instead `\hsize` is used). Examples: - -\begtt -\margins/1 a4 (,,,)mm % \hsize, \vsize untouched, - % typesetting area centered -\margins/1 a4 (,2,,)cm % right margin set to 2cm - % \hsize, \vsize untouched, vertically centered -\endtt - -If `<pg>=1` then all pages have the same margins. If `<pg>=2` then the -declared margins are true for odd pages. The margins at the even pages are -automatically mirrored in such case, it means that <left> is replaced by -<right> and vice versa. - -\OpTeX/ declares following paper formats: a4, a4l (landscape~a4), -a5, a5l, a3, a3l, b5, letter and user can declare another own format by \~`\sdef`: - -\begtt -\sdef{_pgs:b5l}{(250,176)mm} -\sdef{_pgs:letterl}{(11,8.5)in} -\endtt - -The `<fmt>` can be also in the form `(<width>,<height>)<unit>` where `<unit>` is -optional. If it is missing then `<unit>` after margins specification is -used. For example: - -\begtt -\margins/1 (100,200) (7,7,7,7)mm -\endtt -% -declares the paper 100$\times$200\,mm with all four margins 7\,mm. The spaces -before and after <fmt> parameter are necessary. - -The command \^`\magscale[<factor>]` scales the whole typesetting area. -\new The fixed point of such scaling is the upper left corner of the paper sheet. -Typesetting (breakpoints etc.) is unchanged. All units are relative after -such scaling. Only paper format's dimensions stay unscaled. Example: - -\begtt -\margins/2 a5 (22,17,19,21)mm -\magscale[1414] \margins/1 a4 (,,,)mm -\endtt -% -The first line sets the `\hsize` and `\vsize` and margins for final -printing at a5 format. The setting on the second line centers the scaled -typesetting area to the true a4 paper while breaking points for paragraphs -and pages are unchanged. It may be usable for -review printing. After the review is done, the second line can be commented out. - -\secc Concept of the default page -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\OpTeX/ uses \"output routine" for page design. -It is very similar to the Plain \TeX/ output routine. -There is \^`\headline` followed by \"page body" followed by -\^`\footline`. The \^`\headline` is empty by default and it can be used -for running headers repeated on each page. The \^`\footline` prints -centered page number by default. You can set the \^`\footline` to empty -using \^`\nopagenumbers` macro. - -The margins declared by \^`\margins` macro (documented in the previous -section~\ref[marg]) is concerned to the page body, -i.e.\ the \^`\headline` and \^`\footline` are placed to the top and bottom -margins. - -The distance between the \^`\headline` and the top of the page body is given by -the \^`\headlinedist` register. The distance between bottom of the page body and -the \^`\footline` is given by \^`\footlinedist`. The default values are: - -\begtt -\headline = {} -\footline = {\_hss\_rmfixed \_folio \_hss} % \folio expands to page number -\headlinedist = 14pt % from baseline of \headline to top of page body -\footlinedist = 24pt % from last line in pagebody to baseline of footline -\endtt - -The page body should be divided into top insertions (floating tables and -figures) followed by a real text and followed by footnotes. -Typically, the only real text is here. - -The \^`\pgbackground` tokens list is empty by default but it can be used for -creating a background of each page (colors, picture, watermark for example). -The macro \^`\draft` uses this register and puts big text DRAFT as a watermark -to each page. You can try it. - -More about the page layout is documented in sections~\ref[oparams] and~\ref[output]. - -\secc Footnotes and marginal notes -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -The Plain \TeX/'s macro \^`\footnote` can be used as usual. But a new macro -\^`\fnote{<text>}` is defined. The footnote mark is added automatically and it -is numbered -\new -on each chapter from one\fnote -{You can declare \^`\fnotenumglobal` if you want footnotes numbered in whole -document from one or \^`\fnotenumpages` if you want footnotes numbered at each -page from one. Default setting is \^`\fnotenumchapters`}. -The <text> is scaled to 80 \%. -User can redefine footnote mark or scaling, as shown in the section~\ref[fnotes]. - -The \^`\fnote` macro is fully applicable only in \"normal outer" paragraph. -It doesn't work inside boxes (tables, for example). If you are solving such -a case then you can use the command \^`\fnotemark``<numeric-label>` inside the box: only the -footnote mark is generated here. When the box is finished you can use -\^`\fnotetext{<text>}`. This macro puts the <text> to the footnote. -The <numeric-label> has to be `1` if only one such command is in the box. -Second \^`\fnotemark` inside the same box has to have the parameter `2` etc. -The same number of \^`\fnotetext`s have to be written -after the box as the number of \^`\fnotemark`s inserted inside the box. -Example: - -\begtt -Text in a paragraph\fnote{First notice}... % a "normal" footnote -\table{...}{...\fnotemark1...\fnotemark2...} % two footnotes in a box -\fnotetext{Second notice} -\fnotetext{Third notice} -... -\table{...}{...\fnotemark1...} % one footnote in a box -\fnotetext{Fourth notice} -\endtt - -The marginal note can be printed by the \^`\mnote{<text>}` macro. The <text> -is placed to the right margin on the odd pages and it is placed to the left -margin on the even pages. This is done after second \TeX{} run because the -relevant information is stored in an external file and read from it again. -If you need to place the notes only to the fixed margin write -\^`\fixmnotes\right` or \^`\fixmnotes\left`. - -The <text> is formatted as a little paragraph with the maximal width -\^`\mnotesize` ragged left on the left margins or ragged right on the right -margins. The first line of this little paragraph has its vertical position -given by the position of \^`\mnote` in the text. The exceptions are possible -by using the `up` keyword: \~`\mnote`` up<dimen>{<text>}`. -You can set such <dimen> to each \^`\mnote` manually in final printing -in order to margin notes do not overlap. The positive value of <dimen> -shifts the note up and negative value shifts it down. For example -\^`\mnote`` up 2\baselineskip{<text>}` shifts this marginal note two lines up. - -\sec Fonts -%%%%%%%%%% - -\secc[fontfam] Font families -%%%%%%%%%%%%%%%%%%%%%%% - -You can select the font family by \^`\fontfam[<Family-name>]`. -The argument <Family-name> is case insensitive and spaces are ignored in it. For -example, \^`\fontfam[LM Fonts]` is equal to \^`\fontfam[LMfonts]` and it is equal -to \^`\fontfam[lmfonts]`. Several aliases are prepared, thus -\^`\fontfam[Latin Modern]` can be used for loading Latin Modern family too. - -If you write \^`\fontfam[?]` then all font families registered in \OpTeX/ -are listed on the terminal and in the log file. -If you write \^`\fontfam[catalog]` then a catalog of all fonts registered in -\OpTeX/ and available in your \TeX/ system is printed. The instructions -on how to register your own font family are appended in the catalog. - -If the family is loaded then {\em font modifiers} applicable in such font family -are listed on the terminal: (`\caps`, `\cond` for example). -And there are four basic {\em variant selectors} (\^`\rm`, \^`\bf`, \^`\it`, \^`\bi`). -The usage of variant selectors is the same as in Plain \TeX: -`{\it italics text}`, `{\bf bold text}` etc. - -The font modifiers (`\caps`, `\cond` for example) can -be used before a variant selector and they -can be (independently) combined: `\caps\it` or `\cond\caps\bf`. The -modifiers keep their internal setting until the group ends or until another -modifier that negates the previous feature is used. So -`{\caps \rm First text \it Second text}` -gives {\caps \rm First text \it Second text}. - -The font modifier without following variant selector does not change the font -actually, it only prepares data used by next variant selectors. -There is one special variant selector \^`\currvar` which does not change the -selected variant but reloads the font due to (maybe newly -specified) font modifier(s). - -The context between variants \^`\rm` $\leftrightarrow$ \^`\it` and -\^`\bf` $\leftrightarrow$ \^`\bi` is kept by the \^`\em` -macro (emphasize text). -It switches from current \^`\rm` to \^`\it`, from current \^`\it` to \^`\rm`, from -current \^`\bf` to \^`\bi` and from current \^`\bi` to \^`\bf`. -The italics correction `\/` is inserted automatically, if needed. Example: - -\begtt -This is {\em important} text. % = This is {\it important\/} text. -\it This is {\em important} text. % = This is\/ {\rm important} text. -\bf This is {\em important} text. % = This is {\bi important\/} text. -\bi This is {\em important} text. % = This is\/ {\bf important} text. -\endtt - -\new -More about the \OpTeX/ Font Selection System is written in the technical -documentation in the section~\ref[fontsystem]. -You can mix more font families in your document, you can -declare your own variant selectors or modifiers, etc. - -\secc[sizes] Font sizes -%%%%%%%%%%%%%%%%%%%%% - -The command \^`\typosize[<fontsize>/<baselineskip>]` sets the font size of text and -math fonts and baselineskip. If one of these two parameters is empty, the -corresponding feature stays unchanged. Don't write the unit of these -parameters. The unit is internally set to \^`\ptunit` which is 1pt by default. -You can change the unit by the command \^`\ptunit=<something-else>`, -for instance \^`\ptunit=1mm` enlarges all font sizes declared by \^`\typosize`. -Examples: - -\begtt -\typosize[10/12] % default of Plain TeX -\typosize[11/12.5] % font 11pt, baseline 12.5pt -\typosize[8/] % font 8pt, baseline unchanged -\endtt - -The commands for font size setting described in this section -have local validity. If you put them into a group, -the settings are lost when the group is finished. If you set -something relevant with paragraph shape (baselineskip given by -\^`\typosize` for example) then you must first finalize the -paragraph before closing the group: -`{\typosize[12/14] ...<text of paragraph>... \par}`. - -The command \^`\typoscale[<font-factor>/<baselineskip-factor>]` -sets the text and math fonts -size and baselineskip as a multiple of the current fonts size and -baselineskip. The factor is written in \"scaled"-like way, it means that 1000 -means factor one. The empty parameter is equal to the parameter 1000, -i.e. the value stays unchanged. Examples: - -\begtt -\typoscale[800/800] % fonts and baselineskip re-size to 80 % -\typoscale[\magstep2/] % fonts bigger 1,44times (\magstep2 expands to 1440) -\endtt - -First usage of \^`\typosize` or \^`\typoscale` macro in your document sets so-called {\em main values}, i.\,e.\ main font size and main baselineskip. They are internally -saved in registers \^`\mainfosize` and \^`\mainbaselineskip`. - -\new -The \^`\typoscale` command does scaling with respect to current values by default. -If you want to do it with respect to the main values, type \^`\scalemain` immediately -before \^`\typoscale` command. - -\begtt -\typosize[12/14.4] % first usage in document, sets main values internally -\typosize[15/18] % bigger font -\scalemain \typoscale[800/800] % reduces from main values, no from current. -\endtt - -The \^`\typosize` and \^`\typoscale` macros initialize the font family by `\rm`. -You can re-size only the current font by the command -\^`\thefontsize[<font-size>]` or the font can be rescaled by -\^`\thefontscale[<factor>]`. These macros don't change math fonts sizes nor -baselineskip. - -\new -There is \"low level" \^`\setfontsize{<size-spec>}` command which behaves like -a font modifier and sets given font size used by next variant selectors. -It doesn't change the font size immediately, but the following variant selector -does it. For example \^`\setfontsize{at15pt}`\^`\currvar` sets current variant to 15pt. - -If you are using a font family with \"optical sizes feature" (i.\,e.\ there -are more recommended sizes of the same font which are not scaled -linearly; a good example is Computer Modern aka Latin Modern fonts) -then the recommended size is selected by all mentioned commands automatically. - -More information about resizing of fonts is documented in the -section~\ref[setfontsize]. - -\secc Typesetting math -%%%%%%%%%%%%%%%%%%%%% - -See the additional document -\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf] -{Typesetting Math with \OpTeX/} for more details about this issue. - -\OpTeX/ preloads a collection of 7bit Computer Modern math fonts -and AMS fonts in its format for math typesetting. -You can use them in any size and in the \^`\boldmath` variant. -% -\new -Most declared text font families (see \^`\fontfam` in the section~\ref[fontfam]) -are configured with a recommended Unicode -math font. This font is automatically loaded unless you specify -\^`\noloadmath` before first \^`\fontfam` command. See log file for more -information about loading text font family and Unicode math fonts. If you -prefer another Unicode math font, specify it by \^`\loadmath{[<font-file>]}` -or \^`\loadmath{<font-name>}` before first \^`\fontfam` command. - -Hundreds math symbols and operators like in AMS\TeX/ are accessible. -For example `\alpha` $\alpha$, `\geq`~$\geq$, `\sum` $\sum$, -`\sphericalangle` $\sphericalangle$, `\bumpeq`, $\bumpeq$. See AMS\TeX/ -manual or -\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf] -{Typesetting Math with \OpTeX/} for complete list of math symbols. - -The following math alphabets are available: - -\begtt \catcode`\$=3 \catcode`/=0 \medmuskip=0mu \adef{ }{ } -\mit % mathematical variables $abc-xyz,ABC-XYZ$ -\it % text italics $/it abc-xyz,ABC-XYZ$ -\rm % text roman $/rm abc-xyz,ABC-XYZ$ -\cal % normal calligraphics $/cal ABC-XYZ$ -\script % script $/script ABC-XYZ$ -\frak % fracture $/frak abc-xyz,ABC-XYZ$ -\bbchar % double stroked letters $/bbchar ABC-XYZ$ -\bf % sans serif bold $/bf abc-xyz,ABC-XYZ$ -\bi % sans serif bold slanted $/bi abc-xyz,ABC-XYZ$ -\endtt - -The last two selectors \^`\bf` and \^`\bi` select the sans serif fonts in math regardless of the current text font family. This is a common notation for vectors and -matrices. You can re-declare them, see section~\ref[unimath-codes] where -definitions of Unicode math variants of \^`\bf` and \^`\bi` selectors are documented. - -The math fonts can be scaled by \^`\typosize` and \^`\typoscale` macros. -Two math fonts collections are prepared: \^`\normalmath` for normal weight -and \^`\boldmath` for bold. The first one is set by default, the second one -is usable for math formulae in titles typeset in bold, for example. - -\new -You can use \^`\mathbox{<text>}` inside math mode. It behaves as `{\hbox{<text>}}` -(i.e. the <text> is printed in horizontal non-math mode) -but the size of the <text> is adapted to the context of math size (text or script or -scriptscript). - -\sec Typical elements of the document -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\secc[chap] Chapters and sections -%%%%%%%%%%%%%%%%%%%%%%%%%% - -The documents can be divided into chapters (\^`\chap`), -sections (\^`\sec`), subsections (\^`\secc`) and they can be titled -by \^`\tit` command. The parameters are separated by the end of current line (no -braces are used): - -\begtt \catcode`\<=13 -\tit Document title <end of line> -\chap Chapter title <end of line> -\sec Section title <end of line> -\secc Subsection title <end of line> -\endtt - -The chapters are automatically numbered by one number, sections by two numbers -(chapter.section), and subsections by three numbers. If there are no chapters -then sections have only one number and subsections two. - -The implicit design of the titles of chapter etc.\ is implemented in the -macros \^`\_printchap`, \^`\_printsec` and \^`\_printsecc`. A designer can simply change -these macros if he/she needs another behavior. - -The first paragraph after the title of chapter, section, and subsection is -not indented but you can type `\let`\^`\_firstnoindent=\relax` if you need all -paragraphs indented. - -If a title is so long then it breaks into more lines in the output. It is better to hint at the -breakpoints because \TeX/ does not interpret the meaning of the title. -Users can put the \^`\nl` (means newline) to the breakpoints. - -If you want to arrange a title to more lines in your source file then you can -use `^^J` at the end of each line (except the last one). -When `^^J` is used, then the reading of the title continues at the next line. -The \"normal" comment character `%` doesn't work in titles. -You can use \^`\nl`{\visiblesp` ^^J`} if you want to have corresponding lines in the source -and the output. - -The chapter, section, or subsection isn't numbered if the \^`\nonum` precedes. -And the chapter, section, or subsection isn't delivered to the table of -contents if \^`\notoc` precedes. You can combine both prefixes. - -\secc[cap] Another numbered objects -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -Apart from chapters, sections, and subsections, there are another -automatically numbered objects: equations, captions for tables and -figures. The user can declare more numbered objects. - -If the user writes the \^`\eqmark` as the last element of the display mode then -this equation is numbered. The equation number is printed in brackets. This number -is reset in each section by default. - -If the \^`\eqalignno` is used, then user can put \^`\eqmark` to the last column -before `\cr`. For example: - -\begtt -\eqalignno{ - a^2+b^2 &= c^2 \cr - c &= \sqrt{a^2+b^2} & \eqmark \cr} -\endtt - -Another automatically numbered object is a caption which is tagged by \^`\caption/t` for -tables and \^`\caption/f` for figures. The caption text follows. -The \^`\cskip` can be used between \^`\caption` text and the real object (table -or figure). You can use two orders: `<caption>\cskip <object>` or -`<object>\cskip <caption>`. -The \^`\cskip` creates appropriate vertical space between them. Example: - -\begtt -\caption/t The dependency of the computer-dependency on the age. -\cskip -\noindent\hfil\table{rl}{ - age & value \crl\noalign{\smallskip} - 0--1 & unmeasured \cr - 1--6 & observable \cr - 6--12 & significant \cr - 12--20 & extremal \cr - 20--40 & normal \cr - 40--60 & various \cr - 60--$\infty$ & moderate} -\endtt - -This example produces: - -\medskip -\caption/t The dependency of the computer-dependency on the age. -\cskip -\noindent\hfil\table{rl}{ - age & value \crl\noalign{\smallskip} - 0--1 & unmeasured \cr - 1--6 & observable \cr - 6--12 & significant \cr - 12--20 & extremal \cr - 20--40 & normal \cr - 40--60 & various \cr - 60--$\infty$ & moderate} -\medskip - -You can see that the word \"Table" followed by a number is added by the macro -`\caption/t`. -The caption text is centered. If it occupies more lines then the -last line is centered. - -The macro \^`\caption/f` behaves like \^`\caption/t` but it is intended for -figure captions with independent numbering. -The word (Table, Figure) depends on the selected language (see -section~\ref[lang] about languages). - -If you wish to make the table or figure as a floating object, you need to use -Plain \TeX/ macros \^`\midinsert` or \^`\topinsert` terminated by \^`\endinsert`. -Example: - -\begtt -\topinsert % table and its caption printed at the top of the current page - <caption and table> -\endinsert -\endtt -% -The pair \^`\midinsert`...\^`\endinsert` prefers to put the enclosed object -to the current place. Only if this is unable due to page breaking, it -behaves like \^`\topinsert`...\^`\endinsert`. - -\new -There are five prepared counters `A`, `B`, `C`, `D` and `E`. -They are reset in each chapter and section\fnote -{This feature can be changed, see the section~\ref[sections] in the technical documentation.}. -They can be used in context of \^`\numberedpar` `<letter>{<text>}` -macro. For example: -\begtt -\def\theorem {\numberedpar A{Theorem}} -\def\corollary {\numberedpar A{Corollary}} -\def\definition {\numberedpar B{Definition}} -\def\example {\numberedpar C{Example}} -\endtt -% -Three independent numbers are used in this example. One for Theorems and Corollaries -second for Definitions and third for Examples. The user can write -`\theorem Let $M$ be...` and the new paragraph is started with the text: -{\bf Theorem 1.4.1.} Let $M$ be... -You can add an optional parameter in brackets. For example, -`\theorem [(L'Hôpital's rule)] Let $f$, $g$ be...` -is printed like {\bf Theorem 1.4.2 (L'Hôpital's rule).} Let $f$, $g$ be... - -\secc References -%%%%%%%%%%%%%%% - -Each automatically numbered object documented in -sections \ref[chap] and \ref[cap] can be referenced -\new -if optional parameter -`[<label>]` is appended to \^`\chap`, \^`\sec`, -\^`\secc`, \^`\caption/t`, \^`\caption/f` or \^`\eqmark`. The alternative syntax is -to use \^`\label[<label>]` before mentioned commands (not necessarily directly -before). The reference is realized by \^`\ref[<label>]` or \^`\pgref[<label>]`. -Example: - -\begtt -\sec[beatle] About Beatles - -\noindent\hfil\table{rl}{...} % the table -\cskip -\caption/t [comp-depend] The dependency of the comp-dependency on the age. - -\label[pythagoras] -$$ a^2 + b^2 = c^2 \eqmark $$ - -Now we can point to the section~\ref[beatle] on the page~\pgref[beatle] -or write something about the equation~\ref[pythagoras]. Finally there -is an interesting Table~\ref[comp-depend]. -\endtt - -If there are forward referenced objects then users have to run \TeX{} twice. -During each pass, the working `*.ref` file (with references data) is created -and this file is used (if it exists) at the beginning of the document. - -You can use the \^`\label[<label>]` before the `\theorem`, `\definition` etc.\ -(macros defined with `\numberedpar`) if you want to reference these numbered objects. -You can't use `\theorem[<label>]` because the optional parameter -is reserved to another purpose here. - -You can create a reference to whatever else by commands -\^`\label[<label>]`\^`\wlabel{<text>}`. The connection between <label> and -<text> is established. The \^`\ref[<label>]` will print <text>. - -By default, labels are not printed, of course. But if you are preparing a -draft version of your document then you can declare \^`\showlabels`. The labels -are printed at their destination places after such a declaration. - -\secc Hyperlinks, outlines -%%%%%%%%%%%%%%%%%%%%%%%%% - -If the command \^`\hyperlinks` `<color-in> <color-out>` is used at the beginning of -the document, then the following objects are hyperlinked in the PDF output: - -\begitems -* numbers and texts generated by \^`\ref` or \^`\pgref`, -* numbers of chapters, sections, subsections, and page numbers in the table of contents, -* numbers or marks generated by \~`\cite` command (bibliography references), -* texts printed by \~`\url` or \~`\ulink` commands. -\enditems - -The last object is an external link and it is colored by -<color-out>. Other links are internal and they are colored by -<color-in>. Example: - -\begtt -\hyperlinks \Blue \Green % internal links blue, URLs green. -\endtt - -You can use another marking of active links: by frames which are visible in -the PDF viewer but invisible when the document is printed. The way to do it -is to define the macros \^`\_pgborder`, \^`\_tocborder`, \^`\_citeborder`, -\^`\_refborder` and \^`\_urlborder` as the triple of RGB components of the used -color. Example: - -\begtt -\def\_tocborder {1 0 0} % links in table of contents: red frame -\def\_pgborder {0 1 0} % links to pages: green frame -\def\_citeborder {0 0 1} % links to references: blue frame -\endtt - -By default, these macros are not defined. It means that no frames are created. - -The hyperlinked footnotes can be activated by \^`\fnotelinks` `<color-fnt> <color-fnf>` -where footnote marks in the text have `<color-fnt>` and the same footnote marks -in footnotes have <color-fnf>. You can define relevant borders -\^`\_fntborder` and \^`\_fnfborder` analogically as \^`\_pgborder` (for example). - -There are \"low level" commands to create the links. You can specify the -destination of the internal link by \^`\dest[<type>:<label>]`. The -active text linked to the \^`\dest` can be created by -\^`\ilink[<type>:<label>]{<text>}`. The `<type>` parameter is one of -the `toc`, `pg`, `cite`, `ref`, or another special for your purpose. -These commands create internal links only when \^`\hyperlinks` is declared. - -The \^`\url` macro prints its parameter in \~`\tt` font and creates a potential -breakpoints in it (after slash or dot, for example). If the \^`\hyperlinks` -declaration is used then the parameter of \^`\url` is treated as an external URL link. -An example: `\url{http://www.olsak.net}` creates \url{http://www.olsak.net}. -The characters \code{\%}, `\`, `#`, `{`, and `}` have to be protected by -backslash in the \^`\url` argument, the other special characters `~`, -`^`, `&` can be written as single character\fnote -{More exactly, there are the same rules as for `\code` command, see -section~\ref[verbatim].}. -You can insert the `\|` command -in the `\url` argument as a potential breakpoint. - -If the linked text have to be different than the URL, you can use -\^`\ulink[<url>]{<text>}` macro. For example: -`\ulink[http://petr.olsak.net/optex]{\OpTeX/ page}` -outputs to the text -\ulink[http://petr.olsak.net/optex]{\OpTeX/ page}. -The characters \code{\%}, `\`, `#`, `{`, and `}` must by escaped in -the <url> parameter. - -The PDF format provides {\em outlines} which are notes placed in the special frame of -the PDF viewer. These notes can be managed as a structured and hyperlinked -table of contents of the document. The command \^`\outlines{<level>}` creates -such outlines from data used for the table of contents in the document. The -<level> parameter gives the level of opened sub-outlines -in the default view. The deeper levels can be opened by mouse click on the -triangle symbol after that. - -\new -If you are using a special unprotected macro in section titles then \^`\outlines` macro -may crash. You must declare a variant of the macro for outlines case which is -expandable. Use \~`\regmacro` in this case. See the section \ref[toc] for more information -about \~`\regmacro`. - -The command \^`\insertoutline{<text>}` inserts a next entry into PDF outlines at -the main level~0. These entries can be placed before the table of contents (created -by \^`\outlines`) or after it. Their hyperlink destination is in the place -where the \^`\insertoutline` macro is used. - -The command \^`\thisoutline{<text>}` uses <text> in the outline instead of default -title text for the first following `\chap`, `\sec`, or `\secc`. -Special case: \^`\thisoutline{\relax}` doesn't create any outline for the following -`\chap`, `\sec`, or `\secc`. - -\secc Lists -%%%%%%%%%% - -The list of items is surrounded by \^`\begitems` and \^`\enditems` commands. -The asterisk (`*`) is active within this environment and it starts one item. -The item style can be chosen by the \^`\style` parameter written after \^`\begitems`: - -\begtt -\style o % small bullet -\style O % big bullet (default) -\style - % hyphen char -\style n % numbered items 1., 2., 3., ... -\style N % numbered items 1), 2), 3), ... -\style i % numbered items (i), (ii), (iii), ... -\style I % numbered items I, II, III, IV, ... -\style a % items of type a), b), c), ... -\style A % items of type A), B), C), ... -\style x % small rectangle -\style X % big rectangle -\endtt - -For example: - -\begtt -\begitems -* First idea -* Second idea in subitems: - \begitems \style i - * First sub-idea - * Second sub-idea - * Last sub-idea - \enditems -* Finito -\enditems -\endtt -% -produces: - -\begitems -* First idea -* Second idea in subitems: - \begitems \style i - * First sub-idea - * Second sub-idea - * Last sub-idea - \enditems -* Finito -\enditems - -Another style can be defined by the command \~`\sdef{_item:<style>}{<text>}`. -Default item can be set by \^`\defaultitem={<text>}`. -The list environments can be nested. Each new level of items is indented by -next multiple of \^`\iindent` value which is set to `\parindent` by default. -The \^`\ilevel` register says what level of items is currently processed. -Each \^`\begitems` starts \^`\everylist` tokens register. You can set, for -example: -\begtt -\everylist={\ifcase\ilevel\or \style X \or \style x \else \style - \fi} -\endtt - -You can say \^`\begitems` \^`\novspaces` if you don't want vertical spaces above -and below the list. The nested item list is without vertical spaces -automatically. More information about the design of lists of items should be -found in the section~\ref[lists]. - -A \"selected block of text" can be surrounded by -\^`\begblock`\dots\^`\endblock`. The default design of blocks of text is -indented text in smaller font. The blocks of text can be nested. - -\secc Tables -%%%%%%%%%%% - -The macro \^`\table{<declaration>}{<data>}` provides similar <declaration> -of tables as in \LaTeX: you can use letters `l`, `r`, `c`, each letter declares -one column (aligned to left, right, center, respectively). -These letters can be combined by the `|` character (vertical line). Example - -\begtt -\table{||lc|r||}{ \crl - Month & commodity & price \crli \tskip2pt - January & notebook & \$ 700 \cr - February & skateboard & \$ 100 \cr - July & yacht & k\$ 170 \crl} -\endtt -% -generates the result: - -\vskip-\medskipamount -\noindent\hfil\table{||lc|r||}{ \crl - Month & commodity & price \crli \tskip2pt - January & notebook & \$ 700 \cr - February & skateboard & \$ 100 \cr - July & yacht & k\$ 170 \crl} -\medskip - -Apart from `l`, `r`, `c` declarators, you can use the `p{<size>}` declarator -which declares the column with paragraphs of given width. More precisely, -a long text in the table cell is printed as a multiline paragraph with given width. -By default, the paragraph is left-right justified. But there are -alternatives: - -\begitems -* `p{<size>`\^`\fL}` fit left, i.e.\ left justified, ragged right, -* `p{<size>`\^`\fR}` fit right, i.e.\ right justified, ragged left, -* `p{<size>`\^`\fC}` fit center, i.e.\ ragged left plus right, -* `p{<size>`\^`\fS}` fit special, short one-line pararaph centered, - long paragraph normal, -* `p{<size>`\^`\fX}` fit extra, left-right justified but last line centered. -\enditems - -You can use `(<text>)` in the <declaration>. Then this text is applied in -each line of the table. For example `r(\kern10pt)l` adds more 10\,pt space -between `r` and `l` rows. - -An arbitrary part of the <declaration> can be repeated by a <number> -prefixed. For example `3c` means `ccc` or `c 3{|c}` means -`c|c|c|c`. Note that spaces in the <declaration> are ignored and you -can use them in order to more legibility. - -The command `\cr` used in the <data> part of the table -is generally known from Plain \TeX. It marks the end of each row in the table. -Moreover \OpTeX/ defines following similar commands: - -\begitems -* \^`\crl` \dots\ the end of the row with a horizontal line after it. -* \^`\crll` \dots\ the end of the row with a double horizontal line after it. -* \^`\crli` \dots\ like \^`\crl` but the horizontal line doesn't intersect the - vertical double lines. -* \^`\crlli` \dots\ like \^`\crli` but horizontal line is doubled. -* \^`\crlp{<list>}` \dots\ like \^`\crli` but the lines are drawn only in the - columns mentioned in comma-separated `<list>` of their numbers. - The <list> can include `<from>-<to>` declarators, for example - \^`\crlp{1-3,5}` is equal to \^`\crlp{1,2,3,5}`. -\enditems - -The \^`\tskip``<dimen>` command works like the `\noalign{\vskip<dimen>}` -immediately after `\cr*` commands but it doesn't interrupt the vertical lines. - -\new -You can use the following parameters for the \^`\table` macro. Default values are listed -too. - -\begtt -\everytable={} % code used in \vbox before table processing -\thistable={} % code used in \vbox, it is removed after using it -\tabiteml={\enspace} % left material in each column -\tabitemr={\enspace} % right material in each column -\tabstrut={\strut} % strut which declares lines distance in the table -\tablinespace=2pt % additional vert. space before/after horizontal lines -\vvkern=1pt % space between lines in double vertical line -\hhkern=1pt % space between lines in double horizontal line -\tabskip=0pt % space between columns -\tabskipl=0pt \tabskipr=0pt % space before first and after last column -\endtt - -Example: if you do \^`\tabiteml={$\enspace}`\^`\tabitemr={\enspace$}` then -the \^`\table` acts like \LaTeX's array environment. - -If there is an item that spans to more than one column in the table then -the macro \^`\multispan{<number>}` (from Plain \TeX) can help you. Another -alternative is -the command \^`\mspan``<number>[<declaration>]{<text>}` -which spans <number> columns and formats the <text> by the -<declaration>. The <declaration> must include a declaration of only one column -with the same syntax as common \^`\table` <declaration>. -If your table includes vertical rules and you want to -create continuous vertical rules by \^`\mspan`, then use rule declarators `|` -after `c`, `l` or `r` letter in \^`\mspan` <declaration>. The -exception is only in the case when \^`\mspan` includes the first -column and the table have rules on the left side. The example of \^`\mspan` -usage is below. - -The \^`\frame{<text>}` makes a frame around <text>. You can put the whole \^`\table` -into \^`\frame` if you need double-ruled border of the table. Example: - -\begtt -\frame{\table{|c||l||r|}{ \crl - \mspan3[|c|]{\bf Title} \crl \noalign{\kern\hhkern}\crli - first & second & third \crlli - seven & eight & nine \crli}} -\endtt -% -creates the following result: - -\hfil\frame{\table{|c||l||r|}{\crl - \mspan3[|c|]{\bf Title} \crl \noalign{\kern\hhkern}\crli - first & second & third \crlli - seven & eight & nine \crli}} -\bigskip - -The \^`\vspan``<number>{<text>}` shifts the <text> down in order it looks -like to be in the center of the <number> lines (current line is first). -You can use this for creating tables like in the following example: - -\begtt \typosize[8.7/11] -\thistable{\tabstrut={\vrule height 20pt depth10pt width0pt} - \baselineskip=20pt \tablinespace=0pt \rulewidth=.8pt} -\table{|8{c|}}{\crlp{3-8} - \mspan2[c|]{} & \mspan3[c|]{Singular} & \mspan3[c|]{Plural} \crlp{3-8} - \mspan2[c|]{} & Neuter & Masculine & Feminine & Masculine & Feminine & Neuter \crl - \vspan2{I} & Inclusive & \mspan3[c|]{\vspan2{O}} & \mspan3[c|]{X} \crlp{2,6-8} - & Exclusive & \mspan3[c|]{} & \mspan3[c|]{X} \crl - \vspan2{II} & Informal & \mspan3[c|]{X} & \mspan3[c|]{X} \crlp{2-8} - & Formal & \mspan6[c|]{X} \crl - \vspan2{III} & Informal & \vspan2{O} & X & X & \mspan2[c|]{X} &\vspan2{O} \crlp{2,4-7} - & Formal & & \mspan4[c|]{X} & \crl -} -\endtt - -\puttext 8.9cm -4cm {\pdfsave\pdfscale{.5}{.5}\rlap{% -\thistable{\tabstrut={\vrule height 20pt depth10pt width0pt} - \baselineskip=20pt \tablinespace=0pt \rulewidth=.8pt} -\table{|8{c|}}{\crlp{3-8} - \mspan2[c|]{} &\mspan3[c|]{Singular} &\mspan3[c|]{Plural} \crlp{3-8} - \mspan2[c|]{} & Neuter & Masculine & Feminine & Masculine & Feminine & Neuter \crl - \vspan2{I} & Inclusive & \mspan3[c|]{\vspan2{O}} &\mspan3[c|] X \crlp{2,6-8} - & Exclusive & \mspan3[c|]{} &\mspan3[c|] X \crl - \vspan2{II} & Informal & \mspan3[c|] X &\mspan3[c|] X \crlp{2-8} - & Formal & \mspan6[c|] X \crl - \vspan2{III} & Informal & \vspan2{O} & X & X &\mspan2[c|] X & \vspan2{O} \crlp{2,4-7} - & Formal & &\mspan4[c|] X & \crl -}}\pdfrestore} - -\hangindent=-7.5cm \hangafter=0 -You can use \^`\vspan` with non-integer parameter too if you feel that the -result looks better, for example \^`\vspan2.1{text}`. - -\hangindent=-7.5cm \hangafter=0 -The rule width of tables and implicit width of all `\vrule`s and `\hrule`s -can be set by the command \^`\rulewidth=<dimen>`. The default value given -by \TeX/ is 0.4\,pt. - -\hangindent=-7.5cm \hangafter=-2 -The `c`, `l`, `r` and `p` are default \"declaration letters" but you can define -more such letters by `\def\_tabdeclare<letter>{<left>##<right>}`. -More about it is in technical documentation in section~\ref[table.impl]. -See the definition of the \^`\_tabdeclarec` macro, for example. - -The `:` columns boundary declarator is described in section~\ref[table.bound]. -The tables with given width can be declared by `to<size>` or `pxto<size>`. -More about it is in section~\ref[table.w]. -Many tips about tables can be seen on the site -\url{http://petr.olsak.net/optex/optex-tricks.html}. - -\label[verbatim]\secc Verbatim -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -The display verbatim text have to be surrounded by the \^`\begtt` and -\^`\endtt` couple. -The in-line verbatim have to be tagged (before and after) -by a character which is declared by -\^`\verbchar``<char>`. For example \code{\\verbchar`} -declares the character \code{`} -for in-line verbatim markup. -And you can use \code{`\\relax`} for -verbatim `\relax` (for example). -\new -Another alternative of printing in-line -verbatim text is \~`\code{<text>}` (see below). - -If the numerical register \^`\ttline` is set to the non-negative value then -display verbatim will number the lines. The first line has the number -\^`\ttline+1` and when the verbatim ends then the \^`\ttline` value is equal to the -number of the last line printed. Next \^`\begtt...`\^`\endtt` environment will follow -the line numbering. \OpTeX/ sets \^`\ttline=-1` by default. - -The indentation of each line in display verbatim is controlled by -\^`\ttindent` register. This register is set to the `\parindent` by default. -Users can change the values of the `\parindent` and \^`\ttindent` independently. - -The \^`\begtt` command starts the internal group in which the catcodes are changed. -\new -Then the \^`\everytt` tokens register is run. It is empty by default and the user can -control fine behavior by it. For example, the catcodes can be re-declared here. If -you need to define an active character in the \^`\everytt`, use \~`\adef` as in the -following example: - -\begtt \adef@{\string\endtt} -\everytt={\adef!{?}\adef?{!}} -\begtt -Each occurrence of the exclamation mark will be changed to -the question mark and vice versa. Really? You can try it! -@ -\endtt -% -The \~`\adef` command sets its parameter as active {\it after\/} -the parameter of \^`\everytt` is read. So you don't have to worry about active -categories in this parameter. - -There is an alternative to \^`\everytt` named \^`\everyintt` which is used for -in-line verbatim surrounded by an \^`\verbchar` or processed by the \~`\code` -command. - -The \^`\everytt` is applied to all \^`\begtt...`\^`\endtt` environments (if it is not -declared in a group). There are tips for such global `\everytt` definitions here: - -\begtt \adef!{\char9251 } -\everytt={\typosize[9/11]} % setting font size for verbatim -\everytt={\ttline=0} % each listing will be numbered from one -\everytt={\visiblesp} % visualization!of!spaces -\endtt - -\new -If you want to apply a special code only for one \^`\begtt...`\^`\endtt` -environment then don't set any \^`\everytt` but put desired material at the -same line where \^`\begtt` is. For example: - -\begtt \adef@{\string\endtt} -\begtt \adef!{?}\adef?{!} -Each occurrence of ? will be changed to ! and vice versa. -@ -\endtt - -The in-line verbatim surrounded by a \^`\verbchar` doesn't work in -parameter of macros and macro definitions. (It works in titles declared by -\~`\chap`, \~`\sec` etc. and in \~`\fnote`s, because these macros are -specially defined in \OpTeX/). -\new -You can use more robust command \^`\code{<text>}` in problematic -situations, but you have to escape the following characters in the <text>: -`\`, `#`, `%`, braces (if the braces are unmatched in the <text>), -and space or `^` (if there are more than one subsequent spaces or `^` in -the <text>). Examples: - -\begtt -\code{\\text, \%\#} ... prints \text, %# -\code{@{..}*&^$ $} ... prints @{..}*&^$ $ without escaping, but you can - escape these characters too, if you want. -\code{a \ b} ... two spaces between a b, the second must be escaped -\code{xy\{z} ... xy{z ... unbalanced brace must be escaped -\code{^\^M} ... prints ^^M, the second ^ must be escaped -\endtt - -You can print verbatim listing from external files by the \^`\verbinput` command. -Examples: - -\begtt -\verbinput (12-42) program.c % listing from program.c, only lines 12-42 -\verbinput (-60) program.c % print from begin to the line 60 -\verbinput (61-) program.c % from line 61 to the end -\verbinput (-) program.c % whole file is printed -\verbinput (70+10) program.c % from line 70, only 10 lines printed -\verbinput (+10) program.c % from the last line read, print 10 lines -\verbinput (-5+7) program.c % from the last line read, skip 5, print 7 -\verbinput (+) program.c % from the last line read to the end -\endtt - -\new -You can insert additional commands for \^`\verbinput` before -the first opening bracket. They are processed in the local group. -For example, `\verbinput \hsize=20cm (-) program.c`. - -The \~`\ttline` influences the line numbering by the same way as in -\~`\begtt...`\~`\endtt` environment. If \~`\ttline=-1` then real line numbers are -printed (this is the default). If \code{\\ttline<-1} then no line -numbers are printed. - -The \^`\verbinput` can be controlled by \^`\everytt`, \^`\ttindent` just like -in \~`\begtt...`\~`\endtt`. - -The \~`\begtt`...\~`\endtt` pair or \~`\verbinput` can be used for listings of -codes. Automatic syntax highlighting is possible, for example -`\begtt` \^`\hisyntax{C}` activates colors for C programs. Or -`\verbinput` \^`\hisyntax{HTML} (-) file.html` can be used for HTML or XML codes. -\OpTeX/ implements C, Python, \TeX/, HTML and XML syntax highlighting. -More languages can be declared, see the section~\ref[hisyntax]. - -If the code is read by \^`\verbinput` and there are comment lines prefixed -by two characters then -you can set them by \~`\commentchars``<first><second>`. Such comments are -fully interpreted by \TeX/ (i.e. not verbatim). -Section~\ref[verb] (page \pgref[commentchars]) says more about this feature. - -\sec Autogenerated lists -%%%%%%%%%%%%%%%%%%%%%%%% - -\secc[toc] Table of contents -%%%%%%%%%%%%%%%%%%%%%% - -The \^`\maketoc` command prints the table of contents of all \~`\chap`, \~`\sec` -and \~`\secc` used in the document. These data are read from the external `*.ref` file, so -you have to run \TeX/ more than once (typically three times if the table of -contents is at the beginning of the document). - -Typically, we don't want to repeat the name of the section \"Table of contents" -in the table of contents again. The direct usage -of \~`\chap` or \~`\sec` isn't recommended here because the table of contents -is typically not referenced to itself. You can print the unnumbered and unreferenced -title of the section like this: - -\begtt -\nonum\notoc\sec Table of Contents -\endtt -If you need a customization of the design of the TOC, read the -section~\ref[maketoc]. - -\new -If you are using a special macro in section or chapter titles -and you need different behavior of such macro in other cases then use -\^`\regmacro{<case-toc>}{<case-mark>}{<case-outline>}`. -The parameters are applied locally in given cases. The \^`\regmacro` can be -used repeatedly: then its parameters are accumulated (for more macros). -If a parameter is empty then original definition is used in given case. -For example: - -\begtt -% default value of \mylogo macro used in text and in the titles: -\def\mylogo{\leavevmode\hbox{{\Red\it My}{\setfontsize{mag1.5}\rm Lo}Go}} -% another variants: -\regmacro {\def\mylogo{\hbox{\Red My\Black LoGo}}} % used in TOC - {\def\mylogo{\hbox{{\it My}\/LoGo}}} % used in running heads - {\def\mylogo{MyLoGo}} % used in PDF outlines -\endtt - -\secc Making the index -%%%%%%%%%%%%%%%%%%%%% - -The index can be included in the document by the \^`\makeindex` macro. No external -program is needed, the alphabetical sorting is done inside \TeX/ at macro -level. - -The \^`\ii` command (insert to index) declares the word separated by the space -as the index item. This declaration is represented as an invisible item on the -page connected to the next visible word. The page number of the page where -this item occurs is listed in the index entry. So you can type: - -\begtt -The \ii resistor resistor is a passive electrical component ... -\endtt - -You cannot double the word if you use the \^`\iid` instead of \^`\ii`: - -\begtt -The \iid resistor is a passive electrical component ... -or: -Now we'll deal with the \iid resistor . -\endtt - -Note that the dot or comma has to be separated by space when \^`\iid` is -used. This space (before dot or comma) is removed by the macro in -the current text. - -The multiple-words entries are commonly arranged in the index as follows: - -\medskip - -linear~dependency 11, 40--50 - ---- independency 12, 42--53 - ---- space 57, 76 - ---- subspace 58 - -\medskip - -To do this you have to declare the parts of the index entries by the `/` separator. -Example: - -\begtt -{\bf Definition.} -\ii linear/space,vector/space -{\em Linear space} (or {\em vector space}) is a nonempty set of... -\endtt - -The number of the parts of one index entry (separated by `/`) is unlimited. Note, that you can -spare your typing by the comma in the \~`\ii` parameter. The previous example -is equivalent to `\ii linear/space \ii vector/space`~. - -Maybe you need to propagate to the index the similar entry to the -linear/space in the form of space/linear. You can do this by the shorthand `,@` -at the end of the \~`\ii` parameter. Example: - -\begtt -\ii linear/space,vector/space,@ -is equivalent to: -\ii linear/space,vector/space \ii space/linear,space/vector -\endtt - -If you really need to insert the space into the index entry, write `~`. - -The \~`\ii` or \~`\iid` commands can be preceded by \^`\iitype` `<letter>`, then such -reference (or more references generated by one \~`\ii`) has the specified type. -The page numbers of such references should be formatted -specially in the index. \OpTeX/ implements only \^`\iitype` `b`, -\^`\iitype` `i` and \^`\iitype` `u`: -the page number in bold or in italics or underlined is printed -in the index when these types are used. The default index type is empty, which -prints page numbers in normal font. The \TeX/book index is a good example. - -The \^`\makeindex` creates the list of alphabetically sorted index entries -without the title of the section and without creating more columns. \OpTeX/ -provides other macros \^`\begmulti` and \^`\endmulti` for more columns: - -\begtt \catcode`\<=13 -\begmulti <number of columns> -<text> -\endmulti -\endtt -The columns will be balanced. The Index can be printed by the following -code: - -\begtt -\sec Index -\begmulti 3 \makeindex \endmulti -\endtt - -Only \"pure words" can be propagated to the index by the \~`\ii` command. It -means that there cannot be any macro, \TeX/ primitive, math selector, etc. -But there is another possibility to create such a complex index entry. Use -\"pure equivalent" in the \~`\ii` parameter and map this equivalent to a -real word that is printed in the index. Such mapping is done by -\^`\iis` command. Example: - -\begtt -The \ii chiquadrat $\chi$-quadrat method is ... -If the \ii relax `\relax` command is used then \TeX/ is relaxing. -... -\iis chiquadrat {$\chi$-quadrat} -\iis relax {\code{\\relax}} -\endtt -% -The \^`\iis` `<equivalent> {<text>}` creates one entry in the \"dictionary -of the exceptions". The sorting is done by the <equivalent> but the -<text> is printed in the index entry list. - -The sorting rules when \^`\makeindex` runs depends on the current language. -See section~\ref[lang] about languages selection. - -\secc Bib\TeX/ing -%%%%%%%%%%%%%%%% - -The command \^`\cite[<label>]` (or -\hbox{\^`\cite[<label-1>,<label-2>,...,<label-n>]`}) -creates the citation in the form [42] (or [15,~19,~26]). -If \^`\shortcitations` is declared at the beginning of the document then -continuous sequences of numbers are re-printed like this: -\hbox{[3--5,~7,~9--11]}. If -\^`\sortcitations` is declared then numbers generated by one \^`\cite` command -are sorted upward. - -If \^`\nonumcitations` is declared then the marks instead of numbers are generated -depending on the used bib-style. For example, the citations look like -[Now08] or [Nowak, 2008]. - -The \^`\rcite[<labels>]` creates the same list as \^`\cite[<labels>]` but without -the outer brackets. Example: `[\rcite[tbn], pg.~13]` creates [4,~pg.~13]. - -The \^`\ecite[<label>]{<text>}` prints the `<text>` only, but the entry labeled -<label> is decided as to be cited. If \~`\hyperlinks` is used then <text> -is linked to the references list. - -You can define alternative formating of \^`\cite` command. Example: - -\begtt \catcode`\<=13 -\def\cite[#1]{(\rcite[#1])} % \cite[<label>] creates (27) -\def\cite[#1]{$^{\rcite[#1]}$} % \cite[<label>] creates^{27} -\endtt - -The numbers printed by \^`\cite` correspond to the same numbers generated in -the list of references. There are two possibilities to generate this -references list: - -\begitems -* Manually using \~`\bib[<label>]` commands. -* By \~`\usebib/<type> (<style>) <bib-base>` command which reads `*.bib` - files directly. -\enditems - -\new -Note that another two possibilities documented in OPmac (using external -Bib\TeX/ program) isn't supported because Bib\TeX/ is an old program that does not -support Unicode. And Biber seems to be not compliant with Plain \TeX. - -\medskip\noindent -{\bf References created manually using \^`\bib[<label>]` command.} - -\begtt -\bib [tbn] P. Olšák. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 1997. -\bib [tst] P. Olšák. {\it Typografický systém \TeX.} - 269~s. Praha: CSTUG, 1995. -\endtt - -If you are using \~`\nonumcitations` then you need to declare the <marks> -used by \~`\cite` command. To do it you must use long form of the \^`\bib` -command in the format \^`\bib[<label>] = {<mark>}`. The spaces around -equal sign are mandatory. Example: - -\begtt -\bib [tbn] = {Olšák, 2001} - P. Olšák. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 2001. -\endtt - -\noindent -{\bf Direct reading of `.bib` files} is possible by \^`\usebib` macro. -This macro reads and uses macro package `librarian.tex` by Paul Isambert. -The usage is: - -\begtt \catcode`\<=13 -\usebib/c (<style>) <bib-base> % sorted by \cite-order (c=cite), -\usebib/s (<style>) <bib-base> % sorted by style (s=style). -% example: -\nocite[*] \usebib/s (simple) op-biblist % prints all from op-biblist.bib -\endtt - -The <bib-base> is one or more `*.bib` database source files (separated by -spaces and without extension) and the <style> is the part of the filename -`bib-<style>.opm` where the formatting of the references list is -defined. \OpTeX/ supports `simple` or `iso690` styles. The features of -the `iso690` style is documented in the section~\ref[isobib] in detail. -The \^`\usebib` command is more documented in section~\ref[usebib]. - -Not all records are printed from <bib-base> files: the command \^`\usebib` -selects only such bib-records which were used in \~`\cite` or \^`\nocite` -commands in your document. The \^`\nocite` behaves as \~`\cite` but prints -nothing. It tells only that the mentioned bib-record should be printed in the -reference list. If \^`\nocite[*]` is used then all records from <bib-base> -are printed. - -\sec Graphics -%%%%%%%%%%%%% - -\secc Colors -%%%%%%%%%%% - -\OpTeX/ provides a small number of color selectors: -{\Blue `\Blue`}, -{\Red `\Red`}, -{\Brown `\Brown`}, -{\Green `\Green`}, -{\Yellow `\Yellow`}, -{\Cyan `\Cyan`}, -{\Magenta `\Magenta`}, -{`\White`}, -{\Grey `\Grey`}, -{\LightGrey `\LightGrey`} and -`\Black`. User can define more -such selectors by setting four CMYK components -\new -or three RGB components. For example - -\begtt -\def \Orange {\setcmykcolor{0 0.5 1 0}} -\def \Purple {\setrgbcolor{1 0 1}} -\endtt - -\new -The command \^`\morecolors` reads more definitions of color selectors from -the \LaTeX/ file `x11nam.def`. -There are about 300 color names like -`\DeepPink`, `\Chocolate` etc. If there are numbered variants of the same -name, then the letters B, C, etc. are appended to the name in \OpTeX/. For example -`\Chocolate` is Chocolate1, `\ChocolateB` is Chocolate2 etc. - -\new -The color selectors work locally in groups by default but with limitations. See -the technical documentation, section~\ref[colors] for more information. - -The basic colors \^`\Blue`, \^`\Red`, \^`\Cyan`, \^`\Yellow` etc.\ are defined -with CMYK components using \^`\setcmykcolor`. -On the other hand, you can define a color with three -RGB components and \^`\morecolors` defines such RGB colors. -By default, the color model isn't converted but only stored to -PDF output for each used color. Thus, there may be a mix of color -models in the PDF output which is not a good idea. You can overcome this -problem by declaration \^`\onlyrgb` or \^`\onlycmyk`. Then only the selected color -model is used for PDF output and if a used color is declared by another color -model then it is converted. -The \^`\onlyrgb` creates colors more bright (usable for computer -presentations). On the other hand, CMYK makes colors more true\fnote -{Printed output is more equal to the monitor preview especially if you are -using ICC profile for your printer.} -for printing. - -\new -You can define your color by a linear combination of previously defined colors using -\^`\colordef`. For example: - -\begtt -\colordef \myCyan {.3\Green + .5\Blue} % 30 % green, 50 % blue, 20% white -\colordef \DarkBlue {\Blue + .4\Black} % Blue mixed with 40 % of black -\colordef \myGreen{\Cyan+\Yellow} % exact the same as \Green -\colordef \MyColor {.3\Orange+.5\Green+.2\Yellow} -\endtt -% -The linear combination is done in CMYK subtractive color space by default -(RGB colors used in \^`\colordef` argument are converted first). -If the resulting component is greater than 1 then it is truncated to 1. -If a convex linear combination (as in the last example above) is used then it -emulates color behavior on a painter's palette. -You can use \^`\rgbcolordef` instead of \^`\colordef` if you want to mix colors -in the additive RGB color space. - -\def\coloron#1#2#3{% - \setbox0=\hbox{{#2#3}}\leavevmode - \localcolor \rlap{#1\strut \vrule width\wd0}\box0 -} -The following example defines the macro for the -\coloron\Yellow\Brown{colored text on the colored background}. Usage: -`\coloron<background><foreground>{<text>}` - -The `\coloron` can be defined as follows: - -\begtt -\def\coloron#1#2#3{% - \setbox0=\hbox{{#2#3}}% - \leavevmode \rlap{#1\strut \vrule width\wd0}\box0 -} -\coloron\Yellow\Brown{The brown text on the yellow background} -\endtt - -\secc Images -%%%%%%%%%%% - -The \^`\inspic` `{<filename>.<extension>}` or -\^`\inspic` `<filename>.<extension><space>` -inserts the picture stored in -the graphics file with the name `<filename>.<extension>` to the document. -You can set the picture width by \^`\picw=<dimen>` -before \^`\inspic` command which declares the width of the picture. -The image files can be in the PNG, JPG, JBIG2 or PDF format. - -The \^`\picwidth` is an equivalent register to `\picw`. Moreover, there is an -\^`\picheight` register which denotes the height of the picture. If both -registers are set then the picture will be (probably) deformed. - -The image files are searched in \^`\picdir`. This token list is empty -by default, this means that the image files are searched in the -current directory. Example: \^`\picdir={img/}` supposes that image files are -in `img` subdirectory. Note: the directory name must end by `/` in -the \^`\picdir` declaration. - -Inkscape\fnote -{A powerful and free Wysiwyg editor for creating vector graphics.} -is able to save a picture to PDF and labels of the picture to another -file\fnote -{Chose \"Omit text in PDF and create LaTeX file" option.}. -This second file should be read by \TeX/to print labels -in the same font as document font. \OpTeX/ supports this feature by -\^`\inkinspic` `{<filename>.pdf}` command. It reads and displays -both: PDF image and labels generated by Inkscape. - -If you want to create vector graphics (diagrams, schema, geometry -skicing) then you can do it by Wysiwyg graphics editor (Inkscape, Geogebra for -example), export the result to PDF and include it by \^`\inspic`. -If you want to \"program" such pictures then Tikz package is recommended. -It works in Plain \TeX/ and \OpTeX. - -\secc PDF transformations -%%%%%%%%%%%%%%%%%%%%%%%% - -All typesetting elements are transformed by linear -transformation given by the current transformation matrix. The -`\pdfsetmatrix` `{<a> <b> <c> <d>}` command makes the internal multiplication -with the current matrix so linear transformations can be composed. -One linear transformation given by the `\pdfsetmatrix` above transforms -the vector $[0,1]$ to [<a>,\,<b>] and $[1,0]$ to [<c>,\,<d>]. -The stack-oriented commands `\pdfsave` and `\pdfrestore` gives a possibility of -storing and restoring the current transformation matrix and the position of the current point. -This position has to be the same from \TeX{}'s point of -view as from the transformation point of view when `\pdfrestore` is processed. -Due to this fact the `\pdfsave\rlap{<transformed text>}\pdfrestore` -or something similar is recommended. - -\OpTeX/ provides two special transformation macros -\^`\pdfscale` and \^`\pdfrotate`: - -\begtt \catcode`\<=13 -\pdfscale{<horizontal-factor>}{<vertical-factor>} -\pdfrotate{<angle-in-degrees>} -\endtt - -These macros simply call the properly `\pdfsetmatrix` command. - -It is known that the composition of transformations is not commutative. It -means that the order is important. You have to read the transformation -matrices from right to left. Example: - -\begtt -First: \pdfsave \pdfrotate{30}\pdfscale{-2}{2}\rlap{text1}\pdfrestore - % text1 is scaled two times and it is reflected about vertical axis - % and next it is rotated by 30 degrees left. -second: \pdfsave \pdfscale{-2}{2}\pdfrotate{30}\rlap{text2}\pdfrestore - % text2 is rotated by 30 degrees left then it is scaled two times - % and reflected about vertical axis. -third: \pdfsave \pdfrotate{-15.3}\pdfsetmatrix{2 0 1.5 2}\rlap{text3}% - \pdfrestore % first slanted, then rotated by 15.3 degrees right -\endtt -% -\par\nobreak\bigskip\smallskip -This gives the following result. -First: \pdfsave \pdfrotate{30}\pdfscale{-2}{2}\rlap{text1}\pdfrestore -second: \pdfsave \pdfscale{-2}{2}\pdfrotate{30}\rlap{text2}\pdfrestore -third: \pdfsave \pdfrotate{-15.3}\pdfsetmatrix{2 0 1.5 2}\rlap{text3}\pdfrestore -\par\nobreak\bigskip\penalty0%\bigskip - -You can see that \TeX/ knows nothing about dimensions of transformed material, -it treats it as with a zero dimension object. -\new -The \^`\transformbox{<transformation>}{<text>}` -macro solves the problem. This macro puts the transformed -material into a box with relevant dimensions. The <transfromation> parameter -includes one or more transformation commands `\pdfsetmatrix`, `\pdfscale`, -`\pdfrotate` with their parameters. The <text> is transformed text. - -Example: \~`\frame{\transformbox{\pdfscale{1}{1.5}\pdfrotate{-10}}{moj}}` -creates \frame{\transformbox{\pdfscale{1}{1.5}\pdfrotate{-10}}{moj}}. - -The \^`\rotbox{<deg>}{<text>}` is shortcut for -\^`\transformbox{\pdfrotate{<deg>}}{<text>}`. - -\secc Ovals, circles -%%%%%%%%%%%%%%%%%%%% - -\new -The \^`\inoval{<text>}` creates a box like this: \inoval{text}. -Multiline text can be put in an oval by the command \^`\inoval{\vbox{<text>}}`. -Local settings can be set by -\^`\inoval[<settings>]{<text>}` or you can re-declare global settings by -\^`\ovalparams={<settings>}`. The default settings are: - -\begtt -\ovalparams={\roundness=2pt % diameter of circles in the corners - \fcolor=\Yellow % color used for filling oval - \lcolor=\Red % line color used in the border - \lwidth=0.5bp % line width in the border - \shadow=N % use a shadow effect - \overlapmargins=N % ignore margins by surrounding text - \hhkern=0pt \vvkern=0pt} % left-righ margin, top-bottom margin -\endtt -The total distance from text to oval boundary is `\hhkern+\roundness` at the left and right -sides and -`\vvkern+\roundness` at the top and bottom sides of the text. - -If you need to set a parameters for the <text> (color, size, font etc.), -put such setting right in front of the <text>: -\^`\inoval{<text settings><text>}`. - -\new -The \^`\incircle[\ratio=1.8]{<text>}` creates a box like this \incircle[\ratio=1.8]{text}. -The \^`\ratio` parameter means width/height. The usage is analogical like for oval. -The default parameters are - -\begtt -\circleparams={\ratio=1 \fcolor=\Yellow \lcolor=\Red \lwidth=0.5bp - \shadow=N \ignoremargins=N \hhkern=2pt \vvkern=2pt} -\endtt - -\new -The macros \^`\clipinoval` `<x> <y> <width> <height> {<text>}` -and \^`\clipincircle` (with the same parameters) -print the `<text>` when a clipping path (oval or cirle with given -`<with>` and `<height>` shifted its center by `<x>` to right and by `<y>` to up) -is used. -The `\roundness=5mm` is default for \^`\clipinoval` and user can change it. -Example: - -\begtt -\clipincircle 3cm 3.5cm 6cm 7cm {\picw=6cm \inspic{myphoto.jpg}} -\endtt - -\secc Putting images and texts wherever - -\new -The \^`\puttext` `<x> <y> {<text>}` puts the `<text>` shifted by `<x>` right and by -`<y>` up from the current point of typesetting and does not change the -position of the current point. Assume a coordinate system with origin in the -current point. Then \^`\puttext` `<x> <y> {<text>}` puts the text at the -coordinates `<x>`, `<y>`. More exactly the left edge of its baseline is at that -position. - -\new -The \^`\putpic` `<x> <y> <width> <height> {<image-file>}` puts an image -given by `<image-file>` (including extension) of given -`<width>` and `<height>` at given position (its left-bottom corner). -You can write \^`\nospec` instead `<width>` or `<height>` if this parameter -is not specified. - -\sec Others -%%%%%%%%%%% - -\secc[lang] Using more languages -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\OpTeX/ prepares hyphenation patterns for all languages if such patterns are -available in your \TeX/ system. -\new -Only USenglish patterns (original from Plain \TeX/) are preloaded. -Hyphenation patterns of all other languages are loaded on demand when you first use -the `\<iso-code>lang` command in your document. -For example \^`\delang` for German, \^`\cslang` for -Czech, \^`\pllang` for Polish. The <iso-code> is a shortcut -of the language (mostly from ISO 639-1). -You can list all available languages by \^`\langlist` -macro. This macro prints now: - -\medskip -{\typosize[8.5/11.5]\emergencystretch=4em \hbadness=4000 -\noindent \langlist -\par} -\medskip - -\new -For compatibility with e-plain macros, there is the command -\^`\uselanguage{<language>}`. The parameter <language> is long-form of -language name, i.e.\ \^`\uselanguage{Czech}` works the same as \^`\cslang`. -The \^`\uselanguage` parameter is case insensitive. - -For compatibility with \csplain/, there are macros \^`\ehyph`, \^`\chyph`, -\^`\shyph` which are equivalent to \^`\enlang`, \^`\cslang` and \^`\sklang`. - -You can switch between language patterns by `\<iso-code>lang` commands mentioned -above. Default is \^`\enlang`. - -\OpTeX/ generates three phrases used for captions and titles in technical -articles or books: \"Chapter", \"Table" and \"Figure". These phrases need to be known -in used language and it depends on the previously used language selectors -`\<iso-code>lang`. \OpTeX/ declares these words only for few languages: -\new -Czech, German, Spanish, French, Greek, Italian, Polish, Russian, Slovak and -English, If you need to use these words in other languages or you want to -auto-generate more words in your macros, then you can declare it by -\~`\sdef` or \^`\_langw` commands as shown in section~\ref[langphrases]. - -The \~`\makeindex` command needs to know the sorting rules used in your language. -\OpTeX/ defines only a few language rules for sorting: Czech, -Slovak and English. How to declare sorting rules for more languages are -described in the section~\ref[makeindex]. - -If you declare `\<iso-code>quotes`, then the control sequences `\"` and `\'` -should be used like this: `\"<quoted text>"` or `\'<quoted text>'` -(note that the terminating character is the same but it isn't escaped). -This prints language-dependent normal or alternative quotes around -<quoted text>. The language is specified by <iso-code>. \OpTeX/ declares -quotes only for Czech, German, Spanish, French, Greek, Italian, Polish, -Russian, Slovak and English (\^`\csquotes`, \^`\dequotes`, \dots, \^`\enquotes`). -You can simply define your own quotes as shown in section~\ref[langphrases]. -The `\"` is used for quotes visually more similar to the `"` character which -can be primary quotes or secondary quotes depending on the language rules. -Maybe you want to alternate the meaning of these two types of quotes. Use -`\<isocode>quotes\altquotes` in such case. - -\secc[styles] Pre-defined styles -%%%%%%%%%%%%%%%%%%%%%%% - -\OpTeX/ defines three style-declaration macros \~`\report`, \~`\letter` and -\~`\slides`. You can use them at the beginning of your document if you are -preparing these types of documents and you don't need to create your own -macros. - -The \^`\report` declaration is intended to create reports. It -sets default font size to 11\,pt and `\parindent` (paragraph indentation) to 1.2\,em. -The `\tit` macro uses smaller font because we assume that \"chapter level" -will be not used in reports. The first page has no page number, but the next pages -are numbered (from number~2). Footnotes are numbered from one in the whole -document. The macro `\author <authors><end-line>` can be used when -\^`\report` is declared. It prints `<authors>` in italics at the center of the -line. You can separate authors by `\nl` to more lines. - -The \^`\letter` declaration is intended to create letters. -See the files `op-letter-*.tex` for examples. -The \^`\letter` style sets default -font size to 11\,pt and `\parindent` to 0\,pt. It sets half-line space -between paragraphs. The page numbers are not printed. The \^`\subject` macro -can be used, it prints the word \"Subject:" or \"Věc" (or something else -depending on current language) in bold. Moreover, the \^`\address` macro -can be used when \^`\letter` is declared. The usage of the \^`\address` macro -looks like: - -\begtt \catcode`\<=13 -\address - <first line of address> - <second line of address> - <etc.> - <empty line> -\endtt - -It means that you need not use any special mark at the end of lines: the ends -of lines in the source file are the same as in printed output. The -\^`\address` macro creates `\vtop` with address lines. The width of such -`\vtop` is equal to the widest line used in it. So, you can use -`\hfill\address...` to put the address box to the right side of the -document. Or you can use `<prefixed text>\address...` to put -`<prefixed text>` before the first line of the address. - -The \^`\slides` style creates a simple presentation slides. See an example -in the file `op-slides.tex`. Run `optex op-slides.tex` and see the documentation of -\^`\slides` style in the file `op-slides.pdf`. - -Analogical declaration macro `\book` is not prepared. Each book needs -individual typographical care. You need to create specific macros for -design. - -\secc Loading other macro packages -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -You can load more macro packages by `\input{<file-name>}` or by -\^`\load[<file-names>]`. The first case (`\input`) is \TeX/ primitive command, it can be -used in the alternative old syntax `\input <filename><space>` too. The -second case (\^`\load`) allows specifying a comma-separated list of included files. -Moreover, it loads each macro file only once, it sets -temporarily standard category codes during loading and it tries to -load `<filename>.opm` or `<filename>.tex` or `<filename>`, the first occurence -wins. Example: -\begtt -\load [qrcode, tikz] -\endtt -% -does `\input qrcode.opm` \,and `\input tikz.tex` \,and it saves -local information about the fact that these file names -`qrcode` and `tikz` were already used, i.\,e. next \^`\load` will skip them. - -It is strongly recommended to use the `\load` macro for loading external -macros if you need them. On the other hand, if your source document is structured -to more files (with individual chapters or sections), use simply the `\input` primitive. - -The macro packages intended to \OpTeX/ have the name `*.opm`. -The following packages are distributed as part of \OpTeX/: -\begitems -* `qrcode.opm` enables to create QR codes. -* `vlna.opm` enables to protect of one-letter prepositions and more things automatically. -* `emoji.opm` defines `\emoji{<name>}` command for colored emoticons. -* `plain-at.opm` defines the old names from plain \TeX/. -\enditems -See the directory `optex/pkg/` and these files for more information about -them. - -\secc Lorem ipsum dolor sit -%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\new -A designer needs to concentrate on the design of the output and maybe he/she -needs material for testing macros. There is the possibility to generate a -neutral text for such experiments. Use \^`\lorem[<number>]` or -\^`\lorem[<from>-<to>]`. It prints a paragraph (or paragraphs) with neutral -text. The numbers <number> or <from>, <to> must be in the range 1 to 150 -because there are 150 paragraphs with neutral text prepared for you. -The \^`\lipsum` macro is equivalent to \^`\lorem`. Example: \^`\lipsum[1-150]` -prints all prepared paragraphs. - -\secc Logos -%%%%%%%%%% - -\new -The control sequences for typical logos can be terminated by optional `/` -which is ignored when printing. This makes logos more legible in the source file: - -\begtt -We are using \TeX/ because it is cool. \OpTeX/ is better than \LaTeX. -\endtt - -\secc The last page -%%%%%%%%%%%%%%%%%%% - -The number of the last page (it may be different from the number of pages) is -expanded by \^`\lastpage` macro. It expands to `?` in first \TeX/ run and to -the last page in next \TeX/ runs. - -There is an example for footlines in the format \"current page / last page": - -\begtt -\footline={\hss \fixedrm \folio/\lastpage \hss} -\endtt - -\new -The \^`\lastpage` expands to the last \^`\folio` which is a decimal -number or Roman numeral (when \^`\pageno` is negative). If you need to know -the total pages used in the document, use \^`\totalpages` macro. It expands to -zero (in first \TeX/ run) or to the number of all pages in the document -(in next \TeX/ runs). - -\secc Use \OpTeX/ -%%%%%%%%%%%%%%%%% - -\new -The command \^`\useOpTeX` (or \^`\useoptex`) does nothing in \OpTeX/ but it causes -an error (undefined control sequence) when another format is used. You can -put it as the first command in your document: - -\begtt -\useOpTeX % we are using OpTeX format, no LaTeX :) -\endtt - -\sec Summary -%%%%%%%%%%%% - -\def\ttref#1'{\ea\~\ea`\csname#1\endcsname`} - -\begtt \typosize[9/11]\adef&{\kern.25em}\adef~#1'{\ea\~\ea`\csname#1\endcsname`} -~tit' Title (terminated by end of line) -~chap' Chapter Title (terminated by end of line) -~sec' Section Title (terminated by end of line) -~secc' Subsection Title (terminated by end of line) - -~maketoc' % table of contents generation -~ii' item1,item2 % insertion the items to the index -~makeindex' % the index is generated - -~label' [labname] % link target location -~ref' [labname] % link to the chapter, section, subsection, equation -~pgref' [labname] % link to the page of the chapter, section, ... - -~caption'/t % a numbered table caption -~caption'/f % a numbered caption for the picture -~eqmark' % a numbered equation - -~begitems' % start a list of the items -~enditems' % end of list of the items -~begblock' % start a block of text -~endblock' % end of block of text -~begtt' % start a verbatim text -~endtt' % end verbatim text -~verbchar' X % initialization character X for in-text verbatim -~code' % another alternative for in-text verbatim -~verbinput' % verbatim extract from the external file -~begmulti' num % start multicolumn text (num columns) -~endmulti' % end multicolumn text - -~cite' [labnames] % refers to the item in the lits of references -~rcite' [labnames] % similar to \cite but [] are not printed. -~sortcitations' ~shortcitations' ~nonumcitations' % cite format -~bib' [labname] % an item in the list of references -~usebib'/? (style) bib-base % direct using of .bib file, ? in {s,c} - -~load' [filenames] % loadaing macro files -~fontfam' [FamilyName] % selection of font family -~typosize' [font-size/baselineskip] % size setting of typesetting -~typoscale' [factor-font/factor-baselineskip] % size scaling -~thefontsize' [size] ~thefontscale' [factor] % current font size - -~inspic' file.ext % insert a picture, extensions: jpg, png, pdf -~table' {rule}{data} % macro for the tables like in LaTeX - -~fnote' {text} % footnote (local numbering on each page) -~mnote' {text} % note in the margin (left or right by page number) - -~hyperlinks' {color-in}{color-out} % PDF links activate as clickable -~outlines' {level} % PDF will have a table of contents in the left tab - -~magscale'[factor] % resize typesetting, line/page breaking unchanged -~margins'/pg format (left, right, top, bottom)unit % margins setting - -~report' ~letter' ~slides' % style declaration macros -\endtt - -\sec API for macro writers -%%%%%%%%%%%%%%%%%%%%%%%%%% - -All \TeX/ primitives and almost all \OpTeX/ macros are accesible by two -names: `\foo` (public or user name space) and `\_foo` (private name space). -For example `\hbox` and `\_hbox` means the same \TeX/ primitive. More about -it is documented in section~\ref[prefixed]. - -If this manual refers `\foo` then `\_foo` equivalent exists too. For example, -we mention the `\addto` macro below. The `\_addto` equivalent exists too, but it -is not explicitly mentioned here. If we refer only `\_foo` then its public -equivalent does not exist. For example, we mention the `\_codedecl` macro below, so -this macro is not available as `\codedecl`. - -If you are writing a document or macros specific for the document, then use -simply user namespace (`\foo`). If you are writing more general macros, -then use private namespace (`\_foo`), but you should declare your own namespace -by \~`\_namespace` macro and you have to follow the naming discipline described in -section~\ref[pkg-namespace]. - -The alphabetically sorted list of macros typically usable for macro writers follows. -More information about such macros can be found in the technical documentation. -You can use hyperlinks here in order to go to the appropriate place of the technical -documentation. - -\medskip \noindent -\^`\addto`` \macro{<text>}` adds <text> at the end of `\macro` body.\nl -\^`\adef` `<char>{<body>}` defines <char> active character with meaning <body>.\nl -\^`\afterfi` `{<text>}<ignored>\fi` expands to `\fi<text>`.\nl -\^`\bp`` {<dimen expression>}` expands \TeX/ dimension to decimal number in `bp` without unit.\nl -\~`\_codedecl`` <sequence> {<info>}` is used at beginning of macro files.\nl -\~`\colordef`` \macro {<mix of colors>}` declares `\macro` as color switch.\nl -\^`\cs` `{<string>}` expands `\<string>`.\nl -\~`\_doc` `...` \~`\_cod` encloses documenation text in the macro code.\nl -\^`\eoldef`` \macro #1{<body>}` defines `\macro` with parameter separated to end of line.\nl -\~`\_endcode` closes the part of macro code in macro files.\nl -\~`\_endnamespace` closes name space declared by \~`\_namespace`.\nl -\~`\eqbox`` [<label>]{<text>}` creates `\hbox{<text>}` with common width across whole document.\nl -\^`\expr`` {<expression>}` expands to result of the <expression> with decimal numbers.\nl -\~`\fontdef`` \f {<font spec.>}` declares `\f` as font switch.\nl -\~`\fontlet` `\fa=\fb <sizespec.>` declares `\fa` as the same font switch - like `\fb` at given <sizespec.>.\nl -\^`\foreach` `<list>\do <parameters>{<what>}` is exapandable loop over <list>.\nl -\^`\foreachdef` `\macro <parameters>{<what>}` declares expandable `\macro` as loop over <list>.\nl -\^`\fornum` `<from>..<to>\do {<what>}` is expanadable loop with numeric variable.\nl -\^`\incr` `<counter>` increases and \^`\decr` `<counter>` decreases `<counter>` by one globally.\nl -\^`\ignoreit` `<one>`, \^`\ignoresecond` `<one><two>` ignores given parameter.\nl -`\expandafter` \^`\ignorept` `\the<dimen>` expands to decimal number <dimen> without `pt`.\nl -\~`\isempty`, \~`\istoksempty`, \~`\isequal`, \~`\ismacro`, \~`\isdefined`, \~`\isinlist` -\~`\isfile`, \~`\isfont` do various tests. Example: \~`\isinlist\list{<text>}\iftrue` does - `\iftrue` if <text> is in `\list`.\nl -\^`\isnextchar`` <char>{<text1>}{<text2>}` performs <text1> if next - character is <char>, else <text2>.\nl -\~`\kv` `{<key>}` expands to value when key-value parameters are used.\nl -\^`\loop` `...` \^`\repeat` is classical Plain \TeX/ loop.\nl -\^`\mathstyles`` {<math list>}` enables to create macros dependent on current math style.\nl -\~`\_namespace`` {<pkg>}` declares name space used by package writers.\nl -\^`\newcount`, \^`\newdimen` etc. are classical Plain \TeX/ allocators.\nl -\^`\newif` `\iffoo` declares boolean `\iffoo` as in Plain \TeX/.\nl -\^`\_newifi` `\_iffoo` declares boolean `\_iffoo`.\nl -\^`\opinput`` {<filename>}` reads file like `\input` but with standard catcodes.\nl -\^`\optdef`` \macro [<opt-default>] <parameters>{<body>}` defines `\macro` with [opt.parameter].\nl -\^`\opwarning` `{<text>}` prints <text> to the terminal and .log file as warning.\nl -\~`\private`` <sequence> <sequence> ... ;` declares <sequence>s for private name space.\nl -\~`\public`` <sequence> <sequence> ... ;` declares <sequence>s for public name space.\nl -\~`\readkv` `\macro` reads parameters from `\macro` in key-value format.\nl -\^`\replstring`` \macro{<stringA>}{<stringB>}` replaces all <stringA> to <stringB> in `\macro`.\nl -\^`\sdef` `{<string>}<parameters>{<body>}` behaves like `\def\<string><parameters>{<body>}`.\nl -\^`\setctable` and \^`\restorectable` manipulate with stack of catcode tables.\nl -\^`\slet` `{<stringA>}{<stringB>}` behaves like `\let\<stringA>=\<stringB>`\nl -\^`\sxdef` `{<string>}<parameters>{<body>}` behaves like `\xdef\<string><parameters>{<body>}`.\nl -\^`\trycs`` {<string>}{<text>}` expands `\<string>` if it is defined else expands <text>.\nl -\^`\useit` `<one>`, \^`\usesecond` `<one><two>` uses given parameter.\nl -\^`\wlog`` {<text>}` writes <text> to .log file.\nl -\^`\wterm`` {<text>}` writes <text> to the terminal and .log file.\nl -\^`\xargs`` <what> <token> <token> ... ;` repeats <what><token> for each <token>.\nl -\unpenalty\unskip - -\sec Compatibility with Plain \TeX/ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -All macros of Plain \TeX/ are re-written in \OpTeX/. Common macros should -work in the same sense as in original Plain \TeX. Internal control sequences -like `\p@` or `\f@@t` are removed and mostly replaced by control sequences -prefixed by `_` (like `\_this`). If you need to use the basic set of old Plain -\TeX/ control sequences like `\p@` (for example you are reading an old macro file), -use `\load[plain-at]`. - -All primitives and common macros have two -control sequences with the same meaning: in prefixed and unprefixed form. -For example `\hbox` is equal to `\_hbox`. -Internal macros of \OpTeX/ have and use only prefixed form. User should use -unprefixed forms, but prefixed forms are accessible too because the `_` is -set as a letter category code globally (in macro files and users document too). User -should re-define unprefixed forms of control sequences without worries that -something internal will be broken (only the sequence `\par` cannot be -re-defined without change of internal \TeX/ behavior because it is -hard-coded in \TeX/, unfortunately). - -\new -The Latin Modern 8bit fonts instead Computer Modern 7bit fonts are -preloaded in the format, but only a few ones. The full family set is ready to -use after the command \~`\fontfam[LMfonts]` which reads the fonts in OTF -format. - -\new -Plain \TeX/ defines `\newcount`, `\bye` etc. as `\outer` macros. \OpTeX/ -doesn't set any macro as `\outer`. Macros like `\TeX`, `\rm` are defined as -`\protected`. - -\new -The text accents macros `\"`, `\'`, `\v`, `\u`, `\=`, `\^`, `\.`, `\H`, -`\~`, \code{\\`}, `\t` are undefined\fnote -{The math accents macros like `\acute`, `\bar`, `\dot`, `\hat` still work.} -in \OpTeX/. Use real -letters like á, ř, ž in your source document instead of these old accents macros. -If you really want to use them, you can initialize them by the \^`\oldaccents` -command. But we don't recommend it. - -\new -The default paper size is not set as the letter with 1\,in margins but as A4 with -2.5\,cm margins. You can change it, for example by -\^`\margins/1 letter (1,1,1,1)in`. This example sets the classical Plain \TeX/ -page layout. - -\new -The origin for the typographical area is not at the top left 1\,in 1\,in coordinates -but at the top left paper corner exactly. For example, `\hoffset` includes directly left -margin. - -The tabbing macros `\settabs`\iindex{settabs} and `\+` (from Plain \TeX/) -are not defined in \OpTeX/ because they are obsolete. But you can use the -\ulink[http://petr.olsak.net/optex/optex-tricks.html\#tabs]{\OpTeX/ trick 0021} -if you really need such feature. - -The `\sec` macro is reserved for sections but original Plain \TeX/ declares this -control sequence for math secans. - -\enddocument - - -\sec Dependencies -%%%%%%%%%%%%%%%%% - -When `optex.fmt` is created then the following must be installed - -\begitems -* The `\luatex` program. -* Latin moder font metrics - `ec-lmr10.tfm`, `ec-lmbx10.tfm`, `ec-lmri10.tfm`, - `ec-lmbxi10.tfm`, `ec-lmtt10.tfm` (for basic text font initializing). -* Computer rmodern font metrics - `cmr10.tfm`, `cmmi10.tfm`, `cmsy10.tfm`, `cmex10.tfm` (for basic math - initializing). If there are more Computer Modern fonts then they are read - too. -* The file `hyphen.tex` form plain \TeX. -\enditems - -When `\fontfam` is used then the ability of Unicode fonts reading -is initialized using Lua scripts: `ltluatex.lua` (from \LaTeX/ package), -`luaotfload-main.lua` and more 20 similar `.lua` files (from `luaotfload` -package). - -When a font family is needed using `\fontfam` then such font family must be -installed in the OTF format otherwise, the `\fontfam` command is ignored -(only warning about no-existent font family is printed). - -When `\cslang`, `\delang` etc. commands are used in the document -then the hyphenation patterns of relevant languages must be installed. -Moreover the Lua script `luatex-hyphen.lua` (from `hyph-utf8` package) -and data file `language-dat.lua` (from `hyphen-base` package) -must be installed. - -When `\usebib` command is used then `librarian.tex` file -(from the `librarian` macro package) must be installed. - -When `\morecolors` command is used then `x11nam.def` file -(from the `xcolor` package) must be installed. - -When `\lorem` command is used then `lipsum.ltd.tex` file -(from the `lipsum` package) must be installed. - diff --git a/Master/texmf-dist/doc/optex/README b/Master/texmf-dist/doc/optex/README new file mode 100644 index 00000000000..b8f925e47c1 --- /dev/null +++ b/Master/texmf-dist/doc/optex/README @@ -0,0 +1,120 @@ +OpTeX: the LuaTeX format based on Plain TeX and OPmac + +Author: Petr Olsak, <petr@olsak.net> + +This software is in public domain. + +See http://petr.olsak.net/optex + +Files: + +base/ ... basic set of macro files used when optex.fmt is generated + and more basic macros loaded on demand during document processing. +demo/ ... examples: short document: op-demo.tex, short letter: op-letter.tex, + presentation slides: op-slides.tex. +pkg/ ... external macros. Maybe, they can be created by other authors if + the macro file conforms to the rules given in the section 2.2.5 + in the OpTeX documentation. +doc/ ... PDF version of the OpTeX documentation and sources. + +History: + +<1.01> Mar. 2021 + Minor code fixes (thanks to reports from users). + LibreCaslon font file added. + two new callbacks from new LuaTeX 1.13 added to optex.lua + active * (in lists) works as normal in math mode. + f-heros(\slides): additional font XITSMath loaded (to the base FiraMath font). + \_xhsize seting added to \margins. +<1.00> Feb. 2021 + The OMLS (OpTeX Markup Language Standard) was developed. It helps to create + convertors from/to OpTeX documents and similar applications. + \pdfunidef re-imeplemted. + \thisoutline introduced. + \verbchar introduced instead \activettchar. + Bugs fixing. +<0.19> Jan. 2021 + emoji support as pkg/emoji.opm. + non-braakable places generated by luavlna, suported as pkg/vlna.opm. + \begblock...\endblock introduced. + comment character allowed after \begtt. + more robust macros: \replstring, \table. + complete revision of documentation, spelling corrections. + Several bugs fixed. +<0.18> Dec. 2020 + Font support for next 9 families added. + Font selection system improved. + Documentation (especially about font selection system) corrected. + Macros supporting key=value included to the format. + \foreach macro improved. + Concept of multilang in bib rewritten. + \opwarning format changed (line numbers are printed too). + Several bugs fixed. +<0.17> Nov. 2020 + optex.lua introduced (instead external ltluatex.lua) + hyph.patterns are loaded directly by \patterns, not using lua code + \commentchars introduced (comments which are able to interrupt verbatim mode) +<0.16> Oct. 2020 + callback.register_x introduced, namespaces for packages corrected + kerkis and EBGaramond fontfiles added + little corrections + optex-math manual: Index added +<0.15> Jun. 2020 + Release for Overleaf - TL2020. + More vertical space above in \chap and \secc. +<0.14> Jun. 2020 + Typeseting Math with OpTeX: new document added. + Math macros corrected. + In-line verbatim in section titles allowed. + \eqbox implemented. + "\mnote up", "\displaylines to" (new features implemented) +<0.13> May 2020 + \table have more features: \tabskip, \table to, \table pxto, \vspan + The \eqalign reimplemented to be more flexible. + The boundary character ":" introduced in the \table. + \| undefined in 8bit math: bug fixed. + \isnextchar: \let\tmp=#1 -> \let\tmp= #1 +<0.12> May 2020 + The external macro qrcode.opm introduced + New directory structure: base/, demo/, pkg/, doc/ introduced. + \load macro introduced + \newif: bug fixed, other bug fixed. +<0.11> Apr. 2020 + \phi, \varpi in Unicode: bug fixed + \mathstyles introduced. +<0.10> Apr. 2020 + Technical documentation added + \_famdecl instedad \_fontdecl in font family files (incompatible change). +<0.09> Syntax highlighting implemented. +<0.08> \numberedpar implmented. \emergencystretch=20pt added as default. + \inoval, \incircle, \clipinoval, \clipincircle imlemented. + \puttext, \putpic x,y instead -y,x (incompatible change!) + footnotes have separated color stack now. + \fnotelinks implemented. + Lists by \begitems...\enditems improved (\novspaces \_vspacehalf, \ilevel). +<0.07> demos: op-letter.tex and op-slides.tex added. + \inkinspic, \transformbox, \slides added. + documentation improved and updated. +<0.06> tables re-implemented, opmac-rest removed. + footnotes, marginal notes reimplemented. + sections.opm, graphics.opm, colors.opm, languages re-implemented + Cite-bib re-implemented. + Index, sorting re-implemented. +<0.05> \boldmath reimplemented + \fontcolor, \letterspacing implemented + font catalogue improved +<0.04> references.opl, hyperlinks.opl re-implemented. + \fontfam, f-* rewritten: no usage of boundary "..." in \_fontnamegen + \fnote{...} corrected: (parameter is not really parameter) + verbatim.opl re-implemented + doc added + file-ref.opl implemented (new \_Xrefversion{3}) + bugfixing +<0.03> optex-doc optex.1 included, + verbatim.opm re-implmented, + math-unicode implemented, + usebib.opm + bib-style.opm included + \catcodetable stack implemented + bugfixing of macros. + catcodes.opl: removed, one can use \catcodetable, ... primitives, + pdfuni-string: lua code for lua5.3 fixed. +<0.02> Released. diff --git a/Master/texmf-dist/doc/optex/omls.tex b/Master/texmf-dist/doc/optex/omls.tex new file mode 100644 index 00000000000..bcc5749a512 --- /dev/null +++ b/Master/texmf-dist/doc/optex/omls.tex @@ -0,0 +1,832 @@ +\fontfam[lm] + +\adef<#1>{\ifcsname s:#1\endcsname + \link[s:#1]{}{\Blue$\langle$\hbox{\it#1\/}$\rangle$}% + \else {\Blue$\langle$\hbox{\it#1\/}$\rangle$}\fi} +\everyintt={\catcode`<=13 \Red} +\verbchar` +\enlang +\enquotes + +\def\r[#1]{\label[#1]\wlabel{\the\_itemnum}} +\def\:{$\to$} +\let\_narrowlastlinecentered=\ignoreit +\_def\_printsecc#1{\_par + \_abovetitle{\_penalty-200}{\_medskip\_smallskip} + {\_seccfont \_noindent \_raggedright \_printrefnum[@\_quad]% + \_label[\the\_secnum.\the\_seccnum]\wlabel{\the\_secnum.\the\_seccnum}#1\_nbpar}% + \_nobreak \_belowtitle{\_medskip}% + \_firstnoindent +} +\def\.`{\bgroup\catcode`\ =12 \scancs} +\def\scancs#1{\egroup + \immediate\_wref\Xknowncs{\string#1{\the\_secnum.\the\_seccnum}}% + \ea`\string#1% +} +\def\printcs#1{\ea\printcsred\csstring#1;~\ref[#1] \ } +\def\printcsred,#1;{{\Red\tt \bslash#1}} +\def\printknowncs{\ifx\knowncslist\undefined \let\knowncslist=\empty \fi + \ifx\knowncslist\empty TeX me again...\else + \_dosorting\knowncslist \ea\xargs \ea\printcs \knowncslist;\fi} + +\def\~`<#1>`{<#1>\sxdef{s:#1}{}\dest[s:#1]} + +\refdecl{ + \def\knowncslist{}^^J + \def\Xknowncs#1#2{% + \sxdef{,\csstring#1}{#2}% + \global\ea\addto\ea\knowncslist\ea{\csname,\csstring#1\endcsname}% + } +} +\sdef{_item:c}{\pdfsave\llap{\pdfscale{1.3}{1.3}$\circ$\enspace}\pdfrestore} + +%\parindent=15pt \iindent=\parindent \ttindent=\parindent +%\ttindent=0pt +\everylist={\advance\ttindent by-1em} +\hyperlinks \Green \Green +\def\cskip{\par\nobreak} +\def\begblock{\medskip\hbox\bgroup\vrule\vbox\bgroup\hrule\smallskip + \_fnset\leftskip=\parindent \rightskip=\parindent \medskip\noindent} +\def\endblock{\medskip\hrule\egroup\vrule\egroup} + +\def\raggedright{\rightskip=10pt plus1fil\relax} +\def\optexmanual{\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf]{\OpTeX/ manual}} + +\titskip=1cm + +\hfill Version 0.1 + +\tit \OpTeX/ Markup Language Standard + +{\it\hfil Petr Olšák, 2021}\bigskip + +The \OpTeX/ markup language standard (OMLS) declares a list of control +sequences used in \OpTeX/ documents including their syntax and sematic. The +listed control sequences in OMLS in section~\ref[listcs] in table~\ref[alistcs] +are called {\it known} and other control sequences are {\it unknown}. + +The main reason for OMLS is to give instructions on how to program convertors +from \OpTeX/ documents to another formats (Html, Markdown, \LaTeX/) or how +to interpret the \OpTeX/ document sources in such applications as +{\tt texcount} or text editors\fnote +{We suppose advanced editor features: color highlighting, sections/chapters folding, + auto-completions, etc.}. +These converters and applications are called {\it cnv-programs} in this document. + +We suppose that if you need absolute control over the typography of the +document when it is converted to PDF pages, then you use \OpTeX/ itself. If +you need to create other formats of the same document then you can use a +cnv-program which accepts OMLS. The result is a document without +typographical instructions like dimensions of pages, margins, paginations +and headers, selection of a font-family, dimensions of the fonts, etc.\ You can +imagine the result of such a conversion as a single Html page where more +typographical features can be controlled in a different way, for example by +an external CSS file. This is a reason why control sequences like `\fontfam` or +`\margins` are ignored by cnv-programs. + +Obviously, \TeX/ and \OpTeX/ itself gives possibility to declare various +input formats for various purposes. Sometimes (in very special cases) there +exists a good reason to declare a different and special input format by +\TeX/ macros. But if the source of the document respects the OMLS then it is +reasonably transformable to other formats by cnv-programs. We hope that +OMLS-ready documents cover a very large set of typical documents used these +days. + +We suppose that cnv-programs work internally with strings of source lines +without tokenization. This is one of the great differences in processing the +document directly by \OpTeX/ and using a cnv-program. The second difference is +that the expansion process of macros is not implemented in cnv-programs in +its full range. We respect that the result of cnv-programs will be different +than from processing directly by \OpTeX/. But this is not a bug, this is +the feature. We concentrate on the fixed syntax and sematic given by OMLS of the +\OpTeX/ document and we throw behind the head the typographical +exactness of the document which can be done only directly by \TeX/ (and it is +exactly described in \TeX/book, for example). + +\notoc\nonum\sec Table of contents + +\begmulti 2 +\maketoc +\endmulti +\vfil\break + +\sec Syntactical rules + +The syntactical elements are described as strings here. No \TeX/'s tokenization is +taken into account. The rule with a smaller number has precedence. + +\begitems \style n +* end of line or end of file \: \~`<eol>`.\r[eol] +* `%%:` at beginning of the line \: \~`<cnv-declarator>`, see section~\ref[cnv-decl]. +* `<cnv-declarator><text><eol>` is interpreted specially. +* space or a tab-character \: \~`<space>`. +* non-empty sequence of `<space>`s \: \~`<spaces>`.\r[spcs] +* an empty line or a line only with `<spaces>` \: \~`<empty-line>`. +* a character `a`--`z` or `A`--`Z` \: \~`<letter>`. +* a `<letter>` or `_` \: \~`<specletter>`. +* a character different from previous rule or `<eol>` or `<spaces>` \: \~`<non-specletter>` +* `\<non-specletter>` \: \~`<singlechar-control-sequence>`.\r[scs] +* a non-empty sequence of `<specletter>`s \: \~`<letters-seq>`. +* `\<letters-seq><non-specletter>` \: \~`<multiletter-control-sequence>``<non-specletter>`. +* `%<text><eol>` \: `<comment>` and it is completely ignored including `<eol>`.\r[com] +* `<spaces>` at beginning of the line marks that the line as {\it indented}. +* `<spaces>` at beginning of the line \: are ignored.\r[bspace] +* `<spaces><eol>` or `<eol>` \: `<spaces>`.\r[eolrm] +* `<multileter-control-sequence><spaces>` \: `<multileter-control-sequence>`.\r[csspace] +* `<multiletter-control-sequence>` or `<singlechar-control-sequence>` \: \~`<control-sequence>`.\r[cs] +* `<spaces>` \: `<space>`.\r[sspace] +* `~` \: non-breakable space. +* text where all pairs `{` and `}` match at arbitrary level \: \~`<balanced-text>`.\r[balt] +* `{<balanced-text>}` can be interpreted as a parameter of a `<control-sequence>`, see section~\ref[listcs]. +* The `{` alone not used by previous rule opens a group and the `}` alone closes the same group.\r[group] +* There are two main modes: h-mode, v-mode\fnote + {this is great simplification of real \TeX/ modes.}. + The document processing starts in v-mode. +* In v-mode: a `<non-space>` character or a control sequence listed + in table~\ref[vtohmode] swithes to h-mode. +* In h-mode: an `<empty-line>` or a control sequence listed in table~\ref[htovmode] switches to v-mode.\r[htov] +* The switching from v-mode to h-mode \: a paragraph begins. +* The switching from h-mode to v-mode \: the current paragraph ends. +* `$<text>$` or `$$<text>$$` \: process `<text>` in math-mode, see section~\ref[math]. +* a non-empty sequence of digits with optional `+` or `-` in the front \: \~`<number>`. +* `<number>` with optional dot inside the sequence of digits \: \~`<decimal-number>`. +* a pair of letters listed in the table~\ref[tex-units] \: \~`<tex-unit>`. +* optional space, i.e.\ `<space>` or nothing \: \~`<o-space>`. +* `<decimal-number><o-space><tex-unit><o-space>` \: \~`<dimen>`. +* `<control-sequence>` not listed in table~\ref[alistcs] nor in configuration \: \~`<unknown-control-sequence>`.\r[unkncs] +* `=<o-space>` or `<o-space>` \: \~`<o-equal>`. +* `<unknown-control-sequence><o-equal><dimen>` \: should be completely ignored.\r[eqdim] +* `<unknown-control-sequence><o-equal><number>` \: should be completely ignored. +* `<unknown-control-sequence>=<o-space>{<balanced-text>}` \: should be completely ignored. +* `<unknown-control-sequence>[<balanced-text>]` \: should be completely ignored.\r[ibkt] +* `<unknown-control-sequence>` \: should be ignored.\r[ignore] +* `<control-sequence>`s are processed as described in section~\ref[listcs] or + by a configuration of the cnv-program. +\enditems + +\bigskip +\label[vtohmode]\caption/t +List of control sequences which switch from v-mode to h-mode. +\cskip +\begblock +`\`<space>, +`\hfil`, +`\hfill`, +`\hskip`, +`\hss`, +`\indent`, +`\leavevmode`, +`\noindent`, +`\quad`, +`\qquad`, +`\vrule`. +\endblock + +\bigskip +\label[htovmode]\caption/t +List of control sequences which switch from h-mode to v-mode. +\cskip +\begblock +`\begblock`, +`\begitems`, +`\begmulti`, +`\begtt`, +`\bib`, +`\bigskip`, +`\bye`, +`\caption`, +`\chap`, +`\cskip`, +`\end`, +`\endblock`, +`\enditems`, +`\endmulti` +`\hrule`, +`\medskip`, +`\par`, +`\sec`, +`\secc`, +`\secl`, +`\smallskip`, +`\vfil`, +`\vskip`. +\endblock + +\bigskip +\label[tex-units]\caption/t +List of \TeX/ units. +\cskip +\begblock +`bp`, +`cc`, +`cm`, +`dd`, +`em`, +`ex`, +`in`, +`mm`, +`pc`, +`pt`, +`sp`. +\endblock + +\nonum\secc Examples + +\begitems +* `\%` is `<control-sequence>` by rules \ref[scs], \ref[cs]. It does not start + comment, because rule \ref[scs] has precedence before rule \ref[com]. +* `\%<space>`: the `<space>` is kept, but `\foo<space>`: the space is removed + by rule~\ref[csspace]. +* `wordA<spaces><eol><spaces>wordB` is `wordA<space>wordB` by rules~\ref[bspace], + \ref[eolrm], and~\ref[sspace]. +* `\kern-3pt` should be ignored, because `\kern` is `<unknown-control-sequence>` and rule + \ref[eqdim] is applied. +* `\vskip42mm` should finalize paragraph in h-mode by rule~\ref[htov] and then it + is ignored by rule~\ref[eqdim] because `\vskip` is + `<unknown-control-sequence>` not listed in table~\ref[alistcs]. +* `\typosize[12/16]` is ignored by rule~\ref[ibkt]. +* `\foo{text}` is `{text}` (i.e. `text` in a group) by rules~\ref[ignore] and~\ref[group]. +\enditems + +\sec Scanning parameters + +If a control sequence listed in rules above or in the section~\ref[listcs] +has a parameter, the parameter is scanned +as a string with interpretation only those rules which are needed to +determine the boundary of the parameters. For example `\tit <title><eol>` +applies only rule~\ref[eol] during scanning the parameter, i.e.\ `<title>` +is a string telemetered by the end of the line or the end of the file. +Or `\fnote{<balanced-text>}` applies only rule~\ref[balt]. + +If the parameter is in the format `{<something>}` then the `<something>` is +always meant as `<balanced-text>`. We don't specify the type `<balanced-text>` +explicitly here, so we refer to `\fnote{<text>}` and not +`\fnote{<balanced-text>}`, for example. + +The spaces before the scanned parameter are optional +and they are ignored. Spaces inside `{`...`}` are not ignored. + +If the parameter is in the format `{<something>}` and the first non-space +character is not `{` then the parameter is this first non-space character or +a `<control-sequence>` if the first non-space character is~`\`. For example +`\fnote a` is equal to `\fnote{a}`. The difference from this rule is given +for `\input`, `\verbinput`,`\inspic` and `\inkinspic` control sequences in +section~\ref[listcs]. + +If the parameter is scanned as a string already then +all syntactical rules are applied when it is used. For example: +\begtt +\tit This is a title +\endtt +the parameter is scanned as `This is a title` and the rules~\ref[spcs] +and~\ref[sspace] are applied when it is used. + + +\sec Declaration and text parts of the document + +A typical \OpTeX/ document has two parts. A declaration part, where +macros are defined by `\def` and friends, fonts and sizes are declared, etc. +This part should be ignored by cnv-programs. +The second part includes the document text with a markup using well-declared control +sequences. The cnv-program has to interpret the second part. + +So, the cnv-program starts in declaration-skipping mode and it switches to +the text mode later. + +When cnv-program is in declaration-skipping mode then all indented lines are +ignored. And lines which begins by `}` or by a <control-sequence> not listed +in table~\ref[textopen] are ignored too. + +If the line begins by a character other than `}` or by a <control-sequence> +listed in table~\ref[textopen] then cnv-program switches to text mode. All +texts are interpreted from this line including this one. + +User can say explicitly where the second part of the document starts by +`%%:text` given at beginning of a line. Moreover, if `%%:decl` is given at +beginning of a line, then all text between `%%:decl` and `%%:text` is +ignored, only other possible `<cnv-declarator>`s are processed here. +It means that the declaration part and the text part of the document can be +simply determined by the pair `%%:decl` and `%%:text`. + +\bigskip +\label[textopen]\caption/t +List of control sequences which start the text mode. +\cskip +\begblock \raggedright +`\address`, +`\begblock`, +`\begitems`, +`\begmulti`, +`\begtt`, +`\bf`, +`\bi`, +`\bib`, +`\caption`, +`\cite`, +`\clipinoval`, +`\clipincircle`, +`\ecite`, +`\fnote`, +`\frame`, +`\hfil`, +`\hfill`, +`\ii`, +`\iid`, +`\incircle`, +`\inkinspic`, +`\inoval`, +`\inspic`, +`\it`, +`\LaTeX`, +`\LuaTeX`, +`\maketoc`, +`\mnote`, +`\OpTeX`, +`\putpic`, +`\puttext`, +`\rcite`, +`\rm`, +`\rotbox`, +`\sec`, +`\secc`, +`\secl`, +`\table`, +`\TeX`, +`\tit`, +`\usebib`, +`\verbinput`. +\endblock + + +\sec[cnv-decl] The `%%:` declarators + +The `%%:` declarators are ignored when the document is processed by \TeX/ +but they can give instructions to cnv-programs. The `%%:` must be placed at +beginning of the line. The list of `%%:` declarators follows: + +\begitems +* `%%:decl` -- the following text is ignored until `%%:text` occurs. Only + other `%%:` declarators are interpreted. +* `%%:text` -- the following text must be interpreted in text mode. +* `%%:to <format> <config-file>` -- if the cnv-program converts to the + <format> then it has to use the <config-file>. For example: + \begtt + %%:to html html-mydocument.cfg + %%:to markdown markdown-mydocument.cfg + %%:to latex preamble-mydocument.cfg + \endtt + The language of the config files are not a part of this standard, we + suppose something to be natural for used cnv-program. The config file should + give additional rules for interpreting control sequences not listed in the + section~\ref[listcs] (see rule~\ref[unkncs]). For example a tool for + defining a behavior of unknown control sequences can be here. + These definitions can depend on the converted document and on the output + format and they can be given in the configuration files. +* `%%:app <application> <config-file>` -- behaves like `%%;to` but the + cnv-program name instead output format is given here. +* `%%:do <format-or-app> <action>` -- does an `<action>` if `<format-or-app>` + is output format or used cnv\hbox{-}program name. The `<action>` syntax depends + on used cnv-program and it typicaly does a change in its configuration or + give a command to it. +* `%%:skip <formats-or-apps>` -- ignores all following lines until another `%%:` occurs + if the output format or application name is included in the `<formats-or-apps>` + space-separated list. Example: + \begtt + %%:skip html markdown + This text is not interpreted when Html or Markdown output is generated. + %%: + \endtt + If the `<formats-or-apps>` is empty then the `%%:skip` is applied for + each cnv-program and for each output. +* `%%:if <formats-or-apps>` -- processes following lines until another `%%:` + only if the output format or application name is included in the + `<formats-or-apps>` space-separated list. Other cnv-programs or output formats + not mentioned here skip these lines. Note that \TeX/ processes such lines always. + But you can use `\ignoreit{<text>}` which is processed as + `{<text>}` by cnv-programs (see rule~\ref[ignore]) but it is ignored by \OpTeX. + Example: + \begtt + %%:if html latex + \ignoreit{\input{file.tex}} + %%: + \endtt + The `file.tex` in this example is processed only if \LaTeX/ or Html output is generated. +* `%%:use` -- the next single line is fully interpreted unless cnv-program ignores + declarations by `%%:decl` or because it is in declaration-skipping mode. + Example: + \begtt + %%:use + \verbchar` \picdir={img/} + \endtt + The example shows how cnv-program is able to read `\verbchar` or + `\picdir` settings in the declaration\hbox{-}skipping mode although these control + sequences are not listed in table~\ref[textopen]. +* `%%:quotes <qql> <qqr> <ql> <qr>` -- declares \~`<qql>` and \~`<qqr>` (left + and right double quotation marks), \~`<ql>` and \~`<qr>` (left and right single + quotation mark). They are used when `\"` or `\'` control sequences are + processed. Default: unset, i.e.\ `\"` and `\'` are interpreted as + unknown control sequences. +\enditems + + +\sec[listcs] List of known control sequences + +The phrase \"should be" is used very often when the interpretation of +control sequences is declared here. It means that this is only a common +interpretation, but differences are possible due to the type of the output +format and used cnv-program. For example, when we convert to \LaTeX\, then +`\-` and `\/` are not ignored but they are re-written without change to the +output of the \LaTeX/ source file. + +\bigskip +\label[alistcs] +\caption/t List of known control sequences alphabeticaly sorted. +\cskip +\begblock +\raggedright \printknowncs +\endblock + + +\secc Character-like control sequences + +\begitems +* \.`\%`, \.`\$`, \.`\&`,\.`\#` respectively \: should be normal characters + `%`, `$`, `&`, `#` respectively. +* \.`\bslash` \: normal character `\`. +* \.`\space`, `\<space>`, `\<eol>` \: space. +* `\,` \: should be small space or space. +* \.`\quad`, \.`\qquad` \: should be bigger space or more spaces. +* \.`\-`, \.`\/` \: should be ignored. +* \.`\"<text>"` or \.`\'<text>'` \: `<qql><text><qqr>` or `<ql><text><qr>`, + only if `%%:quotes` are set. +\enditems + +\secc Input files + +\begitems +* \.`\input {<file-name>}` or `\input <file-name><space>` should redirect the + input to given file. At the end of the input-ed file or at \.`\endinput` the + reading of the current file continues. The file is read from the current + directory, but the <file-name> should include the full path to the file + or relative path starting from the current directory. First, the file + `<file-name>.tex` is tried to read and if it doesn't exist then + the file `<file-name>` is read. +* \.`\picdir <o-equal>{<text>}` saves `<text>` to `<picdir-value>`. By + default, `<picdir-value>` is empty. +* \.`\inspic {<file-name>}` or `\inspic <file-name><space>` should include the + given picture from the `<picdir-value><file-name>`. +* \.`\inkinspic {<file-name>}` or `\inkinspic <file-name><space>` behaves like + `\inspic`. +* \.`\verinput <ignore> (<lines>) <file-name><space>` should include the + <file-name> (only given lines) as a verbatim text, i.\,e. without any + syntactical interpretation. +* \.`\usebib/<letter> (<style>) <file-names>` should use files from + `<file-names>` to generate the list of bib references. The `<file-names>` + is comma separated list (the `.bib` extension is appended to + each such file name). Only cited bib records should be used in this + bib-references, i.e. their label must be used in a `\cite[<labels>]` or + `\rcite[<labels>]` or `\ecite[<label>]`. + What bib fields are used in bib records depends on the cnv-program and + on its configuration. Maybe, simple cnv-programs should generate nothing here. +\enditems + +\secc Titles + +\begitems +* \.`\tit <title><eof>` should be a title of the document. +* \.`\chap <title><eof>` or `\chap [<label>] <title><eof>` is the title of + first level. +* \.`\sec <title><eof>` or `\sec [<label>] <title><eof>` is the title of + second level. +* \.`\secc <title><eof>` or `\secc [<label>] <title><eof>` is the title of + third level. +* \.`\secl<level> <title><eof>` is the title of given level. +\enditems + +\secc Fonts + +\.`\rm` selects upright normal font (it is selected by default), \.`\it` selects +italic, \.`\bf` selects upright bold font, \.`\bi` selects bold italic and +\.`\tt` selects a monospaced font, \.`\em` select italic (if upright is current) or upright +(if italic is current). The font sizes or other font features are typically ignored +by cnv-programs. The actual font selection is closed at the end of the current group. +The groups are given: +\begitems +* explicitly by `{` and `}` characters (which are not delimiters of + parameters of known control sequences), +* implicitly: parameters of control sequences listed in table~\ref[groupcs] + are processed in a group and blocks of text enclosed by + `\begitems`...`\enditems`, `\begblock`...`\endblock`, `\begmulti`...`\endmulti` + are processed in a group. + Each item in `\table` is in a group. +\enditems + +\label[groupcs] +\caption/t Parameters of following control sequences are processed in a group. +\cskip +\begblock +`\caption`, +`\chap`, +`\fnote`, +`\mnote`, +`\sec`, +`\secc`, +`\tit`. +\endblock + +\secc Colors + +\.`\Red`, \.`\Green`, \.`\Blue`, \.`\Cyan`, \.`\Magenta`, \.`\Yellow`, \.`\White`, +\.`\Black`, and \.`\Brown` should select the given color of the font. The selection +is closed at the end of the current group (like font selectors). + +\secc Blockquotes + +The blockquote\fnote +{The terminology is borrowed from Markdown.} +is opened by \.`\begblock` and closed by \.`\endblock`. +Blockquotes can contain multiple paragraphs and can contain nested +blockquotes. + +\secc Lists + +The list is opened by \.`\begitems` and closed by \.`\enditems`. The `*` starts +a new item in this environment. Nested lists are allowed. + +The type of items (ordered/unordered) +is given by \.`\style <character>`, see section 1.4.5 in the +\optexmanual. Default type is unordered (bullets are used). + + +\secc Code blocks (verbatim texts) + +Code blocks are inline verbatim or display verbatim. + +\begitems +* \.`\begtt <ignored><eol><text>\endtt<ignored><eol>` processes `<text>` in + \"display verbatim mode", i.\,e. there are no special characters, each character + is processed without special interpretation, the <eol>s are end of lines. + The text at the same line after `\begtt` and after `\endtt` (if any) is + ignored. +* \.`\verbchar <character>` declares `<verbchar>`. By default, it is undeclared.\nl + New `\verbchar <character>` rewrites previous setting. The setting is + local in the group. +* Inline verbatim is enclosed in the pairs of `<verbchar>`s. + The text between two `<verbchar>`s is processed without special interpretation. + Only possibly <eol>s are replaced by space. + Example: + \begtt + %%:use + \verbchar` + Now, `$this %text ~\` is processed as inline verbatim. + \endtt + gives: Now, `$this %text ~\` is processed as inline verbatim. +* \.`\code{<text>}` processes `<text>` like inline verbatim, but + all `\<character>` are processed as `<character>`, specially `\{` and `\}` + are `{` and `}` but without taking them into `<balanced-text>` rule, + `\\` is `\` but do not create a `<control-sequence>`, etc. +\enditems + + +\secc Multicolumns + +\.`\begmulti <number><space>` opens the group and \.`\endmulti` +closes the group. If output format allows multi-columns then +the text enclosed between `\begmulti <number><space>` and matching +`\endmulti` should be printed in `<number>` balanced columns. + + +\secc Links + +\begitems +* \.`\url{<text>}` creates `<text>` as an external link which points to `<text>`. + The `\<character>` is interpreted as `<character>` in `<text>` with one + exception: `\|` is ignored. +* \.`\ulink[<url>]{<text>}` creates `<text>` as an external link which points + to `<url>`. The `\<character>` is interpreted as `<character>` only in + `<url>` parameter. +* \.`\label[<label>]` sets the `<label>`. First following occurence of `\chap`, `\sec`, + `\secc`, `\caption` or `\eqmark` sets this `<label>` as bounded to its + position in the document. +* \.`\ref[<label>]` should create an internal link to the position given by + `\chap`, `\sec`, `\secc`, `\caption` or `\eqmark`, + if `[<label>]` is used as the parameter of this control sequence + else if `<label>` is bounded here by previous `\label[<label>]` + The visual aspect of the link + is not declared by OMLS because we don't suppose that the chapters, + sections, equations, etc.\ are automatically numbered by exactly the same way as in + \OpTeX/. A recommendation should be: create a simple sequence of numbers over + all internal links. +* \.`\pgref[<label>]` should be replaced by `??` if cnv-program generates single-page + output (like Html, Markdown). Unfortunately, we get the irrelevant phrases in the output: + \"{\tt The problem is shown at the page ??}". + Users can declare `%%:skip` for such cases. +* \.`\bib[<label>]` or `\bib[<label>]<o-space>=<o-space>{<ignored>}` should open the new bib + record. More exactly, it closes previous paragraph (if h-mode is current) + and opens new h-mode. Then prints an auto-generated reference number in + `[...]`. Following text is interpreted as a bib record until the h-mode ends. +* \.`\cite[<labels>]` should create internal links to corresponding bib + records generated by `\usebib` or by `\bib`. The `<labels>` is a comma-separated list + of labels used in `.bib` files or in `\bib` commands to indicate + the corresponding bib record. The labels should be replaced by auto-generated + reference numbers used in bib records. All reference numbers created by + single `\cite` should be enclosed by single `[...]`. These numbers are + internal links. If the cnv-program does not implement this complicated + bib machinery then `\cite[<labels>]` should print only `[<labels>]`. +* \.`\rcite[<labels>]` does the same as `\cite[<labels>]` but doesn't print + outer `[...]`. +* \.`\ecite[<label>]{<text>}` creates the link to corresponding bib record, + `<text>` is is hyperlinked (no the auto-generated reference number). +* \.`\maketoc` should create a list of titles from all `\chap`, `\sec` and `\secc` + used in the document if they are not preceded by \.`\notoc`. All lines in + this list should include internal links to the position where the corresponding title + is used. +\enditems + +\secc Tables + +\begitems +* \.`\caption/<letter>` opens a caption. More exactly, if current mode is + h-mode, then switch to v-mode first (i.e.\ close the current paragraph). + Then switch from v-mode to h-mode and put a <caption-head>. The following + text should be interpreted as the caption text until h-mode ends. + If <letter> is `t` then <caption-head> is `Table` followed + by an auto-generated number. If the <letter> is `f` then <caption-head> is + `Figure` followed by an auto-generated number. The configuration of + cnv-programs shoud allow different words than default `Table` or `Figure` (for + example, if another language is used). +* \.`\table<ignored>{<declaration>}{<data>}` should create a table. The fidelity + rate of created output depends heavily on the used cnv-program and the output + format. We don't suppose that all aspects of \OpTeX/ tables are implemented. + The following features are listed in their priority of implementation. + \begitems \style c + * Items in `<data>` are separated by `&`. + The last item in each row is separated by end-row separator: \.`\cr`, \.`\crl`, \.`\crll`, + \.`\crli`, \.`\crlli`, or \.`\crlp{<list>}`. If there are $n$ columns in + the table then we have $n-1$ `&` separators and one end-row separator + for each table row. + There can be an optional end-row separator at the first item in `<data>` and + it should be ignored. The `<data>` can end without the end-row separator, it + should be added here. + * Spaces around `&` and before end-row separator are ignored. + * \.`\noalign{<text>}` and \.`\tskip <dimen>` should be ignored. + * Colum declarators in <declaration> should be interpreted: `l` (left aligned), `c` (center + aligned), `r` (right aligned) or `p{<ignored>}` (paragraph-like item). + * The `<number><letter>` or `<number>{<text>}` should be interpreted as + `<number>`-times repeated `<letter>` or `<text>` in `<declaration>`. + * \.`\vspan<decimal-number>{<text>}` should be an item with only `<text>`. + * \.`\mspan<number>[<decl>]{<text>}` should create `<text>` as an item which + spans over `<number>` columns. It is used instead `<number>` real + items, i.e.\ `<number>`$-1$ separators `&` aren't used here. + * Rules in the table should be interpreted, i.e. `|` in <declaration> + should be not ignored and + various end-row separators should be distinguished (see \optexmanual, + section 1.4.6). + * The aligning of `p{<p-data>}` columns should be interpreded by reading + \.`\fL`, \.`\fR`, \.`\fC`, \.`\fS` and \.`\fX` control sequences in `<p-data>`. + See \optexmanual, section 1.4.6. + \enditems +\enditems + +\secc Footnotes, marginal notes + +\begitems +* \.`\fnote{<text>}` should create a footnote link as an auto-generated + reference number. + The `<text>` should be appended at the end of the document labeled by this + reference number. Another alternative (for Html output, for example): the mouse over + the reference number riases an auto-popup `<text>`. +* \.`\fnotemark<number>` should create a pointer to a next declared + footnote as auto-generated reference number. The `<text>` of the footnote is + declared after that by \.`\fnotetext{<text>}`. Exact behavior: if the + reference number of the last processed `\fnote` is $n$ then + `\fnotemark<number>` uses the value + $n+{}$`<number>` as its reference number. A set of `\fnotemark`s + is followed by an equally large set of `\fnotetext{<text>}`. First one + have reference number $n+1$, second $n+2$, etc. When whole set of `\fnotetext{<text>}` + is processed then $n$ is reset to the last reference number used here. +* \.`\mnote <ignored>{<text>}` should be created as auto-popup `<text>` or the `<text>` + is inserted at the margin. +\enditems + +\secc Tagging for index + +We don't suppose that the cnv-program can generate the alphabetically sorted +index. So, the markup for creating the index should be ignored: + +\begitems +* \.`\ii <word><space>` (where `<word>` is a sequence of non-space characters) + should be ignored. +* \.`\iid <word><space>` is `<word><space>` by default, but + if `,` or `.` follows after `<space>` then the `<space>` is removed. +\enditems + +\secc Logos + +\.`\TeX`, \.`\LuaTeX`, \.`\OpTeX`, \.`\LaTeX`, respectively \: +`TeX`, `LuaTeX`, `OpTeX`, `LaTeX`, respectively. If `/` follows +these control sequences then it is ignored. Other logos should be declared +in the configuration of the cnv-program. + +\secc What should be ignored + +\begitems +* \.`\def<text>{<text>}` and other variants with \.`\gdef`, \.`\edef`, \.`\xdef`. + Reason: user can insert a special definition in the `%%:text` part of the + document in order to solve a problem. But cnv-program should ignore~it. +* \.`\outlines{<text>}`, \.`\insertoutline{<text>}` and \.`\thisoutline{<text>}`. +\enditems + + +\sec[math] Math mode processing + +There are two math modes, inline: `$<formula>$` or display: `$$<formula>$$`. +We suppose that `<formula>` will be processed by MathJax or similar +software. So, the `<formula>` should be kept without changes in cnv-program +output, but there are exceptions: + +\begitems +* `$<sign><decimal-number>$` should be transformed to non-math text + `<sign><decimal-number>`. The `<sign>` is~`+` or~`-` or nothing. + The `<decimal-number>` can include `,` (comma) instead `.` (period). + If the `<sign>` is~`-` (character U+002D) then + it must be converted to `−` (character U+2212, math minus). +* `{\bbchar <text>}` should be converted to `\mathbb{<text>}`, because + MathJax doesn't understand `\bbchar`. `$\bbchar <text>$` should be + converted to `$\mathbb{<text>}$`. +* `{\frak <text>}` or `$\frak <text>$` \: + `\mathfrak{<text>}` or `$\mathfrak{<text>}$`. +* `{\script <text>}` or `$\script <text>$` \: + `\mathscr{<text>}` or `$\mathscr{<text>}$`. +* `\eqmark`, `\eqmark[<label>]` \: `\leqno (<num>)`, where `<num>` is + auto-generated number. Or it should be completely ignored. +* It is strongly recommended to allow users to declare another replacement + rules over `<formula>` in configuration files of cnv-programs. +\enditems + + +\sec Notes on various conversions + +The cnv-programs behave differently because output formats have different +concepts and are intended for different purposes. The following sections +mention the main differences for typical conversions. + +\secc To Html + +The Html document is one single page. If we want to split the document to more +pages, then we can use `%%:do html <action>` in positions where the document +should be split (the syntax of `<action>` depends on the used cnv-program.) + +The design of Html pages should be declared by CSS files. + +Pictures inserted by `\inspic` should be inserted into the Html page as +\code{<img src="...">}, so the picture files must be installed in +the webserver to render the Html page correctly in a web browser. + +The `\maketoc` used in the \OpTeX/ document means that the Table of contents should +be here. It should be generated by the cnv-program, two-pass processing is +needed because the cnv-program needs to read all titles of `\chap`, `\sec` and +`\secc`. Another approach is to read the `.ref` file produced by \OpTeX/. + + +\secc To Markdown + +Markdown source file is \"one-page document" too. The principles a +re similar to conversion to Html. + +\secc From Markdown + +The cnv-program which does such a reverse conversion should be very useful for +people they prefer even clearer markup than in \OpTeX/. + +\secc To \LaTeX + +\LaTeX/ gives the same main feature as \OpTeX/: it can generate PDF +output from a source file. But different macros, a different concept, and +a different markup are used. + +The main reason for such conversion is that journal editors +require \LaTeX/ source file, but user want to prepare their real document in +more comfortable (\OpTeX/) markup and with more simple macros. + +This conversion should keep almost all features. For example, the +`\pgref[<label>]` is converted to `\pageref{<label>}`. The cnv-program +needs not to generate a Table of contents, bibliography references, etc. Only +appropriate \LaTeX/ markup must be used. + +The contents of generated \LaTeX/ preamble should be configurable. + + +\secc From \LaTeX + +The reverse conversion from \LaTeX/ to \OpTeX/ can be usable +for people, they want to switch to creating their documents in \OpTeX/. + +The cnv-program must solve additional problem in this type of conversion. +There are various math \LaTeX/ environments, they must be converted to +plain~\TeX/ syntax of math typesetting. For example:\nl +`\begin{array}...\end{array}` \: `\matrix{...}`,\nl +`\begin{align*}...\end{align*}` \: `$$\eqalign{...}$$`\nl +`\frac{...}{...}` \: `{...\over...}`. + +\bye diff --git a/Master/texmf-dist/doc/optex/optex-doc.pdf b/Master/texmf-dist/doc/optex/optex-doc.pdf new file mode 100644 index 00000000000..a4df4f013ab Binary files /dev/null and b/Master/texmf-dist/doc/optex/optex-doc.pdf differ diff --git a/Master/texmf-dist/doc/optex/optex-doc.tex b/Master/texmf-dist/doc/optex/optex-doc.tex new file mode 100644 index 00000000000..9f2fadeeb4a --- /dev/null +++ b/Master/texmf-dist/doc/optex/optex-doc.tex @@ -0,0 +1,114 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +% Run optex optex-doc +% (three times) to generate OpTeX documentation including references and the index. + +\load [doc.opm] \let\enddocument=\endinput + +\typosize[10/12] % Main size (used in techdoc) + +\begingroup \typosize [11/13.5] % Different size used in useroc. + +\insertoutline{OpTeX} % PDF outlines generated from TOC + +% Title: + +\vglue1cm +\centerline{\setfontsize{at50pt}\rm\OpTeX} +\vskip-8mm + +\tit Format Based on Plain \TeX/ and OPmac\fnotemark1 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\hfill Version 1.01 + +\centerline{\it Petr Olšák, 2020, 2021} + +\bigskip +\centerline{\url{http://petr.olsak.net/optex}} + +\fnotetext {OPmac package is a set of simple additional macros to Plain \TeX{}. +It enables users to take advantage of \LaTeX/ functionality but keeps +Plain \TeX/ simplicity. See +\url{http://petr.olsak.net/opmac-e.html} for more information about it.} + +\bigskip +\noindent +\OpTeX/ is \LuaTeX/ format with Plain \TeX/ and OPmac. Only \LuaTeX/ engine +is supported. + +\OpTeX/ should be a modern Plain \TeX/ with power from OPmac (Fonts +Selection System, colors, graphics, references, hyperlinks, +indexing, bibliography, ...) with preferred Unicode fonts. + +The main goal of \OpTeX/ is: + +\begitems +* \OpTeX/ keeps the simplicity (like in Plain \TeX/ and OPmac macros). +* There is no old obscurities concerning various 8-bit encodings and + various engines. +* \OpTeX/ provides a powerful Fonts Selection System (for Unicode font + families, of course). +* \OpTeX/ supports hyphenations of all languages installed in your \TeX/ system. +* All features from OPmac macros are copied. For example sorting words in + the Index\fnotemark1, reading `.bib` files directly\fnotemark1, syntax + highlighting\fnotemark1, colors, graphics, hyperlinks, references). + \fnotetext{All these features are implemented by \TeX/ macros, no external + program is needed.} +* Macros are documented in the same place where code is. +* User namespace of control sequences is separated from the internal namespace + of \OpTeX/ and primitives (`\foo` versus `\_foo`). + The namespaces for macro writers are designed too. +\enditems + +If you need to customize your document or you need to use something +very specific, then you can copy relevant parts of \OpTeX/ macros into your macro +file and do changes to these macros here. This is a significant difference from +\LaTeX/ or ConTeXt, which is an attempt to create a new user level with a +plenty of non-primitive parameters and syntax hiding \TeX/ internals. +The macros from \OpTeX/ are simple and straightforward because they solve only +what is explicitly needed, they do not create a new user level for +controlling your document. We are using \TeX/ directly in this case. +You can use \OpTeX/ macros, understand them, and modify them. + +\OpTeX/ offers a markup language for authors of texts (like \LaTeX), +i.\,e.\ the fixed set of tags to define the structure of the document. This +markup is different from the \LaTeX{} markup. It may offer to write the +source text of the document somewhat clearer and more attractive. + +The manual includes two parts: user documentation and technical +documentation. The second part is generated directly from the sources of +\OpTeX/. There are many hyperlinks from one part to second and vice versa. + +This manual describes \OpTeX/ features only. We suppose that the user knows \TeX/ +basics. They are described in many books. You can see a short +document \ulink[http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf] +{\TeX/ in nutshell} too. + +\vfil\break + +\insertoutline{CONTENTS} \outlines{0} + +\notoc\nonum \sec Contents +\maketoc + +\thisoutline {USER DOCUMENTATION} + +\chap User documentation + +\input optex-userdoc +\endgroup + +%\end + +\input optex-techdoc + +\vfil\break + +\def\_printchap#1{\noindent{\_printrefnum[@]\_secfont #1}\medskip} + +\nonum\chap Index + +\begmulti 3 \tt \makeindex \endmulti + +\bye diff --git a/Master/texmf-dist/doc/optex/optex-math.tex b/Master/texmf-dist/doc/optex/optex-math.tex new file mode 100644 index 00000000000..789dd5a1877 --- /dev/null +++ b/Master/texmf-dist/doc/optex/optex-math.tex @@ -0,0 +1,1662 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +% Run optex optex-math (two times) to generate this document +% or look at PDF here: http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf + +\fontfam[lmfonts] + +\font\ttlib=[LiberationMono-Regular] +\def\ttspec{\let\_ttfont=\ttlib} + +\report + +\def\new #1 {\mnote{\Red$\blacktriangleleft$\,\sans\setfontsize{at9pt}\rm#1}} +\fixmnotes\right +\enquotes +\verbchar` +\catcode`\<=13 +\def<#1>{$\langle\hbox{\it#1\/}\rangle$} +\everyintt={\catcode`\<=13 } +\def\ss#1{$\vrule height3pt#1\vrule height3pt$} + +\addto\_secfont\Blue \addto\_seccfont\Blue +\_def\_printsec#1{\_par + \_abovetitle{\_penalty-400}\_bigskip + {{\_secfont \_noindent \_raggedright \llap{\_printrefnum[@\_quad]}#1}\_nbpar}\_insertmark{#1}% + \_nobreak \_belowtitle{\_medskip}% + \_firstnoindent +} +\_def\_printsecc#1{\_par + \_abovetitle{\_penalty-200}\_medskip + {{\_seccfont \_noindent \_raggedright \llap{\_printrefnum[@\_quad]}#1}\_nbpar}% + \_nobreak \_belowtitle{\_medskip}% + \_firstnoindent +} + +\def\i #1 {\ii .#1 \iis .#1 {{\code{\\#1}}}} +\def\x`{\bgroup\_setverb\xx} +\bgroup \lccode\string`\.=\string`\` \lowercase{\egroup \def\xx #1#2.{\i #2 \egroup `#1#2.}} + + +\hyperlinks\Green\Green + +\insertoutline{MATH} +\outlines{0} + + + +\tit Typesetting Math with \OpTeX/ + +\hfill Version 03, January 2021 + +\author Petr Olšák + + +This document is a brief summary of typesetting math. It describes \TeX/, +Plain \TeX/ and \OpTeX/ features concerned to math. The first two types of +features are documented in \TeX/book in chapters 16, 17, and 18, but it is +summarized here in short again in order to give a complete guide about math +typesetting for \OpTeX/ users. + +\new {} +The \OpTeX/ features which differs from standard \TeX/ or Plain \TeX/ are +documented with the red triangle at the margin (like in this paragraph). +Reader can simply distinguish between \"standard" features (given by +\TeX/ or Plain \TeX/) and new \OpTeX/ features. + +There are more types of extensions: e\TeX, lua\TeX/, Unicode math and +\OpTeX/ macros. The appropriate label (e\TeX, Lua\TeX/, Unicode, \OpTeX/) +is appended to the red triangle to inform you about the extension type. +Nevertheless, \OpTeX/ user doesn't have to worry about it, all extensions +are available if Unicode Math font is loaded (e.g., by the command +`\fonfam[lmfonts]`). See section 1.3.3 in \OpTeX/ documentation about +loading Unicode math fonts. + +{\iindent=2em +\bigskip +\maketoc } +\vfil\break + +\sec Basics structure of math formulas + +\secc General rules and terminology + +The \ii in-line/math in-line math (in the paragraph) is created by `$<math list>$`. The +\ii display/math display math (a standalone line between paragraphs) is created by `$$<math list>$$`. +More than one line can be here if an appropriate macro is used. In-line math is +processed in a \TeX/ group in \ii in-line/math/mode {\em in-line math mode}. The display math is +processed in a \TeX/ group in \ii display/math/mode {\em display math mode}. Spaces are +ignored in math modes, so `$x+y$` and `$x + y$` gives the same result: $x+y$. + +The \ii math/list <math list> is a sequence of \ii math/atom,atom {\em math atoms} and +\ii other/material {\em other material}. +The math atoms are \ii single/math/object {\em single math objects} or +\ii composed/math/atom composed math atoms. + +\begitems \hfuzz=.6pt +* The single math object is a single character to be printed in math mode + like `x`, `+`, `\int`. +* The math atom is constructed in general by `{<math list 1>}^{<math list 2>}_{<math list 3>}`. + It consists from \ii nucleus {\em nucleus} <math list 1>, \ii exponent exponent <math list 2> + and \ii subscript subscript <math list 3>. Each part of the atom should be empty. + If <math list 2> or <math list 3> is empty, we need not to write brackets and + the prefix `^` or `_`. + If the <math list 1> or <math list 2> or <math list 3> + consist only from a single math object then we need not use brackets. + For example + `x^2` is a math atom with `x` in the nucleus, `2` in the exponent, and with empty subscript. + Or `a_{i,j}` is a math atom with `a` in the nucleus, empty exponent, and `i,j` in the subscript.% + \fnote{In \OpTeX/, the character `_` can be interpreted as a part of + the control sequence name, not as the subscript constructor. But in common cases, + constructions of math atoms are interpreted exactly as in plain \TeX. See sections + 2.2.2 and 2.14 of \OpTeX/ documentation for more details. If you want to + be sure that `_` is just a subscript constructor in \OpTeX/ then you can set \code{\\catcode`\\_=8} + but after this, you cannot use control sequences with `_` character.} + The constructors for exponent `^` and subscript `_` can be used in arbitrary order + after the nucleus, for example, `z_1^{x+y}` is the same math atom as + `z^{x+y}_1`. The single math objects not followed by `^` nor `_` are + considered as math atoms with this object in the nucleus and with empty + exponent and subscript (this is a very common case). + \TeX/ assigns the \ii class {\em class} for each math atom, see section~\ref[class]. +* Other material can be \TeX/ box or glue (space) or `\kern` or `\vrule` etc. +\enditems + +Example: The `Z = \int``_\Omega x^{2y} + z\, dx` generates +$Z = \int_\Omega x^{2y} + z\, dx$ and it is <math list> which consists from: + +\begitems +* `Z` is math atom with empty exponent and subscript, class: Ord, +* `=` is math atom with empty exponent and subscript, class: Rel, +* `\int``_\Omega` is math atom with empty exponent and with subscript `\Omega`, class: Op, +* `x^{2y}` is math atom with exponent `2y` and empty subscript, class: Ord, + \begitems \let\_bullet=\circ + * `2` is math atom with empty exponent and subscript, class: Ord, + * `y` is math atom with empty exponent and subscript, class: Ord, + \enditems +* `+` is math atom with empty exponent and subscript, class: Bin, +* `z` is math atom with empty exponent and subscript, class: Ord, +* `\,` is another material, the glue (space) in this case, +* `d` is math atom with empty exponent and subscript, class: Ord, +* `x` is math atom with empty exponent and subscript, class: Ord. +\enditems + +\secc[class] Classes of math atoms + +\TeX/ assigns \ii class {\em a class} for each math atom.\fnote +{Using terminology of \TeX/book, each single math object has its {\em class} but the + math atom has its {\em kind} derived from this class. I use only one word + for both meanings in this document.} +This data type is used when +\TeX/ decides about \ii horizontal/spacing horizontal spaces between atoms in the output. (Note +that spaces in the input are ignored.) For example, +`$xy$` prints two atoms without space between them but `$x+y$` is printed with +small spaces around the `+` binary operator. Compare: $xy$ and $x+y$. + +The class is assigned depending on the nucleus of the atom. If the nucleus is +not a single math object, i.e. it is constructed by `{<math list>}` with braces +then the atom has its class Ord. If the nucleus is a single math object constructed +without braces then the class of the atom depends on this single math +object. Each single math object must be declared in \TeX/ with its default +class. The following table lists the classes with typical examples. +The full set of all math objects used in math typesetting +is listed in section~\ref[objects] with their default classes. + +\bigskip +\noindent\hfil\table{llll}{ + & \ii class Class & Meaning & Example \crl + 0 & \iid Ord & ordinary object & variables, digits, $x, {\bbchar R}, \Gamma, 0, 1$ \cr + 1 & \iid Op & big opertator & $\sum, \int, \bigcup$ \cr + 2 & \iid Bin & binary operator & $+, \times, -, \pm, \cup$ \cr + 3 & \iid Rel & reations & $=, \ne, \leq, \supseteq, \succsim$ \cr + 4 & \iid Open & opening bracket & $\{, (, [, \langle$ \cr + 5 & \iid Close & closing bracket & $\}, ), ], \rangle$ \cr + 6 & \iid Punct & punctuation & comma \cr + & \iid Inner & left-right & \code{\\left...\\right} outputs, see section~\ref[delims] +} +\bigskip + +There are \ii horizontal/spacing,spacing three space types used +by the algorithm for horizontal spacing in the math formulas. + +\begitems +* \ii thin/space Thin space: \x`\thinmuskip` primitive register, `\,` macro. Used around Op atoms. +* \ii medium/space Medium space: \x`\medmuskip` primitive register, `\>` macro. Used around Bin atoms. +* \ii thick/space Thick space: \x`\thickmusip` primitive register, `\;` macro. Used around Rel atoms. +\enditems + +\puttext 7.8cm -3.7cm {\rotbox{90}{Left atom}} +\puttext 11.5cm -.5cm {Right atom} +\puttext 8.2cm -4.4cm {\typosize[9/11] +\thistable{\def\_enspace{ }}% +\table {l|8c|} { + \omit & Ord & Op & Bin & Rel & Open & Close & Punct & \omit \hfil Inner \crlp{2-9} + Ord & 0 & 1 & 2 & 3 & 0 & 0 & 0 & 1 \cr + Op & 1 & 1 & & 3 & 0 & 0 & 0 & 1 \cr + Bin & 2 & 2 & & & 2 & & & 2 \cr + Rel & 3 & 3 & & 0 & 3 & 0 & 0 & 3 \cr + Open & 0 & 0 & & 0 & 0 & 0 & 0 & 0 \cr + Close & 0 & 1 & 2 & 3 & 0 & 0 & 0 & 1 \cr + Punct & 1 & 1 & & 1 & 1 & 1 & 1 & 1 \cr + Inner & 1 & 1 & 2 & 3 & 1 & 0 & 1 & 1 \crlp{2-9} +}} + +\hangindent=-8.7cm \hangafter=0 +Ord atoms are printed without spaces between them. The spaces are not +cumulated, so the rule about spaces mentioned above is only a rough idea. +The exact rule for horizontal spaces is given for each pairs of atoms +in the table here. The symbol 0 means no space, 1 thin space, 2 medium space, +and 3 means thick space. + +\hangindent=-8.7cm \hangafter-2 +The Bin atom is automatically transformed to the +Ord atom if no atom precedes or if Op, Bin, Rel, Open, or Punct atom +precedes. And it is transformed to the Ord atom if Rel, Close or Punct atom +follows. This corresponds to the empty cells in the table. +Why such behavior? Compare \"\hbox{$0-3$}" and \"$-3$". The Bin atom in +the second case behaves like Ord atom because it is \ii unary/minus {\em unary minus}. +There is no space between the unary minus and the following object. + +All medium spaces and thick spaces and some thin spaces from this table are +omitted if the <math list> is processed in +\ii script/style,scriptscript/style script or scriptscript styles +(smaller size). See section~\ref[styles] about math styles. + +You can overwrite the default class derived from the nucleus of the atom by +\TeX/ primitives \x`\mathord`, \x`\mathop`, \x`\mathbin`, \x`\mathrel`, \x`\mathopen`, +\x`\mathclose`, \x`\mathpunct` and \x`\mathinner`. They can precede a nucleus of +the atom and they set the class of the atom. +For example, `x \mathrel+ y` behaves like `x = y` from a spacing point of view but + +is printed. Another example: `\mathop{\rm lim} z` creates the atom `lim` in +roman font of class Op. So, the thin space is inserted between lim and $z$. + +There are more special kinds of math atoms: fractions, math accents, +radicals. They are constructed in a special way (see next sections) but they behave +like Ord atom in the horizontal spacing algorithm. + +\secc[styles] Math styles + +When a formula (or a sub-formula) is processed by \TeX/ then one from four +\ii math/style,display/style,text/style,script/style,scriptscript/style +styles is active: display style ($D$), text style ($T$), script style ($S$) or +scriptscript style ($SS$). + +\ii T/style,D/style,S/style,SS/style The $T$ style is started in in-line math mode `$...$` and the $D$ +style is started in display math mode `$$...$$`. The first level of exponents or +subscripts is processed in $S$ style and the second and more levels of +exponents or indexes are processed in $SS$ style. +There are special rules for math styles when fractions are constructed, see +section~\ref[frac]. + +The $D$ and $T$ styles use basic \ii font/size font size, $S$ uses smaller font size (typically +70~\%) and $SS$ style uses more smaller font size (typically 50~\%). Next +levels of \"more smaller fonts" are not used due to classical typographic rules. + +The \ii nucleus nucleus of \iid Op atoms (big operators, $\sum$, $\int$, etc.) have typically bigger versions +of the character shape for $D$ style than for $T$ style. +So, there are four sizes for such math +objects: one size for each math style. All other math objects (with non Op +class) are printed only in three sizes: The sizes for $T$ and $D$ styles are equal. + +The \iid Op atom puts its \iid exponent and \iid subscript above and below the nucleus in $D$ +style but right to the nucleus in other styles: +$$ + `\sum``_{i=1}^\infty` \quad \hbox{gives}\quad \sum_{i=1}^\infty \hbox{ in $D$ style and} + \quad \textstyle \sum_{i=1}^\infty \hbox{ in $T$ style}. +$$ +This default behavior of the Op atom +can be modified by placing \x`\limits` or \x`\nolimits` or +\x`\displaylimits` \TeX/ primitive just after its nucleus before the constructors +of exponent and/or index. The `\nolimits` puts exponent and subscript right +to the nucleus (regardless of the current style) and `\limits` puts these +objects above and below the nucleus (regardless of the current style). There +can be more such primitives in a queue (due to a macro expansion, for +instance). Then the last primitive in the queue wins. +If the last primitive is \x`\displaylimits` then +the default behavior is processed regardless there are \x`\limits` or \x`\nolimits` +before it. +$$ + `\sum\nolimits``_{i=1}^\infty` \quad \hbox{gives}\quad \sum\nolimits_{i=1}^\infty + \hbox{ in $D$ style and}\quad \textstyle\sum\nolimits_{i=1}^\infty + \hbox{ in $T$ style}. +$$ +Atoms of all other classes have their exponents and/or subscripts only right +to their nucleus without any exception. + +The primitives \x`\displaystyle`, \x`\textstyle`, \x`\scriptstyle` and +\x`\scriptscriptstyle` set the given style regardless the default rules. For +example, you can create a formula in in-line math mode and in $D$ style by +`$\displaystyle <fomula>$` or a formula in display mode and $T$ style can be printed +by `$$\textstyle <fomrula>$$`. + +If a subformula is placed below something (below a line from root symbol, +below a fraction line), then the processed style $D, T, S$ or $SS$ is +\ii cramped/style {\em cramped}. +The exponents are positioned slightly lower than in +\ii non-cramped/style non-cramped style. The selectors `\displaystyle`\,\dots +`\scriptscriptstyle` mentioned above select non-cramped style. The +non-cramped style is selected when math mode starts too. +\new \OpTeX/ +You can select a cramped style by the macro \x`\cramped` at the start of the +math formula or after the math-style selectors: `\scriptstyle\cramped` for +example. + +Several macros need to know what math style is currently processed (for +example they need to draw something in an appropriate size). But it +not possible simply due to the syntax of fractions (section~\ref[frac]). +This syntax requires to process all math lists in two steps: the first step +expands all macros and creates structured data of processed math list. The +second step reads the output of the first step, switches between math +styles and creates definitive output. So, macros (working in the first step) +cannot know the current math +style because it is set only in the second step. \TeX/ supports the primitive +\x`\matchchioce``{<D>}{<T>}{<S>}{<SS>}` which prepares four math lists in the +first step and only one of these four lists are used in the second step. We +can put different macros into each of the four parameters of `\mathchoice`. +Plain \TeX/ supports the macro \x`\mathpalette` which gives a more comfortable +interface of \x`\mathchoice` to the macro programmer. +The cramped/non-cramped variants of the current style are kept when `\mathchioce` +is used. + +\new \OpTeX/ +We describe another interface for creating macros depending on the current +style. You can use \x`\mathstyles``{<math list>}`. It +behaves like `{<math list>}`, moreover, you can use the following commands inside such +<math list>: +\begitems +* The macro \x`\currstyle`. It expands to + `\displaystyle`, `\textstyle`, + `\scriptstyle` or `\scriptscriptstyle` depending on the current math style + when the `\mathstyles` was opened. +* The \x`\dobystyle``{<D>}{<T>}{<S>}{<SS>}` is expandable macro. It expands its + parameter `<D>`, `<T>`, `<S>` or `<SS>` depending on the current math style + when `\mathstyles` was opened. +* The value of the \x`\stylenum` register is 0, 1, 2 or 3 + depending on the current math style when `\mathstyles` was opened. +\enditems +% +Example of usage of \x`\mathstyles`: +\def\mysymbol{\mathbin\mathstyles + {\kern1pt\vrule height\mysymbolA width\mysymbolA\kern1pt}} +\def\mysymbolA{\dobystyle{5pt}{5pt}{3.5pt}{2.5pt}} +\begtt +\def\mysymbol{\mathbin\mathstyles + {\kern1pt\vrule height\mysymbolA width\mysymbolA\kern1pt}} +\def\mysymbolA{\dobystyle{5pt}{5pt}{3.5pt}{2.5pt}} +Test: $a\mysymbol b_{c \mysymbol d}$ or $a\mysymbol b\over c$. +\endtt +This example gives Test: $a\mysymbol b_{c \mysymbol d}$ or $a\mysymbol b\over c$. + +The \x`\mathstyles` macro mentioned above uses \TeX/ primitive \x`\mathchoice`, so it +creates four math lists and only one is used. It may take more +computer time in special cases. +\new Lua\TeX/ +Lua\TeX/ supports the \x`\mathstyle` primitive +(no \"`s`" at the end of this control sequence) which +expands to values 0 to 7 depending on the current style: +$D, D', T, T', S, S', SS, SS'$ +(where $X'$ means cramped variant of the style). This primitive does +not use `\mathchoice` but it simply ignores the fraction syntax, so +`$a\mysymbol b\over c$` cannot work if `\mysymbol` is defined using the `\mathstyle` +primitive. See section 7.3.1 of Lua\TeX/ documentation for more information. + + +\secc[frac] Fractions + +The \iid fraction can be constructed by `{<numerator>`\x`\over``<denominator>}`. If the +fraction is only a single object in the whole math mode (between dollars), +you need not use the outer braces, so you can write `$1\over2$` to get $1\over2$. + +The \ii numerator,denominator <numerator> and <denominator> are printed in \"smaller" math style than +current math style. More exactly the following schema is used. +$D$: $T\over T$., $T$: $S\over S$, $S$: $SS\over SS$, $SS$: $SS\over SS$. +For example +$$ + `{a+b \over c}` \quad \hbox{is printed as } + {a+b\over c} \hbox{ in $D$ style and as } + \textstyle {a+b\over c} \hbox{ in $T$ style}. +$$ + +The \LaTeX/ macro \x`\frac``{<numerator>}{<denominator>}` is not supported in +Plain \TeX/ nor in \OpTeX/ but you can define such macro if you want. + +The syntax with \x`\over` is more preferred because it is more human-readable +notation. You can write the fraction in the same manner as you can read it. +You can compare: `$1\over2$` (one over two) with `$\frac12$` (frac twelve). + +Besides the `\over` primitive, there are analogical \TeX/ primitives which +create \"generalized" fractions. The result is similar to `{<above>\over <below>}` +but there is something extra: + +\begitems +* `{<above>`\x`\atop``<below>}` does `{<above>\over<below>}` but + without the fractional rule. +* `{<above>`\x`\above``<dimen><below>}` creates fractional rule with <dimen> thickness. +* `{<above>`\x`\overwithdelims``<delim-l><delim-r><below>}` adds the <delim-l> left to + the fraction and the <delim-r> right to the fraction. +* `{<above>`\x`\atopwithdelims``<delim-l><delim-r><below>}` is analogical to + `\overwithdelims` but without fractional rule. +* `{<above>`\x`\abovewithdelims``<delim-l><delim-r><dimen><below>}` behaves as + `\overwithdelims` but the fractional rule has <dimen> thickness. +\enditems +% +The `\...withdelims` variants read <delim-l> and <delim-r>, they must be +declared as {\em math delimiter} in \TeX. They are vertically scalable +math objects, typically brackets. See section~\ref[delims] for more +information about math delimiters. Example: +$$ + `{n \atopwithdelims() k}`\quad \hbox{ creates } + {n \choose k} \hbox{ in $D$ style and } + \textstyle {n \choose k} \hbox{ in $T$ style}. +$$ +The \x`\choose` macro is defined by `\def\choose{\atopwithdelims()}`, so the +user can write `{n\choose k}` in order to get binomial coefficients. + + +\secc[delims] Vertically scalable objects: math delimiters + +The vertically scalable objects are called \ii delimiters {\em delimiters}. For example, +all types of brackets are declared as delimiters. +This means that you can use a bracket in arbitrary +vertical size.\fnote{ +This is not exactly true, because traditional typography says that they +cannot be scaled continuously but by visible steps. This means that there is +a sequence of increasing brackets in the font, the reader must see a difference +between every two sizes of brackets.} + +The following objects are declared as delimiters (i.e.\ vertically scalable): + +\bigskip +{\tt \adef!{\bslash} +\table{l 14c}{ + \rm source: & ( & ) & [ & ] & \code{\\\{} & \code{\\\}} & / + & !backslash & !langle & !rangle + & | & \code{\\|} & \cr + \rm output: &$($&$)$&$[$&$]$& $\{$ & $\}$ & $/$ + & $\backslash$ & $\langle$ & $\rangle$ + & $|$ & $\|$ +} +\medskip +\table{l 14c}{ + \rm source: & !lfloor & !rfloor & !lceil & !rceil \cr + \rm output: & $\lfloor$ & $\rfloor$ & $\lceil$ & $\rceil$ +} +\medskip +\table{l 14c}{ + \rm source: & !uparrow & !Uparrow & !dowarrow & !Downarrow + & !updownarrow & !Updownarrow \cr + \rm output: & $\uparrow$ & $\Uparrow$ & $\downarrow$ & $\Downarrow$ + & $\updownarrow$ & $\Updownarrow$ +}} +\bigskip +\noindent \new Unicode +If you can produce the characters $\langle$, $\rangle$,\fnote + {Do not confuse $\string<, >$ and $\langle, \rangle$. The first pair are Rel atoms + with meaning \"less than" or \"greater than", but the second pair are special + types of brackets. They are not directly available at computer keyboards without + using a keyboard macro.} +$\lfloor$, $\rfloor$, ... $\updownarrow$, $\Updownarrow$ +directly in your text editor then you can use these Unicode characters in your source instead of control +sequences `\langle`, `\rangle`, `\lfloor`, `\rfloor` ... `\updownarrow`, `\Updownarrow`. +For many users (including me), there is more simple to type `\lfloor` than to find +how to create the $\lfloor$ character in my text editor. Note that there exist +text editors (Emacs, for example) +enabling you to type `\lfloor` and this control sequence is immediately +converted to the $\lfloor$ Unicode character. +Your source text looks pretty and you can use classical \TeX/ sequences. + +\new Unicode +There are more \ii delimiters delimiters, but it heavily depends on loaded Unicode Math +font. For example, this document is printed in `latinmodern-math` font and +there are six more delimiters `\lBrack`~$\lBrack$, `\rBrack`~$\rBrack$, +`\lAngle` $\lAngle$, `\rAngle` $\rAngle$, `\lgroup` $\lgroup$, `\rgroup` $\rgroup$. +See section~\ref[objects] for table of all Unicode symbols for math typesetting. + +Arbitrary tall formula can be surrounded by a pair of delimiters using +\x`\left` and \x`\right` \TeX/ primitives: `\left<delim> <formula> \right<delim>`. +The delimiters are scaled to the height and depth of the <formula> +and vertically centered to the {\em math axis}.\fnote +{Math axis is a horizontal line passing through the center of symbols $+$ + and $-$. All vertically scalable objects are vertically centered with + respect to this axis.} +Example: +$$ + `+ \left\{ \sum_{i=1}^\infty x_i \right)` \quad \hbox{ gives } + + \left\{ \sum_{i=1}^\infty x_i \right). +$$ +The pair `\left<delim> <formula> \right<delim>` creates the formula in a +\TeX/ group. Such group can be nested with another groups. +Each `\left` must have its `\right` counterpart at the same group level. +If you don't want to create visible delimiter, use dot instead <delim>. +Example: +$$ + `\left. \int``_0^t e^{x^2}\,dx\, \right|_{t=42}` \quad \hbox{ gives } + \left. \int_0^t e^{x^2} \,dx\, \right|_{t=42} +$$ + +\new e\TeX/ +You can use \x`\middle``<delim>` inside the <formula> which is surrounded by +`\left...\right`. Then the given <delim> is scaled to the same size like +their `\left` and `\right` counterparts. + +When a delimiter is used without `\left` nor `\right` prefix, then it is the +Open, Close, Ord or Bin atom by its natural meaning: +$(, [, \{, \ldots, \lfloor, \lceil$ are Open atoms, +$], ], \}, \ldots, \rfloor, \rceil$ are Close atoms, +$/, \backslash, |, \|$ are Ord atoms and +$\uparrow, \Uparrow, \ldots, \Updownarrow$ are Bin atoms. You can overwrite +this default setting, for example `\mathclose(`. If delimiters are used with +`\left` and `\right` prefixes then `\left<delim>` behaves like Open atom, +`\right<delim>` behaves like Close atom and the math list +`\left<delim><formula>\right<delim>` is encapsulated as a single Inner atom. +The `\middle<delim>` behaves like Open atom at its left side and like Close +atom at its right side. + +The sequence of increasing delimiters can be printed by the following +macros: +$$ + `(` \to (,\quad \x`\big``(` \to \big(,\quad \x`\Big``(` \to \Big(,\quad + \x`\bigg``(` \to \bigg(, \quad \x`\Bigg``(` \to \Bigg(. +$$ +The `\Bigg<delim>` is not the maximal size of the bracket. Try +`\left(\vbox to5cm{}\right.`, for example. You can see that the font +\"cheats" from certain sizes, because there are not all infinity number of +sizes of brackets drawn in the font, of course. + +The `\big<delim>` creates Ord atom. We need to create Open atom +for opening bracket and Close atom for closing bracket more often. +Then we can use macros +\x`\bigl``<delim>`, +\x`\Bigl``<delim>`, +\x`\biggl``<delim>`, +\x`\Biggl``<delim>` for creating Open atoms and +\x`\bigr``<delim>`, +\x`\Bigr``<delim>`, +\x`\biggr``<delim>`, +\x`\Biggr``<delim>` for creating Close atoms. Unfortunately, the source is not +too attractive when more sizes of brackets are used, but typographic +traditions say that we have to distinguish brackets by the size in math +mode if they are in equal types: +$$ + `\Bigl( f\bigl( 2(x+y) + z\bigr) \Bigr)'` \quad \hbox{gives } + \Bigl(f\bigl(2(x+y)+z\bigr)\Bigr)'. +$$ + +\secc Horizontally scalable objects: math accents + +Arbitrary wide formula can be covered by \ii math/accent,accent {\em scalable math accent}. +Example: +$$ + \x`\overrightarrow`` {a+b+c+d+e+f}` \quad \hbox{gives } \overrightarrow {a+b+c+d+e+f}. +$$ +The usage is: control sequence of selected math accent followed by `{<math list>}`. + +Standard scalable math accents are: +\x`\overline` $\overline{abc}$, +\x`\overbrace` $\overbrace{abc}$, +\x`\overrightarrow` $\overrightarrow{abc}$, +\x`\overleftarrow`~$\overleftarrow{abc}$, +\x`\underline` $\underline{abc}$, +\x`\underbrace` $\underbrace{abc}$. + +An Op atom is created. The exponents and subscripts are centered above +and below the nucleus of this atom (regardless of the current style). Example: +$$ + `\overbrace {b\cdot b\cdot b \cdots b}^{k\times}` \quad \hbox{gives } + \overbrace {b\cdot b\cdot b \cdots b}^{k\times} +$$ +There are scalable accents with a limited maximum width: +\x`\widehat` $\widehat{abc}$ and \x`\widetilde` $\widetilde{abc}$. If the +formula is wider than the font can cover then the widest variant from the +font is used and it is horizontally centered. + +\new Unicode +There are more scalable accents in Unicode math fonts: +\x`\overparen` $\overparen{abc}$, \x`\underparen` $\underparen{abc}$, +\x`\overbracket` $\overbracket{abc}$, \x`\underbracket` $\underbracket{abc}$, +\x`\overleftrightarrow` $\overleftrightarrow{abc}$, +\x`\overleftharpoon` $\overleftharpoon{abc}$, +\x`\overrightharpoon` $\overrightharpoon{abc}$, + + +\secc Fixed math accents + +Fixed \ii math/accent,accent math accents can be applied to single math object or to the `{<math list>}`. +The accent is centered (with respect of slanting axis) and the result is a +nucleus of Ord +atom. For example `\dot x` gives $\dot x$. The list of fixed math accents +follows: \x`\acute`` x` $\acute x$, \x`\bar`` x` $\bar x$, +\x`\breve`` x` $\breve x$, \x`\check`` x` $\check x$, +\x`\dot`` x` $\dot x$, \x`\ddot`` x` $\ddot x$, +\x`\grave`` x` $\grave x$, \x`\hat`` x` $\hat x$, +\x`\vec`` x` $\vec x$, \x`\tilde`` x` $\tilde x$. + +\new Unicode +The additional fixed accents depends on used Unicode math font. The +`latinmodern-math` supports: +\x`\ovhook`` x` $\ovhook x$, \x`\ocirc`` x` $\ocirc x$, +\x`\leftharpoonaccent`` x` $\leftharpoonaccent x$, \x`\rightharpoonaccent`` x` $\rightharpoonaccent x$, +\x`\dddot`` x` $\dddot x$, \x`\ddddot`` x` $\ddddot x$, +\x`\widebridgeabove`` x` $\widebridgeabove x$, \x`\asteraccent`` x` $\asteraccent x$. + +There exist one special math accent `'` (single quote, ASCII 39) +which can be appended after a symbol like this: `f'` +and it creates $f'$ (typical meaning is the +derivation of the given function). You can put more such accents, for +example `g'''` gives $g'''$. + +\secc Roots + +There is a macro \x`\sqrt``{<math list>}` to create \ii square/root square root. For example: +$$ + `\sqrt{\sqrt{\sqrt{x+1}+1}+1}` \quad \hbox{gives } + \sqrt{\sqrt{\sqrt{x+1}+1}+1} +$$ +The \ii root $n$-th root is created by the macro \x`\root`` <n>\of{<math list>}`. For +example `\root k+1\of x` gives $\root k+1\of x$. + +\secc Math alphabets + +Letters \ii math/alphabet $a\dots z$, $A\dots Z$ and $\alpha$\dots$\omega$ are printed in italic +in math mode. This follows the traditional typographic rule. +All other math symbols, digits, and uppercase Greek letters must be +upright.\fnote +{French typographic convention says that uppercase Greek letters have to be + in italic too. Use `\_itGreek` declaration in this case.} +These rules are independent of the current variant of surrounding text font. + +If we want to use the letters or digits +in another than this default shape, then we can use +\ii math/alphabet/selector {\em math alphabet selectors}: +\x`\mit`, \x`\rm`, \x`\it`, \x`\bf`, \x`\cal`. +\new \OpTeX/ +\OpTeX/ supports more such selectors \x`\script`, \x`\frak`, \x`\bbchar`, \x`\bi`, see +section 1.3.3 in the \OpTeX/ documentation. The math selectors have local +validity in the group. + +The control sequences \x`\rm`, \x`\it`, \x`\bf`, and \x`\bi` act as variant selectors +of fonts in non-math mode (text mode) and they act +as math alphabet selectors in math mode. This \"overlaying" concept +is given by Plain \TeX/. Example: math operators lim, sin, cos, +log, etc.\ must be printed unslanted. We are using `\lim`, `\sin`, `\cos`, +`\log` etc.\ in math mode in order to comply with this typographic convention. For +example `\sin` is defined as: +\begtt +\def\sin {\mathop{\rm sin}\nolimits} +\endtt +The `\rm` is used here as math alphabet selector, no variant selector of +text fonts. + +The list of all predefined `\rm`-like math operators follows: \x`\arccos`, +\x`\arcsin`, \x`\arctan`, \x`\arg`, \x`\cos`, \x`\cosh`, \x`\cot`, \x`\coth`, \x`\deg`. +\x`\det`, \x`\dim`, \x`\exp`, \x`\gcd`, \x`\hom`, \x`\inf`, \x`\ker`, \x`\lg`, \x`\lim`, +\x`\liminf`, \x`\limsup`, \x`\ln`, \x`\log`, \x`\max`, \x`\min`, \x`\Pr`, \x`\scs`, \x`\sin`, +\x`\sinh`, \x`\sup`, \x`\tan`, \x`\tanh`, You can define another such operator +analogically. + +\new Unicode +Unicode font can include the following math alphabets: +\begtt \typosize[9/11] +\_rmvariables % upright letters A-Z, a-z +\_bfvariables % bold letters A-Z, a-z +\_itvariables % italic letters A-Z, a-z +\_bivariables % bold italic letters A-Z, a-z +\_calvariables % calligraphic letters A-Z, a-z +\_bcalvariables % calligraphic letters A-Z, a-z +\_frakvariables % fraktur A-Z, a-z +\_bfrakvariables % bold fraktur A-Z, a-z +\_sansvaraibales % sans serif letters A-Z, a-z +\_bsansvaraibales % bold sans serif letters A-Z, a-z +\_isansvaraibales % slanted sans serif letters A-Z, a-z +\_bisansvaraibales % bold slanted sans serif letters A-Z, a-z +\_ttvariables % monospace, typewriter letters A-Z, a-z +\_bbvariables % double struck A-Z, a-z +\_rmdigits % upright digits 0..9 +\_bfdigits % bold digits 0..9 +\_sansdigits % sans serif digits 0..9 +\_bsansdigits % bold sans serif digits 0..9 +\_ttdigits % monospace typewriter digits 0..9 +\_bbdigits % double-struck digits 0..9 +\_rmgreek % upright Greek letters \alpha-\omega +\_itgreek % slanted Greek letters \alpha-\omega +\_bfgreek % bold Greek letters \alpha-\omega +\_bigreek % bold italic Greek letters \alpha-\omega +\_bsansgreek % bold sans serif Greek letters \alpha-\omega +\_bisansgreek % bold slanted snas serif Greek letters \alpha-\omega +\_itGreek % slanted Greek letters \Alpha-\Omega +\_bfGreek % bold Greek letters \Alpha-\Omega +\_biGreek % bold italic Greek letters \Alpha-\Omega +\_bsansGreek % bold sans serif Greek letters \Alpha-\Omega +\_bisansGreek % bold slanted snas serif Greek letters \Alpha-\Omega +\endtt +% +Not all Unicode math fonts include all math alphabets listed here. Typically, +the lowercase letters of calligraphic shape and all letters of +bold calligraphic shape are missing. + +\new \OpTeX/ +\OpTeX/ defines internal math alphabet selectors as mentioned in the +previous listing of math alphabets and sets as default: +\begtt \typosize[10/12] +\_itvariables \_rmdigits \_itgreek \_rmGreek +\endtt +% +Moreover, it defines the alphabet selectors at user level (see section 1.3.3 +of the \OpTeX/ manual). For example +\begtt \typosize[10/12] +\def\rm {\_tryload\_tenrm \_inmath{\_rmavariables \_rmdigits}} +\endtt +% +The first part +\new \OpTeX/ +`\_tryload\_tenrm` is applicable for text fonts and the +`\_inmath` part is processed only in math mode and sets the math alphabets. +You can see the file `unimath-codes.opm` where all user-level selectors are +defined. You can redefine them. For example, \OpTeX/ defines `\bf` as a math +alphabet selector that selects sans serif bold in math. This is the common +notation for vectors, tensors, and matrices. If you dislike this, then you can define: +\begtt \typosize[10/12] +\def\bf {\_tryloadbf\_tenbf \_inmath{\_bfvariables\_bfdigits\_bfgreek\_bfGreek}} +\endtt + + +\secc[objects] List of single math objects + +\new Unicode +All \ii single/math/object single math objects are listed in the `unimath-table.opm` or +`unicode-math-table.tex` file. You can +look into this file. The codes, \TeX/ sequences, classes, and comments +for all possible math codes are here. Maybe, your Unicode math font which is loaded +does not support all these codes. +\new \OpTeX/ +You can try all codes of the currently loaded font by +\begtt +\input print-unimath.opm +\endtt +The `unimath-table` is printed with characters available in the loaded font. +\new \OpTeX/ +If the character is unsupported by the font then the slot is empty and only +\TeX/ sequence and the class of the code is printed in the table. +For example, this document loads `latimodern-math.otf` font. +And the result from `\input print-unimath.opm` looks like the following ten +pages. + +Unsupported characters can be replaced by characters from other Unicode math +font, see +\ulink[http://petr.olsak.net/optex/optex-tricks.html\#addumathfont]{OpTeX trick 0030} +or section~\ref[newfam]. + + +\label[listA]\wlabel{} + +\bigskip +\input print-unimath.opm +\bigskip + +\label[listB]\wlabel{} + +It isn't very comfortable to find something in the previous table +if you know the shape. You can try the online web tool \ii Detexify +\ulink[https://detexify.kirelabs.org/classify.html]{Detexify}. +You can draw the symbol here and the suggestion of \TeX/ sequence is +printed. + +\def\g#1{{\tt\string#1}~$#1$} + +The generic \TeX/ sequences for the Greek letters \ii Greek/letters can be used: +\g\alpha, \g\beta, \g\gamma, \g\delta, \g\varepsilon, \g\zeta, \g\eta, +\g\theta, \g\iota, \g\kappa, \g\lambda, \g\mu, \g\nu, \g\xi, +\g\omicron, \g\pi, \g\rho, \g\varsigma, \g\sigma, \g\tau, \g\upsilon, +\g\varphi, \g\chi, \g\psi, \g\omega, \g\vardelta, \g\epsilon, \g\vartheta, +\g\varkappa, \g\phi, \g\varrho, \g\varpi\ +and +\g\Alpha, \g\Beta, \g\Gamma, \g\Delta, \g\Epsilon, \g\Zeta, \g\Eta, \g\Theta, +\g\Iota, \g\Kappa, \g\Lambda, \g\Mu, \g\Nu, \g\Xi, \g\Omicron, \g\Pi, \g\Rho, +\g\Sigma, \g\Tau, \g\Upsilon, \g\Phi, \g\Chi, \g\Psi, \g\Omega. + +\new \OpTeX/ +The variant of Greek letters in the output +(upright, italic, bold, bold sans serif, etc.) +written by the sequences `\alpha`, `\beta` etc. depends on the math alphabet +selected by `\_itgreek`, `\_rmgreek`, etc. selectors. The user-level +selectors `\bf` and `\bi` set `\_bsansgreek` and `\_bisansgreek`, so +`{\bi\delta}` produces $\bi\delta$. + +\new Unicode +All characters available in the math font can be accessed by \TeX/ control +sequence or by directly using the Unicode character in the document source. +Example: +\begtt \adef/{} +$$ + \sum/_{k=0}^\infty e^{(\alpha+i\beta/_k)} = + e^\alpha \sum/_{k=0}^\infty e^{i\beta/_k} = + e^\alpha \sum/_{k=0}^\infty (\cos\beta/_k + i\sin\beta/_k). +$$ +\endtt +or +\begtt \ttspec +$$ + ∑_{k=0}^∞ e^{(α + iβ_k)} = e^α ∑_{k=0}^∞ e^{iβ_k} + = e^α ∑_{k=0}^∞ (\cos β_k + i\sin β_k). +$$ +\endtt +both gives the same result: +$$ + ∑_{k=0}^∞ e^{(α + iβ_k)} = e^α ∑_{k=0}^∞ e^{iβ_k} + = e^α ∑_{k=0}^∞ (\cos β_k + i\sin β_k). +$$ +\medskip + + +\sec Other specialities + +\secc The `\not` prefix + +You can apply \x`\not` before a following math object. +The slash $/$ is overprinted such math object, for example +`$a \not= b$` gives $a \not= b$. + +\new \OpTeX/ +If there exists a direct Unicode character for the negation of a relation symbol +(for example `\ne` creates $\ne$ directly as a character U+2260) +then `\not<char>` expands to appropriate Unicode character. +For example `\not=` expands to `\ne` or `\not\in` expands to `\notin`. +If such character does not exist then +the centered $/$ is overprinted over the next character. + + +\secc The `\buildrel` macro: text over the relation + +The macro \x`\buildrel`` <text>\over <relation>` creates a new atom Rel with the +<relation> and with the smaller <text> above this <relation>. Example: +`$M \buildrel\rm def\over= X\cup Y$` gives $M\buildrel\rm def\over= X\cup Y$. + + +\secc Spaces + +Spaces between atoms are created automatically as were mentioned in +section~\ref[class]. But sometimes you have to help \TeX/ to create +appropriate space. You can use following macros: + +\begitems +* `\,` is \ii thin/space {\em thin space} used around Op atoms, after comma, etc.: \ss\,, +* `\!` is \ii negative/thin/space negative thin space, +* `\>` is \ii medium/space {\em medium space} used around Bin atoms: \ss\>, +* `\;` is \ii thick/space {\em thick space} used around Rel atoms: \ss\;, +* \x`\quad` is \ii em/space {\em em space}: \ss\quad, +* \x`\qquad` is \ii double/em/space {\em double em space}: \ss\qquad. +\enditems +% +Of course, you can use \ii direct/space {\em direct space} {\visiblesp`\ `} which is \TeX/ primitive +and gives interword space: \ss\ \ +or you can use \x`\hskip`` <value>` to put arbitrary space. + +The space size of `\,`, `\!` resp. `\>`, resp. `\;` is given by +`\thinmuskip`, resp. `\medmuskip`, resp. `\thickmuskip` values. You can see +in the `plain.tex` file that these default values differ very little in their basic +size but there is no stretchability/shrinkability in the `\,` space, there is small +stretchability in the `\>` space, and more stretchability in the `\;` space. + +The registers \x`\thinmuskip`, \x`\medmuskip`, and \x`\thickmuskip` store so-called +\ii mu/values {\em mu values} given by math unit `mu`. It is 1/18 em and this unit depends +on the current font size used in the math formula ($S$ or $SS$ styles use +smaller font size, the `mu` unit is smaller here). You can use \x`\muskip` +instead `\hskip` or \x`\mukern` instead `\kern` if you want to use this +special mu unit. It is allowed only in math mode. + +The \x`\quad` and \x`\qquad` spaces have fixed width and they can be used in text +mode too. (\OpTeX/ allows to use `\,` in text mode too). +Use `\quad` or `\qquad` if you want to separate more formulas created in +single math mode. Examples of typical usage of spaces: + +\begtt \adef/{} \typosize[10/12] +$$ \alpha\,(x+y), \qquad \int/_a^b \!\! f(x)\,{\rm d}x, \qquad \Gamma/_{\!i}. $$ +\endtt +$$ \alpha\,(x+y), \qquad \int_a^b \!\! f(x)\,{\rm d}x, \qquad \Gamma_{\!i}. $$ + + +\secc Texts in math mode + +If you write `$Hello world!$` (i.e.\ Hello world in math mode), then you get +$Hello world!$. It is interpreted as the product of variables $H$, and $e$, and +$l^2$, and $o$, etc., followed by the symbol ! used for factorial. +The non-ASCII letters (with accents) don't work at all because they are +never used as symbols for variables. Spaces are ignored. + +If you want to write a short text in the math mode, then you can use +`\hbox{<text>}`. The \x`\hbox` primitive initializes text mode regardless of +the \"outer mode". Example: + +\begtt \adef/{} \typosize[10/12] +$$ \sum/_{n=0}^\infty (-1)^n a_n \hbox{ converges, if $a_n\searrow 0$.} $$ +\endtt +$$ \sum_{n=0}^\infty (-1)^n a_n \hbox{ converges, if $a_n\searrow 0$.} $$ +% +Note the space before the word \"converges". The space before `\hbox` is +irrelevant. Second notice: the example shows the text mode inside math mode +and the in-line math mode inside this text mode. The same result can be +produced by: + +\begtt \adef/{} \typosize[10/12] +$$ \sum/_{n=0}^\infty (-1)^n a_n \hbox{ converges, if } a_n\searrow 0. $$ +\endtt +% +The difference can be visible if the formula $a_n\searrow 0$ includes a +fraction, for example ${1\over2}a_n\searrow 0$. The first example prints the +fraction in the text style and the second example prints it in the display style. + +The disadvantage of `\hbox` is that it starts in the text mode independently +of the current style, but we want to use smaller font in $S$ or $SS$ styles. +\new \OpTeX/ +You can use \x`\mathbox``{<text>}` in such situations. This macro behaves like +`\hbox` but the text is appropriately smaller in $S$ and $SS$ styles. +Example: +$$ + `{\mathbox{cena}\over\mathbox{výkon}}` \quad \hbox{gives } + {\mathbox{cena}\over\mathbox{výkon}} \hbox{ in $D$ style and } + \textstyle {\mathbox{cena}\over\mathbox{výkon}} \hbox{ in $T$ style.} +$$ +Note that $\mathbox{cena}\over\mathbox{výkon}$ means $\rm price\over performance$ +and you can write `$\rm price\over performance$` when you are using only +words without spaces and accented letters. But phrases with spaces or accented letters +should be printed in text mode using `\hbox` or `\mathbox`. + +\secc `\vcenter` + +The \x`\vcenter` primitive behaves like `\vbox`, but it can be used only in +math mode and its result is vertically centered to the math axis. +For example, matrices, are created by tables in `\vcenter`. + +All big objects in math formula are centered on the math axis and the baseline is +ignored. In the following example, we create a new big math operator by +`\vcenter`: +\begtt +$$ + \def\myop#1{\mathop{\vcenter{\frame{\vbox to2em{\vss\hbox{ $#1$ }\vss}}}}} + F(x) = \myop{x(i)}_{i=1}^\infty +$$ +\endtt +\vskip-2em +$$ + \def\myop#1{\mathop{\vcenter{\frame{\vbox to2em{\vss\hbox{ $#1$ }\vss}}}}} + F(x) = \myop{x(i)}_{i=1}^\infty +$$ + + +\secc Three dots + +You can write `$1,2,\dots,n$` to get $1,2,\dots,n$. The \x`\dots` macro puts +thin space between dots and after the last dot, so the five object: comma, +dots, comma are exactly equidistant. + +Typographic conventions say that you have to use the repeating symbol +before and after three dots (comma in the previous example) and the three dots +should be at baseline if the repeating symbol is at baseline. Or they should be +at the math axis if the repeating symbol is at the math axis. We have to use \x`\cdots` instead +`\dots` in the second case. Example: +$$ + `a_1, a_2, \dots, a_n, \quad a_1 + a_2 + \cdots + a_n` \qquad + a_1, a_2, \dots, a_n, \quad a_1 + a_2 + \cdots + a_n +$$ +\vskip-.7em +There are \x`\vdots` $\vdots$, \x`\ddots` $\ddots$ and \x`\adots` $\adots$ which +can be used in matrices. + +\new Unicode +Three dots like the output of the `\dots` macro are present as a single +character in fonts too. This character is called ellipsis. Font designers +typically suggest this character with smaller spaces between dots than we +need in math mode. So the rule about equidistant \"comma, three dots, comma" +is not met when this character is used. You can try `$1,2,\unicodeellipsis, n$` +and `$1+2+\unicodecdots + n$`. You get $1,2,\unicodeellipsis, n$ and +$1+2+\unicodecdots + n$. If you feel that this is better, then you can set: +`\let\dots=\unicodeellipsis \let\cdots=\unicodecdots`. + +The Unicode fonts includes compact variants `\unicodevdots` $\unicodevdots$, +`\unicodeddots` $\unicodeddots$ and `\unicodeadots` $\unicodeadots$ too. + + +\secc Phantoms and `\smash` + +The \x`\phantom``{<math list>}` macro creates an invisible subformula equal to +the formula generated by <math list>. It has its size, so it can +interfere with surrounding visible subformulas. This macro is very useful for +aligning with special requirements. Examples are shown in +sections~\ref[matrix] and~\ref[elines]. + +The \x`\vphantom``{<math list>}` has only its vertical size (i.e.\ its height +and depth), the width is zero. The \x`\hphantom``{<math list>}` has only its +width. + +The \x`\smash``{<math list>}` is the opposite of `\vphantom`. It creates visible +subformula but it has only its width. Its height and depth are zero. + +The result of these macros is the nucleus of an Ord atom. You can use `\mathop`, +`\mathbin`, etc. primitives to change this class. For example +`$a\mathrel{\phantom{=}}b$` creates the same formula as $a=b$ with the same +distance from $a$ to $b$ but without the equal sign: +$a\mathrel{\phantom{=}}b$. + +These macros work in the text mode too. Then their argument is +the <horizontal list>. + + +\sec Structured objects + +\secc[matrix] Matrices + +The macro \x`\matrix``{<data>}` creates a vertically centered table of items. +The <data> includes <items> separated by `&` and rows are separated by +`\cr`. The number of columns and rows are unlimited. Columns are printed centered +and separated by the `\quad` space. The vertically scalable +brackets around the table are not printed. You can use \x`\pmatrix``{<data>}` +instead `\matrix{<data>}`: the vertically scalable parentheses () are inserted +around the table. Examples: + +\begtt +$$ + {\bf A} = \pmatrix{a_{1,1} & a_{1,2} & \cdots & a_{1,n} \cr + a_{2,1} & a_{2,2} & \cdots & a_{2,n} \cr + \vdots & \vdots & \ddots & \vdots \cr + a_{m,1} & a_{m,2} & \cdots & a_{m,n} }, +$$ +\endtt +$$ + {\bf A} = \pmatrix{a_{1,1} & a_{1,2} & \cdots & a_{1,n} \cr + a_{2,1} & a_{2,2} & \cdots & a_{2,n} \cr + \vdots & \vdots & \ddots & \vdots \cr + a_{m,1} & a_{m,2} & \cdots & a_{m,n} }, +$$ +or: + +\begtt +\def\qmatrix[#1]{\left[\matrix{#1}\right]} +$$ + \qmatrix[a&b&c\cr d&e&f\cr g&h&i] \cdot \qmatrix[x_1\cr x_2\cr x_3] + = \qmatrix[b_1\cr b_2\cr b_3]. +$$ +\endtt +$$ + \def\qmatrix[#1]{\left[\matrix{#1}\right]} + \qmatrix[a&b&c\cr d&e&f\cr g&h&i] \cdot \qmatrix[x_1\cr x_2\cr x_3] + = \qmatrix[b_1\cr b_2\cr b_3]. +$$ + +If you need to align the columns by another way than to center, then you can +use the phantom. Compare: + +\begtt +$$ + \pmatrix{ 1 & -1 & 0 \cr + 0 & 2 & 13 \cr + -3 & 0 & 5 } \quad \hbox{or} \quad + \def\0{\phantom0} \def\+{\phantom+} + \pmatrix { \+1 & -1 & \00 \cr + \+0 & \+2 & 13 \cr + -3 & \+0 & \05 } +$$ +\endtt +$$ + \pmatrix{ 1 & -1 & 0 \cr + 0 & 2 & 13 \cr + -3 & 0 & 5 } \quad \hbox{or} \quad + \def\0{\phantom0} \def\+{\phantom+} + \pmatrix { \+1 & -1 & \00 \cr + \+0 & \+2 & 13 \cr + -3 & \+0 & \05 } +$$ + +\new\OpTeX/ +Another option to set the right aligned matrix is setting the \x`\lmfil`: +Its value is used on the left side in each `\matrix` item. The right side is +set directly to `\hfil`. +\begtt +$$ + \lmfil={\hfill} % left matrix filler = \hfill + \pmatrix{ 1 & -1 & 0 \cr 0 & 2 & 13 \cr -3 & 0 & 5 } +$$ +\endtt + +\new \OpTeX/ +If you want to draw a vertical line inside the matrix, you can use `\adef|` +as in the following example: +\begtt +$$ + \adef|{\kern-.2em&\strut\vrule&\kern-.2em} + \def\+{\phantom+} + \pmatrix{1 & 2 & 3 | 0 \cr 4 & 5 & 6 | 1 \cr 7 & 8 & 9 | 2 } \sim + \pmatrix{1 & \+2 & \+3 | 0 \cr 0 & -3 & -6 | 1 \cr 0 & -6 & -12 | 2} \sim + \pmatrix{1 & 2 & 3 | 0 \cr 0 & 1 & 2 | -1/3 \cr 0 & 0 & 0 | 1 } +$$ +\endtt +$$ + \adef|{\kern-.2em&\strut\vrule&\kern-.2em} + \def\+{\phantom+} + \pmatrix{1 & 2 & 3 | 0 \cr 4 & 5 & 6 | 1 \cr 7 & 8 & 9 | 2 } \sim + \pmatrix{1 & \+2 & \+3 | 0 \cr 0 & -3 & -6 | 1 \cr 0 & -6 & -12 | 2} \sim + \pmatrix{1 & 2 & 3 | 0 \cr 0 & 1 & 2 | -1/3 \cr 0 & 0 & 0 | 1 } +$$ + +If you want to put something before the opening bracket in the matrix, you can +use another `\matrix`. Example: + +\begtt +$$ + \adef|{\kern-.2em&\strut\vrule&\kern-.2em} + \def\+{\phantom+} + \def\r{{\bf r}} + \pmatrix{1 & 2 & 3 | 0 \cr 4 & 5 & 6 | 1 \cr 7 & 8 & 9 | 2 } \ \sim \ + \matrix{\cr 2.\r - 4\cdot 1.\r: \cr 3.\r -7\cdot 1.\r: } + \pmatrix{1 & \+2 & \+3 | 0 \cr 0 & -3 & -6 | 1 \cr 0 & -6 & -12 | 2} +$$ +\endtt +$$ + \adef|{\kern-.2em&\strut\vrule&\kern-.2em} + \def\+{\phantom+} + \def\r{{\bf r}} + \pmatrix{1 & 2 & 3 | 0 \cr 4 & 5 & 6 | 1 \cr 7 & 8 & 9 | 2 } \ \sim \ + \matrix{\cr 2.\r - 4\cdot 1.\r: \cr 3.\r -7\cdot 1.\r: } + \pmatrix{1 & \+2 & \+3 | 0 \cr 0 & -3 & -6 | 1 \cr 0 & -6 & -12 | 2} +$$ + +Plain \TeX/ defines the \x`\bordermatrix` macro which allows you to create a +top row above the brackets and left column before the opening bracket. +\TeX/book shows the following example: + +\begtt +$$ + M = \bordermatrix{ &C&I&C'\cr + C&1&0&0 \cr I&1-b&0 \cr C'&0&a&1-a } +$$ +\endtt +$$ + M = \bordermatrix{ &C&I&C'\cr + C&1&0&0 \cr I&1-b&0 \cr C'&0&a&1-a } +$$ + +The `\matrix` macro used in $D$ style creates all its items in $T$ style. +\new \OpTeX/ +If you are using the `\matrix` macro in $T$ style or $S$ style (but not in +fractions nor another matrices) then the resulting table is appropriately +smaller and all its items are processed in $S$ style. +If you are using `\matrix` in $SS$ style then the items are in $SS$ style too. +The following example shows one-column matrix in script style: +$$ + `\sum``_{\matrix{i\in M\cr j\in N\cr k\in P}} x_{i,j,k}` \ \hbox{ creates: } + \sum_{\matrix{i\in M\cr j\in N\cr k\in P}} x_{i,j,k} +$$ + + +\secc Cases + +The \x`\cases` macro can be used as in the following example: + +\begtt +$$ + f(x) = \cases{ 1 & for $x\le 0$, \cr + 100-x\over 100 & when $0 < x \le 100$, \cr + 0 & in other cases. } +$$ +\endtt +$$ + f(x) = \cases{ 1 & for $x\le 0$, \cr + 100-x\over 100 & when $0\string< x\le 100$, \cr + 0 & in other cases. } +$$ + +The `\cases` macro behaves like a special `\matrix` with two left-aligned +columns and with left vertically scaled brace $\{$. +The first column is processed in math mode and $T$ style, the second column +is processed in text mode. We have to use `$...$` in the second column if +there is math material. + + +\sec Lines in display mode + +\secc General principles + +The \ii display/math,display/math/mode +`$$<formula>$$` finalizes previous paragraph, prints centered <formula> on +single line with a vertical space above and below and opens next paragraph +with no indentation. + +From \TeX/'s point of view, the text above `$$<formula>$$` plus text +below is a single paragraph interrupted by display <formula>. If there is no +text above (i.e. the opening `$$` are in vertical mode), then the internal +`\noindent` is processed first and the empty line above <formula> is created. +Thus, it is definitely a bad idea to open display mode in vertical mode: never +put an empty line before `$$<formula>$$`. On the other hand, the empty line +just after `$$<formula>$$` says that the paragraph is finalized by the +<formula> and the next text (after the empty line) opens the next paragraph with +indentation. Summary: + +\begitems +* \"Text above `$$<formula>$$` text below": the <formula> interrupts the + paragraph with \"Text above" and \"text below". The \"text below" is + without indentation. +* \"Text above `$$<formula>$$` empty line Text below": the \"Text below" + opens new paragraph with indentation. +* \"Empty line `$$<formula>$$`" is bad practice. +\enditems + +In contrast with the paragraph breaking, there is no built-in algorithm for +breaking display <formula> to more lines. If the <formula> is too wide then +overfull `\hbox` occurs and human must decide about splitting the <formula> +to more lines. The macros `\displaylines` and `\eqalign` are intended to +such task, see sections~\ref[dlines] and~\ref[elines]. + +On the other hand, the in-line math <formula>, i.e.\ the `$<formula>$` in a +paragraph, can be broken after a Bin atom (with penalty `\binoppenalty`) or +after a Rel atom (with penalty `\relpenalty`). If you don't want to break +such a formula at a specific place then use `\nobreak`, for example +`$a+\nobreak b$`. If you want never to break such formulas then you can set +`\binoppenalty=10000`, `\relpenalty=10000`. (Default values are 700 and 500.) + + +\secc References to display lines + +The `$$<formula>`\x`\eqno``<mark>$$` \ii mark prints centered <formula> and the <mark> at +right margin. The `$$<formula>`\x`\leqno``<mark>$$` prints centered <formula> and +the <mark> at left margin. Examples: + +\begtt +$$ a^2 + b^2 = c^2 \eqno (1) $$ +\endtt +$$ + a^2 + b^2 = c^2 \eqno (1) +$$ +\begtt \aftergroup\nobreak +$$ a^2 + b^2 = c^2 \leqno \rm Py $$ +\endtt +$$\predisplaypenalty=10000 + a^2 + b^2 = c^2 \leqno \rm Py +$$ +The <mark> \ii mark is processed in math mode and $T$ style. If you want to put a +text here then you have to use `\rm <text>` or `\hbox{<text>}`. + +\new \OpTeX/ +The auto-generated <mark> can be created by `$$<formula>`\x`\eqmark``$$`. The +<label> can be used previously declared by \x`\label``[<label>]`. +Then it is associated to such +auto-generated <mark> and you can write a reference in the form +`see equation~\ref[<label>]`. You can write `\eqmark[<label>]` instead of +`\label[<label>]...\eqmark`. See the \OpTeX/ manual, section~1.4.3. + +\secc[dlines] The `\displaylines` macro + +This macro creates more horizontally centered formulas in one display mode. +The syntax is +\begtt \catcode`\<=13 +$$ \displaylines{ + <formula> \cr + <formula> \cr + ... \cr + <formula> +} $$ +\endtt +Usage of \x`\displaylines` is more +prefered than doing more display modes just behind each other. +Example: +\begtt +$$ \displaylines{ + (3x^3 + 4x^2 + 5x + 6) \cdot (x^6 + x^2 + 5) = \cr + = 3x^9 + 4x^8 + 5x^7 + 6x^6 + 3x^5 + 4x^4 + 20x^3 + 26x^2 + 25x + 30. +} $$ +\endtt +$$ \displaylines{ + (3x^3 + 4x^2 + 5x + 6) \cdot (x^6 + x^2 + 5) = \cr + = 3x^9 + 4x^8 + 5x^7 + 6x^6 + 3x^5 + 4x^4 + 20x^3 + 26x^2 + 25x + 30. +} $$ + +The output from `\displaylines` macro is breakable to more pages because +the lines are not encapsulated in one box. The macro uses a special feature of +`\halign` primitive. The disadvantage is that you cannot use `\eqno` nor +`\leqno` nor `\eqmark`. + +\new \OpTeX/ +\OpTeX/ provides alternative form: `\displaylines to<dimen> {<data>}`. +Then the centered formulas are encapsulated in a `\vcenter` box of width <dimen> and +usage of `\eqno` or `\leqno` or `\eqmark` is allowed. +The individual lines have the form `\hbox to<dimen>` and formulas are centered using +`\hss` from both sides. This means that you can set arbitrary <dimen> +without visual change of the formulas. Use smaller <dimen> value than +`\hsize` (or `\displaywidth`\fnote +{`\displaywith` = `\hsize` in most cases but it is +real display width when `\parshape` or `\hangindent` is used.}) +if you want to center formulas with `\eqno` appended. +The internal \TeX/ rule says: the formula with `\eqno` (or `\leqno`) is centered +if its width is less or equal `\displaywidth-4<mark-width>`. So +\begtt \catcode`\<=13 +$$ \displaylines to\hsize-8em {<formula>\cr<formula>}\eqno (1) $$ +\endtt +does global centering, because size of `(1)` is less than 2\,em. +You can do more experiments with this example, +for example `\diplaylines to\hsize{...}` +puts the `\eqno` mark to the next line in the display environment. Read +\TeX/book or \TeX/book naruby, where the precise explanation about such +positioning is. + +\new \OpTeX/ +You can use \"`\displaylines to<dimen>`" for more applications. For example, +you can put more +\"`\displaylines to<dimen>`" in single display mode, one next to second in order +to creating more centered columns with formulas; the width of such columns +are controlled by the <dimen> parameter. +Or, you can give an exception for several lines: + +\begtt \catcode`\<=13 +$$\displaylines to 10cm {<formula>\hfill \cr + <formula>\cr + <formula>\cr + \hfill <formula>} +$$ +\endtt +The example above gives similar result as the \LaTeX/ `multline` environment: +$$\displaylines to \hsize { + (3x^3 + 4x^2 + 5x + 6) \cdot (x^6 + x^2 + 5) = \hfill \cr + = 3x^9 + 3x^5 + 15x^3 + 4x^8 + 4x^4 + 20x^2 + 5x^7 + 5x^3 + 25x + + 6x^6 + 6x^2 + 30 = \cr + \hfill = 3x^9 + 4x^8 + 5x^7 + 6x^6 + 3x^5 + 4x^4 + 20x^3 + 26x^2 + 25x + 30. } +$$ + + +\secc[elines] The `\eqalign` macro + +The \ii .eqalign \iis .eqalign {{\code{\\eqalign}}} usage is: +\begtt \catcode`\<=13 +$$ \eqalign { <left-side> & <right-side> \cr + <left-side> & <right-side> \cr + ... \cr + <left-side> & <right-side> +} $$ +\endtt +The `\vcenter` box is created with two columns, left column is right aligned +and right column is left aligned. Example: + +\vbox{ +\begtt +$$ \eqalign{ + x + 2y + 3z &= 600 \cr + 12x + y - 3z &= 7 \cr + 4x - y + 5z &= -5 \cr +} $$ +\endtt +\vskip-5.7\baselineskip +{\hsize=1.35\hsize +$$ \eqalign{ + x + 2y + 3z &= 600 \cr + 12x + y - 3z &= 7 \cr + 4x - y + 5z &= -5 \cr +} $$}} + +\bigskip\noindent +The tab \"`&`" should be used just before a relation, i.e. `&=` is right, `=&` +is wrong. All lines are aligned to the used tab. + +Maybe you want more precise alignment in the example above. You can use +`\phantom`: + +\par\nobreak\vbox{ +\begtt +$$ \def\1{\phantom1} \def\+{\phantom+} + \eqalign{ + x + 2y + 3z &= 600 \cr + 12x + \1y - 3z &= \+7 \cr + 4x - \1y + 5z &= -5 \cr +} $$ +\endtt +\vskip-5.7\baselineskip +{\hsize=1.35\hsize +$$ \def\1{\phantom1} \def\+{\phantom+} + \eqalign{ + x + 2y + 3z &= 600 \cr + 12x + \1y - 3z &= \+7 \cr + 4x - \1y + 5z &= -5 +} $$}} +\bigskip +Another typical usage of the `\eqalign` macro: + +\begtt \typosize[10/12] +$$ \eqalign{ + p(x)\,q(x) &= (3x^3 + 4x^2 + 5x + 6) \cdot (x^6 + x^2 + 5) = \cr + &= 3x^9 + 4x^8 + 5x^7 + 6x^6 + 3x^5 + 4x^4 + 20x^3 + 26x^2 + 25x + 30. +} $$ +\endtt +$$ \eqalign{ + p(x)\,q(x) &= (3x^3 + 4x^2 + 5x + 6) \cdot (x^6 + x^2 + 5) = \cr + &= 3x^9 + 4x^8 + 5x^7 + 6x^6 + 3x^5 + 4x^4 + 20x^3 + 26x^2 + 25x + 30. +} $$ + +In \OpTeX/, \new\OpTeX/ +the `\eqalign` macro is more flexible. You can set the +`\baselineskip` value by the \x`\eqlines` parameter and math style +by the \x`\eqstyle` parameter. +For example, you need to put the system of \"equations" as a subscript of a sum +operator: +\begtt \typosize[10/12] \adef/{} +$$ + \sum/_{\eqlines{\baselineskip=.7\baselineskip}\eqstyle{\scriptstyle}\eqalign{ + i &\in A \cr + \quad j &\in B\cup C \cr + m &\in C }} + i + j + m +$$ +\endtt +$$ + \sum_{\eqlines{\baselineskip=.7\baselineskip}\eqstyle{\scriptstyle}\eqalign{ + i &\in A \cr + \quad j &\in B\cup C \cr + m &\in C }} + i + j + m +$$ + +\indent \new\OpTeX/ +You can write more equation systems one next second: +\begtt +$$\eqalign{ + x + y + z &= 1 && a + b + c &= -1 \cr + u + v &= 20 && f + g &= -20 \cr + i &= j +}$$ +\endtt +You can use the third column for centered equations +without aligning point. For example: +\begtt \catcode`\<=13 +$$ \left( \eqspace=0pt \eqalign{&& <first equation>\cr + && <second equation>} \right) $$ +\endtt +The \x`\eqspace` is additional space used in the third column to separate +equation systems one next second. + +\new \OpTeX/ +\OpTeX/ extensions summary: +\begitems +* `\eqlines` and `\eqstyle` set baselineskip and math style of the formulas. +* `\eqalign` allows more than two columns: + The first column is right-aligned (no space). The second is left-aligned (no space). + The third column (if used) + is centered with `\eqspace/2` at the left and right boundary of the column. + The fourth is the same as the first. The fifth is the same as second etc. The number + of columns that can be used in `\eqalign` is unlimited. +\enditems + +\secc The `\eqalign` macro with references + +You can give common mark to whole equation system by +`$$\eqalign{<data>}\eqno <mark>$$`. If you want to give marks to individual +lines of the equation system, then you can use another macro: +\x`\eqalignno`. The usage is similar as `\eqalign` but the +third column (if used) is intended to the equation mark. Example: + +\begtt +$$ \eqalignno{ + x + 2y + 3z &= 600 & \rm(A) \cr + 12x + y - 3z &= 7 & \rm(B) \cr + 4x - y + 5z &= -5 & \rm(C) \cr +} $$ +\endtt +\vskip-\baselineskip +$$ \eqalignno{ + x + 2y + 3z &= 600 & \rm(A) \cr + 12x + y - 3z &= 7 & \rm(B) \cr + 4x - y + 5z &= -5 & \rm(C) \cr +} $$ + +The `\leqalignno` macro is similar to `\eqalignno` but the marks are at the left +margin. The \OpTeX/ extensions of `\eqalign` are not available in +`\eqalignno` nor `\leqalignno` macros. + +\new \OpTeX/ +You can use auto-generated marks by `\eqmark` macro: +`$$\eqalign{<data>}\eqmark$$` or: +\begtt +$$ \eqalignno{ + x + 2y + 3z &= 600 & \eqmark[A] \cr + 12x + y - 3z &= 7 & \eqmark[B] \cr + 4x - y + 5z &= -5 & \eqmark[C] \cr +} $$ +\endtt + + +\sec Concept of loading math fonts + +\secc[fams] Math families + +\TeX/ can use more than one math font in math mode. This was a +necessity in the old days when only 128-characters fonts existed. +Each math font used in math mode has its \ii math/family {\em math family} represented by a number. +Math family is a collection of three (almost) equal fonts in three sizes: +first for `\textstyle` and `\displaystyle`, second for `\scriptstyle` +and third for `\scriptscriptstyle`. + +\new Unicode +When Unicode math font is loaded then it includes all three optical sizes and +all characters needed for typesetting math formula. +Theoretically, we can use only one math family with this single font. But more math families +(i.e.\ more fonts in math mode) is still possible. You can combine +characters from more fonts (Unicode fonts and old TFM fonts together) in one math formula. + +\new \OpTeX/ +\OpTeX/ loads the main Unicode math font into math family 1. The math +families 2 and 3 are reserved for specific \TeX/nical reasons, family 4 is +used for `\script` font and families 5, 6, 7, etc. can be used by user for +loading more fonts. The default macro for loading math fonts looks like: + +\begtt \typosize[10/12] +\_def\_normalunimath{% + \_loadumathfamily 1 {\_unimathfont}{} % Main Unicode math font + \_loadmathfamily 4 rsfs % \script (old TFM font) + \_setunimathdimens % set dimen parameters used in math formulas internally +}% +\let\_normalmath=\_normalunimath % this is done when Unicode math is initialized +\endtt +% +Whenever \OpTeX/ needs to resize math fonts (for example in footnotes or +titles), it calls the `\_normalmath` macro to reload all math +families to the desired size. If you want to add the next font, you can add +`\_loadunimathfamily <family> {<Unicode-font>}{<features>}` or +`\_loadmathfamily <family> <TFM-font>` into the `\_normalmath` macro. +The example in section~\ref[newfam] shows how to do it. + +\secc Two variants of math fonts: normal and bold + +All math formulas in the whole document need only one Unicode font (or only one collection +of math fonts as mentioned in section~\ref[fams]). But this +is not really true if titles are in bold font. If a math formula is present in +such a bold title then all characters of this formula must be bolder. +For example \"normal" variables must be in bold italic in titles, symbols +like `+` `=` must be bold and \"normal bold" letters +(e.g., indicating vectors in math formula) must be extra bold in titles. +It means that all fonts from the collection of math fonts must be bolder. +We need a second collection of math fonts with bolder +shape. Unfortunately, it is not always available. + +\new \OpTeX/ +If you have bold variant of used Unicode math font, then you can use +\ii .loadmath \iis .loadmath {{\code{\\loadmath}}} \x`\loadboldmath` command, for example: +\begtt +\loadmath {[xitsmath-regular]} +\loadboldmath {[xitsmath-bold]} \to {[xitsmath-regular]} +\endtt +% +\OpTeX/ uses `\_normalmath` macro for loading collection of math fonts in +\"normal" cases and `\_boldmath` macro for bold titles. The font declared by +\x`\loadboldmath` is used in second case. But if the bold variant of the font is +not available (this is unfortunately more typical), then \OpTeX/ uses faked +bold of main Unicode math font (the `embolden` internal font feature is +used). So, the default `\_boldmath` macro defined by \OpTeX/ looks like: + +\begtt \typosize[10/12] +\_def\_boldunimath{% + \_ifx\_unimathboldfont \_undefined + \_loadumathfamily 1 {\_unimathfont}{embolden=1.7;} % Main faked bold + \_else + \_loadumathfamily 1 {\_unimathboldfont}{} % Main real bold font + \_fi + \_loadmathfamily 4 rsfs % rsfs in not in bold, unfortunately + \_setunimathdimens +}% +\let\_boldmath=\_boldunimath % this is done when Unicode math is initialized +\endtt + +\secc[newfam] Example of using additional math font + +The font `bbold10.tfm` includes double stroked characters, for example, +double stroked plus, double stroked Greek letters and digits. +Try to run `pdftex testfont`, then answer the question about the name of the +font: `bbold10` and then type command `\table\end`. The `testfont.pdf` is +printed with the table of characters of this font. +Most of these characters cannot be found in Unicode math fonts. + +\new \OpTeX/ +We show an example of how to add this font to the collection of used math fonts. +We can re-define the `\_normalmath` macro by: +\begtt \typosize[10/12] +\addto\_normalmath {\_loadmathfamily 5 bbold } + +\_regtfm bbold 0 bbold5 5.5 bbold6 6.5 bbold7 7.5 bbold8 8.5 bbold9 + 9.5 bbold10 11.1 bbold12 15 bbold17 * % using all bbold*.tfm +\_normalmath % reload the math fonts collection +\endtt +% +The string \"`bbold`" is declared by `\_regtfm` as a collection of all +`bbold*.tfm` fonts, the optical sizes are supported. + +\addto\_normalmath {\_loadmathfamily 5 bbold } +\_regtfm bbold 0 bbold5 5.5 bbold6 6.5 bbold7 7.5 bbold8 8.5 bbold9 + 9.5 bbold10 11.1 bbold12 15 bbold17 * % using all bbold*.tfm +\_normalmath +\Umathchardef \bbplus 2 5 "2B +\Umathchardef \bble 3 5 "3C +\Umathchardef \bbge 3 5 "3E + +Finally, we must to declare new \TeX/ sequences for accessing the characters +from the new font, for example: + +\begtt \typosize[10/12] +\Umathchardef \bbplus 2 5 "2B +\Umathchardef \bble 3 5 "3C +\Umathchardef \bbge 3 5 "3E +\endtt +% +The \x`\Umathchardef` \TeX/ primitive declares new \TeX/ sequence used in math +typesetting. The first parameter is a class number (2 means Bin, 3 means Rel, +see the table in the section~\ref[class]). The second parameter is a math +family number. It is 5, see the redefinition of the `\_normalmath` macro above. +The third parameter is a slot in the font. Now you can try to use these characters: +$$ + `a \bbplus b \bbge c` \quad \hbox{gives} \quad a \bbplus b \bbge c. +$$ +% +Maybe, you want to declare a special math selector which can be used as +`$\bball a+b>c$` in order to get $\bbchar a \bbplus b \bbge c$. +Then you can define: + +\begtt \typosize[10/12] +\def\bball {\bbchar \Umathcodenum `+ \bbplus + \Umathcodenum `> \bbge + \Umathcodenum `< \bble } +\endtt + +If you want to add all double stroked Greek letters into `\bball` +selector, then you can do something like this: + +\begtt \typosize[10/12] +\def\setbbgreek #1 {\tmpnum=#1\xargs\setbbgreekA} +\def\setbbgreekA #1{\Umathcode \_ea`#1 0 5 \tmpnum \advance\tmpnum by1 } + +\addto\bball {% + \setbbgreek "0B \alpha \beta \gamma \delta \epsilon \zeta \eta + \theta \iota \kappa \lambda \mu \nu \xi \pi \rho \sigma + \tau \upsilon \phi \chi ; + \setbbgreek "7F \omega ; + \setbbgreek "00 \Gamma \Delta \Theta \Lambda \Xi \Pi \Sigma \Upsilon + \Phi \Psi \Omega ; } +\endtt +% +The \x`\Umathcode`` <input-code> <class> <family> <font-slot>` primitive is used +here. The control sequences `\alpha`, `\beta`, `\gamma` etc. are macros which expand +to the Unicode character of appropriate (non-math) Greek letter. We set the +Umathcode to such character, for example +\code{\\Umathcode `}$\_rmgreek\alpha$` 0 5 "0B` is processed. + +The bold variant of the font `bbold*.tfm` is not available, unfortunately. +We have to settle for normal version of the font in the `\_boldmath` macro: + +\begtt \typosize[10/12] + \addto \_boldmath {\_loadmathfamily 5 bbold } +\endtt + +Another approach of using more Unicode math fonts in a single formula is +shown in +\ulink[http://petr.olsak.net/optex/optex-tricks.html\#addumathfont]{OpTeX trick 0030}. + +\sec Index + +Control sequences listed at pages \pgref[listA]--\pgref[listB] are not +mentioned here again. + +\begmulti 3 +\makeindex +\endmulti + +\bye diff --git a/Master/texmf-dist/doc/optex/optex-techdoc.tex b/Master/texmf-dist/doc/optex/optex-techdoc.tex new file mode 100644 index 00000000000..4ae25a9c7ec --- /dev/null +++ b/Master/texmf-dist/doc/optex/optex-techdoc.tex @@ -0,0 +1,290 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +% This file is read from optex-doc.tex +% Use: optex optex-doc +% (three times) to create whole documentation including all references and the index. + +\load [doc.opm] + +\thisoutline {TECHNICAL DOCUMENTATION} + +\chap Technical documentation + +This documentation is written in the source files `*.opm` between +the `\_doc` and `\_cod` pairs or after the `\_endcode` command. +When the format is generated by +\begtt +luatex -ini optex.ini +\endtt +then the text of the documentation is ignored and the format `optex.fmt` is +generated. On the other hand, if you run +\begtt +optex optex-doc.tex +\endtt +then the same `*.opm` files are read when the second chapter of this +documentation is printed. + +A knowledge about \TeX/ is expected from the reader. +You can see a short document +\ulink[http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf]{\TeX/ in a Nutshell} +or more detail +\ulink[https://eijkhout.net/texbytopic/texbytopic.html]{\TeX/ by topic}. + +Notices about hyperlinks. +If a control sequence is printed in red color in this documentation then +this denotes its \"main documentation point". Typically, the listing where +the control sequence is declared follows immediately. If a control sequence is +printed in the blue color in the listing or in the text +then it is an active link that points (usually) to the main documentation point. +The main documentation point can be an active link that points to a previous +text where the control sequence was +mentioned. Such occurrences are active links to the main documentation point. + +\sec[init] The main initialization file + +The `optex.ini` file is read as the main file when the format is generated. + +{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip} + \def\docfile{optex.ini} + +\verbinput (-4) optex.ini +% +Category codes are set first. Note that the `_` is set to category code +\"letter", it can be used as a part of control sequence names. +Other category codes are set as in the plain \TeX/. + +\verbinput (6-20) optex.ini +% +The \`\optexversion` and \`\fmtname` are defined. + +\verbinput (22-25) optex.ini +% +We check if \LuaTeX/ engine is used at `-ini` state. And the `^^J` character +is set as `\newlinechar`. + +\verbinput (27-36) optex.ini +% +The basic macros for macro file syntax is defined, i.\,e.\ +`\_endcode`, `\_doc` and `\_cod`. +The `\_codedecl` will be re-defined later. + +\verbinput (38-42) optex.ini +% +Individual `*.opm` macro files are read. + +\verbinput (44-87) optex.ini +% +The file `optex.lua` is embedded into the format as byte-code. +It is documented in section~\ref[lua]. + +\verbinput (89-92) optex.ini + +The `\everyjob` register is initialized and the format is saved by +the `\dump` command. + +\verbinput (94-102) optex.ini + +} + +\printdoctail prefixed.opm +\secc The implementation of the namespaces +\printdoc prefixed.opm + +\sec pdf\TeX/ initialization +\printdoctail luatex-ini.opm +\printdoc luatex-ini.opm + +\sec Basic macros +We define first bundle of basic macros. +\printdoc basic-macros.opm + +\sec Allocators for \TeX/ registers +\printdoctail alloc.opm +\printdoc alloc.opm + +\sec If-macros, loops, is-macros +\printdoc if-macros.opm + +\sec Setting parameters +\printdoctail parameters.opm +\printdoc parameters.opm + +\sec More \OpTeX/ macros +The second bundle of \OpTeX/ macros is here. +\printdoc more-macros.opm + +\sec Using key=value format in parameters +\printdoctail keyval.opm +\printdoc keyval.opm + +\sec Plain \TeX/ macros +All macros from plain \TeX/ are rewritten here. +Differences are mentioned in the documentation below. +\printdoc plain-macros.opm + +\sec Preloaded fonts for text mode +\printdoctail fonts-preload.opm +\printdoc fonts-preload.opm + +\printdoctail fonts-resize.opm +\printdoc fonts-resize.opm + +\printdoctail fonts-select.opm +\secc Implementation of the Font Selection System +\printdoc fonts-select.opm + +\sec [math-preload] Preloaded fonts for math mode +\printdoctail math-preload.opm +\printdoc math-preload.opm + +\sec[math-macros] Math macros +\printdoc math-macros.opm + +\sec Unicode-math fonts +\printdoctail math-unicode.opm + +\sec[opmac-fonts] Scaling fonts in document (high-level macros) +These macros are documented in section~\ref[sizes] from the user point of view. +\printdoc fonts-opmac.opm + +\sec[output] Output routine +\printdoctail output.opm +\printdoc output.opm + +\sec Margins +The `\margins` macro is documented in the section~\ref[marg]. +\printdoc margins.opm + +\sec[colors] Colors +\printdoctail colors.opm +\printdoc colors.opm + +\sec[ref-file] The \code{.ref} file +\printdoctail ref-file.opm +\printdoc ref-file.opm + +\sec[references] References +\printdoctail references.opm +\printdoc references.opm + +\sec Hyperlinks +\printdoctail hyperlinks.opm +\printdoc hyperlinks.opm + +\sec[maketoc] Making table of contents +\printdoc maketoc.opm + +\sec PDF outlines +\secc Nesting PDF outlines +\printdoctail outlines.opm +\printdoc outlines.opm +\secc Strings in PDF outlines +\printdoctail pdfuni-string.opm +\printdoc pdfuni-string.opm + +\sec[sections] Chapters, sections, subsections +\printdoc sections.opm + +\sec[lists] Lists, items +\printdoc lists.opm + +\sec Verbatim, listings +\secc[verb] Inline and \"display" verbatim +\printdoc verbatim.opm +\secc[hisyntax] Listings with syntax highlighting +\printdoctail hi-syntax.opm +\printdoc hi-syntax.opm + +\sec Graphics +\printdoctail graphics.opm +\printdoc graphics.opm + +\sec[table] The \code{\\table} macro, tables and rules +\printdoctail table.opm +\secc[table.impl] Implemetation of the \code{\\table} macro and friends +\printdoc table.opm + +\sec Balanced multi-columns +\printdoc multicolumns.opm + +\sec Citations, bibliography +\secc[bib] Macros for citations and bibliography preloaded in the format +\printdoc cite-bib.opm +\secc[usebib] The \code{\\usebib} command +\printdoctail usebib.opm +\secc The \code{usebib.opm} macro file loaded when \code{\\usebib} is used +\printdoc usebib.opm + +\secc[isobib] Usage of the \code{bib-iso690} style +{\everyintt={\catcode`\<=13 \visiblesp} +\printdoctail bib-iso690.opm } + +\secc Implementation of the \code{bib-iso690} style +\printdoc bib-iso690.opm + +\sec[makeindex] Sorting and making Index +\printdoc makeindex.opm + +\sec[fnotes] Footnotes and marginal notes +\printdoc fnotes.opm + +\sec Styles + \OpTeX/ provides three styles: `\report`, `\letter` and `\slides`. + Their behavior is documented in user part of the manual in the section + \ref[styles] and `\slides` style (for presentations) is documented in + `op-slides.pdf` which is an example of the presentation. +\secc \code{\\report} and \code{\\letter} styles +\printdoc styles.opm +\secc[slides] \code{\\slides} style for presentations +\printdoc slides.opm + +\sec Logos +\printdoc logos.opm + +\sec Multilingual support +\secc Lowercase, uppercase codes +\printdoctail uni-lcuc.opm +\secc Hyphenations +\printdoc hyphen-lan.opm +\printdoctail hyphen-lan.opm +\secc[langphrases] Multilingual phrases and quotation marks +\printdoc languages.opm + +\sec Other macros +Miscellaneous macros are here. +\printdoc others.opm + +\sec[lua] Lua code embedded to the format + +The file `optex.lua` is loaded into the format in `optex.ini` as byte-code +and initialized by `\everyjob`, see section~\ref[init]. + +The file implements part of the functionality from `luatexbase` namespace, +nowadays defined by \LaTeX/ kernel. `luatexbase` deals with modules, +allocators, and callback management. Callback management is a nice extension +and is actually used in \OpTeX/. Other functions are defined more or less just +to suit luaotfload's use. + +\newtoks \_hisyntaxlua +\_hisyntaxlua={% + \_hicolor C \Green + \_replfromto {--}{^^J} {\z C{--#1}^^J}% +} + +{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip} + \commentchars-- \def\docfile{optex.lua} \ttline=-1 + \_def\_printcomments{\_medskip + {\_catcodetable0 \_typosize[10/12]\_everypar={}\_scantextokens\_ea{\_vcomments}\par}% + \_bigskip + } + +\verbinput \hisyntax{lua} (4-) optex.lua +} + + +\sec Printing documentation +\printdoctail doc.opm +\printdoc doc.opm + +\enddocument + diff --git a/Master/texmf-dist/doc/optex/optex-userdoc.tex b/Master/texmf-dist/doc/optex/optex-userdoc.tex new file mode 100644 index 00000000000..a70cedcf4d8 --- /dev/null +++ b/Master/texmf-dist/doc/optex/optex-userdoc.tex @@ -0,0 +1,2019 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +% This file is read from optex-doc.tex +% Use: optex optex-doc (three times) to create whole documentation. + +\let\new=\relax + +\sec Starting with \OpTeX/ +%%%%%%%%%%%%%%%%%%%%%%%%% + +\new +\OpTeX/ is compiled as a format for \LuaTeX/. Maybe there is a command +`optex` in your \TeX/ distribution. Then you can write into the command line + +\begtt +optex document +\endtt +% +You can try to process `optex op-demo` or `optex optex-doc`. + +If there is no `optex` command, see more information about installation +\OpTeX/ at \url{http://petr.olsak.net/optex}. + +A minimal document should be + +\begtt +\fontfam[LMfonts] +Hello World! \bye +\endtt + +The first line \~`\fontfam[LMfonts]` tells that Unicode Latin Modern +fonts (derived from Computer Modern) are used. If you omit this line then +preloaded Latin Modern fonts are used but preloaded fonts cannot be in +Unicode\fnote +{This is a technical limitation of \LuaTeX/ for fonts downloaded in formats: +only 8bit fonts can be preloaded.}. +So the sentence `Hello World` will be OK without the first line, but you +cannot print such sentence in other languages (for example `Ahoj světe!`) +where Unicode fonts are needed +because the characters like `ě` are not mapped correctly in preloaded +fonts. + +A somewhat larger example with common settings should be: + +\begtt \catcode`!=0 +\fontfam[Termes] % selecting Unicode font family Termes (section !ref[fontfam]) +\typosize[11/13] % setting default font size and baselineskip (sec. !ref[sizes]) +\margins/1 a4 (1,1,1,1)in % setting A4 paper, 1 in margins (section !ref[marg]) +\cslang % Czech hyphenation patterns (section !ref[lang]) + +Tady je zkušební textík v českém jazyce. +\bye +\endtt +% +You can look at `op-demo.tex` file for a more complex, but still simple example. + +\sec Page layout +%%%%%%%%%%%%%%%% + +\secc[marg] Setting the margins +%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +The \^`\margins` command declares margins of the document. This command have +the following parameters: + +\begtt \catcode`\<=13 +\margins/<pg> <fmt> (<left>,<right>,<top>,<bot>)<unit> + example: +\margins/1 a4 (2.5,2.5,2,2)cm +\endtt + +Parameters are: + +\begitems +* <pg> \dots\ `1` or `2` specifies one-page or two-pages design. +* <fmt> \dots\ paper format (a4, a4l, a5, letter, etc. or user defined). +* <left>, <right>, <top>, <bot> \dots\ gives the amount of left, right, + top and bottom margins. +* <unit> \dots\ unit used for values <left>, <right>, <top>, <bot>. +\enditems + +Each of the parameters <left>, <right>, <top>, <bot> can be empty. +If both <left> and <right> are nonempty then `\hsize` is set. Else `\hsize` +is unchanged. If both <left> and <right> are empty then typesetting area is +centered in the paper format. The analogical rule works when <top> or <bot> +parameter is empty (`\vsize` instead `\hsize` is used). Examples: + +\begtt +\margins/1 a4 (,,,)mm % \hsize, \vsize untouched, + % typesetting area centered +\margins/1 a4 (,2,,)cm % right margin set to 2cm + % \hsize, \vsize untouched, vertically centered +\endtt + +If `<pg>=1` then all pages have the same margins. If `<pg>=2` then the +declared margins are true for odd pages. The margins at the even pages are +automatically mirrored in such case, it means that <left> is replaced by +<right> and vice versa. + +\OpTeX/ declares following paper formats: a4, a4l (landscape~a4), +a5, a5l, a3, a3l, b5, letter and user can declare another own format by \~`\sdef`: + +\begtt +\sdef{_pgs:b5l}{(250,176)mm} +\sdef{_pgs:letterl}{(11,8.5)in} +\endtt + +The `<fmt>` can be also in the form `(<width>,<height>)<unit>` where `<unit>` is +optional. If it is missing then `<unit>` after margins specification is +used. For example: + +\begtt +\margins/1 (100,200) (7,7,7,7)mm +\endtt +% +declares the paper 100$\times$200\,mm with all four margins 7\,mm. The spaces +before and after <fmt> parameter are necessary. + +The command \^`\magscale[<factor>]` scales the whole typesetting area. +\new The fixed point of such scaling is the upper left corner of the paper sheet. +Typesetting (breakpoints etc.) is unchanged. All units are relative after +such scaling. Only paper format's dimensions stay unscaled. Example: + +\begtt +\margins/2 a5 (22,17,19,21)mm +\magscale[1414] \margins/1 a4 (,,,)mm +\endtt +% +The first line sets the `\hsize` and `\vsize` and margins for final +printing at a5 format. The setting on the second line centers the scaled +typesetting area to the true a4 paper while breaking points for paragraphs +and pages are unchanged. It may be usable for +review printing. After the review is done, the second line can be commented out. + +\secc Concept of the default page +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\OpTeX/ uses \"output routine" for page design. +It is very similar to the Plain \TeX/ output routine. +There is \^`\headline` followed by \"page body" followed by +\^`\footline`. The \^`\headline` is empty by default and it can be used +for running headers repeated on each page. The \^`\footline` prints +centered page number by default. You can set the \^`\footline` to empty +using \^`\nopagenumbers` macro. + +The margins declared by \^`\margins` macro (documented in the previous +section~\ref[marg]) is concerned to the page body, +i.e.\ the \^`\headline` and \^`\footline` are placed to the top and bottom +margins. + +The distance between the \^`\headline` and the top of the page body is given by +the \^`\headlinedist` register. The distance between bottom of the page body and +the \^`\footline` is given by \^`\footlinedist`. The default values are: + +\begtt +\headline = {} +\footline = {\_hss\_rmfixed \_folio \_hss} % \folio expands to page number +\headlinedist = 14pt % from baseline of \headline to top of page body +\footlinedist = 24pt % from last line in pagebody to baseline of footline +\endtt + +The page body should be divided into top insertions (floating tables and +figures) followed by a real text and followed by footnotes. +Typically, the only real text is here. + +The \^`\pgbackground` tokens list is empty by default but it can be used for +creating a background of each page (colors, picture, watermark for example). +The macro \^`\draft` uses this register and puts big text DRAFT as a watermark +to each page. You can try it. + +More about the page layout is documented in sections~\ref[oparams] and~\ref[output]. + +\secc Footnotes and marginal notes +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +The Plain \TeX/'s macro \^`\footnote` can be used as usual. But a new macro +\^`\fnote{<text>}` is defined. The footnote mark is added automatically and it +is numbered +\new +on each chapter from one\fnote +{You can declare \^`\fnotenumglobal` if you want footnotes numbered in whole +document from one or \^`\fnotenumpages` if you want footnotes numbered at each +page from one. Default setting is \^`\fnotenumchapters`}. +The <text> is scaled to 80 \%. +User can redefine footnote mark or scaling, as shown in the section~\ref[fnotes]. + +The \^`\fnote` macro is fully applicable only in \"normal outer" paragraph. +It doesn't work inside boxes (tables, for example). If you are solving such +a case then you can use the command \^`\fnotemark``<numeric-label>` inside the box: only the +footnote mark is generated here. When the box is finished you can use +\^`\fnotetext{<text>}`. This macro puts the <text> to the footnote. +The <numeric-label> has to be `1` if only one such command is in the box. +Second \^`\fnotemark` inside the same box has to have the parameter `2` etc. +The same number of \^`\fnotetext`s have to be written +after the box as the number of \^`\fnotemark`s inserted inside the box. +Example: + +\begtt +Text in a paragraph\fnote{First notice}... % a "normal" footnote +\table{...}{...\fnotemark1...\fnotemark2...} % two footnotes in a box +\fnotetext{Second notice} +\fnotetext{Third notice} +... +\table{...}{...\fnotemark1...} % one footnote in a box +\fnotetext{Fourth notice} +\endtt + +The marginal note can be printed by the \^`\mnote{<text>}` macro. The <text> +is placed to the right margin on the odd pages and it is placed to the left +margin on the even pages. This is done after second \TeX{} run because the +relevant information is stored in an external file and read from it again. +If you need to place the notes only to the fixed margin write +\^`\fixmnotes\right` or \^`\fixmnotes\left`. + +The <text> is formatted as a little paragraph with the maximal width +\^`\mnotesize` ragged left on the left margins or ragged right on the right +margins. The first line of this little paragraph has its vertical position +given by the position of \^`\mnote` in the text. The exceptions are possible +by using the `up` keyword: \~`\mnote`` up<dimen>{<text>}`. +You can set such <dimen> to each \^`\mnote` manually in final printing +in order to margin notes do not overlap. The positive value of <dimen> +shifts the note up and negative value shifts it down. For example +\^`\mnote`` up 2\baselineskip{<text>}` shifts this marginal note two lines up. + +\sec Fonts +%%%%%%%%%% + +\secc[fontfam] Font families +%%%%%%%%%%%%%%%%%%%%%%% + +You can select the font family by \^`\fontfam[<Family-name>]`. +The argument <Family-name> is case insensitive and spaces are ignored in it. For +example, \^`\fontfam[LM Fonts]` is equal to \^`\fontfam[LMfonts]` and it is equal +to \^`\fontfam[lmfonts]`. Several aliases are prepared, thus +\^`\fontfam[Latin Modern]` can be used for loading Latin Modern family too. + +If you write \^`\fontfam[?]` then all font families registered in \OpTeX/ +are listed on the terminal and in the log file. +If you write \^`\fontfam[catalog]` then a catalog of all fonts registered in +\OpTeX/ and available in your \TeX/ system is printed. The instructions +on how to register your own font family are appended in the catalog. + +If the family is loaded then {\em font modifiers} applicable in such font family +are listed on the terminal: (`\caps`, `\cond` for example). +And there are four basic {\em variant selectors} (\^`\rm`, \^`\bf`, \^`\it`, \^`\bi`). +The usage of variant selectors is the same as in Plain \TeX: +`{\it italics text}`, `{\bf bold text}` etc. + +The font modifiers (`\caps`, `\cond` for example) can +be used before a variant selector and they +can be (independently) combined: `\caps\it` or `\cond\caps\bf`. The +modifiers keep their internal setting until the group ends or until another +modifier that negates the previous feature is used. So +`{\caps \rm First text \it Second text}` +gives {\caps \rm First text \it Second text}. + +The font modifier without following variant selector does not change the font +actually, it only prepares data used by next variant selectors. +There is one special variant selector \^`\currvar` which does not change the +selected variant but reloads the font due to (maybe newly +specified) font modifier(s). + +The context between variants \^`\rm` $\leftrightarrow$ \^`\it` and +\^`\bf` $\leftrightarrow$ \^`\bi` is kept by the \^`\em` +macro (emphasize text). +It switches from current \^`\rm` to \^`\it`, from current \^`\it` to \^`\rm`, from +current \^`\bf` to \^`\bi` and from current \^`\bi` to \^`\bf`. +The italics correction `\/` is inserted automatically, if needed. Example: + +\begtt +This is {\em important} text. % = This is {\it important\/} text. +\it This is {\em important} text. % = This is\/ {\rm important} text. +\bf This is {\em important} text. % = This is {\bi important\/} text. +\bi This is {\em important} text. % = This is\/ {\bf important} text. +\endtt + +\new +More about the \OpTeX/ Font Selection System is written in the technical +documentation in the section~\ref[fontsystem]. +You can mix more font families in your document, you can +declare your own variant selectors or modifiers, etc. + +\secc[sizes] Font sizes +%%%%%%%%%%%%%%%%%%%%% + +The command \^`\typosize[<fontsize>/<baselineskip>]` sets the font size of text and +math fonts and baselineskip. If one of these two parameters is empty, the +corresponding feature stays unchanged. Don't write the unit of these +parameters. The unit is internally set to \^`\ptunit` which is 1pt by default. +You can change the unit by the command \^`\ptunit=<something-else>`, +for instance \^`\ptunit=1mm` enlarges all font sizes declared by \^`\typosize`. +Examples: + +\begtt +\typosize[10/12] % default of Plain TeX +\typosize[11/12.5] % font 11pt, baseline 12.5pt +\typosize[8/] % font 8pt, baseline unchanged +\endtt + +The commands for font size setting described in this section +have local validity. If you put them into a group, +the settings are lost when the group is finished. If you set +something relevant with paragraph shape (baselineskip given by +\^`\typosize` for example) then you must first finalize the +paragraph before closing the group: +`{\typosize[12/14] ...<text of paragraph>... \par}`. + +The command \^`\typoscale[<font-factor>/<baselineskip-factor>]` +sets the text and math fonts +size and baselineskip as a multiple of the current fonts size and +baselineskip. The factor is written in \"scaled"-like way, it means that 1000 +means factor one. The empty parameter is equal to the parameter 1000, +i.e. the value stays unchanged. Examples: + +\begtt +\typoscale[800/800] % fonts and baselineskip re-size to 80 % +\typoscale[\magstep2/] % fonts bigger 1,44times (\magstep2 expands to 1440) +\endtt + +First usage of \^`\typosize` or \^`\typoscale` macro in your document sets so-called {\em main values}, i.\,e.\ main font size and main baselineskip. They are internally +saved in registers \^`\mainfosize` and \^`\mainbaselineskip`. + +\new +The \^`\typoscale` command does scaling with respect to current values by default. +If you want to do it with respect to the main values, type \^`\scalemain` immediately +before \^`\typoscale` command. + +\begtt +\typosize[12/14.4] % first usage in document, sets main values internally +\typosize[15/18] % bigger font +\scalemain \typoscale[800/800] % reduces from main values, no from current. +\endtt + +The \^`\typosize` and \^`\typoscale` macros initialize the font family by `\rm`. +You can re-size only the current font by the command +\^`\thefontsize[<font-size>]` or the font can be rescaled by +\^`\thefontscale[<factor>]`. These macros don't change math fonts sizes nor +baselineskip. + +\new +There is \"low level" \^`\setfontsize{<size-spec>}` command which behaves like +a font modifier and sets given font size used by next variant selectors. +It doesn't change the font size immediately, but the following variant selector +does it. For example \^`\setfontsize{at15pt}`\^`\currvar` sets current variant to 15pt. + +If you are using a font family with \"optical sizes feature" (i.\,e.\ there +are more recommended sizes of the same font which are not scaled +linearly; a good example is Computer Modern aka Latin Modern fonts) +then the recommended size is selected by all mentioned commands automatically. + +More information about resizing of fonts is documented in the +section~\ref[setfontsize]. + +\secc Typesetting math +%%%%%%%%%%%%%%%%%%%%% + +See the additional document +\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf] +{Typesetting Math with \OpTeX/} for more details about this issue. + +\OpTeX/ preloads a collection of 7bit Computer Modern math fonts +and AMS fonts in its format for math typesetting. +You can use them in any size and in the \^`\boldmath` variant. +% +\new +Most declared text font families (see \^`\fontfam` in the section~\ref[fontfam]) +are configured with a recommended Unicode +math font. This font is automatically loaded unless you specify +\^`\noloadmath` before first \^`\fontfam` command. See log file for more +information about loading text font family and Unicode math fonts. If you +prefer another Unicode math font, specify it by \^`\loadmath{[<font-file>]}` +or \^`\loadmath{<font-name>}` before first \^`\fontfam` command. + +Hundreds math symbols and operators like in AMS\TeX/ are accessible. +For example `\alpha` $\alpha$, `\geq`~$\geq$, `\sum` $\sum$, +`\sphericalangle` $\sphericalangle$, `\bumpeq`, $\bumpeq$. See AMS\TeX/ +manual or +\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf] +{Typesetting Math with \OpTeX/} for complete list of math symbols. + +The following math alphabets are available: + +\begtt \catcode`\$=3 \catcode`/=0 \medmuskip=0mu \adef{ }{ } +\mit % mathematical variables $abc-xyz,ABC-XYZ$ +\it % text italics $/it abc-xyz,ABC-XYZ$ +\rm % text roman $/rm abc-xyz,ABC-XYZ$ +\cal % normal calligraphics $/cal ABC-XYZ$ +\script % script $/script ABC-XYZ$ +\frak % fracture $/frak abc-xyz,ABC-XYZ$ +\bbchar % double stroked letters $/bbchar ABC-XYZ$ +\bf % sans serif bold $/bf abc-xyz,ABC-XYZ$ +\bi % sans serif bold slanted $/bi abc-xyz,ABC-XYZ$ +\endtt + +The last two selectors \^`\bf` and \^`\bi` select the sans serif fonts in math regardless of the current text font family. This is a common notation for vectors and +matrices. You can re-declare them, see section~\ref[unimath-codes] where +definitions of Unicode math variants of \^`\bf` and \^`\bi` selectors are documented. + +The math fonts can be scaled by \^`\typosize` and \^`\typoscale` macros. +Two math fonts collections are prepared: \^`\normalmath` for normal weight +and \^`\boldmath` for bold. The first one is set by default, the second one +is usable for math formulae in titles typeset in bold, for example. + +\new +You can use \^`\mathbox{<text>}` inside math mode. It behaves as `{\hbox{<text>}}` +(i.e. the <text> is printed in horizontal non-math mode) +but the size of the <text> is adapted to the context of math size (text or script or +scriptscript). + +\sec Typical elements of the document +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\secc[chap] Chapters and sections +%%%%%%%%%%%%%%%%%%%%%%%%%% + +The documents can be divided into chapters (\^`\chap`), +sections (\^`\sec`), subsections (\^`\secc`) and they can be titled +by \^`\tit` command. The parameters are separated by the end of current line (no +braces are used): + +\begtt \catcode`\<=13 +\tit Document title <end of line> +\chap Chapter title <end of line> +\sec Section title <end of line> +\secc Subsection title <end of line> +\endtt + +The chapters are automatically numbered by one number, sections by two numbers +(chapter.section), and subsections by three numbers. If there are no chapters +then sections have only one number and subsections two. + +The implicit design of the titles of chapter etc.\ is implemented in the +macros \^`\_printchap`, \^`\_printsec` and \^`\_printsecc`. A designer can simply change +these macros if he/she needs another behavior. + +The first paragraph after the title of chapter, section, and subsection is +not indented but you can type `\let`\^`\_firstnoindent=\relax` if you need all +paragraphs indented. + +If a title is so long then it breaks into more lines in the output. It is better to hint at the +breakpoints because \TeX/ does not interpret the meaning of the title. +Users can put the \^`\nl` (means newline) to the breakpoints. + +If you want to arrange a title to more lines in your source file then you can +use `^^J` at the end of each line (except the last one). +When `^^J` is used, then the reading of the title continues at the next line. +The \"normal" comment character `%` doesn't work in titles. +You can use \^`\nl`{\visiblesp` ^^J`} if you want to have corresponding lines in the source +and the output. + +The chapter, section, or subsection isn't numbered if the \^`\nonum` precedes. +And the chapter, section, or subsection isn't delivered to the table of +contents if \^`\notoc` precedes. You can combine both prefixes. + +\secc[cap] Another numbered objects +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Apart from chapters, sections, and subsections, there are another +automatically numbered objects: equations, captions for tables and +figures. The user can declare more numbered objects. + +If the user writes the \^`\eqmark` as the last element of the display mode then +this equation is numbered. The equation number is printed in brackets. This number +is reset in each section by default. + +If the \^`\eqalignno` is used, then user can put \^`\eqmark` to the last column +before `\cr`. For example: + +\begtt +\eqalignno{ + a^2+b^2 &= c^2 \cr + c &= \sqrt{a^2+b^2} & \eqmark \cr} +\endtt + +Another automatically numbered object is a caption which is tagged by \^`\caption/t` for +tables and \^`\caption/f` for figures. The caption text follows. +The \^`\cskip` can be used between \^`\caption` text and the real object (table +or figure). You can use two orders: `<caption>\cskip <object>` or +`<object>\cskip <caption>`. +The \^`\cskip` creates appropriate vertical space between them. Example: + +\begtt +\caption/t The dependency of the computer-dependency on the age. +\cskip +\noindent\hfil\table{rl}{ + age & value \crl\noalign{\smallskip} + 0--1 & unmeasured \cr + 1--6 & observable \cr + 6--12 & significant \cr + 12--20 & extremal \cr + 20--40 & normal \cr + 40--60 & various \cr + 60--$\infty$ & moderate} +\endtt + +This example produces: + +\medskip +\caption/t The dependency of the computer-dependency on the age. +\cskip +\noindent\hfil\table{rl}{ + age & value \crl\noalign{\smallskip} + 0--1 & unmeasured \cr + 1--6 & observable \cr + 6--12 & significant \cr + 12--20 & extremal \cr + 20--40 & normal \cr + 40--60 & various \cr + 60--$\infty$ & moderate} +\medskip + +You can see that the word \"Table" followed by a number is added by the macro +`\caption/t`. +The caption text is centered. If it occupies more lines then the +last line is centered. + +The macro \^`\caption/f` behaves like \^`\caption/t` but it is intended for +figure captions with independent numbering. +The word (Table, Figure) depends on the selected language (see +section~\ref[lang] about languages). + +If you wish to make the table or figure as a floating object, you need to use +Plain \TeX/ macros \^`\midinsert` or \^`\topinsert` terminated by \^`\endinsert`. +Example: + +\begtt +\topinsert % table and its caption printed at the top of the current page + <caption and table> +\endinsert +\endtt +% +The pair \^`\midinsert`...\^`\endinsert` prefers to put the enclosed object +to the current place. Only if this is unable due to page breaking, it +behaves like \^`\topinsert`...\^`\endinsert`. + +\new +There are five prepared counters `A`, `B`, `C`, `D` and `E`. +They are reset in each chapter and section\fnote +{This feature can be changed, see the section~\ref[sections] in the technical documentation.}. +They can be used in context of \^`\numberedpar` `<letter>{<text>}` +macro. For example: +\begtt +\def\theorem {\numberedpar A{Theorem}} +\def\corollary {\numberedpar A{Corollary}} +\def\definition {\numberedpar B{Definition}} +\def\example {\numberedpar C{Example}} +\endtt +% +Three independent numbers are used in this example. One for Theorems and Corollaries +second for Definitions and third for Examples. The user can write +`\theorem Let $M$ be...` and the new paragraph is started with the text: +{\bf Theorem 1.4.1.} Let $M$ be... +You can add an optional parameter in brackets. For example, +`\theorem [(L'Hôpital's rule)] Let $f$, $g$ be...` +is printed like {\bf Theorem 1.4.2 (L'Hôpital's rule).} Let $f$, $g$ be... + +\secc References +%%%%%%%%%%%%%%% + +Each automatically numbered object documented in +sections \ref[chap] and \ref[cap] can be referenced +\new +if optional parameter +`[<label>]` is appended to \^`\chap`, \^`\sec`, +\^`\secc`, \^`\caption/t`, \^`\caption/f` or \^`\eqmark`. The alternative syntax is +to use \^`\label[<label>]` before mentioned commands (not necessarily directly +before). The reference is realized by \^`\ref[<label>]` or \^`\pgref[<label>]`. +Example: + +\begtt +\sec[beatle] About Beatles + +\noindent\hfil\table{rl}{...} % the table +\cskip +\caption/t [comp-depend] The dependency of the comp-dependency on the age. + +\label[pythagoras] +$$ a^2 + b^2 = c^2 \eqmark $$ + +Now we can point to the section~\ref[beatle] on the page~\pgref[beatle] +or write something about the equation~\ref[pythagoras]. Finally there +is an interesting Table~\ref[comp-depend]. +\endtt + +If there are forward referenced objects then users have to run \TeX{} twice. +During each pass, the working `*.ref` file (with references data) is created +and this file is used (if it exists) at the beginning of the document. + +You can use the \^`\label[<label>]` before the `\theorem`, `\definition` etc.\ +(macros defined with `\numberedpar`) if you want to reference these numbered objects. +You can't use `\theorem[<label>]` because the optional parameter +is reserved to another purpose here. + +You can create a reference to whatever else by commands +\^`\label[<label>]`\^`\wlabel{<text>}`. The connection between <label> and +<text> is established. The \^`\ref[<label>]` will print <text>. + +By default, labels are not printed, of course. But if you are preparing a +draft version of your document then you can declare \^`\showlabels`. The labels +are printed at their destination places after such a declaration. + +\secc Hyperlinks, outlines +%%%%%%%%%%%%%%%%%%%%%%%%% + +If the command \^`\hyperlinks` `<color-in> <color-out>` is used at the beginning of +the document, then the following objects are hyperlinked in the PDF output: + +\begitems +* numbers and texts generated by \^`\ref` or \^`\pgref`, +* numbers of chapters, sections, subsections, and page numbers in the table of contents, +* numbers or marks generated by \~`\cite` command (bibliography references), +* texts printed by \~`\url` or \~`\ulink` commands. +\enditems + +The last object is an external link and it is colored by +<color-out>. Other links are internal and they are colored by +<color-in>. Example: + +\begtt +\hyperlinks \Blue \Green % internal links blue, URLs green. +\endtt + +You can use another marking of active links: by frames which are visible in +the PDF viewer but invisible when the document is printed. The way to do it +is to define the macros \^`\_pgborder`, \^`\_tocborder`, \^`\_citeborder`, +\^`\_refborder` and \^`\_urlborder` as the triple of RGB components of the used +color. Example: + +\begtt +\def\_tocborder {1 0 0} % links in table of contents: red frame +\def\_pgborder {0 1 0} % links to pages: green frame +\def\_citeborder {0 0 1} % links to references: blue frame +\endtt + +By default, these macros are not defined. It means that no frames are created. + +The hyperlinked footnotes can be activated by \^`\fnotelinks` `<color-fnt> <color-fnf>` +where footnote marks in the text have `<color-fnt>` and the same footnote marks +in footnotes have <color-fnf>. You can define relevant borders +\^`\_fntborder` and \^`\_fnfborder` analogically as \^`\_pgborder` (for example). + +There are \"low level" commands to create the links. You can specify the +destination of the internal link by \^`\dest[<type>:<label>]`. The +active text linked to the \^`\dest` can be created by +\^`\ilink[<type>:<label>]{<text>}`. The `<type>` parameter is one of +the `toc`, `pg`, `cite`, `ref`, or another special for your purpose. +These commands create internal links only when \^`\hyperlinks` is declared. + +The \^`\url` macro prints its parameter in \~`\tt` font and creates a potential +breakpoints in it (after slash or dot, for example). If the \^`\hyperlinks` +declaration is used then the parameter of \^`\url` is treated as an external URL link. +An example: `\url{http://www.olsak.net}` creates \url{http://www.olsak.net}. +The characters \code{\%}, `\`, `#`, `{`, and `}` have to be protected by +backslash in the \^`\url` argument, the other special characters `~`, +`^`, `&` can be written as single character\fnote +{More exactly, there are the same rules as for `\code` command, see +section~\ref[verbatim].}. +You can insert the `\|` command +in the `\url` argument as a potential breakpoint. + +If the linked text have to be different than the URL, you can use +\^`\ulink[<url>]{<text>}` macro. For example: +`\ulink[http://petr.olsak.net/optex]{\OpTeX/ page}` +outputs to the text +\ulink[http://petr.olsak.net/optex]{\OpTeX/ page}. +The characters \code{\%}, `\`, `#`, `{`, and `}` must by escaped in +the <url> parameter. + +The PDF format provides {\em outlines} which are notes placed in the special frame of +the PDF viewer. These notes can be managed as a structured and hyperlinked +table of contents of the document. The command \^`\outlines{<level>}` creates +such outlines from data used for the table of contents in the document. The +<level> parameter gives the level of opened sub-outlines +in the default view. The deeper levels can be opened by mouse click on the +triangle symbol after that. + +\new +If you are using a special unprotected macro in section titles then \^`\outlines` macro +may crash. You must declare a variant of the macro for outlines case which is +expandable. Use \~`\regmacro` in this case. See the section \ref[toc] for more information +about \~`\regmacro`. + +The command \^`\insertoutline{<text>}` inserts a next entry into PDF outlines at +the main level~0. These entries can be placed before the table of contents (created +by \^`\outlines`) or after it. Their hyperlink destination is in the place +where the \^`\insertoutline` macro is used. + +The command \^`\thisoutline{<text>}` uses <text> in the outline instead of default +title text for the first following `\chap`, `\sec`, or `\secc`. +Special case: \^`\thisoutline{\relax}` doesn't create any outline for the following +`\chap`, `\sec`, or `\secc`. + +\secc Lists +%%%%%%%%%% + +The list of items is surrounded by \^`\begitems` and \^`\enditems` commands. +The asterisk (`*`) is active within this environment and it starts one item. +The item style can be chosen by the \^`\style` parameter written after \^`\begitems`: + +\begtt +\style o % small bullet +\style O % big bullet (default) +\style - % hyphen char +\style n % numbered items 1., 2., 3., ... +\style N % numbered items 1), 2), 3), ... +\style i % numbered items (i), (ii), (iii), ... +\style I % numbered items I, II, III, IV, ... +\style a % items of type a), b), c), ... +\style A % items of type A), B), C), ... +\style x % small rectangle +\style X % big rectangle +\endtt + +For example: + +\begtt +\begitems +* First idea +* Second idea in subitems: + \begitems \style i + * First sub-idea + * Second sub-idea + * Last sub-idea + \enditems +* Finito +\enditems +\endtt +% +produces: + +\begitems +* First idea +* Second idea in subitems: + \begitems \style i + * First sub-idea + * Second sub-idea + * Last sub-idea + \enditems +* Finito +\enditems + +Another style can be defined by the command \~`\sdef{_item:<style>}{<text>}`. +Default item can be set by \^`\defaultitem={<text>}`. +The list environments can be nested. Each new level of items is indented by +next multiple of \^`\iindent` value which is set to `\parindent` by default. +The \^`\ilevel` register says what level of items is currently processed. +Each \^`\begitems` starts \^`\everylist` tokens register. You can set, for +example: +\begtt +\everylist={\ifcase\ilevel\or \style X \or \style x \else \style - \fi} +\endtt + +You can say \^`\begitems` \^`\novspaces` if you don't want vertical spaces above +and below the list. The nested item list is without vertical spaces +automatically. More information about the design of lists of items should be +found in the section~\ref[lists]. + +A \"selected block of text" can be surrounded by +\^`\begblock`\dots\^`\endblock`. The default design of blocks of text is +indented text in smaller font. The blocks of text can be nested. + +\secc Tables +%%%%%%%%%%% + +The macro \^`\table{<declaration>}{<data>}` provides similar <declaration> +of tables as in \LaTeX: you can use letters `l`, `r`, `c`, each letter declares +one column (aligned to left, right, center, respectively). +These letters can be combined by the `|` character (vertical line). Example + +\begtt +\table{||lc|r||}{ \crl + Month & commodity & price \crli \tskip2pt + January & notebook & \$ 700 \cr + February & skateboard & \$ 100 \cr + July & yacht & k\$ 170 \crl} +\endtt +% +generates the result: + +\vskip-\medskipamount +\noindent\hfil\table{||lc|r||}{ \crl + Month & commodity & price \crli \tskip2pt + January & notebook & \$ 700 \cr + February & skateboard & \$ 100 \cr + July & yacht & k\$ 170 \crl} +\medskip + +Apart from `l`, `r`, `c` declarators, you can use the `p{<size>}` declarator +which declares the column with paragraphs of given width. More precisely, +a long text in the table cell is printed as a multiline paragraph with given width. +By default, the paragraph is left-right justified. But there are +alternatives: + +\begitems +* `p{<size>`\^`\fL}` fit left, i.e.\ left justified, ragged right, +* `p{<size>`\^`\fR}` fit right, i.e.\ right justified, ragged left, +* `p{<size>`\^`\fC}` fit center, i.e.\ ragged left plus right, +* `p{<size>`\^`\fS}` fit special, short one-line pararaph centered, + long paragraph normal, +* `p{<size>`\^`\fX}` fit extra, left-right justified but last line centered. +\enditems + +You can use `(<text>)` in the <declaration>. Then this text is applied in +each line of the table. For example `r(\kern10pt)l` adds more 10\,pt space +between `r` and `l` rows. + +An arbitrary part of the <declaration> can be repeated by a <number> +prefixed. For example `3c` means `ccc` or `c 3{|c}` means +`c|c|c|c`. Note that spaces in the <declaration> are ignored and you +can use them in order to more legibility. + +The command `\cr` used in the <data> part of the table +is generally known from Plain \TeX. It marks the end of each row in the table. +Moreover \OpTeX/ defines following similar commands: + +\begitems +* \^`\crl` \dots\ the end of the row with a horizontal line after it. +* \^`\crll` \dots\ the end of the row with a double horizontal line after it. +* \^`\crli` \dots\ like \^`\crl` but the horizontal line doesn't intersect the + vertical double lines. +* \^`\crlli` \dots\ like \^`\crli` but horizontal line is doubled. +* \^`\crlp{<list>}` \dots\ like \^`\crli` but the lines are drawn only in the + columns mentioned in comma-separated `<list>` of their numbers. + The <list> can include `<from>-<to>` declarators, for example + \^`\crlp{1-3,5}` is equal to \^`\crlp{1,2,3,5}`. +\enditems + +The \^`\tskip``<dimen>` command works like the `\noalign{\vskip<dimen>}` +immediately after `\cr*` commands but it doesn't interrupt the vertical lines. + +\new +You can use the following parameters for the \^`\table` macro. Default values are listed +too. + +\begtt +\everytable={} % code used in \vbox before table processing +\thistable={} % code used in \vbox, it is removed after using it +\tabiteml={\enspace} % left material in each column +\tabitemr={\enspace} % right material in each column +\tabstrut={\strut} % strut which declares lines distance in the table +\tablinespace=2pt % additional vert. space before/after horizontal lines +\vvkern=1pt % space between lines in double vertical line +\hhkern=1pt % space between lines in double horizontal line +\tabskip=0pt % space between columns +\tabskipl=0pt \tabskipr=0pt % space before first and after last column +\endtt + +Example: if you do \^`\tabiteml={$\enspace}`\^`\tabitemr={\enspace$}` then +the \^`\table` acts like \LaTeX's array environment. + +If there is an item that spans to more than one column in the table then +the macro \^`\multispan{<number>}` (from Plain \TeX) can help you. Another +alternative is +the command \^`\mspan``<number>[<declaration>]{<text>}` +which spans <number> columns and formats the <text> by the +<declaration>. The <declaration> must include a declaration of only one column +with the same syntax as common \^`\table` <declaration>. +If your table includes vertical rules and you want to +create continuous vertical rules by \^`\mspan`, then use rule declarators `|` +after `c`, `l` or `r` letter in \^`\mspan` <declaration>. The +exception is only in the case when \^`\mspan` includes the first +column and the table have rules on the left side. The example of \^`\mspan` +usage is below. + +The \^`\frame{<text>}` makes a frame around <text>. You can put the whole \^`\table` +into \^`\frame` if you need double-ruled border of the table. Example: + +\begtt +\frame{\table{|c||l||r|}{ \crl + \mspan3[|c|]{\bf Title} \crl \noalign{\kern\hhkern}\crli + first & second & third \crlli + seven & eight & nine \crli}} +\endtt +% +creates the following result: + +\hfil\frame{\table{|c||l||r|}{\crl + \mspan3[|c|]{\bf Title} \crl \noalign{\kern\hhkern}\crli + first & second & third \crlli + seven & eight & nine \crli}} +\bigskip + +The \^`\vspan``<number>{<text>}` shifts the <text> down in order it looks +like to be in the center of the <number> lines (current line is first). +You can use this for creating tables like in the following example: + +\begtt \typosize[8.7/11] +\thistable{\tabstrut={\vrule height 20pt depth10pt width0pt} + \baselineskip=20pt \tablinespace=0pt \rulewidth=.8pt} +\table{|8{c|}}{\crlp{3-8} + \mspan2[c|]{} & \mspan3[c|]{Singular} & \mspan3[c|]{Plural} \crlp{3-8} + \mspan2[c|]{} & Neuter & Masculine & Feminine & Masculine & Feminine & Neuter \crl + \vspan2{I} & Inclusive & \mspan3[c|]{\vspan2{O}} & \mspan3[c|]{X} \crlp{2,6-8} + & Exclusive & \mspan3[c|]{} & \mspan3[c|]{X} \crl + \vspan2{II} & Informal & \mspan3[c|]{X} & \mspan3[c|]{X} \crlp{2-8} + & Formal & \mspan6[c|]{X} \crl + \vspan2{III} & Informal & \vspan2{O} & X & X & \mspan2[c|]{X} &\vspan2{O} \crlp{2,4-7} + & Formal & & \mspan4[c|]{X} & \crl +} +\endtt + +\puttext 8.9cm -4cm {\pdfsave\pdfscale{.5}{.5}\rlap{% +\thistable{\tabstrut={\vrule height 20pt depth10pt width0pt} + \baselineskip=20pt \tablinespace=0pt \rulewidth=.8pt} +\table{|8{c|}}{\crlp{3-8} + \mspan2[c|]{} &\mspan3[c|]{Singular} &\mspan3[c|]{Plural} \crlp{3-8} + \mspan2[c|]{} & Neuter & Masculine & Feminine & Masculine & Feminine & Neuter \crl + \vspan2{I} & Inclusive & \mspan3[c|]{\vspan2{O}} &\mspan3[c|] X \crlp{2,6-8} + & Exclusive & \mspan3[c|]{} &\mspan3[c|] X \crl + \vspan2{II} & Informal & \mspan3[c|] X &\mspan3[c|] X \crlp{2-8} + & Formal & \mspan6[c|] X \crl + \vspan2{III} & Informal & \vspan2{O} & X & X &\mspan2[c|] X & \vspan2{O} \crlp{2,4-7} + & Formal & &\mspan4[c|] X & \crl +}}\pdfrestore} + +\hangindent=-7.5cm \hangafter=0 +You can use \^`\vspan` with non-integer parameter too if you feel that the +result looks better, for example \^`\vspan2.1{text}`. + +\hangindent=-7.5cm \hangafter=0 +The rule width of tables and implicit width of all `\vrule`s and `\hrule`s +can be set by the command \^`\rulewidth=<dimen>`. The default value given +by \TeX/ is 0.4\,pt. + +\hangindent=-7.5cm \hangafter=-2 +The `c`, `l`, `r` and `p` are default \"declaration letters" but you can define +more such letters by `\def\_tabdeclare<letter>{<left>##<right>}`. +More about it is in technical documentation in section~\ref[table.impl]. +See the definition of the \^`\_tabdeclarec` macro, for example. + +The `:` columns boundary declarator is described in section~\ref[table.bound]. +The tables with given width can be declared by `to<size>` or `pxto<size>`. +More about it is in section~\ref[table.w]. +Many tips about tables can be seen on the site +\url{http://petr.olsak.net/optex/optex-tricks.html}. + +\label[verbatim]\secc Verbatim +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +The display verbatim text have to be surrounded by the \^`\begtt` and +\^`\endtt` couple. +The in-line verbatim have to be tagged (before and after) +by a character which is declared by +\^`\verbchar``<char>`. For example \code{\\verbchar`} +declares the character \code{`} +for in-line verbatim markup. +And you can use \code{`\\relax`} for +verbatim `\relax` (for example). +\new +Another alternative of printing in-line +verbatim text is \~`\code{<text>}` (see below). + +If the numerical register \^`\ttline` is set to the non-negative value then +display verbatim will number the lines. The first line has the number +\^`\ttline+1` and when the verbatim ends then the \^`\ttline` value is equal to the +number of the last line printed. Next \^`\begtt...`\^`\endtt` environment will follow +the line numbering. \OpTeX/ sets \^`\ttline=-1` by default. + +The indentation of each line in display verbatim is controlled by +\^`\ttindent` register. This register is set to the `\parindent` by default. +Users can change the values of the `\parindent` and \^`\ttindent` independently. + +The \^`\begtt` command starts the internal group in which the catcodes are changed. +\new +Then the \^`\everytt` tokens register is run. It is empty by default and the user can +control fine behavior by it. For example, the catcodes can be re-declared here. If +you need to define an active character in the \^`\everytt`, use \~`\adef` as in the +following example: + +\begtt \adef@{\string\endtt} +\everytt={\adef!{?}\adef?{!}} +\begtt +Each occurrence of the exclamation mark will be changed to +the question mark and vice versa. Really? You can try it! +@ +\endtt +% +The \~`\adef` command sets its parameter as active {\it after\/} +the parameter of \^`\everytt` is read. So you don't have to worry about active +categories in this parameter. + +There is an alternative to \^`\everytt` named \^`\everyintt` which is used for +in-line verbatim surrounded by an \^`\verbchar` or processed by the \~`\code` +command. + +The \^`\everytt` is applied to all \^`\begtt...`\^`\endtt` environments (if it is not +declared in a group). There are tips for such global `\everytt` definitions here: + +\begtt \adef!{\char9251 } +\everytt={\typosize[9/11]} % setting font size for verbatim +\everytt={\ttline=0} % each listing will be numbered from one +\everytt={\visiblesp} % visualization!of!spaces +\endtt + +\new +If you want to apply a special code only for one \^`\begtt...`\^`\endtt` +environment then don't set any \^`\everytt` but put desired material at the +same line where \^`\begtt` is. For example: + +\begtt \adef@{\string\endtt} +\begtt \adef!{?}\adef?{!} +Each occurrence of ? will be changed to ! and vice versa. +@ +\endtt + +The in-line verbatim surrounded by a \^`\verbchar` doesn't work in +parameter of macros and macro definitions. (It works in titles declared by +\~`\chap`, \~`\sec` etc. and in \~`\fnote`s, because these macros are +specially defined in \OpTeX/). +\new +You can use more robust command \^`\code{<text>}` in problematic +situations, but you have to escape the following characters in the <text>: +`\`, `#`, `%`, braces (if the braces are unmatched in the <text>), +and space or `^` (if there are more than one subsequent spaces or `^` in +the <text>). Examples: + +\begtt +\code{\\text, \%\#} ... prints \text, %# +\code{@{..}*&^$ $} ... prints @{..}*&^$ $ without escaping, but you can + escape these characters too, if you want. +\code{a \ b} ... two spaces between a b, the second must be escaped +\code{xy\{z} ... xy{z ... unbalanced brace must be escaped +\code{^\^M} ... prints ^^M, the second ^ must be escaped +\endtt + +You can print verbatim listing from external files by the \^`\verbinput` command. +Examples: + +\begtt +\verbinput (12-42) program.c % listing from program.c, only lines 12-42 +\verbinput (-60) program.c % print from begin to the line 60 +\verbinput (61-) program.c % from line 61 to the end +\verbinput (-) program.c % whole file is printed +\verbinput (70+10) program.c % from line 70, only 10 lines printed +\verbinput (+10) program.c % from the last line read, print 10 lines +\verbinput (-5+7) program.c % from the last line read, skip 5, print 7 +\verbinput (+) program.c % from the last line read to the end +\endtt + +\new +You can insert additional commands for \^`\verbinput` before +the first opening bracket. They are processed in the local group. +For example, `\verbinput \hsize=20cm (-) program.c`. + +The \~`\ttline` influences the line numbering by the same way as in +\~`\begtt...`\~`\endtt` environment. If \~`\ttline=-1` then real line numbers are +printed (this is the default). If \code{\\ttline<-1} then no line +numbers are printed. + +The \^`\verbinput` can be controlled by \^`\everytt`, \^`\ttindent` just like +in \~`\begtt...`\~`\endtt`. + +The \~`\begtt`...\~`\endtt` pair or \~`\verbinput` can be used for listings of +codes. Automatic syntax highlighting is possible, for example +`\begtt` \^`\hisyntax{C}` activates colors for C programs. Or +`\verbinput` \^`\hisyntax{HTML} (-) file.html` can be used for HTML or XML codes. +\OpTeX/ implements C, Python, \TeX/, HTML and XML syntax highlighting. +More languages can be declared, see the section~\ref[hisyntax]. + +If the code is read by \^`\verbinput` and there are comment lines prefixed +by two characters then +you can set them by \~`\commentchars``<first><second>`. Such comments are +fully interpreted by \TeX/ (i.e. not verbatim). +Section~\ref[verb] (page \pgref[commentchars]) says more about this feature. + +\sec Autogenerated lists +%%%%%%%%%%%%%%%%%%%%%%%% + +\secc[toc] Table of contents +%%%%%%%%%%%%%%%%%%%%%% + +The \^`\maketoc` command prints the table of contents of all \~`\chap`, \~`\sec` +and \~`\secc` used in the document. These data are read from the external `*.ref` file, so +you have to run \TeX/ more than once (typically three times if the table of +contents is at the beginning of the document). + +Typically, we don't want to repeat the name of the section \"Table of contents" +in the table of contents again. The direct usage +of \~`\chap` or \~`\sec` isn't recommended here because the table of contents +is typically not referenced to itself. You can print the unnumbered and unreferenced +title of the section like this: + +\begtt +\nonum\notoc\sec Table of Contents +\endtt +If you need a customization of the design of the TOC, read the +section~\ref[maketoc]. + +\new +If you are using a special macro in section or chapter titles +and you need different behavior of such macro in other cases then use +\^`\regmacro{<case-toc>}{<case-mark>}{<case-outline>}`. +The parameters are applied locally in given cases. The \^`\regmacro` can be +used repeatedly: then its parameters are accumulated (for more macros). +If a parameter is empty then original definition is used in given case. +For example: + +\begtt +% default value of \mylogo macro used in text and in the titles: +\def\mylogo{\leavevmode\hbox{{\Red\it My}{\setfontsize{mag1.5}\rm Lo}Go}} +% another variants: +\regmacro {\def\mylogo{\hbox{\Red My\Black LoGo}}} % used in TOC + {\def\mylogo{\hbox{{\it My}\/LoGo}}} % used in running heads + {\def\mylogo{MyLoGo}} % used in PDF outlines +\endtt + +\secc Making the index +%%%%%%%%%%%%%%%%%%%%% + +The index can be included in the document by the \^`\makeindex` macro. No external +program is needed, the alphabetical sorting is done inside \TeX/ at macro +level. + +The \^`\ii` command (insert to index) declares the word separated by the space +as the index item. This declaration is represented as an invisible item on the +page connected to the next visible word. The page number of the page where +this item occurs is listed in the index entry. So you can type: + +\begtt +The \ii resistor resistor is a passive electrical component ... +\endtt + +You cannot double the word if you use the \^`\iid` instead of \^`\ii`: + +\begtt +The \iid resistor is a passive electrical component ... +or: +Now we'll deal with the \iid resistor . +\endtt + +Note that the dot or comma has to be separated by space when \^`\iid` is +used. This space (before dot or comma) is removed by the macro in +the current text. + +The multiple-words entries are commonly arranged in the index as follows: + +\medskip + +linear~dependency 11, 40--50 + +--- independency 12, 42--53 + +--- space 57, 76 + +--- subspace 58 + +\medskip + +To do this you have to declare the parts of the index entries by the `/` separator. +Example: + +\begtt +{\bf Definition.} +\ii linear/space,vector/space +{\em Linear space} (or {\em vector space}) is a nonempty set of... +\endtt + +The number of the parts of one index entry (separated by `/`) is unlimited. Note, that you can +spare your typing by the comma in the \~`\ii` parameter. The previous example +is equivalent to `\ii linear/space \ii vector/space`~. + +Maybe you need to propagate to the index the similar entry to the +linear/space in the form of space/linear. You can do this by the shorthand `,@` +at the end of the \~`\ii` parameter. Example: + +\begtt +\ii linear/space,vector/space,@ +is equivalent to: +\ii linear/space,vector/space \ii space/linear,space/vector +\endtt + +If you really need to insert the space into the index entry, write `~`. + +The \~`\ii` or \~`\iid` commands can be preceded by \^`\iitype` `<letter>`, then such +reference (or more references generated by one \~`\ii`) has the specified type. +The page numbers of such references should be formatted +specially in the index. \OpTeX/ implements only \^`\iitype` `b`, +\^`\iitype` `i` and \^`\iitype` `u`: +the page number in bold or in italics or underlined is printed +in the index when these types are used. The default index type is empty, which +prints page numbers in normal font. The \TeX/book index is a good example. + +The \^`\makeindex` creates the list of alphabetically sorted index entries +without the title of the section and without creating more columns. \OpTeX/ +provides other macros \^`\begmulti` and \^`\endmulti` for more columns: + +\begtt \catcode`\<=13 +\begmulti <number of columns> +<text> +\endmulti +\endtt +The columns will be balanced. The Index can be printed by the following +code: + +\begtt +\sec Index +\begmulti 3 \makeindex \endmulti +\endtt + +Only \"pure words" can be propagated to the index by the \~`\ii` command. It +means that there cannot be any macro, \TeX/ primitive, math selector, etc. +But there is another possibility to create such a complex index entry. Use +\"pure equivalent" in the \~`\ii` parameter and map this equivalent to a +real word that is printed in the index. Such mapping is done by +\^`\iis` command. Example: + +\begtt +The \ii chiquadrat $\chi$-quadrat method is ... +If the \ii relax `\relax` command is used then \TeX/ is relaxing. +... +\iis chiquadrat {$\chi$-quadrat} +\iis relax {\code{\\relax}} +\endtt +% +The \^`\iis` `<equivalent> {<text>}` creates one entry in the \"dictionary +of the exceptions". The sorting is done by the <equivalent> but the +<text> is printed in the index entry list. + +The sorting rules when \^`\makeindex` runs depends on the current language. +See section~\ref[lang] about languages selection. + +\secc Bib\TeX/ing +%%%%%%%%%%%%%%%% + +The command \^`\cite[<label>]` (or +\hbox{\^`\cite[<label-1>,<label-2>,...,<label-n>]`}) +creates the citation in the form [42] (or [15,~19,~26]). +If \^`\shortcitations` is declared at the beginning of the document then +continuous sequences of numbers are re-printed like this: +\hbox{[3--5,~7,~9--11]}. If +\^`\sortcitations` is declared then numbers generated by one \^`\cite` command +are sorted upward. + +If \^`\nonumcitations` is declared then the marks instead of numbers are generated +depending on the used bib-style. For example, the citations look like +[Now08] or [Nowak, 2008]. + +The \^`\rcite[<labels>]` creates the same list as \^`\cite[<labels>]` but without +the outer brackets. Example: `[\rcite[tbn], pg.~13]` creates [4,~pg.~13]. + +The \^`\ecite[<label>]{<text>}` prints the `<text>` only, but the entry labeled +<label> is decided as to be cited. If \~`\hyperlinks` is used then <text> +is linked to the references list. + +You can define alternative formating of \^`\cite` command. Example: + +\begtt \catcode`\<=13 +\def\cite[#1]{(\rcite[#1])} % \cite[<label>] creates (27) +\def\cite[#1]{$^{\rcite[#1]}$} % \cite[<label>] creates^{27} +\endtt + +The numbers printed by \^`\cite` correspond to the same numbers generated in +the list of references. There are two possibilities to generate this +references list: + +\begitems +* Manually using \~`\bib[<label>]` commands. +* By \~`\usebib/<type> (<style>) <bib-base>` command which reads `*.bib` + files directly. +\enditems + +\new +Note that another two possibilities documented in OPmac (using external +Bib\TeX/ program) isn't supported because Bib\TeX/ is an old program that does not +support Unicode. And Biber seems to be not compliant with Plain \TeX. + +\medskip\noindent +{\bf References created manually using \^`\bib[<label>]` command.} + +\begtt +\bib [tbn] P. Olšák. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 1997. +\bib [tst] P. Olšák. {\it Typografický systém \TeX.} + 269~s. Praha: CSTUG, 1995. +\endtt + +If you are using \~`\nonumcitations` then you need to declare the <marks> +used by \~`\cite` command. To do it you must use long form of the \^`\bib` +command in the format \^`\bib[<label>] = {<mark>}`. The spaces around +equal sign are mandatory. Example: + +\begtt +\bib [tbn] = {Olšák, 2001} + P. Olšák. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 2001. +\endtt + +\noindent +{\bf Direct reading of `.bib` files} is possible by \^`\usebib` macro. +This macro reads and uses macro package `librarian.tex` by Paul Isambert. +The usage is: + +\begtt \catcode`\<=13 +\usebib/c (<style>) <bib-base> % sorted by \cite-order (c=cite), +\usebib/s (<style>) <bib-base> % sorted by style (s=style). +% example: +\nocite[*] \usebib/s (simple) op-biblist % prints all from op-biblist.bib +\endtt + +The <bib-base> is one or more `*.bib` database source files (separated by +spaces and without extension) and the <style> is the part of the filename +`bib-<style>.opm` where the formatting of the references list is +defined. \OpTeX/ supports `simple` or `iso690` styles. The features of +the `iso690` style is documented in the section~\ref[isobib] in detail. +The \^`\usebib` command is more documented in section~\ref[usebib]. + +Not all records are printed from <bib-base> files: the command \^`\usebib` +selects only such bib-records which were used in \~`\cite` or \^`\nocite` +commands in your document. The \^`\nocite` behaves as \~`\cite` but prints +nothing. It tells only that the mentioned bib-record should be printed in the +reference list. If \^`\nocite[*]` is used then all records from <bib-base> +are printed. + +\sec Graphics +%%%%%%%%%%%%% + +\secc Colors +%%%%%%%%%%% + +\OpTeX/ provides a small number of color selectors: +{\Blue `\Blue`}, +{\Red `\Red`}, +{\Brown `\Brown`}, +{\Green `\Green`}, +{\Yellow `\Yellow`}, +{\Cyan `\Cyan`}, +{\Magenta `\Magenta`}, +{`\White`}, +{\Grey `\Grey`}, +{\LightGrey `\LightGrey`} and +`\Black`. User can define more +such selectors by setting four CMYK components +\new +or three RGB components. For example + +\begtt +\def \Orange {\setcmykcolor{0 0.5 1 0}} +\def \Purple {\setrgbcolor{1 0 1}} +\endtt + +\new +The command \^`\morecolors` reads more definitions of color selectors from +the \LaTeX/ file `x11nam.def`. +There are about 300 color names like +`\DeepPink`, `\Chocolate` etc. If there are numbered variants of the same +name, then the letters B, C, etc. are appended to the name in \OpTeX/. For example +`\Chocolate` is Chocolate1, `\ChocolateB` is Chocolate2 etc. + +\new +The color selectors work locally in groups by default but with limitations. See +the technical documentation, section~\ref[colors] for more information. + +The basic colors \^`\Blue`, \^`\Red`, \^`\Cyan`, \^`\Yellow` etc.\ are defined +with CMYK components using \^`\setcmykcolor`. +On the other hand, you can define a color with three +RGB components and \^`\morecolors` defines such RGB colors. +By default, the color model isn't converted but only stored to +PDF output for each used color. Thus, there may be a mix of color +models in the PDF output which is not a good idea. You can overcome this +problem by declaration \^`\onlyrgb` or \^`\onlycmyk`. Then only the selected color +model is used for PDF output and if a used color is declared by another color +model then it is converted. +The \^`\onlyrgb` creates colors more bright (usable for computer +presentations). On the other hand, CMYK makes colors more true\fnote +{Printed output is more equal to the monitor preview especially if you are +using ICC profile for your printer.} +for printing. + +\new +You can define your color by a linear combination of previously defined colors using +\^`\colordef`. For example: + +\begtt +\colordef \myCyan {.3\Green + .5\Blue} % 30 % green, 50 % blue, 20% white +\colordef \DarkBlue {\Blue + .4\Black} % Blue mixed with 40 % of black +\colordef \myGreen{\Cyan+\Yellow} % exact the same as \Green +\colordef \MyColor {.3\Orange+.5\Green+.2\Yellow} +\endtt +% +The linear combination is done in CMYK subtractive color space by default +(RGB colors used in \^`\colordef` argument are converted first). +If the resulting component is greater than 1 then it is truncated to 1. +If a convex linear combination (as in the last example above) is used then it +emulates color behavior on a painter's palette. +You can use \^`\rgbcolordef` instead of \^`\colordef` if you want to mix colors +in the additive RGB color space. + +\def\coloron#1#2#3{% + \setbox0=\hbox{{#2#3}}\leavevmode + \localcolor \rlap{#1\strut \vrule width\wd0}\box0 +} +The following example defines the macro for the +\coloron\Yellow\Brown{colored text on the colored background}. Usage: +`\coloron<background><foreground>{<text>}` + +The `\coloron` can be defined as follows: + +\begtt +\def\coloron#1#2#3{% + \setbox0=\hbox{{#2#3}}% + \leavevmode \rlap{#1\strut \vrule width\wd0}\box0 +} +\coloron\Yellow\Brown{The brown text on the yellow background} +\endtt + +\secc Images +%%%%%%%%%%% + +The \^`\inspic` `{<filename>.<extension>}` or +\^`\inspic` `<filename>.<extension><space>` +inserts the picture stored in +the graphics file with the name `<filename>.<extension>` to the document. +You can set the picture width by \^`\picw=<dimen>` +before \^`\inspic` command which declares the width of the picture. +The image files can be in the PNG, JPG, JBIG2 or PDF format. + +The \^`\picwidth` is an equivalent register to `\picw`. Moreover, there is an +\^`\picheight` register which denotes the height of the picture. If both +registers are set then the picture will be (probably) deformed. + +The image files are searched in \^`\picdir`. This token list is empty +by default, this means that the image files are searched in the +current directory. Example: \^`\picdir={img/}` supposes that image files are +in `img` subdirectory. Note: the directory name must end by `/` in +the \^`\picdir` declaration. + +Inkscape\fnote +{A powerful and free Wysiwyg editor for creating vector graphics.} +is able to save a picture to PDF and labels of the picture to another +file\fnote +{Chose \"Omit text in PDF and create LaTeX file" option.}. +This second file should be read by \TeX/to print labels +in the same font as document font. \OpTeX/ supports this feature by +\^`\inkinspic` `{<filename>.pdf}` command. It reads and displays +both: PDF image and labels generated by Inkscape. + +If you want to create vector graphics (diagrams, schema, geometry +skicing) then you can do it by Wysiwyg graphics editor (Inkscape, Geogebra for +example), export the result to PDF and include it by \^`\inspic`. +If you want to \"program" such pictures then Tikz package is recommended. +It works in Plain \TeX/ and \OpTeX. + +\secc PDF transformations +%%%%%%%%%%%%%%%%%%%%%%%% + +All typesetting elements are transformed by linear +transformation given by the current transformation matrix. The +`\pdfsetmatrix` `{<a> <b> <c> <d>}` command makes the internal multiplication +with the current matrix so linear transformations can be composed. +One linear transformation given by the `\pdfsetmatrix` above transforms +the vector $[0,1]$ to [<a>,\,<b>] and $[1,0]$ to [<c>,\,<d>]. +The stack-oriented commands `\pdfsave` and `\pdfrestore` gives a possibility of +storing and restoring the current transformation matrix and the position of the current point. +This position has to be the same from \TeX{}'s point of +view as from the transformation point of view when `\pdfrestore` is processed. +Due to this fact the `\pdfsave\rlap{<transformed text>}\pdfrestore` +or something similar is recommended. + +\OpTeX/ provides two special transformation macros +\^`\pdfscale` and \^`\pdfrotate`: + +\begtt \catcode`\<=13 +\pdfscale{<horizontal-factor>}{<vertical-factor>} +\pdfrotate{<angle-in-degrees>} +\endtt + +These macros simply call the properly `\pdfsetmatrix` command. + +It is known that the composition of transformations is not commutative. It +means that the order is important. You have to read the transformation +matrices from right to left. Example: + +\begtt +First: \pdfsave \pdfrotate{30}\pdfscale{-2}{2}\rlap{text1}\pdfrestore + % text1 is scaled two times and it is reflected about vertical axis + % and next it is rotated by 30 degrees left. +second: \pdfsave \pdfscale{-2}{2}\pdfrotate{30}\rlap{text2}\pdfrestore + % text2 is rotated by 30 degrees left then it is scaled two times + % and reflected about vertical axis. +third: \pdfsave \pdfrotate{-15.3}\pdfsetmatrix{2 0 1.5 2}\rlap{text3}% + \pdfrestore % first slanted, then rotated by 15.3 degrees right +\endtt +% +\par\nobreak\bigskip\smallskip +This gives the following result. +First: \pdfsave \pdfrotate{30}\pdfscale{-2}{2}\rlap{text1}\pdfrestore +second: \pdfsave \pdfscale{-2}{2}\pdfrotate{30}\rlap{text2}\pdfrestore +third: \pdfsave \pdfrotate{-15.3}\pdfsetmatrix{2 0 1.5 2}\rlap{text3}\pdfrestore +\par\nobreak\bigskip\penalty0%\bigskip + +You can see that \TeX/ knows nothing about dimensions of transformed material, +it treats it as with a zero dimension object. +\new +The \^`\transformbox{<transformation>}{<text>}` +macro solves the problem. This macro puts the transformed +material into a box with relevant dimensions. The <transfromation> parameter +includes one or more transformation commands `\pdfsetmatrix`, `\pdfscale`, +`\pdfrotate` with their parameters. The <text> is transformed text. + +Example: \~`\frame{\transformbox{\pdfscale{1}{1.5}\pdfrotate{-10}}{moj}}` +creates \frame{\transformbox{\pdfscale{1}{1.5}\pdfrotate{-10}}{moj}}. + +The \^`\rotbox{<deg>}{<text>}` is shortcut for +\^`\transformbox{\pdfrotate{<deg>}}{<text>}`. + +\secc Ovals, circles +%%%%%%%%%%%%%%%%%%%% + +\new +The \^`\inoval{<text>}` creates a box like this: \inoval{text}. +Multiline text can be put in an oval by the command \^`\inoval{\vbox{<text>}}`. +Local settings can be set by +\^`\inoval[<settings>]{<text>}` or you can re-declare global settings by +\^`\ovalparams={<settings>}`. The default settings are: + +\begtt +\ovalparams={\roundness=2pt % diameter of circles in the corners + \fcolor=\Yellow % color used for filling oval + \lcolor=\Red % line color used in the border + \lwidth=0.5bp % line width in the border + \shadow=N % use a shadow effect + \overlapmargins=N % ignore margins by surrounding text + \hhkern=0pt \vvkern=0pt} % left-righ margin, top-bottom margin +\endtt +The total distance from text to oval boundary is `\hhkern+\roundness` at the left and right +sides and +`\vvkern+\roundness` at the top and bottom sides of the text. + +If you need to set a parameters for the <text> (color, size, font etc.), +put such setting right in front of the <text>: +\^`\inoval{<text settings><text>}`. + +\new +The \^`\incircle[\ratio=1.8]{<text>}` creates a box like this \incircle[\ratio=1.8]{text}. +The \^`\ratio` parameter means width/height. The usage is analogical like for oval. +The default parameters are + +\begtt +\circleparams={\ratio=1 \fcolor=\Yellow \lcolor=\Red \lwidth=0.5bp + \shadow=N \ignoremargins=N \hhkern=2pt \vvkern=2pt} +\endtt + +\new +The macros \^`\clipinoval` `<x> <y> <width> <height> {<text>}` +and \^`\clipincircle` (with the same parameters) +print the `<text>` when a clipping path (oval or cirle with given +`<with>` and `<height>` shifted its center by `<x>` to right and by `<y>` to up) +is used. +The `\roundness=5mm` is default for \^`\clipinoval` and user can change it. +Example: + +\begtt +\clipincircle 3cm 3.5cm 6cm 7cm {\picw=6cm \inspic{myphoto.jpg}} +\endtt + +\secc Putting images and texts wherever + +\new +The \^`\puttext` `<x> <y> {<text>}` puts the `<text>` shifted by `<x>` right and by +`<y>` up from the current point of typesetting and does not change the +position of the current point. Assume a coordinate system with origin in the +current point. Then \^`\puttext` `<x> <y> {<text>}` puts the text at the +coordinates `<x>`, `<y>`. More exactly the left edge of its baseline is at that +position. + +\new +The \^`\putpic` `<x> <y> <width> <height> {<image-file>}` puts an image +given by `<image-file>` (including extension) of given +`<width>` and `<height>` at given position (its left-bottom corner). +You can write \^`\nospec` instead `<width>` or `<height>` if this parameter +is not specified. + +\sec Others +%%%%%%%%%%% + +\secc[lang] Using more languages +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\OpTeX/ prepares hyphenation patterns for all languages if such patterns are +available in your \TeX/ system. +\new +Only USenglish patterns (original from Plain \TeX/) are preloaded. +Hyphenation patterns of all other languages are loaded on demand when you first use +the `\<iso-code>lang` command in your document. +For example \^`\delang` for German, \^`\cslang` for +Czech, \^`\pllang` for Polish. The <iso-code> is a shortcut +of the language (mostly from ISO 639-1). +You can list all available languages by \^`\langlist` +macro. This macro prints now: + +\medskip +{\typosize[8.5/11.5]\emergencystretch=4em \hbadness=4000 +\noindent \langlist +\par} +\medskip + +\new +For compatibility with e-plain macros, there is the command +\^`\uselanguage{<language>}`. The parameter <language> is long-form of +language name, i.e.\ \^`\uselanguage{Czech}` works the same as \^`\cslang`. +The \^`\uselanguage` parameter is case insensitive. + +For compatibility with \csplain/, there are macros \^`\ehyph`, \^`\chyph`, +\^`\shyph` which are equivalent to \^`\enlang`, \^`\cslang` and \^`\sklang`. + +You can switch between language patterns by `\<iso-code>lang` commands mentioned +above. Default is \^`\enlang`. + +\OpTeX/ generates three phrases used for captions and titles in technical +articles or books: \"Chapter", \"Table" and \"Figure". These phrases need to be known +in used language and it depends on the previously used language selectors +`\<iso-code>lang`. \OpTeX/ declares these words only for few languages: +\new +Czech, German, Spanish, French, Greek, Italian, Polish, Russian, Slovak and +English, If you need to use these words in other languages or you want to +auto-generate more words in your macros, then you can declare it by +\~`\sdef` or \^`\_langw` commands as shown in section~\ref[langphrases]. + +The \~`\makeindex` command needs to know the sorting rules used in your language. +\OpTeX/ defines only a few language rules for sorting: Czech, +Slovak and English. How to declare sorting rules for more languages are +described in the section~\ref[makeindex]. + +If you declare `\<iso-code>quotes`, then the control sequences `\"` and `\'` +should be used like this: `\"<quoted text>"` or `\'<quoted text>'` +(note that the terminating character is the same but it isn't escaped). +This prints language-dependent normal or alternative quotes around +<quoted text>. The language is specified by <iso-code>. \OpTeX/ declares +quotes only for Czech, German, Spanish, French, Greek, Italian, Polish, +Russian, Slovak and English (\^`\csquotes`, \^`\dequotes`, \dots, \^`\enquotes`). +You can simply define your own quotes as shown in section~\ref[langphrases]. +The `\"` is used for quotes visually more similar to the `"` character which +can be primary quotes or secondary quotes depending on the language rules. +Maybe you want to alternate the meaning of these two types of quotes. Use +`\<isocode>quotes\altquotes` in such case. + +\secc[styles] Pre-defined styles +%%%%%%%%%%%%%%%%%%%%%%% + +\OpTeX/ defines three style-declaration macros \~`\report`, \~`\letter` and +\~`\slides`. You can use them at the beginning of your document if you are +preparing these types of documents and you don't need to create your own +macros. + +The \^`\report` declaration is intended to create reports. It +sets default font size to 11\,pt and `\parindent` (paragraph indentation) to 1.2\,em. +The `\tit` macro uses smaller font because we assume that \"chapter level" +will be not used in reports. The first page has no page number, but the next pages +are numbered (from number~2). Footnotes are numbered from one in the whole +document. The macro `\author <authors><end-line>` can be used when +\^`\report` is declared. It prints `<authors>` in italics at the center of the +line. You can separate authors by `\nl` to more lines. + +The \^`\letter` declaration is intended to create letters. +See the files `op-letter-*.tex` for examples. +The \^`\letter` style sets default +font size to 11\,pt and `\parindent` to 0\,pt. It sets half-line space +between paragraphs. The page numbers are not printed. The \^`\subject` macro +can be used, it prints the word \"Subject:" or \"Věc" (or something else +depending on current language) in bold. Moreover, the \^`\address` macro +can be used when \^`\letter` is declared. The usage of the \^`\address` macro +looks like: + +\begtt \catcode`\<=13 +\address + <first line of address> + <second line of address> + <etc.> + <empty line> +\endtt + +It means that you need not use any special mark at the end of lines: the ends +of lines in the source file are the same as in printed output. The +\^`\address` macro creates `\vtop` with address lines. The width of such +`\vtop` is equal to the widest line used in it. So, you can use +`\hfill\address...` to put the address box to the right side of the +document. Or you can use `<prefixed text>\address...` to put +`<prefixed text>` before the first line of the address. + +The \^`\slides` style creates a simple presentation slides. See an example +in the file `op-slides.tex`. Run `optex op-slides.tex` and see the documentation of +\^`\slides` style in the file `op-slides.pdf`. + +Analogical declaration macro `\book` is not prepared. Each book needs +individual typographical care. You need to create specific macros for +design. + +\secc Loading other macro packages +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +You can load more macro packages by `\input{<file-name>}` or by +\^`\load[<file-names>]`. The first case (`\input`) is \TeX/ primitive command, it can be +used in the alternative old syntax `\input <filename><space>` too. The +second case (\^`\load`) allows specifying a comma-separated list of included files. +Moreover, it loads each macro file only once, it sets +temporarily standard category codes during loading and it tries to +load `<filename>.opm` or `<filename>.tex` or `<filename>`, the first occurence +wins. Example: +\begtt +\load [qrcode, tikz] +\endtt +% +does `\input qrcode.opm` \,and `\input tikz.tex` \,and it saves +local information about the fact that these file names +`qrcode` and `tikz` were already used, i.\,e. next \^`\load` will skip them. + +It is strongly recommended to use the `\load` macro for loading external +macros if you need them. On the other hand, if your source document is structured +to more files (with individual chapters or sections), use simply the `\input` primitive. + +The macro packages intended to \OpTeX/ have the name `*.opm`. +The following packages are distributed as part of \OpTeX/: +\begitems +* `qrcode.opm` enables to create QR codes. +* `vlna.opm` enables to protect of one-letter prepositions and more things automatically. +* `emoji.opm` defines `\emoji{<name>}` command for colored emoticons. +* `plain-at.opm` defines the old names from plain \TeX/. +\enditems +See the directory `optex/pkg/` and these files for more information about +them. + +\secc Lorem ipsum dolor sit +%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\new +A designer needs to concentrate on the design of the output and maybe he/she +needs material for testing macros. There is the possibility to generate a +neutral text for such experiments. Use \^`\lorem[<number>]` or +\^`\lorem[<from>-<to>]`. It prints a paragraph (or paragraphs) with neutral +text. The numbers <number> or <from>, <to> must be in the range 1 to 150 +because there are 150 paragraphs with neutral text prepared for you. +The \^`\lipsum` macro is equivalent to \^`\lorem`. Example: \^`\lipsum[1-150]` +prints all prepared paragraphs. + +\secc Logos +%%%%%%%%%% + +\new +The control sequences for typical logos can be terminated by optional `/` +which is ignored when printing. This makes logos more legible in the source file: + +\begtt +We are using \TeX/ because it is cool. \OpTeX/ is better than \LaTeX. +\endtt + +\secc The last page +%%%%%%%%%%%%%%%%%%% + +The number of the last page (it may be different from the number of pages) is +expanded by \^`\lastpage` macro. It expands to `?` in first \TeX/ run and to +the last page in next \TeX/ runs. + +There is an example for footlines in the format \"current page / last page": + +\begtt +\footline={\hss \fixedrm \folio/\lastpage \hss} +\endtt + +\new +The \^`\lastpage` expands to the last \^`\folio` which is a decimal +number or Roman numeral (when \^`\pageno` is negative). If you need to know +the total pages used in the document, use \^`\totalpages` macro. It expands to +zero (in first \TeX/ run) or to the number of all pages in the document +(in next \TeX/ runs). + +\secc Use \OpTeX/ +%%%%%%%%%%%%%%%%% + +\new +The command \^`\useOpTeX` (or \^`\useoptex`) does nothing in \OpTeX/ but it causes +an error (undefined control sequence) when another format is used. You can +put it as the first command in your document: + +\begtt +\useOpTeX % we are using OpTeX format, no LaTeX :) +\endtt + +\sec Summary +%%%%%%%%%%%% + +\def\ttref#1'{\ea\~\ea`\csname#1\endcsname`} + +\begtt \typosize[9/11]\adef&{\kern.25em}\adef~#1'{\ea\~\ea`\csname#1\endcsname`} +~tit' Title (terminated by end of line) +~chap' Chapter Title (terminated by end of line) +~sec' Section Title (terminated by end of line) +~secc' Subsection Title (terminated by end of line) + +~maketoc' % table of contents generation +~ii' item1,item2 % insertion the items to the index +~makeindex' % the index is generated + +~label' [labname] % link target location +~ref' [labname] % link to the chapter, section, subsection, equation +~pgref' [labname] % link to the page of the chapter, section, ... + +~caption'/t % a numbered table caption +~caption'/f % a numbered caption for the picture +~eqmark' % a numbered equation + +~begitems' % start a list of the items +~enditems' % end of list of the items +~begblock' % start a block of text +~endblock' % end of block of text +~begtt' % start a verbatim text +~endtt' % end verbatim text +~verbchar' X % initialization character X for in-text verbatim +~code' % another alternative for in-text verbatim +~verbinput' % verbatim extract from the external file +~begmulti' num % start multicolumn text (num columns) +~endmulti' % end multicolumn text + +~cite' [labnames] % refers to the item in the lits of references +~rcite' [labnames] % similar to \cite but [] are not printed. +~sortcitations' ~shortcitations' ~nonumcitations' % cite format +~bib' [labname] % an item in the list of references +~usebib'/? (style) bib-base % direct using of .bib file, ? in {s,c} + +~load' [filenames] % loadaing macro files +~fontfam' [FamilyName] % selection of font family +~typosize' [font-size/baselineskip] % size setting of typesetting +~typoscale' [factor-font/factor-baselineskip] % size scaling +~thefontsize' [size] ~thefontscale' [factor] % current font size + +~inspic' file.ext % insert a picture, extensions: jpg, png, pdf +~table' {rule}{data} % macro for the tables like in LaTeX + +~fnote' {text} % footnote (local numbering on each page) +~mnote' {text} % note in the margin (left or right by page number) + +~hyperlinks' {color-in}{color-out} % PDF links activate as clickable +~outlines' {level} % PDF will have a table of contents in the left tab + +~magscale'[factor] % resize typesetting, line/page breaking unchanged +~margins'/pg format (left, right, top, bottom)unit % margins setting + +~report' ~letter' ~slides' % style declaration macros +\endtt + +\sec API for macro writers +%%%%%%%%%%%%%%%%%%%%%%%%%% + +All \TeX/ primitives and almost all \OpTeX/ macros are accesible by two +names: `\foo` (public or user name space) and `\_foo` (private name space). +For example `\hbox` and `\_hbox` means the same \TeX/ primitive. More about +it is documented in section~\ref[prefixed]. + +If this manual refers `\foo` then `\_foo` equivalent exists too. For example, +we mention the `\addto` macro below. The `\_addto` equivalent exists too, but it +is not explicitly mentioned here. If we refer only `\_foo` then its public +equivalent does not exist. For example, we mention the `\_codedecl` macro below, so +this macro is not available as `\codedecl`. + +If you are writing a document or macros specific for the document, then use +simply user namespace (`\foo`). If you are writing more general macros, +then use private namespace (`\_foo`), but you should declare your own namespace +by \~`\_namespace` macro and you have to follow the naming discipline described in +section~\ref[pkg-namespace]. + +The alphabetically sorted list of macros typically usable for macro writers follows. +More information about such macros can be found in the technical documentation. +You can use hyperlinks here in order to go to the appropriate place of the technical +documentation. + +\medskip \noindent +\^`\addto`` \macro{<text>}` adds <text> at the end of `\macro` body.\nl +\^`\adef` `<char>{<body>}` defines <char> active character with meaning <body>.\nl +\^`\afterfi` `{<text>}<ignored>\fi` expands to `\fi<text>`.\nl +\^`\bp`` {<dimen expression>}` expands \TeX/ dimension to decimal number in `bp` without unit.\nl +\~`\_codedecl`` <sequence> {<info>}` is used at beginning of macro files.\nl +\~`\colordef`` \macro {<mix of colors>}` declares `\macro` as color switch.\nl +\^`\cs` `{<string>}` expands `\<string>`.\nl +\~`\_doc` `...` \~`\_cod` encloses documenation text in the macro code.\nl +\^`\eoldef`` \macro #1{<body>}` defines `\macro` with parameter separated to end of line.\nl +\~`\_endcode` closes the part of macro code in macro files.\nl +\~`\_endnamespace` closes name space declared by \~`\_namespace`.\nl +\~`\eqbox`` [<label>]{<text>}` creates `\hbox{<text>}` with common width across whole document.\nl +\^`\expr`` {<expression>}` expands to result of the <expression> with decimal numbers.\nl +\~`\fontdef`` \f {<font spec.>}` declares `\f` as font switch.\nl +\~`\fontlet` `\fa=\fb <sizespec.>` declares `\fa` as the same font switch + like `\fb` at given <sizespec.>.\nl +\^`\foreach` `<list>\do <parameters>{<what>}` is exapandable loop over <list>.\nl +\^`\foreachdef` `\macro <parameters>{<what>}` declares expandable `\macro` as loop over <list>.\nl +\^`\fornum` `<from>..<to>\do {<what>}` is expanadable loop with numeric variable.\nl +\^`\incr` `<counter>` increases and \^`\decr` `<counter>` decreases `<counter>` by one globally.\nl +\^`\ignoreit` `<one>`, \^`\ignoresecond` `<one><two>` ignores given parameter.\nl +`\expandafter` \^`\ignorept` `\the<dimen>` expands to decimal number <dimen> without `pt`.\nl +\~`\isempty`, \~`\istoksempty`, \~`\isequal`, \~`\ismacro`, \~`\isdefined`, \~`\isinlist` +\~`\isfile`, \~`\isfont` do various tests. Example: \~`\isinlist\list{<text>}\iftrue` does + `\iftrue` if <text> is in `\list`.\nl +\^`\isnextchar`` <char>{<text1>}{<text2>}` performs <text1> if next + character is <char>, else <text2>.\nl +\~`\kv` `{<key>}` expands to value when key-value parameters are used.\nl +\^`\loop` `...` \^`\repeat` is classical Plain \TeX/ loop.\nl +\^`\mathstyles`` {<math list>}` enables to create macros dependent on current math style.\nl +\~`\_namespace`` {<pkg>}` declares name space used by package writers.\nl +\^`\newcount`, \^`\newdimen` etc. are classical Plain \TeX/ allocators.\nl +\^`\newif` `\iffoo` declares boolean `\iffoo` as in Plain \TeX/.\nl +\^`\_newifi` `\_iffoo` declares boolean `\_iffoo`.\nl +\^`\opinput`` {<filename>}` reads file like `\input` but with standard catcodes.\nl +\^`\optdef`` \macro [<opt-default>] <parameters>{<body>}` defines `\macro` with [opt.parameter].\nl +\^`\opwarning` `{<text>}` prints <text> to the terminal and .log file as warning.\nl +\~`\private`` <sequence> <sequence> ... ;` declares <sequence>s for private name space.\nl +\~`\public`` <sequence> <sequence> ... ;` declares <sequence>s for public name space.\nl +\~`\readkv` `\macro` reads parameters from `\macro` in key-value format.\nl +\^`\replstring`` \macro{<stringA>}{<stringB>}` replaces all <stringA> to <stringB> in `\macro`.\nl +\^`\sdef` `{<string>}<parameters>{<body>}` behaves like `\def\<string><parameters>{<body>}`.\nl +\^`\setctable` and \^`\restorectable` manipulate with stack of catcode tables.\nl +\^`\slet` `{<stringA>}{<stringB>}` behaves like `\let\<stringA>=\<stringB>`\nl +\^`\sxdef` `{<string>}<parameters>{<body>}` behaves like `\xdef\<string><parameters>{<body>}`.\nl +\^`\trycs`` {<string>}{<text>}` expands `\<string>` if it is defined else expands <text>.\nl +\^`\useit` `<one>`, \^`\usesecond` `<one><two>` uses given parameter.\nl +\^`\wlog`` {<text>}` writes <text> to .log file.\nl +\^`\wterm`` {<text>}` writes <text> to the terminal and .log file.\nl +\^`\xargs`` <what> <token> <token> ... ;` repeats <what><token> for each <token>.\nl +\unpenalty\unskip + +\sec Compatibility with Plain \TeX/ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +All macros of Plain \TeX/ are re-written in \OpTeX/. Common macros should +work in the same sense as in original Plain \TeX. Internal control sequences +like `\p@` or `\f@@t` are removed and mostly replaced by control sequences +prefixed by `_` (like `\_this`). If you need to use the basic set of old Plain +\TeX/ control sequences like `\p@` (for example you are reading an old macro file), +use `\load[plain-at]`. + +All primitives and common macros have two +control sequences with the same meaning: in prefixed and unprefixed form. +For example `\hbox` is equal to `\_hbox`. +Internal macros of \OpTeX/ have and use only prefixed form. User should use +unprefixed forms, but prefixed forms are accessible too because the `_` is +set as a letter category code globally (in macro files and users document too). User +should re-define unprefixed forms of control sequences without worries that +something internal will be broken (only the sequence `\par` cannot be +re-defined without change of internal \TeX/ behavior because it is +hard-coded in \TeX/, unfortunately). + +\new +The Latin Modern 8bit fonts instead Computer Modern 7bit fonts are +preloaded in the format, but only a few ones. The full family set is ready to +use after the command \~`\fontfam[LMfonts]` which reads the fonts in OTF +format. + +\new +Plain \TeX/ defines `\newcount`, `\bye` etc. as `\outer` macros. \OpTeX/ +doesn't set any macro as `\outer`. Macros like `\TeX`, `\rm` are defined as +`\protected`. + +\new +The text accents macros `\"`, `\'`, `\v`, `\u`, `\=`, `\^`, `\.`, `\H`, +`\~`, \code{\\`}, `\t` are undefined\fnote +{The math accents macros like `\acute`, `\bar`, `\dot`, `\hat` still work.} +in \OpTeX/. Use real +letters like á, ř, ž in your source document instead of these old accents macros. +If you really want to use them, you can initialize them by the \^`\oldaccents` +command. But we don't recommend it. + +\new +The default paper size is not set as the letter with 1\,in margins but as A4 with +2.5\,cm margins. You can change it, for example by +\^`\margins/1 letter (1,1,1,1)in`. This example sets the classical Plain \TeX/ +page layout. + +\new +The origin for the typographical area is not at the top left 1\,in 1\,in coordinates +but at the top left paper corner exactly. For example, `\hoffset` includes directly left +margin. + +The tabbing macros `\settabs`\iindex{settabs} and `\+` (from Plain \TeX/) +are not defined in \OpTeX/ because they are obsolete. But you can use the +\ulink[http://petr.olsak.net/optex/optex-tricks.html\#tabs]{\OpTeX/ trick 0021} +if you really need such feature. + +The `\sec` macro is reserved for sections but original Plain \TeX/ declares this +control sequence for math secans. + +\enddocument + + +\sec Dependencies +%%%%%%%%%%%%%%%%% + +When `optex.fmt` is created then the following must be installed + +\begitems +* The `\luatex` program. +* Latin moder font metrics + `ec-lmr10.tfm`, `ec-lmbx10.tfm`, `ec-lmri10.tfm`, + `ec-lmbxi10.tfm`, `ec-lmtt10.tfm` (for basic text font initializing). +* Computer rmodern font metrics + `cmr10.tfm`, `cmmi10.tfm`, `cmsy10.tfm`, `cmex10.tfm` (for basic math + initializing). If there are more Computer Modern fonts then they are read + too. +* The file `hyphen.tex` form plain \TeX. +\enditems + +When `\fontfam` is used then the ability of Unicode fonts reading +is initialized using Lua scripts: `ltluatex.lua` (from \LaTeX/ package), +`luaotfload-main.lua` and more 20 similar `.lua` files (from `luaotfload` +package). + +When a font family is needed using `\fontfam` then such font family must be +installed in the OTF format otherwise, the `\fontfam` command is ignored +(only warning about no-existent font family is printed). + +When `\cslang`, `\delang` etc. commands are used in the document +then the hyphenation patterns of relevant languages must be installed. +Moreover the Lua script `luatex-hyphen.lua` (from `hyph-utf8` package) +and data file `language-dat.lua` (from `hyphen-base` package) +must be installed. + +When `\usebib` command is used then `librarian.tex` file +(from the `librarian` macro package) must be installed. + +When `\morecolors` command is used then `x11nam.def` file +(from the `xcolor` package) must be installed. + +When `\lorem` command is used then `lipsum.ltd.tex` file +(from the `lipsum` package) must be installed. + diff --git a/Master/texmf-dist/tex/luatex/optex/base/alloc.opm b/Master/texmf-dist/tex/luatex/optex/base/alloc.opm deleted file mode 100644 index 5d874134d41..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/alloc.opm +++ /dev/null @@ -1,173 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \newdimen {Allocators for registers <2021-02-15>} % loaded in format - - \_doc ----------------------------- - The limits are set first. - \_cod ----------------------------- - -\_chardef\_maicount = 65535 % Max Allocation Index for counts registers in LuaTeX -\_let\_maidimen = \_maicount -\_let\_maiskip = \_maicount -\_let\_maimuskip = \_maicount -\_let\_maibox = \_maicount -\_let\_maitoks = \_maicount -\_chardef\_mairead = 15 -\_chardef\_maiwrite = 15 -\_chardef\_maifam = 255 - - \_doc ----------------------------- - Each allocation macro needs its own counter. - \_cod ----------------------------- - -\_countdef\_countalloc=10 \_countalloc=255 -\_countdef\_dimenalloc=11 \_dimenalloc=255 -\_countdef\_skipalloc=12 \_skipalloc=255 -\_countdef\_muskipalloc=13 \_muskipalloc=255 -\_countdef\_boxalloc=14 \_boxalloc=255 -\_countdef\_toksalloc=15 \_toksalloc=255 -\_countdef\_readalloc=16 \_readalloc=-1 -\_countdef\_writealloc=17 \_writealloc=-1 -\_countdef\_famalloc=18 \_famalloc=3 - - \_doc ----------------------------- - The common allocation macro - \`\_allocator` `\<sequence> {<type>} \<primitive declarator>` - is defined. This idea was used in classical plain \TeX/ by - Donald Knuth too but the macro from plain \TeX/ seems to be - more complicated:). - \_cod ----------------------------- - -\_def\_allocator #1#2#3{% - \_incr{\_cs{_#2alloc}}% - \_ifnum\_cs{_#2alloc}>\_cs{_mai#2}% - \_errmessage{No room for a new \_ea\_string\_csname #2\_endcsname}% - \_else - \_global#3#1=\_cs{_#2alloc}% - \_wlog{\_string#1=\_ea\_string\_csname #2\_endcsname\_the\_cs{_#2alloc}}% - \_fi -} - - \_doc ----------------------------- - The allocation macros - \`\newcount`, \`\newdimen`, \`\newskip`, \`\newmuskip`, \`\newbox`, - \`\newtoks`, \`\newread`, \`\newwrite` and \`\newfam` - are defined here. - \_cod ----------------------------- - -\_def\_newcount #1{\_allocator #1{count}\_countdef} -\_def\_newdimen #1{\_allocator #1{dimen}\_dimendef} -\_def\_newskip #1{\_allocator #1{skip}\_skipdef} -\_def\_newmuskip #1{\_allocator #1{muskip}\_muskipdef} -\_def\_newbox #1{\_allocator #1{box}\_chardef} -\_def\_newtoks #1{\_allocator #1{toks}\_toksdef} -\_def\_newread #1{\_allocator #1{read}\_chardef} -\_def\_newwrite #1{\_allocator #1{write}\_chardef} -\_def\_newfam #1{\_allocator #1{fam}\_chardef} - -\_public \newcount \newdimen \newskip \newmuskip \newbox \newtoks \newread \newwrite \newfam ; - - \_doc ----------------------------- - The \`\newinsert` macro is defined differently than others. - \_cod ----------------------------- - -\_newcount\_insertalloc \_insertalloc=255 -\_chardef\_insertmin = 201 - -\_def\_newinsert #1{% - \_decr\_insertalloc - \_ifnum\_insertalloc <\_insertmin - \_errmessage {No room for a new \_string\insert}% - \_else - \_global\_chardef#1=\_insertalloc - \_wlog {\_string#1=\_string\_insert\_the\_insertalloc}% - \_fi -} -\_public \newinsert ; - - \_doc ----------------------------- - Other allocation macros \`\newattribute` and \`\newcatcodetable` - have their counter allocated by the `\newcount` macro. - \_cod ----------------------------- - -\_newcount \_attributealloc \_attributealloc=0 -\_chardef\_maiattribute=\_maicount -\_def\_newattribute #1{\_allocator #1{attribute}\_attributedef} - -\_newcount \_catcodetablealloc \_catcodetablealloc=10 -\_chardef\_maicatcodetable=32767 -\_def\_newcatcodetable #1{\_allocator #1{catcodetable}\_chardef} - -\_public \newattribute \newcatcodetable ; - - \_doc ----------------------------- - We declare public and private versions of `\tmpnum` and `\tmpdim` - registers separately. They are independent registers. - \_cod ----------------------------- - -\_newcount \tmpnum \_newcount \_tmpnum -\_newdimen \tmpdim \_newdimen \_tmpdim - - \_doc ----------------------------- - A few registers are initialized like in plain\TeX/. We absolutely - don't support the `@`category dance, so `\z@skip` - `\z@`, `\p@` etc. are not defined in \OpTeX/. If you need such - control sequences then you can initialize them by `\load[plain-at]`. - - Only the \`\_zo` and \`\_zoskip` (equivalents to `\z@` and `\z@skip`) - are declared here and used in some internal macros of \OpTeX/ - for improving speed. - \_cod ----------------------------- - -\_newdimen\_maxdimen \_maxdimen=16383.99999pt % the largest legal <dimen> -\_newdimen\_zo \_zo=0pt -\_newskip\_hideskip \_hideskip=-1000pt plus 1fill % negative but can grow -\_newskip\_centering \_centering=0pt plus 1000pt minus 1000pt -\_newskip\_zoskip \_zoskip=0pt plus0pt minus0pt -\_newbox\_voidbox % permanently void box register - -\_public \maxdimen \hideskip \centering \voidbox ; - -\_endcode %--------------------------------------------------- - -Like plain\TeX, the allocators `\newcount`, `\newwrite`, etc. are defined. -The registers are allocated from 256 to the `\_mai<type>` which is 65535 in -\LuaTeX/. - -Unlike in Plain\TeX/, the mentioned allocators are not `\outer`. - -User can use `\dimen0` to `\dimen200` and similarly for `\skip`, -`\muskip`, `\box`, and `\toks` directly. User can use -`\count20` to `\count200` directly too. This is the same -philosophy as in old plain\TeX/, but the range of directly used registers -is wider. - -Inserts are allocated from 254 to 201 using `\newinsert`. - -You can define your own allocation concept (for example for allocation of -arrays) from the top of the registers array. The example shows a definition of -the array-like declarator of counters. - -\nobreak -\begtt -\newcount \_maicount % redefine maximal allocation index as variable -\_maicount = \maicount % first value is top of the array - -\def\newcountarray #1[#2]{% \newcountarray \foo[100] - \global\advance\_maicount by -#2\relax - \ifnum \_countalloc > \_maicount - \errmessage{No room for a new array of \string\count}% - \else - \global\chardef#1=\_maicount - \fi -} -\def\usecount #1[#2]{% \usecount \foo[2] - \count\numexpr#1+#2\relax -} -\endtt - -\_endinput - -2021-02-15 \_advance -> \_incr, \_decr -2020-05-12 \newmath -> \newfam bug fixing -2020-01-23 released diff --git a/Master/texmf-dist/tex/luatex/optex/base/basic-macros.opm b/Master/texmf-dist/tex/luatex/optex/base/basic-macros.opm deleted file mode 100644 index 4d465c30109..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/basic-macros.opm +++ /dev/null @@ -1,130 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \sdef {Basic macros for OpTeX <2021-02-03>} % loaded in format - - \_doc ------------------------------ - \`\bgroup`, \`\egroup`, \`\empty`, \`\space`, \`\null` and \`\wlog` - are classical macros from plain \TeX/. - \_cod ------------------------------ - -\_let\_bgroup={ \_let\_egroup=} -\_def \_empty {} -\_def \_space { } -\_def \_null {\_hbox{}} -\_def \_wlog {\_immediate\_write-1 } % write on log file (only) -\_public \bgroup \egroup \empty \space \null \wlog ; - - \_doc ------------------------------ - \`\ignoreit` ignores next token or `{<text>}`, - \`\useit``{<text>}` expands to `<text>` (removes outer braces), - \`\ignoresecond` uses first, ignores second parameter and - \`\usesecond` ignores first, uses second parameter. - \_cod ------------------------------ - -\_long\_def \_ignoreit #1{} -\_long\_def \_useit #1{#1} -\_long\_def \_ignoresecond #1#2{#1} -\_long\_def \_usesecond #1#2{#2} -\_public \ignoreit \useit \ignoresecond \usesecond ; - - \_doc ------------------------------ - \`\bslash` is \"normal backslash" with category code 12. - \`\nbb` is double backslash - and \`\pcent` is normal~`%`. - They can be used in Lua codes, for example. - \_cod ------------------------------ - -\_edef \_bslash {\_csstring\\} -\_edef \_nbb {\_bslash\_bslash} -\_edef \_pcent{\_csstring\%} -\_public \bslash \nbb \pcent ; - - \_doc ------------------------------ - \`\sdef` `{<text>}` is equivalent to `\def\<text>`, where `\<text>` is a control - sequence. You can use arbitrary parameter mask after `\sdef{<text>}`, don't - put the (unwanted) space immediately after closing brace \code{\}}. - \nl - \`\sxdef` `{<text>}` is equivalent to `\xdef\<text>`. - \nl - \`\slet` `{<textA>}{<textB>}` is equivalent to `\let \<textA> = \<textB>`. - \_cod ------------------------------ - -\_def \_sdef #1{\_ea\_def \_csname#1\_endcsname} -\_def \_sxdef #1{\_ea\_xdef \_csname#1\_endcsname} -\_def \_slet #1#2{\_ea\_let \_csname#1\_ea\_endcsname \_csname#2\_endcsname} -\_public \sdef \sxdef \slet ; - - \_doc ------------------------------ - \`\adef` `{<char>}{<body>}` puts the <char> as active character and defines it - as `{<body>}`. You can declare a macro with parameters too. For example - `\adef @#1{...#1...}`. - \_cod ------------------------------ - -\_def \_adef #1{\_catcode`#1=13 \_begingroup \_lccode`\~=`#1\_lowercase{\_endgroup\_def~}} -\_public \adef ; - - \_doc ------------------------------ - \`\cs` `{<text>}` is only a shortcut to `\csname <text>\endcsname`, but you need - one more `\_ea` if you need to get the real control sequence `\<text>`. - \nl - \`\trycs` `{<csname>}{<text>}` expands to `\<csname>` - if it is defined else to the `<text>`. - \_cod ------------------------------ - -\_def \_cs #1{\_csname#1\_endcsname} -\_def \_trycs#1#2{\_ifcsname #1\_endcsname \_csname #1\_ea\_endcsname \_else #2\_fi} -\_public \cs \trycs ; - - \_doc ------------------------------ - \`\addto` `\macro{<text>}` adds `<text>` to your `\macro`, which must be defined. - \_cod ------------------------------ - -\_long\_def \_addto #1#2{\_ea\_def\_ea#1\_ea{#1#2}} -\_public \addto ; - - \_doc ----------------------------- - \`\incr``<counter>` increases `<counter>` by one globally. - \`\decr``<counter>` decreases `<counter>` by one globally. - \_cod ----------------------------- - -\_def\_incr #1{\_global\_advance#1by1 } -\_def\_decr #1{\_global\_advance#1by-1 } -\_public \incr \decr ; - - \_doc ------------------------------ - \`\opwarning` `{<text>}` prints warning on the terminal and to the log file. - \_cod ------------------------------ - -\_def \_opwarning #1{\_wterm{WARNING l.\_the\_inputlineno: #1.}} -\_public \opwarning ; - - \_doc ------------------------------ - \`\loggingall` and \`\tracingall` are defined similarly as in - plain \TeX/, but they print - more logging information to the log file and the terminal. - \_cod ------------------------------ - -\_def\_loggingall{\_tracingcommands=3 \_tracingstats=2 \_tracingpages=1 - \_tracingoutput=1 \_tracinglostchars=1 \_tracingmacros=2 - \_tracingparagraphs=1 \_tracingrestores=1 \_tracingscantokens=1 - \_tracingifs=1 \_tracinggroups=1 \_tracingassigns=1 } -\_def\_tracingall{\_tracingonline=1 \_loggingall} -\_public \loggingall \tracingall ; - - \_doc ------------------------------ - Write a warning if the user did not load a Unicode Font {\em or} - if there were unresolved references. \`\_byehook` is used in the \^`\bye` macro. - \_cod ------------------------------ - -\_def\_byehook{% - \_ifx\_initunifonts\_relax \_relax\_else \_opwarning{Unicode font was not loaded}\_fi - \_ifnum\_unresolvedrefs>0 \_opwarning{Try to rerun to get references right}\_fi -} - -\_endcode % ------------------------------------- - -2021-02-03: \useit defined. -2021-01-22: \trycs: \ea added in order to be able to use cs with parameters -2021-01-08: \opwarning format changed (secondly, hope that conclusively) -2020-10-12: \opwarning: line numbers added -2020-02-14: introduced diff --git a/Master/texmf-dist/tex/luatex/optex/base/bib-iso690.opm b/Master/texmf-dist/tex/luatex/optex/base/bib-iso690.opm deleted file mode 100644 index c58709ce835..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/bib-iso690.opm +++ /dev/null @@ -1,906 +0,0 @@ -% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% bibliography style (iso690), version <2020-03-10>, loaded on demand by \usebib - -\_ifx\_optexbibstyle\_undefined \_errmessage - {This file can be read by: \_string\usebib/? (iso690) bibfiles command only} - \_endinput \_fi - - \_doc ----------------------------- - \`\_maybetod` (alias `\.` in the style file group) does not put the second dot. - \_cod ----------------------------- - -\_def\_maybedot{\_ifnum\_spacefactor=\_sfcode`\.\_relax\_else.\_fi} -\_tmpnum=\_sfcode`\. \_advance\_tmpnum by-2 \_sfcode`\.=\_tmpnum -\_sfcode`\?=\_tmpnum \_sfcode`\!=\_tmpnum -\_let\.=\_maybedot % prevents from double periods - - \_doc ----------------------------- - Option field. - \_cod ----------------------------- - -\_CreateField {option} -\_def\_isbiboption#1#2{\_edef\_tmp{\_noexpand\_isbiboptionA{#1}}\_tmp} -\_def\_isbiboptionA#1{\_def\_tmp##1 #1 ##2\_relax{% - \_if^##2^\_csname iffalse\_ea\_endcsname \_else\_csname iftrue\_ea\_endcsname \_fi}% - \_ea\_tmp\_biboptionsi #1 \_relax} -\_def\_bibopt[#1]#2#3{\_isbiboption{#1}\_iftrue\_def\_tmp{#2}\_else\_def\_tmp{#3}\_fi\_tmp} -\_def\_biboptionvalue#1#2{\_def\_tmp##1 #1:##2 ##3\_relax{\_def#2{##2}}% - \_ea\_tmp\_biboptionsi #1: \_relax} - -\_def\_readbiboptions{% - \_RetrieveFieldIn{option}\_biboptionsi - \_toks1=\_ea{\_biboptionsi}% - \_edef\_biboptionsi{\_space \_the\_toks1 \_space \_the\_biboptions \_space}% -} -\_newtoks\_biboptions -\_public \biboptions ; - - \_doc ----------------------------- - Formating of Author/Editor lists. - \_cod ----------------------------- - -\_def\_firstauthorformat{% - \_upper{\_Lastname}\_bprintc\_Firstname{, *}\_bprintc\_Von{ *}\_bprintc\_Junior{, *}% -} -\_def\_otherauthorformat{% - \_bprintc\_Firstname{* }\_bprintc\_Von{* }\_upper{\_Lastname}\_bprintc\_Junior{, *}% -} -\_def\_commonname{% - \_ifnum\_NameCount=1 - \_firstauthorformat - \_ifx\_dobibmark\_undefined \_edef\_dobibmark{\_Lastname}\_fi - \_else - \_ifnum0\_namecount=\_NameCount - \_ifx\_maybeetal\_empty \_bibconjunctionand\_else , \_fi - \_else , \_fi - \_otherauthorformat - \_fi -} -\_def\_authorname{% - \_ifnum\_NameCount>0\_namecount\_relax\_else \_commonname \_fi - \_ifnum\_NameCount=0\_namecount\_relax \_maybeetal \_fi -} -\_let\_editorname=\_authorname - -\_def\_prepareauedoptions#1{% - \_def\_mabyetal{}\_csname lb@abbreviatefalse\_endcsname - \_biboptionvalue{#1max}\_authormax - \_biboptionvalue{#1min}\_authormin - \_biboptionvalue{#1pre}\_authorpre - \_biboptionvalue{#1print}\_authorprint - \_isbiboption{#1etal}\_iftrue \_def\_maybeetal{\_Mtext{bib.etal}}\_fi - \_biboptionvalue{#1trim}\_autrim - \_let\_namecountraw=\_namecount - \_ifx\_authormax\_empty \_else - \_ifnum 0\_authormax<0\_namecount - \_edef\_namecount{\_ifx\_authormin\_empty\_authormax\_else\_authormin\_fi}% - \_def\_maybeetal{\_Mtext{bib.etal}}% - \_fi\_fi - \_ifx\_autrim\_empty \_def\_autrim{10000}\_fi - \_ifnum\_autrim=0 \_def\_autrim{10000}\_fi - \_ifnum 0\_namecount<\_autrim\_relax \_else \_AbbreviateFirstname \_fi -} -\_def\_maybeetal{} - -\_ifx\upper\_undefined - \_ifx\caps \_undefined \_def\upper{\_uppercase\_ea}\_else - \_def\upper#1{{\caps\_rm #1}}\_fi -\_fi -\_let\_upper=\upper - - \_doc ----------------------------- - Preparing bib-mark (used when `\nonumcitations` is set). - \_cod ----------------------------- - -\_def\_setbibmark{% - \_ifx\_dobibmark\_undefined \_def\_dobibmark{}\_fi - \_RetrieveFieldIn{bibmark}\_tmp - \_ifx\_tmp\_empty \_RetrieveFieldIn{year}\_tmp \_edef\_tmp{\_dobibmark, \_tmp}\_fi - \_bibmark=\_ea{\_tmp}% -} - - \_doc ----------------------------- - Setting phrases. - \_cod ----------------------------- - -\_def\_bibconjunctionand{\_Mtext{bib.and}} -\_def\_preurl{\_Mtext{bib.available}} -\_let\_predoi=\_preurl -\_def\_postedition{\_mtext{bib.edition}} -\_def\_Inclause{In:~} -\_def\_prevolume{\_mtext{bib.volume}} -\_def\_prenumber{\_mtext{bib.number}} -\_def\_prepages{\_mtext{bib.prepages}} -\_def\_posteditor{\_ifnum0\_namecountraw>1 \_Mtext{bib.editors}\_else\_Mtext{bib.editor}\_fi} - - \_doc ---------------------------- - \`\_Mtext``{<identifier>}` expands to a - phrase by outer document language (no entry language). - \_cod ----------------------------- - -\_chardef\_documentlanguage=\_language -\_def\_Mtext#1{\_csname _mt:#1:\_csname _lan:\_the\_documentlanguage\_endcsname\_endcsname} - -\_CreateField {lang} -\_def\_setlang#1{\_ifx#1\_empty \_else - \_ifcsname _mt:bib.and:#1\_endcsname \_language=\_csname _#1Patt\_endcsname \_relax - \_else \_opwarning{No phrases for "#1" used by [\EntryKey] in .bib}% - \_fi\_fi -} - - \_doc ----------------------------- - Non-standard field names. - \_cod ----------------------------- - -\_CreateField {ednote} -\_CreateField {citedate} -\_CreateField {numbering} -\_CreateField {isbn} -\_CreateField {issn} -\_CreateField {doi} -\_CreateField {url} -\_CreateField {bibmark} - - \_doc ----------------------------- - Sorting. - \_cod ----------------------------- - -\_SortingOrder{name,year}{lfvj} -\_SpecialSort {key} - - \_doc ----------------------------- - Supporting macros. - \_cod ----------------------------- - -\_def\_bibwarninga{\_bibwarning} -\_def\_bibwarningb{\_bibwarning} - -\_def\_docitedate #1/#2/#3/#4\_relax{[\_Mtext{bib.citedate}% - \_if^#2^#1\_else - \_if^#3^#1/#2\_else - \_cs{_\_cs{_lan:\_the\_documentlanguage}dateformat}#1/#2/#3\relax - \_fi\_fi ]% -} -\_def\_doyear#1{ - \_biboptionvalue{yearprint}\_yearprint - \_ifx\_yearprint\_empty#1\_else\_def\YEAR{#1}\_yearprint\_fi -} -\_def\_preparenumbering{% - \_def\VOL{\_RetrieveField{volume}}% - \_def\NO{\_RetrieveField{number}}% - \_def\PP{\_RetrieveField{pages}}% -} -\_def\_prepareednote{% - \_def\EDN{\_RetrieveField{edition}}% - \_def\ADDR{\_RetrieveField{address}}% - \_def\PUBL{\_RetrieveField{publisher}}% - \_def\YEAR{\_RetrieveField{year}}% - \_def\AU{\_bprintb[!author]{\_doauthor0{####1}}{}}% - \_def\ED{\_bprintb[!editor]{\_doeditor0{####1}}{}}% - \_preparenumbering -} -\_def\_doedition#1{% - \_biboptionvalue{editionprint}\_editionprint - \_ifx\_editionprint\_empty#1\_postedition\_else\_def\ED{#1}\_editionprint\_fi -} -\_def\_doauthor#1#2{\_prepareauedoptions{au}\_let\_iseditorlist=\_undefined - \_if1#1\_def\AU{#2}\_else\_let\_authorprint=\_empty\_fi - \_ifx\_authorprint\_empty #2\_else \_authorprint\_fi -} -\_def\_doeditor#1#2{\_prepareauedoptions{ed}\_let\_firstauthorformat=\_otherauthorformat - \_if1#1\_def\ED{#2}\_else\_let\_authorprint=\_empty\_fi - \_ifx\_authorprint\_empty #2\_posteditor\_else \_authorprint\_fi -} - - \_doc ----------------------------- - Entry types. - \_cod ----------------------------- - -\_sdef{_print:BEGIN}{% - \_readbiboptions - \_biboptionvalue{titlepost}\_titlepost - \_isbiboption{unpublished}\_iftrue \_let\_bibwarninga=\_relax \_let\_bibwarningb=\_relax \_fi - \_isbiboption{nowarn}\_iftrue \_let\_bibwarning=\_relax \_fi - \_isbiboption{urlalso}\_iftrue \_def\_preurl{\_Mtext{bib.availablealso}}\_fi - \_RetrieveFieldIn{lang}\_langentry \_setlang\_langentry -} -\_sdef{_print:END}{% - \_bprinta [note] {*.}{}% - \_setbibmark -} -\_def\_bookgeneric#1{% - \_bprinta [howpublished] {[*].\ }{}% - \_bprintb [edition] {\_doedition{##1}\.\ }{}% - \_bprinta [ednote] {*.\ }{}% - \_bprinta [address] {*\_bprintv[publisher]{:}{\_bprintv[year]{,}{.}}\ }{\_bibwarninga}% - \_bprinta [publisher] {*\_bprintv[year]{,}{.}\ }{\_bibwarninga}% - \_bprintb [year] {\_doyear{##1}\_bprintv[citedate]{\_bprintv[numbering]{.}{}}{.}\ }% - {\_bibwarning}% - \_bprinta [numbering] {\_preparenumbering*\_bprintv[citedate]{}{\.}\ }{}% - \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}% - #1% - \_bprinta [series] {*.\ }{}% - \_bprinta [isbn] {ISBN~*.\ }{\_bibwarningb}% - \_bprinta [issn] {ISSN~*.\ }{}% - \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_sdef{_print:book}{% - \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }% - {\_bibwarning}% - \_bookgeneric{}% -} -\_sdef{_print:article}{% - \_biboptionvalue{journalpost}\_journalpost - \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}% - \_bprinta [title] {*.\ \_bprintc\_titlepost{*.\ }}{\_bibwarning}% - \_bprintb [journal] {{\_em##1}\_bprintc\_journalpost{\.\ *}\_bprintv[howpublished]{}{\.}\ }% - {\_bibwarninga}% - \_bprinta [howpublished] {[*].\ }{}% - \_bprinta [address] {*\_bprintb[publisher]{:}{,}\ }{}% - \_bprinta [publisher] {*, }{}% - \_bprinta [month] {*, }{}% - \_bprintb [year] {\_doyear{##1}\_bprintv[volume,number,pages]{,}{\.}\ }{}% - \_bprinta [numbering] {\_preparenumbering*\_bprintv[citedate]{}{\.}\ } - {\_bprinta [volume] {\_prevolume*\_bprintv[number,pages]{,}{\.}\ }{}% - \_bprinta [number] {\_prenumber*\_bprintv[pages]{,}{\.}\ }{}% - \_bprintb [pages] {\_prepages\_hbox{##1}\_bprintv[citedate]{}{\.}\ }% - {\_bibwarninga}}% - \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}% - \_bprinta [issn] {ISSN~*.\ }{}% - \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_sdef{_print:inbook}{% - \_let\_bibwarningb=\_relax - \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}% - \_bprinta [title] {*.\ }{\_bibwarning}% - \_Inclause - \_bprintb [!editor] {\_doeditor1{##1}\.\ }{}% - \_bprintb [booktitle] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }% - {\_bibwarning}% - \_bookgeneric{\_bprintb [pages] {\_prepages\_hbox{##1}. }{}}% -} -\_slet{_print:inproceedings}{_print:inbook} -\_slet{_print:conference}{_print:inbook} - -\_sdef{_print:thesis}{% - \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }% - {\_bibwarning}% - \_bprinta [howpublished] {[*].\ }{}% - \_bprinta [address] {*\_bprintv[school]{:}{\_bprintv[year]{,}{.}}\ }{\_bibwarning}% - \_bprinta [school] {*\_bprintv[year]{,}{.}\ }{\_bibwarning}% - \_bprinta [month] {*, }{}% - \_bprintb [year] {\_doyear{##1}\_bprintv[citedate]{}{.}\ }{\_bibwarninga}% - \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}% - \_bprinta [type] {*\_bprintv[ednote]{,}{.}\ }% - {\_ifx\_thesistype\_undefined\_bibwarning - \_else\_thesistype\_bprintv[ednote]{,}{.}\ \_fi}% - \_bprinta [ednote] {*.\ }{}% - \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_sdef{_print:phdthesis}{\_def\_thesistype{\_Mtext{bib.phdthesis}}\_cs{_print:thesis}} -\_sdef{_print:mastershesis}{\_def\_thesistype{\_Mtext{bib.masthesis}}\_cs{_print:thesis}} -\_sdef{_print:bachelorsthesis}{\_def\_thesistype{\_Mtext{bib.bachthesis}}\_cs{_print:thesis}} - -\_sdef{_print:generic}{% - \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }% - {\_bibwarning}% - \_bprinta [howpublished] {[*].\ }{}% - \_bprinta [ednote] {\_prepareednote*\_bprintv[citedate]{}{.}\ }{\_bibwarning}% - \_bprinta [year] {}{\_bibwarning}% - \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}% - \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_slet{_print:booklet}{_print:generic} -\_slet{_print:incolleciton}{_print:generic} -\_slet{_print:manual}{_print:generic} -\_slet{_print:proceedings}{_print:generic} -\_slet{_print:techreport}{_print:generic} -\_slet{_print:unpublished}{_print:generic} - -\_sdef{_print:misc}{\_let\_bibwarning=\_relax \_cs{_print:generic}} - -\_endcode - - -This is the iso690 bibliographic style used by \OpTeX/. - -See `op-biblist.bib` for an example of the `.bib` input. You can try it by: - -\begtt -\fontfam[LMfonts] -\nocite[*] -\usebib/s (iso690) op-biblist -\end -\endtt - -\seccc Common rules in \code{.bib} files - -There are entries of type `@FOO{...}` in the `.bib` file. Each entry consists of -fields in the form `name = "value"`, or `name = {value}`. No matter which form is -used. If the value is pure numeric then you can say simply `name = value`. -Warning: the comma after each field value is mandatory! If it is missing then the -next field is ignored or badly interpreted. - -The entry names and field names are case insensitive. If there exists a data -field no mentioned here then it is simply ignored. You can use it to store -more information (abstract, for example). - -There are \"standard fields" used in ancient bib\TeX/ (author, title, editor, edition, -etc., see \url{http://en.wikipedia.org/wiki/BibTeX}). The `iso690` style introduces -several \"non-standard" fields: ednote, numbering, isbn, issn, doi, url, -citedate, key, bibmark. They are documented here. - -Moreover, there are two optional special fields: - -\begitems -* lang = language of the entry. The hyphenation plus autogenerated phrases and - abbreviations will be typeset by this language. -* option = options by which you can control a special printing of various fields. -\enditems - -There can be only one option field per each entry with (maybe) more options -separated by spaces. You can declare the global option(s) in your document -applied for each entry by `\biboptions={...}`. - - -\seccc The author field - -All names in the author list have to be separated by \"\code{ and }". -Each author can be written in various formats (the `von` part is typically missing): - -\begtt -Firstname(s) von Lastname -or -von Lastname, Firstname(s) -or -von Lastname, After, Firstname(s) -\endtt -Only the Lastname part is mandatory. Examples: -\begtt -Petr Olšák -or -Olšák, Petr - -Leonardo Piero da Vinci -or -da Vinci, Leonardo Piero -or -da Vinci, painter, Leonardo Piero -\endtt -The separator \"\code{ and }" between authors -will be converted to comma during -printing, but between the semifinal and final author the word \"and" (or something -different depending on the current language) is printed. - -The first author is printed in reverse order: \"LASTNAME, Firstname(s) von, -After" and the other authors are printed in normal order: \"Firstname(s) -von LASTNAME, After". This feature follows the ISO 690 norm. The Lastname -is capitalized using uppercase letters. But if the `\caps` font modifier is defined, -then it is used and printed `{\caps\_rm Lastname}`. - -You can specify the option `aumax:<number>`. The `<number>` denotes the -maximum authors to be printed. The rest of the authors are ignored and the -`et~al.` is appended to the list of printed authors. This text is -printed only if the `aumax` value is less than the real number of authors. -If you have the same number of authors in the .bib file as you need to print -but you want to append `et~al.` then you can use `auetal` option. - -There is an `aumin:<number>` option which denotes the definitive number of -printed authors if the author list is not fully printed due to `aumax`. -If `aumin` is unused then `aumax` authors are printed in this case. - -All authors are printed if `aumax:<number>` option isn't given. -There is no internal limit. But you can set the global options in -your document by setting the `\biboptions` tokens list. For example: - -\begtt -\biboptions={aumax:7 aumin:1} -% if there are 8 or more authors then only the first author is printed. -\entdd - -Examples: -\begtt -author = "John Green and Bob Brown and Alice Black", -\endtt -output: GREEN, John, Bob BROWN, and Alice BLACK. - -\begtt -author = "John Green and Bob Brown and Alice Black", -option = "aumax:1", -\endtt -output: GREEN, John~et~al. - -\begtt -author = "John Green and Bob Brown and Alice Black", -option = "aumax:2", -\endtt -output: GREEN, John, Bob BROWN~et~al. - -\begtt -author = "John Green and Bob Brown and Alice Black", -option = "aumax:3", -\endtt -output: GREEN, John, Bob BROWN, and Alice BLACK. - -\begtt -author = "John Green and Bob Brown and Alice Black", -option = "auetal", -\endtt -output: GREEN, John, Bob BROWN, Alice BLACK~et~al. - -If you need to add a text before or after the author's list, you can use -the `auprint:{<value>}` option. The <value> will be printed instead of the -authors list. The <value> can include `\AU` macro which expands to the authors -list. Example: - -\begtt -author = "Robert Calbraith", -option = "auprint:{\AU\space [pseudonym of J. K. Rowling]}", -\endtt -output: CALBRAITH Robert [pseudonym of J. K. Rowling]. - -You can use the `autrim:<number>` option. All Firstnames of all authors -are trimmed (i. e. reduced to initials) iff the number of authors in the -author field is greater than or equal to `<number>`. There is an exception: -`autrim:0` means that no Firstnames are trimmed. This is the default behavior. -Another example: `autrim:1` means that all Firstnames are trimmed. - -\begtt -author = "John Green and Bob Brown and Alice Black", -option = "auetal autrim:1", -\endtt -output: GREEN, J., B. BROWN, A. BLACK~et~al. - -If you need to write a team name or institution instead of authors, replace all -spaces by `\ ` in this name. Such text is interpreted as Lastname. You -can add the secondary name (interpreted as Firstname) after the comma. Example: - -\begtt - author = "Czech\ Technical\ University\ in\ Prague, - Faculty\ of\ Electrical\ Engeneering", -\endtt -output: CZECH TECHNICAL UNIVERSITY IN PRAGUE, Faculty of Electrical Engeneering. - - -\seccc The editor field - -The editor field is used for the list of the authors of the collection. The -analogous rules as in author field are used here. It means that the -authors are separated by \"\code{ and }", the Firstnames, Lastnames, etc. are -interpreted and you can use the options `edmax:<number>`, `edmin:<number>`, -`edetal`, `edtrim:<number>` and `edprint:{<value>}` (with `\ED` macro). -Example: -\begtt -editor = "Jan Tomek and Petr Karas", -option = "edprint:{\ED, editors.} edtrim:1", -\endtt -Output: J. TOMEK and P. KARAS, editors. - -If `edprint` option is not set then `{\ED, eds.}` or `{\ED, ed.}` is used -depending on the entry language and on the singular or plural of -the editor(s). - - -\seccc The ednote field - -The ednote field is used as the secondary authors and more editional info. The -value is read as raw data without any interpretation of Lastname, Firstname -etc. -\begtt -ednote = "Illustrations by Robert \upper{Agarwal}, edited by Tom \upper{Nowak}", -\endtt -output: Illustrations by Robert AGARWAL, edited by Tom NOWAK. - -The `\upper` command has to be used for Lastnames in the ednote field. - - -\seccc The title field - -This is the title of the work. It will be printed (in common entry types) by -italics. The ISO 690 norm declares, that the title plus optional subtitle -are in italics and they are separated by a colon. Next, the optional secondary -title has to be printed in an upright font. This can be added by -`titlepost:{<value>}`. Example: - -\begtt -title = "The Simple Title of The Work", -or -title = "Main Title: Subtitle", -or -title = "Main Title: Subtitle", -option = "titlepost:{Secondary title}", -\endtt -The output of the last example: -{\it Main Title: Subtitle}. Secondary title. - - -\seccc The edition field - -This field is used only for second or more edition of cited work. Write -only the number without the word "edition". The shortcut "ed." (or something -else depending on the current language) is added automatically. Examples: - -\begtt -edition = "Second", -edition = "2nd", -edition = "2$^{\rm nd}$", -edition = "2.", -\endtt -Output of the last example: 2. ed. - -\begtt -edition = "2." -lang = "cs", -\endtt -Output: 2. vyd. - -Note, that the example `edition = "Second"` may cause problems. If you are -using language "cs" then the output is bad: Second vyd. -But you can use `editionprint:{<value>}` option. The the <value> is printed -instead of edition field and shortcut. The edition field must be set. Example: - -\begtt -edition = "whatever", -option = "editionprint:{Second full revised edition}", -\endtt -Output: Second full revised edition. - -You can use `\EDN` macro in `editionprint` value. This macro is expanded -to the edition value. Example: - -\begtt -edition = "Second", -option = "editionprint:{\EDN\space full revised edition}", -or -edition = "Second full revised edition", -option = "editionprint:{\EDN}", -\endtt - - -\seccc The address, publisher, year fields - -This is an anachronism from ancient Bib\TeX/ (unfortunately no exclusive) that -the address field includes only the city of the publisher's residence. No more -data are here. The publisher field includes the name of the publisher. - -\begtt -address = "Berlin", -publisher = "Springer Verlag", -year = 2012, -\endtt -Output: Berlin: Springer Verlag, 2012. - -Note, that the year needn't to be inserted into quotes because it is pure -numeric. - -The letter a, b, etc. are appended to the year automatically if two or more -subsequent entries in the bibliography list are not distinct by the first -author and year fields. If you needn't this feature, you can use the -`noautoletters` option. - -You can use "yearprint:{<value>}" option. If it is set then the <value> -is used for printing year instead the real field value. The reason: year is -sort sensitive, maybe you need to print something else than only sorting key. -Example: - -\begtt -year = 2000, -option = "yearpint:{© 2000}", -\endtt -Output: © 2000, sorted by: 2000. - -\begtt -year = "2012a", -option = "yearprint:{2012}", -\endtt -Output: 2012, sorted by: 2012a. - -The address, publisher, and year are typically mandatory fields. If they are -missing then the warning occurs. But you can set `unpublished` -option. Then this warning is suppressed. There is no difference in the -printed output. - - -\seccc The url field - -Use it without `\url` macro, but with `http://` prefix. Example: - -\begtt -url = "http://petr.olsak.net/opmac.html", -\endtt - -The ISO 690 norm recommends to add the text \"Available from" (or -something else if a different current language is used) before URL. -It means, that the output of the previous example is: - -Available from \url{http://petr.olsak.net/opmac.html}. - -If the `cs` language is the current one than the output is: - -Dostupné z: \url{http://petr.olsak.net/opmac.html}. - -If the `urlalso` option is used, then the added text has the form -\"Available also from" or \"Dostupné také z:" (if `cs` language is -current). - - -\seccc The citedate field - -This is the citation date. The field must be in the form year/month/day. It -means, that the two slashes must be written here. The output depends on the -current language. Example: - -\begtt -citedate = "2004/05/21", -\endtt -Output when `en` is current: [cit. 2004-05-21].\nl -Output when `cs` is current: [vid. 21.~5.~2004]. - - -\seccc The howpublished field - -This declares the available medium for the cited document if it is not in printed -form. Alternatives: online, CD, DVD, etc. Example: - -\begtt -howpublished = "online", -\endtt -Output: [online]. - - -\seccc The volume, number, pages and numbering fields - -The volume is the \"big mark" of the journal issue and the number is the -\"small mark" of the journal issue and pages includes the page range of -the cited article in the journal. The volume is prefixed by Vol.~, -the number by No.~, and the pages by pp.~. But these prefixes depends on the -language of the entry. - -Example: - -\begtt -volume = 31, -number = 3, -pages = "37--42", -\endtt -Output: Vol.~31, No.~3, pp.~37--42. - -\begtt -volume = 31, -number = 3, -pages = "37--42", -lang = "cs", -\endtt -Output: ročník~31, č.~3, s.~37--42. - -If you disagree with the default prefixes, you can use the numbering field. -When it is set then it is used instead of volume, number, pages fields -and instead of any mentioned prefixes. The numbering can include macros -`\VOL`, `\NO`, `\PP`, which are expanded to the respective values of fields. Example: - -\begtt -volume = 31, -number = 3, -pages = "37--42" -numbering = "Issue~\VOL/\NO, pages~\PP", -\endtt -Output: Issue~31/3, pages~37--42 - -Note: The volume, numbers, and pages fields are printed without numbering -filed only in the `@ARTICLE` entry. It means, that if you need to visible them -in the `@INBOOK`, `@INPROCEEDINGS` etc. entries, then you must use the numbering field. - - -\seccc Common notes about entries - -The order of the fields in the entry is irrelevant. We use the printed order -in this manual. The exclamation mark (!) denotes the mandatory field. If -the field is missing then a warning occurs during processing. - -If the `unpublished` option is set then the fields address, publisher, year, -isbn, and pages are not mandatory. If the `nowarn` option is set then no -warnings about missing mandatory fields occur. - -If the field is used but not mentioned in the entry documentation below then -it is silently ignored. - -\secccc The `@BOOK` entry - -This is used for book-like entries. - -Fields: author(!), title(!), howpublished, edition, ednote, address(!), -publisher(!), year(!), citedate, series, isbn(!), doi, url, note. - -The ednote field here means the secondary authors (illustrator, cover design -etc.). - -\secccc The `@ARTICLE` entry - -This is used for articles published in a journal. - -Fields: author(!), title(!), journal(!), howpublished, address, publisher, -month, year, [numbering or volume, number, pages(!)], citedate, issn, -doi, url, note. - -If the numbering is used then it is used instead volume, number, pages. - - -\secccc The `@INBOOK` entry - -This is used for the part of a book. - -Fields: author(!), title(!), booktitle(!), howpublished, edition, ednote, -address(!), publisher(!), year(!), numbering, citedate, series, isbn or -issn, doi, url, note. - -The author field is used for author(s) of the part, the editor field -includes author(s) or editor(s) of the whole document. The pages field specifies -the page range of the part. The series field can include more information -about the part (chapter numbers etc.). - -The `@INPROCEEDINGS` and `@CONFERENCE` entries are equivalent to `@INBOOK` entry. - -\secccc The `@THESIS` entry - -This is used for the student's thesis. - -Fields: author(!), title(!), howpublished, address(!), school(!), -month, year(!), citedate, type(!), ednote, doi, url, note. - -The type field must include the text \"Master's Thesis" or something -similar (depending on the language of the outer document). - -There are nearly equivalent entries: `@BACHELORSTHESIS`, `@MASTERSTHESIS` and -`@PHDTHESIS`. These entries set the type field to an appropriate value -automatically. The type field is optional in this case. If it is used then -it has precedence before the default setting. - -\secccc The @MISC entry - -It is intended for various usage. - -Fields: author, title, howpublished, ednote, citedate, doi, url, note. - -You can use `\AU`, `\ED`, `\EDN`, `\VOL`, `\NO`, `\PP`, `\ADDR`, `\PUBL`, -`\YEAR` macros in ednote field. These macros print authors list, editors list, -edition, volume, number, pages, address, publisher, and year field values -respectively. - -The reason for this entry is to give to you the possibility to set the format of -entry by your own decision. The most of data are concentrated in the ednote field. - -\secccc The `@BOOKLET`, `@INCOLLECION`, `@MANUAL`, `@PROCEEDINGS`, `@TECHREPORT`, `@UNPUBLISHED` entries - -These entries are equivalent to `@MICS` entry because we need to save the -simplicity. They are implemented only for (almost) backward compatibility -with the ancient Bib\TeX/. But the ednote is mandatory field here, so you -cannot use these entries from the old databases without warnings and without -some additional work with the `.bib` file. - -\seccc The cite-marks (bibmark) used when \code{\\nonumcitations} is set - -When `\nonumcitations` is set then `\cite` prints text-oriented -bib-marks instead of numbers. This style file auto-generates these marks in the -form \"Lastname of the first author, comma, space, the year" if the bibmark field -isn't declared. If you need to set an exception from this common format, -then you can use bibmark field. - -The OPmac trick \url{http://petr.olsak.net/opmac-tricks-e.html\#bibmark} -describes how to redefine the algorithm for bibmark auto-generating when you -need the short form of the type [Au13]. - - -\seccc Sorting - -If `\usebib/c` is used then entries are sorted by citation order in the text. -If `\usebib/s` is used then entries are sorted by \"Lastname, Firstname(s)" of -the first author and if more entries have this value equal, then the year is -used (from older to newer). This feature follows the recommendation of the -ISO 690 norm. - -If you have the same authors and the same year, you can control the sorting -by setting years like 2013, 2013a, 2013b, etc. You can print something -different to the list using `yearprint{<value>}` option, see the section about -address, publisher, and year above. The real value of year field (i.e.\ not -yearprint value) is also used in the text-oriented bib-marks when -`\nonumcitations` is set. - -If you have some problems with name sorting, you can use the hidden field -`key`, which is used for sorting instead of the \"Lastname Firstname(s)" -of authors. If the `key` field is unset then the \"Lastname Firstname(s)" -is used for sorting normally. Example: - -\begtt -author = "Světla Čmejrková", -key = "Czzmejrkova Svetla", -\endtt - -This entry is now sorted between C and D. - -The norm recommends placing the auto-citations at the top of the list of -references. You can do this by setting `key = "@"`, to each entry with your -name because the `@` character is sorted before `A`. - - -\seccc Languages - -There is the language of the outer document and the languages of each entry. -The ISO 690 norm recommends that the technical notes (the prefix before URL, -the media type, the \"and" conjunction between the semifinal and final author) -maybe printed in the language of the outer document. The data of the entry -have to be printed in the entry language (edition ed./vyd., Vol./ročník, -No./č. etc.). Finally, there are the phrases independent of the language -(for example In:). Unfortunately, the bib\TeX/ supposes that the entry data -are not fully included in the fields so the automaton has to add some -text during processing (\"ed.", \"Vol.", \"see also", etc.). -But what language has to be chosen? - -The current value of the `\language` register at the start of the `.bib` -processing is described as the language of the outer document. This language -is used for technical notes regardless of the entry language. Moreover, -each entry can have the `lang` field (short name of the language). This -language is used for ed./vyd., vol./ročník, etc. and it is used for -hyphenation too. If the `lang` is not set then the outer document -language is used. - -You can use \^`\_Mtext{bib.<identifier>}` if you want to use a phrase -dependent on outer document language (no on entry language). -Example: - -\begtt -howpublished = "\_Mtext{bib.blue-ray}" -\endtt - -Now, you can set the variants of `bib.blue-ray` phrase for various -languages: - -\begtt -\_sdef{_mt:bib.blue-ray:en} {Blue-ray disc} -\_sdef{_mt:bib.blue-ray:cs} {Blue-ray disk} -\endtt - - -\seccc Summary of non-standard fields - -This style uses the following fields unknown by bib\TeX/: - -\begtt -option ... options separated by spaces -lang ... the language two-letter code of one entry -ednote ... edition info (secondary authors etc.) or - global data in @MISC-like entries -citedate ... the date of the citation in year/month/day format -numbering ... format for volume, number, pages -isbn ... ISBN -issn ... ISSN -doi ... DOI -url ... URL -\endtt - - -\seccc Summary of options - -\begtt \catcode`\<=13 -aumax:<number> ... maximum number of printed authors -aumin:<number> ... number of printed authors if aumax exceeds -autrim:<number> ... full Firstnames iff number of authors are less than this -auprint:{<value>} ... text instead authors list (\AU macro may be used) -edmax, edmin, edtrim ... similar as above for editors list -edprint:{<value>} ... text instead editors list (\ED macro may be used) -titlepost:{<value>} ... text after title -yearprint:{<value>} ... text instead real year (\YEAR macro may be used) -editionprint:{<value>} .. text instead of real edition (\EDN macro may be used) -urlalso ... the ``available also from'' is used instead ``available from'' -unpublished ... the publisher etc. fields are not mandatory -nowarn ... no mandatory fields -\endtt - -Other options in the option field are silently ignored. diff --git a/Master/texmf-dist/tex/luatex/optex/base/bib-simple.opm b/Master/texmf-dist/tex/luatex/optex/base/bib-simple.opm deleted file mode 100644 index dff747bd57b..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/bib-simple.opm +++ /dev/null @@ -1,164 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% bibliography style (simple), version <2020-03-10>, loaded on demand by \usebib - -\_ifx\_optexbibstyle\_undefined \_errmessage - {This file can be read by: \_string\usebib/? (simple) bibfiles command only} - \_endinput \_fi - -% misc: - -\_def\_maybedot{\_ifnum\_spacefactor=\_sfcode`\.\_relax\_else.\_fi} -\_tmpnum=\_sfcode`\. \_advance\_tmpnum by-2 \_sfcode`\.=\_tmpnum -\_sfcode`\?=\_tmpnum \_sfcode`\!=\_tmpnum -\_let\.=\_maybedot % prevents from double periods - -% Formatting of Author/Editor lists: - -\_def\_authorname{% - \_ifnum\_NameCount>1 - \_ifnum0\_namecount=\_NameCount \_mtext{bib.and}\_else , \_fi - \_else - \_ifx\_dobibmark\_undefined \_edef\_dobibmark{\_Lastname}\_fi - \_fi - \_bprintc\_Firstname{* }\_bprintc\_Von{* }\_Lastname\_bprintc\_Junior{, *}% -} -\_let\_editorname=\_authorname - -% Preparing bib-mark (used when \nonumcitations is set): - -\_def\_setbibmark{% - \_ifx\_dobibmark\_undefined \_def\_dobibmark{}\_fi - \_RetrieveFieldIn{bibmark}\_tmp - \_ifx\_tmp\_empty \_RetrieveFieldIn{year}\_tmp \_edef\_tmp{\_dobibmark, \_tmp}\_fi - \_bibmark=\_ea{\_tmp}% -} - -\_def\_preurl{\_hfil\_break} - -% Non-standard fieldnames: - -\_CreateField {isbn} -\_CreateField {doi} -\_CreateField {url} -\_CreateField {bibmark} - -% Sorting: - -\_SortingOrder{name,year}{lfvj} -\_SpecialSort {key} - -% Entry types: - -\_sdef{_print:END}{% - \_bprinta [note] {*.}{}% - \_setbibmark -} -\_sdef{_print:book}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}.\ }{\_bibwarning}% - \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{}% - \_bprinta [address] {*: }{\_bibwarning}% - \_bprinta [publisher] {*, }{\_bibwarning}% - \_bprinta [year] {*.\ }{\_bibwarning}% - \_bprinta [isbn] {ISBN~*.\ }{\_bibwarning}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_sdef{_print:article}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprinta [title] {*.\ }{\_bibwarning}% - \_bprintb [journal] {{\_em##1}.\ }{\_bibwarning}% - \_bprinta [year] {*, }{}% - \_bprinta [volume] {* }{}% - \_bprinta [number] {(*), }{}% - \_bprinta [pages] {*.\ }{}% - \_bprintb [doi] {DOI~\_ulink[http://dx.doi.org/##1]{##1}.\ }{}% -} -\_sdef{_print:inbook}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1.}\ }{\_bibwarning}% - In:~% - \_bprinta [!editor] {*,~eds.\ }{}% - \_bprintb [booktitle] {{\_em##1}.\ }{\_bibwarning}% - \_bprinta [address] {*: }{\_bibwarning}% - \_bprinta [publisher] {*, }{\_bibwarning}% - \_bprinta [year] {*.\ }{\_bibwarning}% - \_bprinta [chapter] {*.\ }{% - \_bprinta [pages] {*.\ }{}}% - \_bprinta [isbn] {ISBN~*.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_slet{_print:inproceedings}{_print:inbook} - -\_sdef{_print:incolection}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}.\ }{\_bibwarning}% - \_bprinta [crossreff] {In~\_cite[*]. }{% - \_bprinta [booktitle] {*. }{\_bibwarning}% - \_bprinta [!editor] {*,~eds.\ }{\_bibwarning}% - \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{\_bibwarning}% - \_bprinta [address] {*: }{\_bibwarning}% - \_bprinta [publisher] {*, }{\_bibwarning}% - \_bprinta [year] {*.\ }{\_bibwarning}% - \_bprinta [pages] {*.\ }{}% - \_bprintb [url] {\_preurl\_url{####1}. }{}}% -} -\_sdef{_print:conference}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% - \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{}% - \_bprinta [address] {*: }{\_bibwarning}% - \_bprinta [publisher] {*, }{\_bibwarning}% - \_bprinta [year] {*.\ }{\_bibwarning}% - \_bprinta [isbn] {ISBN~*.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_sdef{_print:thesis}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% - \_bprinta [type] {*,\ }{\_bibwarning}% - \_bprinta [school] {*.\ }{}% - \_bprinta [address] {*, }{}% - \_bprinta [year] {*.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_sdef{_print:proceedings}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% - \_bprinta [publisher] {*.\ }{% - \_bprinta [organization] {*.\ }{\_bibwarning}}% -} -\_sdef{_print:techreport}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% - \_mtext{bib.techreport}. - \_bprinta [institution] {*.\ }{}% -} -\_sdef{_print:booklet}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% - \_bprinta [howpublished] {*.\ }{\_bibwarning}% -} -\_sdef{_print:manual}{% - \_bprinta [!author] {*\.\ }{}% - \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% - \_bprinta [year] {*.\ }{}% - \_bprinta [institution] {*.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_sdef{_print:misc}{% - \_bprinta [!author] {*\.\ }{}% - \_bprintb [title] {{\_em##1}\.\ }{}% - \_bprinta [howpublished] {*.\ }{}% - \_bprinta [institution] {*.\ }{}% - \_bprinta [series] {*.\ }{}% - \_bprinta [year] {*.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} - -%%% end of the style file - -\_endcode - -You can copy this file to bib-yourname.opm and modify it by your -needs... diff --git a/Master/texmf-dist/tex/luatex/optex/base/cite-bib.opm b/Master/texmf-dist/tex/luatex/optex/base/cite-bib.opm deleted file mode 100644 index 26a5b17bd44..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/cite-bib.opm +++ /dev/null @@ -1,271 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \cite {Cite, Biblioraphy <2020-03-09>} % loaded in format - - \_doc ----------------------------- - Registers used by `\cite`, `\bib` macros are declared here. - The \`\bibnum` counts the bibliography items from one. - The \`\bibmark` is used when `\nonumcitations` is set. - \_cod ----------------------------- - -\_newcount\_bibnum % the bibitem counter -\_newtoks\_bibmark % the bibmark used if \nonumcitations -\_newcount\_lastcitenum \_lastcitenum=0 % for \shortcitations -\_public \bibnum \bibmark ; - - \_doc ----------------------------- - \`\cite` `[<label>,<label>,...,<label>]` manages <labes> using `\_citeA` - and prints `[<bib-marks>]` using `\_printsavedcites`. - \nl - \`\nocite` `[<label>,<label>,...,<label>]` only manages <labels> but prints nothing. - \nl - \`\rcite` `[<label>,<label>,...,<label>]` behaves like `\cite` but prints - <bib-marks> without brackets. - \nl - \`\ecite` `[<label>]{<text>}` behaves like `\rcite [<label>]` but prints - <text> instead <bib-mark>. The <text> is hyperlinked like <bib-marks> - when `\cite` or `\rcite` is used. - The empty internal macro \`\_savedcites` will include the `<bib-marks>` list to - be printed. This list is set by `\_citeA` inside a group and it is used by - `\_printsavedcites` in the same group. Each `\cite`/`\rcite`/`\ecite` macro - starts from empty list of <bib-marks> because new group is opened. - \_cod ----------------------------- - -\_def\_cite[#1]{{\_citeA#1,,,[\_printsavedcites]}} -\_def\_nocite[#1]{{\_citeA#1,,,}} -\_def\_rcite[#1]{{\_citeA#1,,,\_printsavedcites}} -\_def\_ecite[#1]{\_bgroup\_citeA#1,,,\_ea\_eciteB\_savedcites;} -\_def\_eciteB#1,#2;#3{\_if?#1\_relax #3\_else \_ilink[cite:#1]{#3}\_fi\_egroup} -\_def\_savedcites{} - -\_public \cite \nocite \rcite \ecite ; - - \_doc ----------------------------- - `<bib-marks>` may be numbers or a special text related to cited bib-entry. - It depends on \`\nonumcitations` and on used bib-style. The mapping from - <label> to <bib-mark> is done when `\bib` or `\usebib` is processed. - These macros store the information to - \`\_Xbib``{<label>}{<number>}{<nonumber>}` where <number> and <nonumber> are - two variants of <bib-mark> (numbered or text-like). This information is - read from `.ref` file and it is saved to macros - `\_bib:<label>` and `\_bibm:<number>`. First one includes number and second - one includes <nonumber>. The `\_lastbibnum` macro includes last number of - bib-entry used in the document. A designer can use it to set appropriate - indentation when printing the list of all bib-entries. - \_cod ----------------------------- - -\_def\_Xbib#1#2#3{\_sdef{_bib:#1}{\_bibnn{#2}&}% - \_if^#3^\_else\_sdef{_bim:#2}{#3}\_fi\_def\_lastbibnum{#2}} - - \_doc ----------------------------- - \`\_citeA` `<label>,` processes one label from the list of labels given in the - parameter of `\cite`, `\nocite`, `\rcite` or `\ecite` macros. It adds the - <label> to global list `\_citelist` which will be used by `\usebib` (it - must know what <labels> are used in the document to pick-up - only relevant bib-entries from the database. Because we want to save - space and not to save the same <label> to `\_citelist` twice, we - distinguish four cases: - \begitems - * `<label>` was not declared by \^`\_Xbib` and it is first such <label> in the - document: Then `\_bib:<label>` is undefined and we save label using - `\_addcitlist`, write warning on the terminal and define - `\_bib:<label>` as empty. - * `<label>` was not declared by \^`\_Xbib` but it was used previously in the - document: Then `\_bib:<label>` is empty and we do nothing (only data to - `\_savedcites` are saved). - * `<label>` was declared by \^`\_Xbib` and it is first such <label> in the - document: Then `\_bin:<label>` includes `\_bibnn{<number>}&` and we - test this case by `\if &\_bibnn{<number>}&`. This is true when `\_bibnn{<number>}` - expands to empty. The <label> is saved by `\_addcitelist` and - `\_bib:<label>` is re-defined directly as <number>. - * `<label>` was declared by \^`\_Xbib` and it was used previously in the - document. Then we do nothing (only data to `\_savedcites` are saved. - \enditems - The `\_citeA` macro runs repeatedly over the whole list of <labels>. - \_cod ----------------------------- - -\_def\_citeA #1#2,{\_if#1,\_else - \_if *#1\_addcitelist{*}\_ea\_skiptorelax \_fi - \_ifcsname _bib:#1#2\_endcsname \_else - \_addcitelist{#1#2}% - \_opwarning{\_noexpand\cite [#1#2] unknown. Try to TeX me again}\_openref - \_incr\_unresolvedrefs - \_addto\_savedcites{?,}\_def\_sortcitesA{}\_lastcitenum=0 - \_ea\_gdef \_csname _bib:#1#2\_endcsname {}% - \_ea\_skiptorelax \_fi - \_ea\_ifx \_csname _bib:#1#2\_endcsname \_empty - \_addto\_savedcites{?,}\_def\_sortcitesA{}\_lastcitenum=0 - \_ea\_skiptorelax \_fi - \_def\_bibnn##1{}% - \_if &\_csname _bib:#1#2\_endcsname - \_def\_bibnn##1##2{##1}% - \_addcitelist{#1#2}% - \_sxdef{_bib:#1#2}{\_csname _bib:#1#2\_endcsname}% - \_fi - \_edef\_savedcites{\_savedcites \_csname _bib:#1#2\_endcsname,}% - \_relax - \_ea\_citeA\_fi -} -\_def\_addcitelist#1{\_global\_addto\_citelist{\_citeI[#1]}} -\_def\_citelist{} - - \_doc ----------------------------- - The `<bib-marks>` (in numeric or text form) are saved in \^`\_savedcites` - macro separated by commas. - The \`\_printsavedcites` prints them by normal order or sorted if - \`\sortcitations` is specified or condensed if \`\shordcitations` is - specified.\nl - The `\sortcitations` appends the dummy number 300000 and we suppose that normal - numbers of bib-entries are less than this constant. - This constant is removed after the sorting algorithm. - The \`\shortcitations` sets simply `\_lastcitenum=1`. - The macros for <bib-marks> printing follows (sorry, without detail - documentation). They are documented in `opmac-d.pdf` (but only in Czech). - \_cod ----------------------------- - -\_def\_printsavedcites{\_sortcitesA - \_chardef\_tmpb=0 \_ea\_citeB\_savedcites,% - \_ifnum\_tmpb>0 \_printdashcite{\_the\_tmpb}\_fi -} -\_def\_sortcitesA{} -\_def\_sortcitations{% - \_def\_sortcitesA{\_edef\_savedcites{300000,\_ea}\_ea\_sortcitesB\_savedcites,% - \_def\_tmpa####1300000,{\_def\_savedcites{####1}}\_ea\_tmpa\_savedcites}% -} -\_def\_sortcitesB #1,{\_if $#1$% - \_else - \_mathchardef\_tmpa=#1 - \_edef\_savedcites{\_ea}\_ea\_sortcitesC \_savedcites\_end - \_ea\_sortcitesB - \_fi -} -\_def\_sortcitesC#1,{\_ifnum\_tmpa<#1\_edef\_tmpa{\_the\_tmpa,#1}\_ea\_sortcitesD - \_else\_edef\_savedcites{\_savedcites#1,}\_ea\_sortcitesC\_fi} -\_def\_sortcitesD#1\_end{\_edef\_savedcites{\_savedcites\_tmpa,#1}} - -\_def\_citeB#1,{\_if$#1$\_else - \_if?#1\_relax??% - \_else - \_ifnum\_lastcitenum=0 % only comma separated list - \_printcite{#1}% - \_else - \_ifx\_citesep\_empty % first cite item - \_lastcitenum=#1\_relax - \_printcite{#1}% - \_else % next cite item - \_advance\_lastcitenum by1 - \_ifnum\_lastcitenum=#1\_relax % cosecutive cite item - \_mathchardef\_tmpb=\_lastcitenum - \_else % there is a gap between cite items - \_lastcitenum=#1\_relax - \_ifnum\_tmpb=0 % previous items were printed - \_printcite{#1}% - \_else - \_printdashcite{\_the\_tmpb}\_printcite{#1}\_chardef\_tmpb=0 - \_fi\_fi\_fi\_fi\_fi - \_ea\_citeB\_fi -} -\_def\_shortcitations{\_lastcitenum=1 } - -\_def\_printcite#1{\_citesep\_ilink[cite:#1]{\_citelinkA{#1}}\_def\_citesep{,\_hskip.2em\_relax}} -\_def\_printdashcite#1{\_ifmmode-\_else\_hbox{--}\_fi\_ilink[cite:#1]{\_citelinkA{#1}}} -\_def\_citesep{} - -\_def\_nonumcitations{\_lastcitenum=0\_def\_sortcitesA{}\_def\_etalchar##1{$^{##1}$}% - \_def\_citelinkA##1{\_isdefined{_bim:##1}\_iftrue \_csname _bim:##1\_endcsname - \_else ##1\_opwarning{\_noexpand\nonumcitations + empty bibmark. Maybe bad bib-style}\_fi}% -} -\_def\_citelinkA{} - -\_public \nonumcitations \sortcitations \shortcitations ; - - \_doc ----------------------------- - The \`\bib` `[<label>] {<optional bib-mark>}` prints one bib-entry - without reading any database. The bib-enty follows after this command. - This command counts the used `\bib`s from one by `\bibnum` counter and - saves \^`\_Xbib``{<label>}{\_the\_bibnum}{\_the\_bibmark}` into `.ref` file - immediately using `\_wbib`. This is the core of creation of mapping from - `<labels>` to `<bib-marks>`. - \_cod ----------------------------- - -\_def\_bib[#1]{\_def\_tmp{\_isnextchar={\_bibA[#1]}{\_bibmark={}\_bibB[#1]}}% - \_ea\_tmp\_romannumeral-`\.} % ignore optional space -\_def\_bibA[#1]=#2{\_bibmark={#2}\_bibB[#1]} -\_def\_bibB[#1]{\_par \_bibskip - \_advance\_bibnum by1 - \_noindent \_def\_tmpb{#1}\_wbib{#1}{\_the\_bibnum}{\_the\_bibmark}% - \_printlabel{#1}% - \_printbib \_ignorespaces -} -\_def\_wbib#1#2#3{\_dest[cite:\_the\_bibnum]% - \_ifx\_wref\_wrefrelax\_else \_immediate\_wref\_Xbib{{#1}{#2}{#3}}\_fi} - -\_public \bib ; - - \_doc ----------------------------- - The \`\_printbib` prints the bib-entry itself. You can re-define it if you - want a different design. The `\_pritbib` starts in horizontal mode after - `\noindent` and after the eventual hyperlink destination is inserted. - By default, the `\_printbib` sets the indentation - by `\hangindent` and prints numeric <bib-marks> by - `\llap{[\the\bibnum]}` If `\nonumcitations` then the `\_citelinkA` is not - empty and <bib-marks> (`\the\bibnum` nor `\the\bibmark`) are not printed. - The text of bib-entry follows. User can create this text manually - using `\bib` command or it is generated automatically from a `.bib` database - by `\usebib` command. - - The vertical space between bib-entries is controlled by \`\_bibskip` macro. - \_cod ----------------------------- - -\_def \_printbib {\_hangindent=\_iindent - \_ifx\_citelinkA\_empty \_hskip\_iindent \_llap{[\_the\_bibnum] }\_fi -} -\_def \_bibskip {\_ifnum\_bibnum>0 \_smallskip \_fi} - - \_doc ----------------------------- - The \`\usebib` command is implemented in `usebib.opm` file which is loaded - when the `\usebib` command is used first. - The `usebib.opm` file loads the `librarian.tex` for scanning the `.bib` - files. See the section~\ref[usebib], where the file `usebib.opm` is - documented. - \_cod ----------------------------- - -\_def\_usebib{\_par \_opinput {usebib.opm} \_usebib} -\_def\usebib{\_usebib} - - \_doc ------------------------------ - \_forwardlink\`\nobibwarning` `[<list of bib-labels>]` - declares a list of bib labels - which are not fully declared in `.bib` file but we want to suppress the - warning about it. List of bib labels are comma-separated case sensitive - list without spaces. - \_cod ------------------------------ - -\_def\_nobibwarnlist{,} -\_def\_nobibwarning[#1]{\_global\_addto\_nobibwarnlist{#1,}} -\_public \nobibwarning ; - - \_doc ----------------------------- - The macros above works if all `\cite` (or similar) commands are used - before the `\usebib` command is used because `\usebib` prints only such - bib-entries their <labels> are saved in the `\_citelist`. But if some - `\cite` is used after `\usebib`, then `\usebib` sets `\_addcitelist` to - \`\_writeXcite`, so such `\cite` saves the information to the - `.ref`file in the format \`\_Xcite``{<label>}`. Such information are copied - to `\_citelistB` during reading `.ref` file and `\usebib` concats two - lists of <labels> from `\_citelist` and `\_citelistB` and - uses this concatenated list. - \_cod ----------------------------- - -\_def\_Xcite#1{\_addto\_citelistB{\_citeI[#1]}} -\_def\_writeXcite#1{\_openref\_immediate\_wref\_Xcite{{#1}}} -\_def\_citelistB{} - -\_endcode % ------------------------------------- - -See end of the `usebib.opm` file for documentation about creating style -files `bib-<style>.opm`. - -See end of the `bib-iso690.opm` file for large documentation about `.bib` files -structure and about the usage of `iso690` bib-style. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/colors.opm b/Master/texmf-dist/tex/luatex/optex/base/colors.opm deleted file mode 100644 index bbda496761e..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/colors.opm +++ /dev/null @@ -1,394 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \colordef {Colors <2020-03-18>} % loaded in format - - \_doc ----------------------------- - We declare internal boolean value \`\_iflocalcolor` ad do - \`\localcolor` as default. - \_cod ----------------------------- - -\_newifi \_iflocalcolor \_localcolortrue -\_protected\_def \_localcolor {\_localcolortrue} -\_protected\_def \_nolocalcolor {\_localcolorfalse} -\_public \localcolor \nolocalcolor ; - - \_doc ----------------------------- - The basic colors in CMYK - \`\Blue` \`\Red` \`\Brown` \`\Green` \`\Yellow` \`\Cyan` \`\Magenta` - \`\Grey` \`\LightGrey` \`\White` and \`\Black` - are declared here. - \_cod ----------------------------- - -\_def\Blue {\_setcmykcolor{1 1 0 0}} -\_def\Red {\_setcmykcolor{0 1 1 0}} -\_def\Brown {\_setcmykcolor{0 0.67 0.67 0.5}} -\_def\Green {\_setcmykcolor{1 0 1 0}} -\_def\Yellow {\_setcmykcolor{0 0 1 0}} -\_def\Cyan {\_setcmykcolor{1 0 0 0}} -\_def\Magenta {\_setcmykcolor{0 1 0 0}} -\_def\Grey {\_setcmykcolor{0 0 0 0.5}} -\_def\LightGrey {\_setcmykcolor{0 0 0 0.2}} -\_def\White {\_setgreycolor{1}} -\_def\Black {\_setgreycolor{0}} - - \_doc ----------------------------- - By default, the \`\setcmykcolor` \`\setrgbcolor` and \`\setgreycolor` - macros with `{<componetns>}` parameter - expand to `\_setcolor{<pdf-primitive>}` using \`\_formatcmyk` - or \`\_formatrgb` or \`\_formatgrey` expandable macros. - For example `\setrgbcolor{1 0 0}` expands to `\_setcolor{1 0 0 rg 1 0 0 RG}`.\nl - We set both types of colors (for lines (`K` or `RG` or `G`) and for fills - (`r` or `rg` or `g`) together in the <pdf-primitive> command. - This is the reason why the \`\_fillstroke` uses both its parameters. - If only fills are needed you can do `\def\_fillstroke#1#2{#1}`. - If only strokes are needed you can do `\def\_fillstroke#1#2{#2}`. - \_cod ----------------------------- - -\_def\_setcmykcolor#1{\_setcolor{\_formatcmyk{#1}}} -\_def\_setrgbcolor#1{\_setcolor{\_formatrgb{#1}}} -\_def\_setgreycolor#1{\_setcolor{\_formatgrey{#1}}} -\_def\_formatcmyk#1{\_fillstroke{#1 k}{#1 K}} -\_def\_formatrgb#1{\_fillstroke{#1 rg}{#1 RG}} -\_def\_formatgrey#1{\_fillstroke{#1 g}{#1 G}} -\_def\_fillstroke#1#2{#1 #2} -\_public \setcmykcolor \setrgbcolor \setgreycolor ; - - \_doc ----------------------------- - The \`\onlyrgb` declaration redefines \^`\_formatcmyk` in order it expands - to its conversion to RGB <pdf-primitive>. This conversion is done by - the \^`\_cmyktorgb` macro. Moreover, `\onlyrgb` re-defines three basic RGB - colors for RGB color space and re-declares \^`\colordef` as \^`\rgbcolordef`. - The \hbox{\`\onlycmyk`} macro does similar work, it re-defines \^`\_formatrgb` - macro. The Grey color space is unchanged and works in both main - settings (RGB or CMYK) without collisions. - \_cod ----------------------------- - -\_def\_onlyrgb{\_def\Red{\_setrgbcolor{1 0 0}}% - \_def\Green{\_setrgbcolor{0 1 0}}\_def\Blue{\_setrgbcolor{0 0 1}}% - \_let\_colordef=\_rgbcolordef - \_def\_formatrgb##1{\_fillstroke{##1 rg}{##1 RG}}% - \_def\_formatcmyk##1{\_fillstroke{\_cmyktorgb ##1 ; rg}{\_cmyktorgb ##1 ; RG}}} -\_def\_onlycmyk{\_def\_formatcmyk##1{\_fillstroke{##1 k}{##1 K}}% - \_def\_formatrgb##1{\_fillstroke{\_rgbtocmyk ##1 ; k}{\_rgbtocmyk ##1 ; K}}} -\_public \onlyrgb \onlycmyk ; - - \_doc ----------------------------- - The \`\_setcolor` macro redefines empty `\_ensureblack` macro (used in - output routine for headers and footers) to `\_ensureblackA` which sets - Black at the start of its parameter and returns to the current color at the - end of its parameter. - - The current color is saved into `\_currentcolor` macro and colorstack is pushed. - Finally, the `\_colorstackpop` is initialized by `\aftergroup` if - `\localcolor` is declared. - - You can save the current color to your macro by `\let\yourmacro=\_currentcolor` - and you can return to this color by the command `\_setcolor\yourmacro`. - \_cod ----------------------------- - -\_protected\_def \_setcolor #1{\_global\_let\_ensureblack=\_ensureblackA - \_iflocalcolor \_edef\_currentcolor{#1}\_colorstackpush\_currentcolor - \_aftergroup\_colorstackpop - \_else \_xdef\_currentcolor{#1}\_colorstackset\_currentcolor \_fi -} -\_def\_pdfblackcolor{0 g 0 G} -\_edef\_currentcolor{\_pdfblackcolor} -\_def\_ensureblackA#1{\_global\_let\_openfnotestack=\_openfnotestackA - \_colorstackpush\_pdfblackcolor #1\_colorstackpop} - - \_doc ----------------------------- - The colorstack is initialized here and the basic macros - \`\_colorstackpush`, \`\_colorstackpop` and \`\_colorstackset` - are defined here. - \_cod ----------------------------- - -\_mathchardef\_colorstackcnt=0 % Implicit stack usage -\_def\_colorstackpush#1{\_pdfcolorstack\_colorstackcnt push{#1}} -\_def\_colorstackpop{\_pdfcolorstack\_colorstackcnt pop} -\_def\_colorstackset#1{\_pdfcolorstack\_colorstackcnt set{#1}} - - \_doc ----------------------------- - We need to open a special color stack for footnotes because footnotes - can follow on the next pages and their colors are independent of colors - used in the main page-body. The \`\_openfnotestack` is defined as - \`\_openfnotestackA` when the \^`\_setcolor` is used first. - The \`\_fnotestack` is initialized in in `\everyjob` because the - initialization is not saved to the format. - \_cod ----------------------------- - -%\_mathchardef\_fnotestack=\_pdfcolorstackinit page {0 g 0 G} % must be in \everyjob -\_def \_openfnotestackA {\_pdfcolorstack\_fnotestack current} - - \_doc ----------------------------- - We use Lua codes for RGB to CMYK or CMYK to RGB conversions and for - addition color components in the \^`\colordef` macro. - The \`\_rgbtocmyk` `<R> <G> <B> ;` expands to `<C> <M> <Y> <K>` and - the \`\_cmyktorgb` `<C> <M> <Y> <K> ;` expands to `<R> <G> <B>`. - The \`\_colorcrop`, \`\_colordefFin` and \`\_douseK` are auxiliary macros - used in the \^`\colordef`. The `\_colorcrop` rescales color components in order - to they are in $[0,1]$ interval. The `\colordefFin` expands to the values - accumulated in Lua code `color_C`, `color_M`, `color_Y` and `color_K`. - The `\_douseK` applies \^`\useK` to CMYK components. - \_cod ----------------------------- - -\_def\_rgbtocmyk #1 #2 #3 ;{% - \_ea \_stripzeros \_detokenize \_ea{\_directlua{ - local kr = math.max(#1,#2,#3) - if (kr==0) then - tex.print('0. 0. 0. 1 ;') - else - tex.print(string.format('\_pcent.3f \_pcent.3f \_pcent.3f \_pcent.3f ;', - (kr-#1)/kr, (kr-#2)/kr, (kr-#3)/kr, 1-kr)) - end -}}} -\_def\_cmyktorgb #1 #2 #3 #4 ;{% - \_ea \_stripzeros \_detokenize \_ea{\_directlua{ - local kr = 1-#4 - tex.print(string.format('\_pcent.3f \_pcent.3f \_pcent.3f ;', - (1-#1)*kr, (1-#2)*kr, (1-#3)*kr)) -}}} -\_def\_colorcrop{\_directlua{ - local m=math.max(color_C, color_M, color_Y, color_K) - if (m>1) then - color_C=color_C/m color_M=color_M/m color_Y=color_Y/m color_K=color_K/m - end -}} -\_def\_colordefFin{\_colorcrop \_ea \_stripzeros \_detokenize \_ea{\_directlua{ - tex.print(string.format('\_pcent.3f \_pcent.3f \_pcent.3f \_pcent.3f ;', - color_C, color_M, color_Y, color_K)) -}}} -\_def\_douseK{\_colorcrop \_directlua{ - kr=math.min(color_C, color_M, color_Y) - if (kr>=1) then - color_C=0 color_M=0 color_Y=0 color_K=1 - else - color_C=(color_C-kr)/(1-kr) color_M=(color_M-kr)/(1-kr) - color_Y=(color_Y-kr)/(1-kr) color_K=math.min(color_K+kr,1) - end -}} - - \_doc ----------------------------- - We have a problem with the `%.3f` directive in Lua code. It prints trailed - zeros: (0.300 instead desired 0.3) but we want to save PDF file space. The macro - \`\_stripzeros` removes these trailing zeros at the expand processor - level. So `\_stripzeros 0.300 0.400 0.560 ;` expands to `.3 .4 .56`. - \_cod ----------------------------- - -\_def\_stripzeros #1.#2 #3{\_ifx0#1\_else#1\_fi.\_stripzeroA #2 0 :% - \_ifx;#3\_else \_space \_ea\_stripzeros\_ea#3\_fi} -\_def\_stripzeroA #10 #2:{\_ifx^#2^\_stripzeroC#1:\_else \_stripzeroB#1 0 :\_fi} -\_def\_stripzeroB #10 #2:{\_ifx^#2^\_stripzeroC#1:\_else #1\_fi} -\_def\_stripzeroC #1 #2:{#1} - - \_doc ----------------------------- - The \`\rgbcolordef` and \`\cmykcolordef` use common macro - \`\_commoncolordef` with different first four parameters. - The `\_commoncolordef <selector><K><R><G><what-define>{<data>}` does the - real work. It initializes the Lua variables for summation. - It expands <data> in the group where color selectors have - special meaning, then it adjusts the resulting string by \^`\replstring` - and runs it. Example shows how the <data> are processed: - \begtt \catcode`\<=13 - input <data>: ".3\Blue + .6^\KhakiC \useK -\Black" - expanded to: ".3 !=K 1 1 0 0 +.6^!=R .804 .776 .45 \_useK -!=G 0" - adjusted to: "\_addcolor .3!=K 1 1 0 0 \_addcolor .6!^R .804 .776 .45 - \_useK \_addcolor -1!=G 0" - and this is processed. - \endtt - \`\_addcolor` `<coef.>!<mod><type>` expands to `\_addcolor:<mod><type> <coef>` - for example it expands to `\_addcolor:=K <coef>` followed by one or three or four - numbers (depending on <type>). <mod> is `=` (use as is) or `^` (use - complementary color). <type> is `K` for CMYK, `R` for RGB and `G` for - GREY color space. Uppercase <type> informs that `\cmykcolordef` is - processed and lowercase <type> informs that `\rgbcolordef` is processed. - All variants of commands `\_addcolor:<mod><type>` are defined. All of - them expand to `\_addcolorA <v1> <v2> <v3> <v4>` which adds the values of Lua - variables. The `\rgbcolordef` uses `\_addcolorA <R> <G> <B> 0` and - `\cmkykcolordef` uses `\_addcolorA <C> <M> <Y> <K>`. So the Lua variable - names are a little confusing when `\rgbcolordef` is processed. - - Next, `\_commoncolordef` saves resulting values from Lua to `\_tmpb` - using `\_colordefFin`. If `\rgbcolordef` is processed, then we must to - remove the last <K> component which is in the format `.0` in such case. - The `\_stripK` macro does it. - Finally, the `<what-define>` is defined as `<selector>{<expanded _tmpb>}`, - for example `\_setcmykclor{1 0 .5 .3}`. - \_cod ----------------------------- - -\_def\_rgbcolordef {\_commoncolordef \_setrgbcolor krg} -\_def\_cmykcolordef {\_commoncolordef \_setcmykcolor KRG} -\_def\_commoncolordef#1#2#3#4#5#6{% - \_begingroup - \_directlua{color_C=0 color_M=0 color_Y=0 color_K=0}% - \_def\_setcmykcolor##1{!=#2 ##1 }% - \_def\_setrgbcolor ##1{!=#3 ##1 }% - \_def\_setgreycolor##1{!=#4 ##1 }% - \_let\_useK=\_relax - \_edef\_tmpb{+#6}% - \_replstring\_tmpb{+ }{+}\_replstring\_tmpb{- }{-}% - \_replstring\_tmpb{+}{\_addcolor}\_replstring\_tmpb{-}{\_addcolor-}% - \_replstring\_tmpb{^!=}{!^}\_replstring\_tmpb{-!}{-1!}% - \_ifx K#2\_let\_useK=\_douseK \_fi - \_tmpb - \_edef\_tmpb{\_colordefFin}% - \_ifx k#2\_edef\_tmpb{\_ea\_stripK \_tmpb;}\_fi - \_ea\_endgroup - \_ea\_def\_ea#5\_ea{\_ea#1\_ea{\_tmpb}}% -} -\_def\_addcolor#1!#2#3{\_cs{addcolor:#2#3}#1} -\_def\_addcolorA #1 #2 #3 #4 #5 {% - \_def\_tmpa{#1}\_ifx\_tmpa\_empty \_else \_edef\_tmpa{\_tmpa*}\_fi - \_directlua{color_C=math.max(color_C+\_tmpa#2,0) - color_M=math.max(color_M+\_tmpa#3,0) - color_Y=math.max(color_Y+\_tmpa#4,0) - color_K=math.max(color_K+\_tmpa#5,0) -}} -\_sdef{addcolor:=K}#1 #2 #3 #4 #5 {\_addcolorA #1 #2 #3 #4 #5 } -\_sdef{addcolor:^K}#1 #2 #3 #4 #5 {\_addcolorA #1 (1-#2) (1-#3) (1-#4) #5 } -\_sdef{addcolor:^G}#1 #2 {\_addcolorA #1 0 0 0 #2 } -\_sdef{addcolor:=G}#1 #2 {\_addcolorA #1 0 0 0 (1-#2) } -\_sdef{addcolor:=R}#1 #2 #3 #4 {% - \_edef\_tmpa{\_noexpand\_addcolorA #1 \_rgbtocmyk #2 #3 #4 ; }\_tmpa -} -\_sdef{addcolor:^R}#1 #2 #3 #4 {\_cs{addcolor:=R}#1 (1-#2) (1-#3) (1-#4) } - -\_sdef{addcolor:=k}#1 #2 #3 #4 #5 {% - \_edef\_tmpa{\_noexpand\_addcolorA #1 \_cmyktorgb #2 #3 #4 #5 ; 0 }\_tmpa -} -\_sdef{addcolor:^k}#1 #2 #3 #4 #5 {\_cs{addcolor:=k}#1 (1-#2) (1-#3) (1-#4) #5 } -\_sdef{addcolor:^g}#1 #2 {\_addcolorA #1 (1-#2) (1-#2) (1-#2) 0 } -\_sdef{addcolor:=g}#1 #2 {\_addcolorA #1 #2 #2 #2 0 } -\_sdef{addcolor:=r}#1 #2 #3 #4 {\_addcolorA #1 #2 #3 #4 0 } -\_sdef{addcolor:^r}#1 #2 #3 #4 {\_addcolorA #1 (1-#2) (1-#3) (1-#4) 0 } -\_def\_stripK#1 .0;{#1} -\_let\_colordef=\_cmykcolordef % default \_colordef is \_cmykcolordef - - \_doc ----------------------------- - Public versions of \`\colordef` and \`\useK` macros are declared using - `\_def`, because the internal versions `\_colordef` and `\_useK` are - changed during processing. - \_cod ----------------------------- - -\_def \useK{\_useK} -\_def \colordef {\_colordef} -\_public \cmykcolordef \rgbcolordef ; - - \_doc ----------------------------- - The \LaTeX/ file `x11nam.def` is read by \`\morecolors`. The numbers - 0,1,2,3,4 are transformed to letters O, <none>, B, C, D in the name of the - color. Colors defined already are not re-defined. The empty \`\_showcolor` - macro should be re-defined for color catalog printing. For example: - \begtt - \def\vr{\vrule height10pt depth2pt width20pt} - \def\_showcolor{\hbox{\tt\_bslash\_tmpb: \csname\_tmpb\endcsname \vr}\space\space} - \begmulti 4 \typosize[11/14] - \morecolors - \endmulti - \endtt - \_cod ----------------------------- - -\_def\_morecolors{% - \_long\_def\_tmp##1\preparecolorset##2##3##4##5{\_tmpa ##5;,,,;} - \_def\_tmpa##1,##2,##3,##4;{\_ifx,##1,\_else - \_def\_tmpb{##1}\_replstring\_tmpb{1}{}\_replstring\_tmpb{2}{B}% - \_replstring\_tmpb{3}{C}\_replstring\_tmpb{4}{D}\_replstring\_tmpb{0}{O}% - \_ifcsname \_tmpb\_endcsname \_else - \_sdef{\_tmpb}{\_setrgbcolor{##2 ##3 ##4}}\_showcolor\_fi - \_ea\_tmpa\_fi - } - \_ea\_tmp\_input x11nam.def -} -\_let\_showcolor=\_relax % re-define it if you want to print a color catalog -\_public \morecolors ; - -\_endcode % ------------------------------------- - -The colors have different behavior than fonts. Marks (whatsits) with color -information are stored into PDF output and \TeX/ doesn't interpret them. -The PDF viewer (or PDF interpreter in a printer) reads these marks -and switches colors according to them. This -is independent of \TeX/ group mechanism. You can declare -`\nolocalcolor` at the beginning of the document, if you want this behavior. -In this case, if you set a color then you must return to the black color -using `\Black` manually. - -By default, \OpTeX/ sets `\localcolor`. It means that the typesetting -returns to a previous color at the end of the current group, so you cannot -write `\Black` explicitly. This is implemented using the `\aftergroup` feature. -There is a limitation of this feature: when a color selector is used in a -group of a box, which is saved by `\setbox`, then the activity or -reconstruction of the previous color is processed at `\setbox` time, no in the -box itself. You must correct it by double group: -\begtt -\setbox0=\hbox{\Red text} % bad: \Black is done after \setbox -\setbox0=\hbox{{\Red text}} % good: \Black is done after group inside the box -\endtt - -The implementation of colors is based on colorstack, so the current color -can follow across more pages. It is not so obvious because PDF viewer (or PDF -interpreter) manipulates with colors locally at each PDF page and it -initializes each PDF page with black on white color. - -Macros \^`\setcmykcolor``{<C> <M> <Y> <K>}` or \^`\setrgbcolor``{<R> <G> <B>}` -or\nl \^`\setgreycolor``{<Grey>}` should be used in color selectors or user can -specify these macros explicitly. - -The color mixing processed by the \^`\colordef` is done in the subtractive color -model CMYK. If the result has a component greater than 1 then all -components are multiplied by a coefficient in order to the maximal component is -equal to 1. - -You can move a shared amount of CMY components (i.e. their minimum) to the -$K$ component. This saves the color tonners and the result is more true. -This should be done by \^`\useK` command at the end of a linear combination -used in `\colordef`. For example -\begtt -\colordef \myColor {.3\Green + .4\Blue \useK} -\endtt -The `\useK` command exactly does: -$$ - \displaylines{ - k' =\min(C,M,Y), \cr \ C=(C-k')/(1-k'), \ M=(M-k')/(1-k'), \ Y=(Y-k')/(1-k'), \cr - K = \min(1,K+k'). -} -$$ - -You can use minus instead of plus in the linear combination in `\colordef`. The -given color is substracted in such case and the negative components are -rounded to zero immediately. For example -\begtt -\colordef \Color {\Brown-\Black} -\endtt -can be used for removing the black component from the color. You can use -the `-\Black` trick after `\useK` command to remove grey components -occurred during color mixing. - -Finally, you can use `^` immediately preceded before the macro name of the -color. Then the complementary color is used here. -\begtt -\colordef\mycolor{\Grey+.6^\Blue} % the same as \colordef\mycolor{\Grey+.6\Yellow} -\endtt - -The \^`\rgbcolordef` can be used to mix colors in additive color model RGB. -If \^`\onlyrgb` is declared, then \^`\colordef` works as \^`\rgbcolordef`. - -If a CMYK to RGB or RGB to CMYK conversion is needed then -the following simple formulae are used -(ICC profiles are not supported): -$$ -\displaylines{ - \hbox{CMYK to RGB:}\cr - R = (1-C)(1-K), \ G = (1-M)(1-K), \ B = (1-Y)(1-K). \cr - \hbox{RGB to CMYK:}\cr - K'=\max(R,G,B), \ C=(K'-R)/K', \ M=(K'-G)/K', \ Y=(K'-B)/K', \ K=1-K'. -} -$$ -The RGB to CMYK conversion is invoked when a color is declared using `\setrgbcolor` -and it is used in \^`\colordef` or if it is printed when \^`\onlycmyk` is declared. -The CMYK to RGB conversion is invoked when a color is declared using \^`\setcmykcolor` -and it is used in \^`\rgbcolordef` or if it is printed when \^`\onlyrgb` is declared. - -\_endinput - -2020-04-22 \replstring\tmpb{+ }{+}, {- }{-} added in \colordef, bug fixed -2020-03-18 introduced diff --git a/Master/texmf-dist/tex/luatex/optex/base/doc.opm b/Master/texmf-dist/tex/luatex/optex/base/doc.opm deleted file mode 100644 index ce571a9e812..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/doc.opm +++ /dev/null @@ -1,276 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \printdoc {Macros for documentation printing <2020-04-28>} - - \_doc ----------------------------- - General decalarations. - \_cod ----------------------------- - -\_fontfam[lmfonts] -\_hyperlinks \Green \Green -\_enlang -\_enquotes - - \_doc ----------------------------- - Maybe, somebody needs `\seccc` or `\secccc`? - \_cod ----------------------------- - -\_eoldef\seccc#1{\_medskip \_noindent{\_bf#1}\_par\_nobreak\_firstnoindent} -\_def\secccc{\_medskip\_noindent $\_bullet$ } - - \_doc ----------------------------- - `\enddocument` can be redefined. - \_cod ----------------------------- - -\_let\enddocument=\_bye - - \_doc ----------------------------- - A full page of listing causes underfull `\vbox` in output routine. - We need to add a small tolerance. - \_cod ----------------------------- - -\_pgbottomskip=0pt plus10pt minus2pt - - \_doc ----------------------------- - The listing mode is implemented here. The \`\maxlines` - is maximal lines of code printed in the listing mode. - \_cod ----------------------------- - -\_newcount \_maxlines \_maxlines=100000 -\_public \maxlines ; - -\_eoldef\_cod#1{\_par \_wipeepar - \_vskip\_parskip \_medskip \_ttskip - \_begingroup - \_typosize[8/10] - \_let\_printverbline=\_printcodeline - \_ttline=\_inputlineno - \_setverb - \_ifnum\_ttline<0 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi - \_adef{ }{\ }\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt - \_relax \_ttfont - \_endlinechar=`^^J - \_def\_tmpb{\_start}% - \_readverbline -} -\_def\_readverbline #1^^J{% - \_def\_tmpa{\_empty#1}% - \_let\_next=\_readverbline - \_ea\_isinlist\_ea\_tmpa\_ea{\_Doc}\_iftrue \_let\_next=\_processinput \_fi - \_ea\_isinlist\_ea\_tmpa\_ea{\_Endcode}\_iftrue \_endinput \_let\_next=\_processinput \_fi - \_ifx\_next\_readverbline \_addto\_tmpb{#1^^J}\_fi - \_next -} -{\_catcode`\ =13 \_gdef\_aspace{ }}\_def\_asp{\_ea\_noexpand\_aspace} -\_edef\_Doc{\_asp\_asp\_bslash _doc} -\_edef\_Endcode{\_noexpand\_empty\_bslash _endcode} - - \_doc ----------------------------- - The scanner of the control sequences in the listing mode. - \_cod ----------------------------- - -\_def\_makecs{\_def\_tmp{}\_futurelet\_next\_makecsA} -\_def\_makecsA{\_ifcat a\_noexpand\_next \_ea\_makecsB \_else \_ea\_makecsF \_fi} -\_def\_makecsB#1{\_addto\_tmp{#1}\_futurelet\_next\_makecsA} -\_def\_makecsF{\_ifx\_tmp\_empty \_csstring\\% - \_else \_ifcsname ,\_tmp\_endcsname \_link[cs:\_tmp]{\Blue}{\_csstring\\\_tmp}% - \_else \_let\_next=\_tmp \_remfirstunderscore\_next - \_ifx\_next\_empty \_let\_next=\_tmp \_fi - \_ifcsname ,\_next\_endcsname \_link[cs:\_next]{\Blue}{\_csstring\\\_tmp}% - \_else \_csstring\\\_tmp \_fi\_fi\_fi -} -\_def\_processinput{% - \_let\_start=\_relax - \_ea\_replstring\_ea\_tmpb\_ea{\_aspace^^J}{^^J} - \_addto\_tmpb{\_end}% - \_isinlist\_tmpb{\_start^^J}\_iftrue \_advance\_ttline by1\_fi - \_replstring\_tmpb{\_start^^J}{\_start}% - \_replstring\_tmpb{\_start}{}% - \_replstring\_tmpb{^^J\_end}{\_end}% - \_replstring\_tmpb{^^J\_end}{}% - \_replstring\_tmpb{\_end}{}% - \_ea\_prepareverbdata\_ea\_tmpb\_ea{\_tmpb^^J}% - \_replthis{\_csstring\\}{\_noexpand\_makecs}% - \_ea\_printverb \_tmpb\_end - \_par - \_endgroup \_ttskip - \_isnextchar\_par{}{\_noindent}% -} -\_def\_remfirstunderscore#1{\_ea\_remfirstunderscoreA#1\_relax#1} -\_def\_remfirstunderscoreA#1#2\_relax#3{\_if _#1\_def#3{#2}\_fi} - - \_doc ----------------------------- - The lines in the listing mode have a yellow background. - \_cod ----------------------------- - -\_def\Yellow{\_setcmykcolor{0.0 0.0 0.3 0.03}} - -\_def\_printcodeline#1{\_advance \_maxlines by-1 - \_ifnum \_maxlines<0 \_ea \_endverbprinting \_fi - \_ifx\_printfilename\_relax \_penalty \_ttpenalty \_fi \_vskip-4pt - \_noindent\_rlap{\Yellow \_vrule height8pt depth5pt width\_hsize}% - \_printfilename - \_indent \_printverblinenum #1\par} - -\_def\_printfilename{\_hbox to0pt{% - \_hskip\_hsize\vbox to0pt{\_vss\_llap{\Brown\docfile}\_kern7.5pt}\_hss}% - \_let\_printfilename=\_relax -} -\_everytt={\_let\_printverblinenum=\_relax} - -\_long\_def\_endverbprinting#1\_end#2\_end{\_fi\_fi \_global\_maxlines=100000 - \_noindent\_typosize[8/]\_dots etc. (see {\_tt\Brown\docfile})} - - \_doc ----------------------------- - `\docfile` is currently documented file.\nl - \`\printdoc` and \`\printdoctail` macros are defined here. - \_cod ----------------------------- - -\_def\docfile{} -\_def\_printdoc #1 {\_par \_def\docfile{#1}% - \_everytt={\_ttshift=-15pt \_let\_printverblinenum=\_relax}% - \_ea\_cod \input #1 - \_everytt={\_let\_printverblinenum=\_relax}% - \_def\docfile{}% -} -\_def\_printdoctail #1 {\_bgroup - \_everytt={}\_ttline=-1 \_ea\_printdoctailA \_input #1 \_egroup} -{\_long\_gdef\_printdoctailA#1\_endcode{}} - -\_public \printdoc \printdoctail ; - - \_doc ----------------------------- - You can do `\verbinuput \vitt{<filename>} (<from>-<to>) <filename>` - if you need analogical design like in listing mode. - \_cod ----------------------------- - -\_def\_vitt#1{\_def\docfile{#1}\_ttline=-1 - \_everytt={\_typosize[8/10]\_let\_printverbline=\_printcodeline \_medskip}} - -\_public \vitt ; - - \_doc ----------------------------- - The Index entries are without the trailing backslash. We must add it - when printing Index. - \_cod ----------------------------- - -\_addto \_ignoredcharsen {_} % \foo, \_foo is the same in the fist pass of sorting -\_def\_printii #1#2&{% - \_ismacro\_lastii{#1}\_iffalse \_newiiletter{#1}{#2}\_def\_lastii{#1}\_fi - \_gdef\_currii{#1#2}\_the\_everyii\_noindent - \_hskip-\_iindent \_ignorespaces\_printiiA\bslash#1#2//} - -\_def\_printiipages#1&{\_let\_pgtype=\_undefined \_tmpnum=0 - {\_rm\_printpages #1,:,\_par}} - -\_sdef{_tocl:1}#1#2#3{\_nofirst\_bigskip - \_bf\_llaptoclink{#1}{#2}\_hfill \_pgn{#3}\_tocpar\_medskip} - - \_doc ----------------------------- - The \code{<something>} will be print as <something>. - \_cod ----------------------------- - -\_let\lt=< -\_catcode`\<=13 - -\_def<#1>{$\langle\hbox{\it#1\/}\rangle$} -\_everyintt{\_catcode`\<=13 } - - \_doc ----------------------------- - If this macro is loaded by \^`\load` then we need to initialize - catcodes using the `\_afteroad` macro. - \_cod ----------------------------- - -\_def\_afterload{\_catcode`\<=13 \_catcode`\`=13 } - - \_doc ----------------------------- - Main documentation points and hyperlinks to/from it. - Main documentation point: \code{\\`\\foo`}. - User-level documentation point: \code{\\^`\\foo}, first occurence only. - The next occurrences are only links to the main documentation point. - Link to user-level documentation point: \code{\\~`\\foo}. - If user-level documentation point follows the main documentation point - then use \code{\\_forwardlink\\`\\foo`}. - \_cod ----------------------------- - -\_verbchar` - -\_def\`#1`{\_leavevmode\_edef\_tmp{\_csstring#1}\_iindex{\_tmp}% - \_ifcsname cs:\_tmp\_endcsname\_else \_dest[cs:\_tmp]\_fi - \_sxdef{cs:\_tmp}{}% - \_hbox{\_ifcsname cs:^\_tmp\_endcsname - \_link[cs:^\_tmp]{\Red}{\_tt\_csstring\\\_tmp}\_else - {\_tt\Red\_csstring\\\_tmp}\_fi}% -} -\_def\_forwardlink\`#1`{{\_slet{cs:^\_csstring#1}{relax}\`#1`}} - -\_def\^`#1{\_leavevmode\_edef\_tmp{\_csstring#1}\_iindex{\_tmp}% - \_hbox{\_ifcsname cs:^\_tmp\_endcsname \_else \_dest[cs:^\_tmp]\_sxdef{cs:^\_tmp}{}\_fi - \_link[cs:\_tmp]{\Blue}{\_tt\_string#1}}% - \_futurelet\_next\_cslinkA -} -\_def\_cslinkA{\_ifx\_next`\_ea\_ignoreit \_else \_ea\_ea\_ea`\_ea\_string\_fi} - -\_def\~`#1{\_leavevmode\_edef\_tmp{\_csstring#1}\_iindex{\_tmp}% - \_hbox{\_link[cs:^\_tmp]{\Blue}{\_tt\_string#1}}% - \_futurelet\_next\_cslinkA -} - -\_endcode %------------------------------------------- - -\noindent -The \^`\printdoc` `<filename><space>` and \^`\printdoctail` `<filename><space>` -commands are defined after the file `doc.opm` is load by \^`\load`~`[doc]`. - -The `\printcoc` starts reading of given `<filename>` from the second line. -The file is read in {\em the listing mode}. -The `\prindoctail` starts reading given `<filename>` from the -first occurrence of the `\_encode`. The file is read -in normal mode (like `\input <filename>`). - -The {\em listing mode} prints the lines as a listing of a code. This mode is -finished when first {\visiblesp` \_doc`} occurs or first `\_endcode` -occurs. At least two spaces must precede before such `\_doc`. On the other -hand, the `\_encode` must be at the left edge of the line without spaces. -If this rule is not met then the listing mode continues. - -If the first line or the last line of the listing mode is empty then such -lines are not printed. The maximal number of printed lines in the listing -mode is \^`\maxlines`. It is set to almost infinity (100000). You can set it -to a more sensible value. Such a setting is valid only for the first following -listing mode. - -When the listing mode is finished by `\_doc` then the next lines are read in the -normal way, but the material between `\begtt` ... `\endtt` pair -is shifted by three letters left. The reason is that the three spaces of -indentation is recommended in the `\_doc` ... `\_cod` pair and this shifting -is compensation for this indentation. - -The `\_cod` macro ignores the rest of the current line and starts the listing -mode again. - -When the listing mode is finished by the `\_endcode` then the `\endinput` is -applied, the reading of the file opened by `\printdoc` is finished. - -You cannot reach the end of the file (without `\_endcode`) in the listing -mode. - -The listing mode creates all control sequences which are listed in the -index as an active link to the main documentation point of such control sequence -and prints them in blue. Another text is printed in black. - -The main documentation point is denoted by \code{\\`\\}`<sequence>`\code{`} -in red, for example \code{\\`\\foo`}. -The user documentation point is the first occurrence of -\code{\\^`\\}`<sequence>`\code{`}, for example \code{\\^`\\foo`}. -There can be more such markups, all of them are hyperlinks to the main -documentation point. -And main documentation point is a hyperlink to the user documentation point -if this point exists. Finally, the -\code{\\~`\\}`<sequence>`\code{`} (for example \code{\\~`\\foo`}) are -hyperlinks to the user documentation point. - -\endinput - -2020-04-28 \levevmode in \^ macros added (bug fixed) -2020-04-22 released \ No newline at end of file diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-adventor.opm b/Master/texmf-dist/tex/luatex/optex/base/f-adventor.opm deleted file mode 100644 index df22be1130a..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-adventor.opm +++ /dev/null @@ -1,22 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Adventor] \Adventor {TeX Gyre Adventor based on Avantgarde Book} - {\caps} {\rm \bf \it \bi} {} - {[texgyreadventor-regular]} - {\_def\_fontnamegen {[texgyreadventor-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-antt.opm b/Master/texmf-dist/tex/luatex/optex/base/f-antt.opm deleted file mode 100644 index 39d3d011ea3..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-antt.opm +++ /dev/null @@ -1,32 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Antykwa Torunska] \Antt {Traditional Polish font family} - {\cond \medium \light \caps} {\rm \bf \it \bi} {Pagella} - {[AntykwaTorunska-Regular]} - {\_def\_fontnamegen {[AntykwaTorunska\_sfamxV\_sfamyV-\_currV]:script=latn;\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \caps ...... caps & small caps^^J - \cond ...... condensed^^J - \medium .... medium weight^^J - \light ..... light weight^^J - \cond ...... condensed^^J -}} - -\_moddef \resetmod {\_fsetV sfamx={},sfamy={},caps={} \_fvars Regular Bold Italic BoldItalic } -\_moddef \cond {\_fsetV sfamx=Cond \_fvars Regular . Italic . - \_onlyif sfamy={}: {\_fvars Regular Bold Italic BoldItalic }} -\_moddef \medium {\_fsetV sfamy=Med \_fvars Regular . Italic . } -\_moddef \light {\_fsetV sfamy=Light \_fvars Regular . Italic . } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_loadmath{[texgyrepagella-math]} - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-baskerville.opm b/Master/texmf-dist/tex/luatex/optex/base/f-baskerville.opm deleted file mode 100644 index 4e6027d7032..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-baskerville.opm +++ /dev/null @@ -1,22 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Baskerville] \Baskerville {Free vaiants of classical Baskerville} - {\caps} {\rm \bf \it \bi} {} - {[BaskervilleF-Regular]} - {\_def \_fontnamegen {[BaskervilleF-\_currV]:script=latn;\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars Regular Bold Italic BoldItalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-bonum.opm b/Master/texmf-dist/tex/luatex/optex/base/f-bonum.opm deleted file mode 100644 index a285021b2ed..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-bonum.opm +++ /dev/null @@ -1,24 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Bonum] \Bonum {TeX Gyre Bonum fonts based on Bookman} - {\caps} {\rm \bf \it \bi} {Bonum} - {[texgyrebonum-regular]} - {\_def\_fontnamegen {[texgyrebonum-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyrebonum-math]} - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-comicneue.opm b/Master/texmf-dist/tex/luatex/optex/base/f-comicneue.opm deleted file mode 100644 index a7b9f8e0028..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-comicneue.opm +++ /dev/null @@ -1,23 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [ComicNeue] \Comicneue {Comic Neue sans serif} - {\angular} {\lf \li \rm \it \bf \bi} {} - {[ComicNeue-Regular]} - {\_def\_fontnamegen {[ComicNeue\_anguV-\_currV]:\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \angular ...... Angular ends of curves^^J -Variants:^^J - \lf (Light) \rm \bf \li (LightItalic) \it \bi^^J -}} - -\_moddef \resetmod {\_fsetV angu={} \_fvars Regular Bold RegularItalic Bolditalic } -\_moddef \angular {\_fsetV angu=Angular } -\_famvardef \lf {\_fsetV curr=Light \_rm} -\_famvardef \li {\_fsetV curr=LightItalic \_rm} - -\_initfontfamily % new font family must be initialized - -\_endcode - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-cursor.opm b/Master/texmf-dist/tex/luatex/optex/base/f-cursor.opm deleted file mode 100644 index 80b2a294574..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-cursor.opm +++ /dev/null @@ -1,22 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Cursor] \Cursor {TeX Gyre Cursor fonts based on Courier} - {\caps} {\rm \bf \it \bi} {} - {[texgyrecursor-regular]} - {\_def \_fontnamegen {[texgyrecursor-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-dejavu.opm b/Master/texmf-dist/tex/luatex/optex/base/f-dejavu.opm deleted file mode 100644 index 76fd90c0db0..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-dejavu.opm +++ /dev/null @@ -1,31 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [DejaVu] \Dejavu {Derived from the Vera fonts} - {\sans \mono \cond \light \caps} {\rm \bf \it \bi} {TG-DejavuMath} - {[DejaVuSerif]} - {\_def\_fontnamegen {[DejaVu\_subfamV\_typfamV\_currV]:\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \sans ...... sans serif^^J - \serif ..... serif (default)^^J - \mono ...... non-proportional, only \sans^^J - \light ..... extra-light, only \sans, only \rm, others (\bf\it\bi) unchanged^^J - \cond ...... condensed (\sans or \serif, not \mono) -}} - -\_def\_BIfvars{\_fvars {} -Bold -Italic -BoldItalic } -\_def\_BOfvars{\_fvars {} -Bold -Oblique -BoldOblique } -\_moddef \resetmod {\_fsetV subfam=Serif,typfam={} \_BIfvars } -\_moddef \sans {\_fsetV subfam=Sans \_BOfvars } -\_moddef \serif {\_fsetV subfam=Serif,typfam={} \_BOfvars } -\_moddef \mono {\_fsetV subfam=Sans,typfam=Mono \_BOfvars } -\_moddef \light {\_fsetV subfam=Sans,typfam={} \_fvars -ExtraLight -Bold -Oblique -BoldOblique } -\_moddef \cond {\_fsetV typfam=Condensed } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyredejavu-math]} - -\_endcode - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-ebgaramond.opm b/Master/texmf-dist/tex/luatex/optex/base/f-ebgaramond.opm deleted file mode 100644 index 63502c9b08a..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-ebgaramond.opm +++ /dev/null @@ -1,37 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [EB Garamond] \EBGaramond {Based on Garamond} - {\medium \semibold \caps \swash} {\rm \bf \it \bi \initials} {Garamond-Math} - {[EBGaramond-Regular]} - {\_def\_fontnamegen {[EBGaramond-\_currV]:\_capsV\_swaV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \caps ...... caps & small caps^^J - \swash ..... alternative capitals for \it, \bi, only non-accented letters^^J - \medium .... medium weight^^J - \semibold .. semibold weight (only \bf, \bi are changed)^^J -Variant:^^J - \initials .. Initials, only letters ADFGLNOQT^^J -}} - -\_moddef \resetmod {\_fsetV caps={},swa={} \_fvars Regular Bold Italic BoldItalic } -\_moddef \medium {\_fvars Medium ExtraBold MediumItalic ExtraBoldItalic } -\_moddef \semibold {\_fvars Regular SemiBold Italic SemiBoldItalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } -\_moddef \swash {\_fsetV swa=+swsh; } -\_moddef \noswash {\_fsetV swa={} } - -\_famvardef \initials {\_fvars Initials . . . \rm} - - -\_initfontfamily % new font family must be initialized - -\_loadmath {[Garamond-Math]} - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-garamondl.opm b/Master/texmf-dist/tex/luatex/optex/base/f-garamondl.opm deleted file mode 100644 index d642aac98c7..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-garamondl.opm +++ /dev/null @@ -1,26 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Garamond Libre] \Garamondl {Free, derived from old style font family} - {\caps \swash} {\rm \bf \it \bi} {Garamond-Math} - {[GaramondLibre-Regular]} - {\_def\_fontnamegen - {[GaramondLibre-\_currV]:script=latn;\_capsV\_swaV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \caps ...... caps & small caps, only non-accented letters^^J - \swash ..... alternative capitals for \it, \bi, only non-accented letters^^J -}} - -\_moddef \resetmod {\_fsetV caps={},swa={} \_fvars Regular Bold Italic Bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum;-liga; } -\_moddef \nocaps {\_fsetV caps={} } -\_moddef \swash {\_fsetV swa=+swsh; } -\_moddef \noswash {\_fsetV swa={} } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[Garamond-Math]} - -\_endcode - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-gfsbodoni.opm b/Master/texmf-dist/tex/luatex/optex/base/f-gfsbodoni.opm deleted file mode 100644 index d7d3494a9d7..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-gfsbodoni.opm +++ /dev/null @@ -1,22 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [GFS Bodoni] \GFSBodoni {Based on Bodoni with greek letters} - {} {\rm \bf \it \bi} {} - {[GFSBodoni]} - {\_def\_fontnamegen{[GFSBodoni\_currV]:script=latn;\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... Caps & Small caps (only \rm)^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars {} Bold It BoldIt } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-heros.opm b/Master/texmf-dist/tex/luatex/optex/base/f-heros.opm deleted file mode 100644 index 767052cc45e..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-heros.opm +++ /dev/null @@ -1,244 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Heros] \Heros {TeX Gyre Heros fonts based on Helvetica} - {\caps \cond} {\rm \bf \it \bi} {FiraMath} - {[texgyreheros-regular]} - {\_def\_fontnamegen{[texgyreheros\_condV-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \caps ...... caps & small caps^^J - \cond ...... condensed variants^^J -}} - -\_moddef \resetmod {\_fsetV caps={},cond={} \_fvars regular bold italic bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } -\_moddef \cond {\_fsetV cond=cn } -\_moddef \nocond {\_fsetV cond={} } - -\_initfontfamily % new font family must be initialized - -\_ifmathloading - \_loadmath {[FiraMath-Regular]} - \_addto\_normalmath{\_loadumathfamily 5 {xitsmath-regular}{} } - \_addto\_boldmath {\_loadumathfamily 5 {xitsmath-bold}{} } - \_addto\frak{\_fam5 }\_addto\cal{\_fam5 } - \_normalmath - \_wterm{MATH-FONT(5): "[XITSMath-Regular/Bold]" -- used for \_string\cal, \_string\frak} - % \bf, \bi from FiraMath: - \_let\_bsansvariables=\_bfvariables - \_let\_bsansGreek=\_bfGreek - \_let\_bsansgreek=\_bfgreek - \_let\_bsansdigits=\_bfdigits - \_let\_bisansvariables=\_bivariables - \_let\_bisansgreek=\_bigreek -\_fi - -\_endcode - -The font family file declares the font family for selecting fonts from this -family at the arbitrary size and with various shapes. Unicode fonts (OTF) -are preferred. The following example declares the Heros family: - -\printdoc f-heros.opm - -If you want to write such a font family file, you need to keep the following rules. - -\begitems -* Use the \^`\_famdecl` command first. It has the following syntax: -\begtt \catcode`\<=13 -\_famdecl [<Name of family>] \<Familyselector> {<comments>} - {<modifiers>} {<variant selectors>} {<comments about math fonts>} - {<font-for-testing>} - {\_def\_fontnamegen{<font name or font file name generated>}} -\endtt - This writes information about font family at the - terminal and prevents loading such file twice. Moreover, it probes - existence of `<font-for-testing>` in your system. If it doesn't exist, the - file loading is skipped with a warning on the terminal. - The \^`\_ifexistfam` macro returns false in this case. - The \^`\_fontnamegen` macro must be defined in the last parameter of the - \^`\_famdecl`. More about it is documented below. -* You can use `\_wlog{\_detokenize{...` to write additional information into a log file. -* You can declare optical sizes using \~`\_regoptsizes` if there are more font files - with different optical sizes (like in Latin Modern). See `f-lmfonts.opm` - file for more information about this special feature. -* Declare font modifiers using \~`\moddef` if they are present. The \`\resetmod` - must be declared in each font family. -* Check if all your declared modifiers do not produce any space in - horizontal mode. For example check: `X\caps Y`, the letters `XY` must - be printed without any space. -* Optionally, declare new variants by the \^`\famvardef` macro. -* Run `\_initfontfamily` to start the family (it is mandatory). -* If math font should be loaded, use `\_loadmath{<math font>}`. -\enditems - -{\noindent \bf The \`\_fontnamegen` macro} -(declared in the last parameter of the \^`\_famdecl`) -must expand (at the expand processor level only) to a file name of the loaded font (or to its font -name) and to optional font features appended. The Font Selection -System uses this macro at the primitive level in the following sense: - -\begtt \catcode`\<=13 -\font \<selector> {\_fontnamegen} \_sizespec -\endtt -% -Note that the extended `\font` syntax -`\font\<selector> {<font name>:<font features>} <size spec.>` or -`\font\<selector> {[<font file name>]:<font features>} <size spec.>` -is expected here. - -\seccc Example 1 - -Assume an abstract font family with fonts `xx-Regular.otf`, -`xx-Bold.otf`, `xx-Italic.otf` and `xx-BoldItalic.otf`. Then you can declare -the \^`\resetmod` (for initializing the family) by: -\begtt -\_moddef\resetmod{\_fvars Regular Bold Italic BoldItalic } -\endtt -and define the \^`\_fontnamegen` in the last parameter of the \^`\_famdecl` by: -\begtt -\_famdecl ... - {\def\_fontnamegen{[xx-\_currV]}} -\endtt -The following auxiliary macros are used here: -\begitems -* \^`\moddef` declares the family dependent modifier. The \^`\resetmod` saves - initial values for the family. -* \^`\_fvars` saves four names to the memory, they are used by the \^`\_currV` macro. -* \^`\_currV` expands to one of the four names dependent on `\rm` or `\bf` or - `\it` or `\bi` variant is required. -\enditems -Assume that the user needs `\it` variant in this family. Then the -`\_fontnamegen` macro expands to `[xx-\_currV]` and it expands to -`[xx-Italic]`. The Font Selection System uses `\font {[xx-Italic]}`. -This command loads the `xx-Italic.otf` font file. - -See more advanced examples are in `f-<family>.opm` files. - -\seccc Example 2 - -The `f-heros.opm` is listed here. Look at it. -When Heros family is selected and `\bf` is asked then -`\font {[texgyreheros-bold]:+tlig;} at10pt` -is processed. - -You can use any expandable macros or expandable primitives in the `\_fontnamegen` -macro. The simple macros in our example with names `\_<word>V` are preferred. They -expand typically to their content. The macro \^`\_fsetV` `<word>=<content>` -(terminated by a space) is equivalent to `\def\_<word>V{<content>}` and you -can use it in font modifiers. You can use the \^`\_fsetV` macro in more -general form: - -\begtt \catcode`\<=13 - \_fsetV <word-a>=<value-a>,<word-b>=<value-b> ...etc. terminated by a space -\endtt -% -with obvious result `\def\_<word-a>V {<value-a>}\def\_<word-b>V {<value-b>}` etc. - -\seccc Example 3 - -If both font modifiers `\caps`, `\cond` were applied in Heros -family, then `\def\_capsV{+smcp;+onum}` and `\def\_condV{cn}` were processed -by these font modifiers. If a user needs the `\bf` variant at 11\,pt now then -the - -\begtt - \font {[texgyreheroscn-bold]:+smcp;+onum;+tlig;} at11pt -\endtt -% -is processed. We assume that a font file `texgyreheroscn-bold.otf` is present -in your \TeX/ system. - -\seccc The \code{\\_onlyif} macro - -has the syntax \^`\_onlyif` `<word>=<value-a>,<value-b>,...<value-n>: {<what>}`. It can -be used inside `\moddef` as simple IF statement: the `<what>` is processed only -if `<word>` has `<value-a>` or `<value-b>` \dots or `<value-n>`. See -`f-roboto.opm` for examples of usage of many `\_onlyif`'s. - -Recommendation: use the \^`\_fontfeatures` macro at the end of the `\_fontnamegen` -macro in order to the \^`\setff`, \^`\setfontcolor`, \^`\setletterspace` -macros can work. - -\seccc The \code{\\moddef} macro - -has the syntax \^`\moddef\<modifier>{<what to do>}`. It does more things than simple `\_def`: - -\begitems -* The modifier macros are defined as `\_protected`. -* The modifier macros are defined as family-dependent. -* If the declared control sequence is defined already (and it is not a font - modifier) then it is re-defined with a warning. -\enditems -\noindent -The \^`\famvardef` macro has the same features. - -\bigskip -{\noindent\bf The `\<Familyselector>`} -is defined by the \^`\_famdecl` macro as: -\begtt \catcode`<=13 -\protected\def\<Familyselector> {% - \_def\_currfamily {<Familyselector>}% - \_def\_fontnamegen {...}% this is copied from 7-th parameter of \_famdecl - \resetmod - <run all family-dependent font modifiers used before Familyselector without warnings> -\endtt - -{\noindent\bf The \^`\_initfontfamily`}\nl -must be run after modifier's decaration. -It runs the `\<Familyselector>` and it runs `\_rm`, -so the first font from the new family is loaded and it is ready to use it. - -\seccc Name conventions - -Create font modifiers, new variants, and the `\<Familyselector>` only as public, i.e. -in user namespace without `_` prefix. We assume that if a user re-defines them then he/she needs -not them, so we have no problems. If the user's definition was done before loading -the font family file then it is re-defined and \OpTeX/ warns about it. See the end of -section~\ref[fontcommands]. - -The name of `\<Familyselector>` should begin with an uppercase letter. - -Please, look at -\ulink[http://petr.olsak.net/ftp/olsak/optex/op-catalog.pdf]{\OpTeX/ font catalogue} -before you will create your font family file and use the same names for -analogical font modifiers (like `\cond`, `\caps`, `\sans`, `\mono` etc.)\ -and for extra variant selectors (like `\lf`, `\li`, `\kf`, `\ki` etc.\ used in -Roboto font family). - -If you are using the same font modifier names to analogical font shapes then -such modifiers are kept when the family is changed. For example: - -\begtt -\fontfam [Termes] \fontfam[Heros] -\caps\cond\it Caps+Cond italic in Heros \Termes\currvar Caps italic in Termes. -\endtt -% -The family selector first resets all modifiers data by -\^`\resetmod` and then it tries to run all currently used family-dependent modifiers -before the family switching (without warnings if such modifier is -unavailable in the new family). -In this example, `\Termes` does `\resetmod` followed by `\caps\cond`. -The `\caps` is applied and `\cond` is silently ignored in Termes family. - -If you need to declare your private modifier (because it is used in other -modifiers or macros, for example), use the name `\_wordM`. You can be -sure that such a name does not influence the private namespace used by \OpTeX/. - -\seccc Additional notes - -See the font family file `f-libertine-s.opm` which is another example where no -font files but font names are used. - -See the font family file `f-lmfonts.opm` or `f-poltawski.opm` where you can find the -the example of the optical sizes declaration including documentation about -it. - -If you need to create a font family file with a non-Unicode font, you can do it. -The `\_fontnamegen` must expand to the name of TFM file in this case. But we -don't prefer such font family files, because they are usable only with -languages with alphabet subset to ISO-8859-1 (Unicodes are equal to letter's -codes of such alphabets), but middle or east Europe use languages where -such a condition is not true. diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-kerkis.opm b/Master/texmf-dist/tex/luatex/optex/base/f-kerkis.opm deleted file mode 100644 index 4bc31ead65d..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-kerkis.opm +++ /dev/null @@ -1,32 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Kerkis] \Kerkis {Free Bookman alternative with Greek letters} - {\semibold \sans \sanssemi \caps} {\rm \bf \it \bi \calli} {} - {[Kerkis]} - {\_def\_fontnamegen {[Kerkis\_currV]:script=latn;\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \semibold .. semibold weight (changed only \bf, \bi)^^J - \caps ...... caps & small caps (only \rm \bf, bad accents in \bf)^^J - \sans ...... sans serif^^J - \sanssemi .. semibold sans serif (only \rm, accented letters not available)^^J -Variant:^^J - \calli ..... Calligraphic (only upercase, lowercase letters equal to Italic)^^J -}} - -\_moddef \resetmod {\_fvars {} -Bold -Italic -BoldItalic } -\_moddef \semibold {\_fvars {} -SemiBold -Italic -SemiBold-Italic } -\_moddef \caps {\_fvars -SmallCaps.otf -BoldSmallCaps . . } -\_moddef \sans {\_fvars Sans Sans-Bold Sans-Italic Sans-BoldItalic } -\_moddef \sanssemi {\_fvars Sans-SmallCaps . . . } - -\_famvardef \calli {\_fvars -Calligraphic . . . \rm} - - -\_initfontfamily % new font family must be initialized - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-kpfonts.opm b/Master/texmf-dist/tex/luatex/optex/base/f-kpfonts.opm deleted file mode 100644 index c030bea8e84..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-kpfonts.opm +++ /dev/null @@ -1,45 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [KP Fonts] \Kpfonts {KP fonts -- Johannes Kepler project} - {\sans \mono \light \caps \swash} {\rm \bf \it \bi} {KpMath} - {[KpRoman-Regular]} - {\_def\_fontnamegen {[Kp\_subfamV-\_currV]:\_capsV\_swaV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \sans ...... sans serif^^J - \mono ...... non-proportional^^J - \light ..... light (\rm, \it) + semibold (\bf, \bi) variants^^J - \caps ...... caps & small caps^^J - \swash ..... alternative Q letter^^J -}} - -\_def\_RBIfvars{\_fvars Regular Bold Italic BoldItalic } -\_moddef \resetmod {\_fsetV subfam=Roman,caps={},swa={} \_RBIfvars } -\_moddef \sans {\_fsetV subfam=Sans \_RBIfvars } -\_moddef \mono {\_fsetV subfam=Mono \_RBIfvars } -\_moddef \light {\_fsetV subfam=Roman \_fvars Light Semibold LightItalic SemiboldItalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } -\_moddef \swash {\_fsetV swa=+swsh; } -\_moddef \noswash {\_fsetV swa={} } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[KpMath-Regular]} -\_loadboldmath {[KpMath-Bold]} \to {[KpMath-Regular]} - -\_endcode - -The KP fonts family includes more variants of Math fonts. -Only Regular / Bold pair is loaded as default. - -There are alternatives: - -\doloadmath \loadmath {KpMath-Light} -\loadboldmath {[KpMath-Semibold]} \to {[KpMath-Light]} - -or - -\doloadmath \loadmath {KpMath-Sans} - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-libertine-s.opm b/Master/texmf-dist/tex/luatex/optex/base/f-libertine-s.opm deleted file mode 100644 index 3cdc0893129..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-libertine-s.opm +++ /dev/null @@ -1,50 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Linux Libertine] \Libertine {Free Linux Libertine fonts} - {\sans \mono \caps} {\rm \bf \it \bi \initials \displ \keybr} {} - {Linux Libertine O} - {\_def\_fontnamegen {Linux \_mainfamV\_V\_subfamV O/\_currV:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers^^J - \sans ...... smaller serifs^^J - \caps ...... caps & small caps^^J -Special variants:^^J - \initials .. special initials (only uppercase letters)^^J - \displ ..... display variant, suitable at big sizes^^J - \mono ...... non-proportional^^J - \keybr ..... keyboard, emulates keyboard buttons^^J -}} - -\_moddef \resetmod {\_fsetV mainfam=Libertine,subfam={},caps={} \_fvars {} B I BI } -\_moddef \sans {\_fsetV mainfam=Biolinum,subfam={} } -\_moddef \mono {\_fsetV mainfam=Libertine,subfam={Mono } \_fvars {} . . . } -\_moddef \caps {\_fsetV caps=+smcp; } -\_moddef \nocaps {\_fsetV caps={} } - -\_famvardef \initials {\_fsetV mainfam=Libertine,subfam={Initials } \_fvars {} . . . \rm} -\_famvardef \displ {\_fsetV mainfam=Libertine,subfam={Display } \_fvars {} . . . \rm} -\_famvardef \keybr {\_fsetV mainfam=Biolinum,subfam={Keyboard } \_fvars {} . . . \rm} - -\_initfontfamily % new font family must be initialized - -\_endcode - -This is another example where the font names (no font files) are declared. -Linux Libertine font is typically installed on Linux systems. -The \_V macro generates a space. We provide following fonts: - -normal: "Linux Libertine O:\_fontfeatures" - "Linux Libertine O/B:\_fontfeatures" - "Linux Libertine O/I:\_fontfeatures" - "Linux Libertine O/BI:\_fontfeatures" -mono : "Linux Libertine Mono O:\_fontfeatures" -sans: "Linux Biolinum O:\_fontfeatures" - "Linux Biolinum O/B:\_fontfeatures" - "Linux Biolinum O/I:\_fontfeatures" - "Linux Biolinum O/BI:\_fontfeatures" -special: "Linux Libertine Initials O:\_fontfeatures" - "Linux Libertine Display O:\_fontfeatures" - "Linux Biolinum Keyboard O:\_fontfeatures" - -Another file f-libertine.opm declares Linux Libertine family from font files. \ No newline at end of file diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-libertine.opm b/Master/texmf-dist/tex/luatex/optex/base/f-libertine.opm deleted file mode 100644 index b25c2fc4f9a..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-libertine.opm +++ /dev/null @@ -1,60 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Linux Libertine] \Libertine {Free Linux Libertine fonts} - {\sans \mono \caps \semibold} {\rm \bf \it \bi \initials \displ \keybr} {Libertinus} - {[LinLibertine_R]} - {\_def\_fontnamegen {[Lin\_subfamV _\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \sans ...... smaller serifs^^J - \mono ...... non-proportional^^J - \semibold .. semi-bold variants (changed only \bf, \bi)^^J - \caps ...... caps & small caps^^J% -Special variants:^^J - \initials .. special initials (only uppercase letters)^^J - \displ ..... display variant, suitable at big sizes^^J - \keybr ..... keyboard, emulates keyboard buttons^^J -}} - -\_moddef \resetmod {\_fsetV subfam=Libertine,caps={} \_fvars R RB RI RBI } -\_moddef \sans {\_fsetV subfam=Biolinum \_fvars R RB RI RBO } -\_moddef \mono {\_fsetV subfam=Libertine \_fvars M MB MO MBO } -\_moddef \semibold {\_fsetV subfam=Libertine \_fvars R RZ RI RZI } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } - -\_famvardef \initials {\_fsetV subfam=Libertine \_fvars I . . . \rm} -\_famvardef \displ {\_fsetV subfam=Libertine \_fvars DR . . . \rm} -\_famvardef \keybr {\_fsetV subfam=Biolinum \_fvars K . . . \rm} - -\_initfontfamily % new font family must be initialized - -\_loadmath {[LibertinusMath-Regular]} - -\_endcode - -This file declares Linux Libertine font family from font files. The -following fonts are provided: - -normal: "[LinLibertine_R]:\_fontfeatures" - "[LinLibertine_RB]:\_fontfeatures" - "[LinLibertine_RI]:\_fontfeatures" - "[LinLibertine_RBI ]:\_fontfeatures" - "[LinLibertine_RZI]:\_fontfeatures" - "[LinLibertine_RZ]:\_fontfeatures" -mono: "[LinLibertine_M]:\_fontfeatures" - "[LinLibertine_MB]:\_fontfeatures" - "[LinLibertine_MO]:\_fontfeatures" - "[LinLibertine_MBO]:\_fontfeatures" -sans: "[LinBiolinum_RB]:\_fontfeatures" - "[LinBiolinum_RBO]:\_fontfeatures" - "[LinBiolinum_R]:\_fontfeatures" - "[LinBiolinum_RI]:\_fontfeatures" -special: "[LinLibertine_I]:\_fontfeatures" - "[LinLibertine_DR]:\_fontfeatures" - "[LinBiolinum_K]:\_fontfeatures" - -See an alternative `f-libertine-s.opm` where the same font family is -declared using font names used in operating system. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-libertinus.opm b/Master/texmf-dist/tex/luatex/optex/base/f-libertinus.opm deleted file mode 100644 index 5f1329d2864..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-libertinus.opm +++ /dev/null @@ -1,36 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Libertinus] \Libertinus {Free fonts derived from Linux Libertine} - {\semibold \sans \caps} {\rm \bf \it \bi \mono \initials \displ \keybr} {Libertinus} - {[LibertinusSerif-Regular]} - {\_def\_fontnamegen {[Libertinus\_subfamV-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \semibold .. semi-bold variants, changed only \bf, \bi^^J - \sans ...... smaller serifs, only \rm, \bf \it^^J - \caps ...... caps & small caps^^J% -Special variants:^^J - \mono ..... non-proportional - \initials .. special initials (only uppercase letters)^^J - \displ ..... display variant, suitable at big sizes^^J - \keybr ..... keyboard, emulates keyboard buttons^^J -}} - -\_moddef \resetmod {\_fsetV subfam=Serif,caps={} \_fvars Regular Bold Italic BoldItalic } -\_moddef \semibold {\_fsetV subfam=Serif \_fvars Regular Semibold Italic SemiboldItalic } -\_moddef \sans {\_fsetV subfam=Sans \_fvars Regular Bold Italic . } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } - -\_famvardef \mono {\_fsetV subfam=Mono \_fvars Regular . . . \_rm} -\_famvardef \initials {\_fsetV subfam=SerifInitials \_fvars Regular . . . \_rm} -\_famvardef \displ {\_fsetV subfam=SerifDisplay \_fvars Regular . . . \_rm} -\_famvardef \keybr {\_fsetV subfam=Keyboard \_fvars Regular . . . \_rm} - -\_initfontfamily % new font family must be initialized - -\_loadmath {[LibertinusMath-Regular]} - -\_endcode - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-librecaslon.opm b/Master/texmf-dist/tex/luatex/optex/base/f-librecaslon.opm deleted file mode 100644 index 53f61834f1d..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-librecaslon.opm +++ /dev/null @@ -1,22 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [LibreCaslon] \Librecaslon {Libre Caslon Text, inspired by Caslon} - {\onum} {\rm \bf \it \bi} {Termes} - {[LibreCaslonText-Regular]} - {\_def\_fontnamegen {[Libre\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \onum ...... oldstyle figures^^J -}} - -\_moddef \resetmod {\_fsetV caps={},csl={CaslonText} - \_fvars \_cslV-Regular \_cslV-Bold \_cslV-Italic Csln-Bolditalic } -\_moddef \onum {\_fsetV caps=+onum; } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyretermes-math]} - -\_endcode - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-lido.opm b/Master/texmf-dist/tex/luatex/optex/base/f-lido.opm deleted file mode 100644 index 13b4cb76286..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-lido.opm +++ /dev/null @@ -1,48 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Lido] \Lido {by StormType Foundry designed for "lidove noviny"} - {\cond} {\rm \bf \mf \mi \it \bi} {Termes} - {[LidoSTF]} - {\_def\_fontnamegen {[LidoSTF\_condV\_currV]:script=latn;\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Variants:^^J - \rm \bf \it \bi ... classical variants^^J - \mf \mi .... medium regular and medium italics (between normal and bold)^^J -Modifiers:^^J - \cond ...... condensed (italic is not avalable for \cond variants)^^J - \medium .... sets \mf \bf \mi \bi family -}} - -\_moddef \resetmod {\_fsetV caps={},cond={},ital=Italic \_fvars {} Bold {\_italV} {Bold\_italV} } -\_moddef \medium {\_fvars Medium Bold {Medium\_italV} {Bold\_italV} } -\_moddef \cond {\_fsetV cond=Condensed,ital={} } - -\_famvardef \mf {\_fvars Medium . . . \_rm} -\_famvardef \mi {\_fvars . . {Medium\_italV} . \_it} - - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyretermes-math]} - -\_endcode - -This font family Lido by Storm Type Foundry was designed for Lidove noviny -newspaper. It is similar to Times but it is not Times. - -The Lido font family supports 6 standard selectors - -\rm Regular \it Italics -\mf Medium-Regular \mi Medium-Italics -\bf Bold-Regular \bi Bold-Italics - -and three Condensed variants: - -\cond \rm Condensed - \mf Condensed-Medium - \bf Condensed-Bold - -The italic variants are missing when \cond is selected. This means that -\cond\it does the same as \cond\rm etc. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-lmfonts.opm b/Master/texmf-dist/tex/luatex/optex/base/f-lmfonts.opm deleted file mode 100644 index 13865890e2e..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-lmfonts.opm +++ /dev/null @@ -1,186 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Latin Modern] \LMfonts {TeX Gyre fonts based on Coputer Modern} - {\roman \sans \quotset \ttset \ttprop \ttlight \ttcond \upital - \dunhill submods:\caps \slant \nbold \bolder} {\rm \bf \it \bi \tt} {LM} - {[lmroman10-regular]} - {\_def\_fontnamegen {[\_optname{lm\_subfamV.\_currV}]:\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers (selects subfamily):^^J - \modreset .. implicit values (serif, bold extended, nocaps)^^J - \sans ...... sans serif subfamily^^J - \quotset ... quotation subfamily^^J - \ttset ..... typewriter subfamily^^J - \ttprop .... proportional typewriter-like subfamily^^J - \ttlight ... light typewriter subfamily^^J - \ttcond .... condensed typewriter subfamily^^J - \upital .... upright italic (only \rm)^^J - \dunhill ... dunhill roman subfamily (only \rm, \it)^^J% -Sub-modifiers (selects special variants of given subfamily):^^J - \caps ...... caps & small caps (available only at limited shapes)^^J - \slant ..... slanted (default in some subfamilies)^^J - \nbold ..... normal bold (extended bold is default)^^J - \bolder .... extended bold^^J -}} - -\_def\_LMregfont #1 #2 #3{% - \_edef\_tmp {\_noexpand\_regoptsizes #1 #2 \_ea\_detokenize\_ea{#3}}% - \_lowercase\_ea{\_tmp}% OTF file names are lowercase -} -\_def \_regoptFS {5 <5.5 6 <6.5 7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <15 17 <*} -\_def \_regoptFT {5 <5.5 6 <6.5 7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <*} -\_def \_regoptST {7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <*} -\_def \_regoptES {8 <8.5 9 <9.5 10 <11.1 12 <15 17 <*} -\_def \_regoptET {8 <8.5 9 <9.5 10 <11.1 12 <*} -\_def \_regoptT {10 <*} -\_def \_regoptE {8 <*} - -\_LMregfont lmrm.r LMRoman?-Regular \_regoptFS % 5-17 -\_LMregfont lmrm.bx LMRoman?-Bold \_regoptFT % 5-12 -\_LMregfont lmrm.i LMRoman?-Italic \_regoptST % 7-12 -\_LMregfont lmrm.bxi LMRoman?-BoldItalic \_regoptT % 10 -\_LMregfont lmrm.isl LMRomanSlant?-Regular \_regoptES % 8-17 -\_LMregfont lmrm.bxisl LMRomanSlant?-Bold \_regoptT % 10 -\_LMregfont lmrm.b LMRomanDemi?-Regular \_regoptT % 10 -\_LMregfont lmrm.bi LMRomanDemi?-Oblique \_regoptT % 10 - -\_LMregfont lmss.r LMSans?-Regular \_regoptES % 8-17 -\_LMregfont lmss.bx LMSans?-Bold \_regoptT % 10 -\_LMregfont lmss.i LMSans?-Oblique \_regoptES % 8-17 -\_LMregfont lmss.bxi LMSans?-BoldOblique \_regoptT % 10 -\_LMregfont lmss.b LMSansDemiCond?-Regular \_regoptT % 10 -\_LMregfont lmss.bi LMSansDemiCond?-Oblique \_regoptT % 10 - -\_LMregfont lmsq.r LMSansQuot?-Regular \_regoptE % 8 -\_LMregfont lmsq.b LMSansQuot?-Bold \_regoptE % 8 -\_LMregfont lmsq.i LMSansQuot?-Oblique \_regoptE % 8 -\_LMregfont lmsq.bi LMSansQuot?-BoldOblique \_regoptE % 8 - -\_LMregfont lmtt.r LMMono?-Regular \_regoptET % 8-12 -\_LMregfont lmtt.b LMMonoLt?-Bold \_regoptT % 10 -\_LMregfont lmtt.i LMMono?-Italic \_regoptT % 10 -\_LMregfont lmtt.bi LMMonoLt?-BoldOblique \_regoptT % 10 -\_LMregfont lmtt.isl LMMonoSlant?-Regular \_regoptT % 10 -\_optfontalias {lmtt.bisl} {lmtt.bi} - -\_LMregfont lmtp.r LMMonoPropLt?-Regular \_regoptT % 10 -\_LMregfont lmtp.bx LMMonoPropLt?-Bold \_regoptT % 10 -\_LMregfont lmtp.i LMMonoPropLt?-Oblique \_regoptT % 10 -\_LMregfont lmtp.bxi LMMonoPropLt?-BoldOblique \_regoptT % 10 -\_LMregfont lmtp.b LMMonoProp?-Regular \_regoptT % 10 -\_LMregfont lmtp.bi LMMonoProp?-Oblique \_regoptT % 10 - -\_LMregfont lmtl.r LMMonoLt?-Regular \_regoptT % 10 -\_LMregfont lmtl.i LMMonoLt?-Oblique \_regoptT % 10 - -\_LMregfont lmtc.r LMMonoLtCond?-Regular \_regoptT % 10 -\_LMregfont lmtc.i LMMonoLtCond?-Oblique \_regoptT % 10 - -\_LMregfont lmrm.rc LMRomanCaps?-Regular \_regoptT % 10 -\_LMregfont lmrm.ic LMRomanCaps?-Oblique \_regoptT % 10 -\_LMregfont lmtt.rc LMMonoCaps?-Regular \_regoptT % 10 -\_LMregfont lmtt.ic LMMonoCaps?-Oblique \_regoptT % 10 - -\_LMregfont lmmu.r LMRomanUnsl?-Regular \_regoptT % 10 -\_LMregfont lmdu.r LMRomanDunh?-Regular \_regoptT % 10 -\_LMregfont lmdu.sl LMRomanDunh?-Oblique \_regoptT % 10 - -% main modifiers (they select a subfamily) -\_moddef \resetmod {\_fsetV subfam=rm \_fvars r bx i bxi } -\_moddef \sans {\_fsetV subfam=ss \_fvars r bx i bxi } -\_moddef \quotset {\_fsetV subfam=sq \_fvars r b i bi } -\_moddef \ttset {\_fsetV subfam=tt \_fvars r b i bi } -\_moddef \ttprop {\_fsetV subfam=tp \_fvars r b i bi } -\_moddef \ttlight {\_fsetV subfam=tl \_fvars r . i . } -\_moddef \ttcond {\_fsetV subfam=tc \_fvars r . i . } -\_moddef \upital {\_fsetV subfam=mu \_fvars r . . . } -\_moddef \dunhill {\_fsetV subfam=du \_fvars r . sl . } - -% submodifiers (they select special vaiants in a subfamily) -\_moddef \nbold {\_onlyif subfam=rm,ss,tp: {\_fvars r b i bi }} -\_moddef \bolder {\_onlyif subfam=rm,ss,tp: {\_fvars r bx i bxi }} -\_moddef \slant {\_onlyif subfam=rm: {\_fvars r bx isl bxisl }% - \_onlyif subfam=tt: {\_fvars r b isl bisl }} -\_moddef \caps {\_onlyif subfam=rm,tt: {\_fvars rc . ic . }} - -\_def \_tryloadtt {\_fontdef\_tentt{\_LMfonts \_addto\_fontfeatures{-tlig;}\_ttset \_rm}} -\_private \LMfonts \ttset ; % used in \_tryloadtt - -\_initfontfamily % new font family must be initialized - -\_loadmath {[latinmodern-math]} - -\_endcode - -\secc How to write the font family file with optical sizes - -You can use \^`\_optname` macro when `\_fontnamegen` in expanded. This macro is fully -expandable and its input is `<internal-template>` and its output is a -part of the font file name `<size-dependent-template>` with respect to given -optical size. - -You can declare a collection of `<size-dependent-template>`s for one -given `<internal-template>` by the \^`\_regoptsizes` macro. -The syntax is shown for one real case: - -\begtt -\_regoptsizes lmr.r lmroman?-regular - 5 <5.5 6 <6.5 7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <15 17 <* -\endtt - -In general: - -\begtt \catcode`\<=13 -\_regoptsizes <internal-template> <general-ouput-template> <resizing-data> -\endtt - -Suppose our example above. Then `\_optname{lmr.r}` expands to -lmroman?-regular where the question mark is substituted by a number -depending on current `\_optsize`. If the `\_optsize` lies between two boundary -values (they are prefixed by \code{<} character) then the number written between -them is used. For example if $11.1 \lt `\_optsize` \le 15$ then 12 is -substituted instead question mark. The <resizing-data> virtually begins -with zero \code{<0}, but it is not explicitly written. The right part of -<resizing-data> must be terminated by \code{<*} which means "less than infinity". - -If `\_optname` gets an argument which is not registered <internal-template> -then it expands to `\_failedoptname` which typically ends with an error message -about missing font. You can redefine `\_failedoptname` macro to some -existing font if you find it useful. - -We are using a special macro `\_LMregfont` in `f-lmfonts.opm`. -It sets the file names to -lowercase and enables us to use shortcuts instead of real <resizing-data>. -There are shortcuts `\_regoptFS`, `\_regoptT`, etc. here. The collection of -`<internal-templates>` are declared, each of them covers a collection of real -file names. - -The \^`\_optfontalias` `{<new-template>} {<internal-template>}` declares -`<new-template>` with the same meaning as previously declared -`<internal-template>`. - -The `\_optname` macro can be used even if no otical sizes are provided by -a font family. Suppose that font file names are much more chaotic (because -artists are very creative people), so you need to declare more systematic -`<internal-templates>` and do an alias from each `<internal-template>` to -`<real-font-name>`. For example, you can do it as follows: - -\begtt -\def\fontalias #1 #2 {\_regoptsizes #1 ?#2 {} <*} -% alias name real font name -\fontalias crea-a-regular {Creative Font} -\fontalias crea-a-bold {Creative FontBold} -\fontalias crea-a-italic {Creative olique} -\fontalias crea-a-bolditalic {Creative Bold plus italic} -\fontalias crea-b-regular {Creative Regular subfam} -\fontalias crea-b-bold {Creative subfam bold} -\fontalias crea-b-italic {Creative-subfam Oblique} -\fontalias crea-b-bolditalic {Creative Bold subfam Oblique} -\endtt - -Another example of a font family with optical sizes is Antykwa Półtawskiego. -The optical sizes feature is deactivated by default and it is switched on by -`\osize` font modifier: - -\printdoc f-poltawski.opm diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-merriweather.opm b/Master/texmf-dist/tex/luatex/optex/base/f-merriweather.opm deleted file mode 100644 index f2972aaafd9..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-merriweather.opm +++ /dev/null @@ -1,33 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Merriweather] \Merriweather {Modern shapes, sharp serifs} - {\caps \sans \serif} {\lf \li \rm \bf \it \bi \kr \ki} {} - {[Merriweather-Regular]} - {\_def\_fontnamegen {[Merriweather\_sansV-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \sans ...... sans serif^^J - \serif ..... variants with serifs (default)^^J - \caps ...... caps & small caps^^J - \nocaps .... no \caps^^J% -Extended variants:^^J - \lf \li .... Light, LightItalic^^J - \kf \ki .... Black, BlackItalic^^J -}} - -\_moddef \resetmod {\_fsetV caps={},sans={} \_fvars Regular Bold Italic BoldItalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } -\_moddef \sans {\_fsetV sans=Sans } -\_moddef \serif {\_fsetV sans={} } - -\_famvardef \lf {\_fsetV curr=Light \_rm} -\_famvardef \li {\_fsetV curr=LightItalic \_rm} -\_famvardef \kf {\_fsetV curr=ExtraBold \_onlyif sans={}: {\_fsetV curr=Black }\_rm} -\_famvardef \ki {\_fsetV curr=ExtraBoldItalic \_onlyif sans={}: {\_fsetV curr=BlackItalic }\_rm} - -\_initfontfamily % new font family must be initialized - -\_endcode - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-pagella.opm b/Master/texmf-dist/tex/luatex/optex/base/f-pagella.opm deleted file mode 100644 index a0e4eb8e308..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-pagella.opm +++ /dev/null @@ -1,24 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Pagella] \Pagella {TeX Gyre Pagella fonts based on Palatino} - {\caps} {\rm \bf \it \bi} {Pagella} - {[texgyrepagella-regular]} - {\_def\_fontnamegen {[texgyrepagella-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyrepagella-math]} - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-poltawski.opm b/Master/texmf-dist/tex/luatex/optex/base/f-poltawski.opm deleted file mode 100644 index ffc7e8474d8..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-poltawski.opm +++ /dev/null @@ -1,34 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Poltawski] \Poltawski {Antykwa Poltawskiego, Polish traditional font family} - {\light \noexpd \expd \eexpd \cond \ccond \osize \caps} {\rm \bf \it \bi} {} - {[antpolt-regular]} - {\_def\_fontnamegen {[antpolt\_liV\_condV-\_currV]\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \light ..... light weight, \bf,\bi=semibold^^J - \noexpd .... no expanded, no condensed, designed for 10pt size (default)^^J - \eexpd ..... expanded, designed for 6pt size^^J - \expd ...... semi expanded, designed for 8pt size^^J - \cond ...... semi condensed, designed for 12pt size^^J - \ccond ..... condensed, designed for 17pt size^^J - \osize ..... auto-sitches between \ccond \cond \noexpd \expd \eexpd by size^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV li={},cond={},caps={} \_fvars regular bold italic bolditalic } -\_moddef \light {\_fsetV li=lt } -\_moddef \noexpd {\_fsetV cond={} } -\_moddef \eexpd {\_fsetV cond=expd } -\_moddef \expd {\_fsetV cond=semiexpd } -\_moddef \cond {\_fsetV cond=semicond } -\_moddef \ccond {\_fsetV cond=cond } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } -\_moddef \osize {\_def\_fontnamegen{[antpolt\_liV\_optname{x}-\_currV]:\_capsV\_fontfeatures}% - \_regoptsizes x ? expd <7 semiexpd <9 {} <11.1 semicond <15 cond <*} - -\_initfontfamily % new font family must be initialized - -\_endcode diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-roboto.opm b/Master/texmf-dist/tex/luatex/optex/base/f-roboto.opm deleted file mode 100644 index 51dfffff252..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-roboto.opm +++ /dev/null @@ -1,59 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Roboto] \Roboto {Geometric grotesk, thin variants included} - {\cond \mono \ttset \thin \light \normal \bolder \caps} - {\tf \ti \lf \li \rm \it \mf \mi \bf \bi \kf \ki} {} - {[Roboto-Regular]} - {\_def\_fontnamegen {[Roboto\_subV-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers (subfamilies):^^J - \cond ...... Condensed variants (no Thin, Medium, Black)^^J - \mono ...... Monospaced variants [Mono] (no Black)^^J - \ttset ..... Typewriter-like variants [Slab] (no Italic, no Medium, Black)^^J% -Modifiers (face weight):^^J - \thin ...... \rm, \it = Thin, \bf, \bi = Normal^^J - \light ..... \rm, \it = Light, \bf, \bi = Medium^^J - \normal .... \rm, \it = Normal, \bf, \bi = Bold^^J - \bolder .... \rm, \it = Medium, \bf, \bi = Black^^J% -Modifiers (Caps):^^J - \caps ...... Caps & small Caps^^J - \nocaps .... no \caps^^J% -Extended variants:^^J - \tf \ti .... Thin, ThinItalic^^J - \lf \li .... Light, LightItalic^^J - \mf \mi .... Medium, MediumItalic^^J - \kf \ki .... Black, BlackItalic^^J -}} - -\_moddef \resetmod {\_fsetV caps={},sub={},w=n \_fvars Regular Bold Italic BoldItalic } -\_moddef \mono {\_fsetV sub=Mono \_onlyif w=b: {\normal}} -\_moddef \cond {\_fsetV sub=Condensed \_onlyif w=b: {\normal}\_onlyif w=t: {\light}} -\_moddef \ttset {\_fsetV sub=Slab \_fvars Regular Bold . . } - -\_moddef \thin {\_onlyif sub={},Mono: {\_fsetV w=t \_fvars Thin Regular ThinItalic Italic }% - \_onlyif sub=Slab: {\_fsetV w=t \_fvars Thin Regular . . }} -\_moddef \light {\_onlyif sub={},Mono: {\_fsetV w=l \_fvars Light Medium LightItalic MediumItalic }% - \_onlyif sub=Condensed: {\_fsetV w=l \_fvars Light Regular LightItalic Italic }% - \_onlyif sub=Slab: {\_fsetV w=l \_fvars Light Bold . . }} -\_moddef \normal {\_fsetV w=n \_fvars Regular Bold Italic BoldItalic - \_onlyif sub=Slab: {\_fvars Regular Bold . . }} -\_moddef \bolder {\_onlyif sub={}: {\_fsetV w=b \_fvars Medium Black MediumItalic BlackItalic }} - -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } - -\_famvardef \tf {\_thinM \_rm} -\_famvardef \ti {\_thinM \_it} -\_famvardef \lf {\_lightM \_rm} -\_famvardef \li {\_lightM \_it} -\_famvardef \mf {\_bolderM \_rm} -\_famvardef \mi {\_bolderM \_it} -\_famvardef \kf {\_bolderM \_bf} -\_famvardef \ki {\_bolderM \_bi} -\_let\_thinM=\thin \_let\_lightM=\light \_let\_bolderM=\bolder - -\_initfontfamily % new font family must be initialized - -\_endcode - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-schola.opm b/Master/texmf-dist/tex/luatex/optex/base/f-schola.opm deleted file mode 100644 index 067a6d0ce2f..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-schola.opm +++ /dev/null @@ -1,24 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Schola] \Schola {TeX Gyre Schola fonts based on New Century} - {\caps} {\rm \bf \it \bi} {Schola} - {[texgyreschola-regular]} - {\_def\_fontnamegen {[texgyreschola-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyreschola-math]} - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-sourcepro.opm b/Master/texmf-dist/tex/luatex/optex/base/f-sourcepro.opm deleted file mode 100644 index a8e847104e0..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-sourcepro.opm +++ /dev/null @@ -1,39 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Source Pro] \Sourcepro {SourceSerifPro,SourceSansPro,SourceCodePro} - {\serif \sans \mono \light \elight \bolder \medium \caps} {\rm \bf \it \bi} {Termes} - {[SourceSerifPro-Regular]} - {\_def\_fontnamegen {[Source\_typfV Pro-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \serif ..... Serif family (default)^^J - \sans ...... Sans family^^J - \mono ...... Code family^^J - \light ..... \rm=Light, \bf=Semibold^^J - \elight .... \rm=Extra light, \bf=Regular^^J - \bolder .... \rm=Semibold, \bf=Black^^J - \medium .... \rm=Medium, \bf=Bold (only for \mono family)^^J - \caps ...... caps & small caps, only for \sans (\serif: only \rm,\bf)^^J -}} - -\_moddef \resetmod {\_fsetV typf=Serif,caps={} \_fvars Regular Bold RegularIt BoldIt } -\_moddef \serif {\_fsetV typf=Serif } -\_moddef \sans {\_fsetV typf=Sans } -\_moddef \mono {\_fsetV typf=Code } -\_moddef \light {\_fvars Light Semibold LightIt SemiboldIt } -\_moddef \elight {\_fvars ExtraLight Regular ExtraLightIt RegularIt } -\_moddef \bolder {\_fvars Semibold Black SemiboldIt BlackIt } -\_moddef \medium {\_fsetV typf=Code \_fvars Medium Bold MediumIt BoldIt } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyretermes-math]} - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-technika.opm b/Master/texmf-dist/tex/luatex/optex/base/f-technika.opm deleted file mode 100644 index 77b894e53b2..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-technika.opm +++ /dev/null @@ -1,31 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Technika] \Technika {Fonts from visual style of CTU in Prague} - {\caps \light} {\rm \bf \it \bi \stencil} {} - {[Technika-Regular]} - {\_def\_fontnamegen {[Technika\_stencilV-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \light ..... ligher variants: \rm\bf=light \bf\bi=normal^^J - \book ...... semi-ligher variants: \rm\bf=book \bf\bi=bold^^J - \caps ...... caps & small caps^^J% -Special variant:^^J - \stencil ... dashed leters (only uppercase)^^J -}} - -\_moddef \resetmod {\_fsetV stencil={},caps={} \_fvars Regular Bold Italic BoldItalic } -\_moddef \light {\_fsetV stencil={} \_fvars Light Regular LightItalic Italic } -\_moddef \book {\_fsetV stencil={} \_fvars Book Bold BookItalic BoldItalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_famvardef \stencil {\_fsetV stencil=Stencil \_fvars Bold . Bold . \rm} - - -\_initfontfamily % new font family must be initialized - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-termes.opm b/Master/texmf-dist/tex/luatex/optex/base/f-termes.opm deleted file mode 100644 index 8cd6ee6d8ab..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-termes.opm +++ /dev/null @@ -1,24 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Termes] \Termes {TeX Gyre Termes fonts based on Times} - {\caps} {\rm \bf \it \bi} {Termes} - {[texgyretermes-regular]} - {\_def\_fontnamegen {[texgyretermes-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyretermes-math]} - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/f-xcharter.opm b/Master/texmf-dist/tex/luatex/optex/base/f-xcharter.opm deleted file mode 100644 index 9ad886d47f1..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/f-xcharter.opm +++ /dev/null @@ -1,24 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [XCharter] \XCharter {An extension of Bitstream Charter} - {\caps \slant} {\rm \bf \it \bi} {} - {[XCharter-Roman]} - {\_def\_fontnamegen {[XCharter-\_currV]:script=latn;\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \caps ...... caps & small caps^^J - \slant ..... slanted variants used in \it, \bi^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars Roman Bold Italic BoldItalic } -\_moddef \slant {\_fvars Roman Bold Slanted BoldSlanted } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/fams-ini.opm b/Master/texmf-dist/tex/luatex/optex/base/fams-ini.opm deleted file mode 100644 index 3c8ded975e6..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/fams-ini.opm +++ /dev/null @@ -1,214 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% Version <2020-02-28>. Loaded in format and secondly on demand by \fontfam[catalog] - -\_famtext {Special name for printing a catalog :} - -\_faminfo [Catalogue] {Catalogue of all registered font families} {fonts-catalog} {} -\_famalias [Catalog] - -\_famtext {Computer Modern like family:} - -\_famfrom {GUST} -\_faminfo [Latin Modern] {TeX Gyre fonts based on Coputer Modern} {f-lmfonts} - { -,\nbold,\sans,\sans\nbold,\slant,\ttset,\ttset\slant,\ttset\caps,% - \ttprop,\ttprop\bolder,\quotset: {\rm\bf\it\bi} - \caps: {\rm\it} - \ttlight,\ttcond,\dunhill: {\rm\it} \upital: {\rm} } -\_famalias [LMfonts] \_famalias [Latin Modern Fonts] \_famalias [lm] - -\_famtext {TeX Gyre fonts based on Adobe 35:} - -\_faminfo [Termes] {TeX Gyre Termes fonts based on Times} {f-termes} - { -,\caps: {\rm\bf\it\bi} } -\_famalias [Times] - -\_faminfo [Heros] {TeX Gyre Heros fonts based on Helvetica} {f-heros} - { -,\caps,\cond,\caps\cond: {\rm\bf\it\bi} } -\_famalias [Helvetica] - -\_faminfo [Adventor] {TeX Gyre Adventor based on Avantgarde Book} {f-adventor} - { -,\caps: {\rm\bf\it\bi} } -\_famalias [Avantgarde Book] - -\_faminfo [Bonum] {TeX Gyre Bonum fonts based on Bookman} {f-bonum} - { -,\caps: {\rm\bf\it\bi} } -\_famalias [Bookman] - -\_faminfo [Pagella] {TeX Gyre Pagella fonts based on Palatino} {f-pagella} - { -,\caps: {\rm\bf\it\bi} } -\_famalias [Palatino] - -\_faminfo [Schola] {TeX Gyre Schola fonts based on New Century} {f-schola} - { -,\caps: {\rm\bf\it\bi} } -\_famalias [New Century] - -\_faminfo [Cursor] {TeX Gyre Cursor fonts based on Courier} {f-cursor} - { -,\caps: {\rm\bf\it\bi} } -\_famalias [Courier] - -\_famtext {Other fonts:} - -\_famfrom {Philipp H. Poll} -\_faminfo [Linux Libertine] {Free fonts typically installed on systems} {f-libertine} - { -: {\rm\bf\it\bi} \semibold: {\bf\bi} - \caps,\sans,\mono,\caps\sans: {\rm\bf\it\bi} -: {\initials\displ\keybr} } -\_famalias [Libertine] \_famalias [LinLibertine] - -\_famfrom {Philipp H. Poll, Khaled Hosny} -\_faminfo [Libertinus] {Free fonts derived from Linux Libertine} {f-libertinus} - { -: {\rm\bf\it\bi} \semibold: {\bf\bi} \sans: {\rm\bf\it} - \caps: {\rm\bf\it\bi} \caps\semibold: {\bf\bi} \caps\sans: {\rm\bf\it} - -: {\mono\initials\displ\keybr} } - -\_famfrom {Daniel Flipo} -\_faminfo [KP fonts] {KP fonts -- Johannes Kepler project} {f-kpfonts} - { -,\light,\sans,\mono, \caps, \caps\light, \caps\sans,\caps\mono,\swash: {\rm\bf\it\bi} } -\_famalias [KP] - -\_famfrom {DejaVu fonts team} -\_faminfo [DejaVu] {Derived from the Vera fonts} {f-dejavu} - { -,\cond,\sans,\sans\cond,\mono: {\rm\bf\it\bi} \light: {\rm} } - -\_famfrom {Zygfryd Gardzielewski, Janusz M. Nowacki} -\_faminfo [Antykwa Torunska] {Traditional Polish font family} {f-antt} - { -,\cond,\caps, \caps\cond: {\rm\bf\it\bi} - \medium,\cond\medium, \light, \cond\light:{\rm\it} } -\_famalias [Antt] - -\_famfrom {Adam Półtawski, Janusz M. Nowacki, Bogusław Jackowski and Piotr Strzelczyk} -\_faminfo [Poltawski] {Antykwa Poltawskiego, Polish traditional font family} {f-poltawski} - { \ccond,\cond,-,\expd,\eexpd, - \light\ccond,\light\cond,\light,\light\expd,\light\eexpd, - \caps: {\rm\bf\it\bi} } -\_famalias [Antykwa Poltawskiego] \_famalias [Poltawskiego] \_famalias [APoltawskiego] - -\_famfrom {Michael Sharpe} -\_faminfo [Baskerville] {Free variants of classical Baskerville} {f-baskerville} - { -,\caps: {\rm\bf\it\bi} } -\_famalias [BaskervilleF] - -\_famfrom {Georg Duffner, Octavio Pardo} -\_faminfo [EB Garamond] {Free variants of classical Garamond} {f-ebgaramond} - { -,\caps,\medium,\medium\caps,\semibold,\semibold\caps: {\rm\bf\it\bi} - \swash: {\it\bi} -: {\initials} } -\_famalias [Garamond] - -\_famfrom {George Douros, Benjamin Miller} -\_faminfo [Garamond Libre] {Free, derived from old style font family} {f-garamondl} - { -,\caps: {\rm\bf\it\bi} \swash: {\it\bi} } -\_famalias [GaramondL] - -\_famfrom {Pablo Impallari, Rodrigo Fuenzalida} -\_faminfo [LibreCaslon] {Libre Caslon Text, inspired by Caslon} {f-librecaslon} - { -,\onum: {\rm\bf\it\bi} } -\_famalias [Caslon] - -\_famfrom {Adobe, Paul D. Hunt} -\_faminfo [Source Pro] {Adobe SourceSerifPro, SourceSansPro, SourceCodePro} {f-sourcepro} - { \elight,\light,-,\bolder: {\rm\it} -,\bolder: {\bf\bi} - \sans\elight,\sans\light,\sans,\sans\bolder: {\rm\it} \sans,\sans\bolder: {\bf\bi} - \elight\caps,\light\caps,\caps,\bolder\caps: {\rm} \caps,\bolder\caps: {\bf} - \sans\elight\caps,\sans\light\caps,\sans\caps,\sans\bolder\caps: {\rm\it} - \sans\caps,\sans\bolder\caps: {\bf\bi} - \mono\elight,\mono\light,\mono,\mono\medium,\mono\bolder: {\rm\it} \mono,\mono\bolder: {\bf\bi} - } -\_famalias [AdobeSource] \_famalias [AdobeSourcePro] - -\_famfrom {Uni. of the Aegean} -\_faminfo [Kerkis] {Free Bookman alternative with Greek letters} {f-kerkis} - { -,\sans: {\rm\bf\it\bi} \caps: {\rm\bf} \semibold: {\bf\bi} - \sanssemi: {\rm} -:{\calli} } - -\_famfrom {Craig Rozynski} -\_faminfo [ComicNeue] {Comic Neue sans serif} {f-comicneue} - { -,\angular: {\lf\li\rm\it\bf\bi} } - -\_famfrom {Eben Sorkin} -\_faminfo [Merriweather] {Modern shapes, sharp serifs} {f-merriweather} - { -,\sans: {\lf\li\rm\it\bf\bi\kf\ki} \caps,\sans\caps: {\rm\it} } - -\_famfrom {Google, Christian Robertson} -\_faminfo [Roboto] {Geometric grotesk, thin variants included} {f-roboto} - { -: {\tf\ti\lf\li\rm\it\mf\mi\bf\bi\kf\ki} - \cond: {\lf\li\rm\it\bf\bi} - \mono: {\tf\ti\lf\li\rm\it\mf\mi\bf\bi} - \ttset: {\tf\lf\rm\bf} - \caps, \caps\cond: {\rm\bf\it\bi} \caps\ttset: {\rm\bf} - } - -\_famfrom {CTU in Prague, Roman Cernohous} -\_faminfo [Technika] {Fonts from visual style of CTU in Prague} {f-technika} - { -,\light,\book, \caps, \caps\book: {\rm\bf\it\bi} -:{\stencil} } -\_famalias [CTU Technika] - -\_famfrom {Bitstream, Andrey V. Panov, Michael Sharpe} -\_faminfo [XCharter] {An extension of Bitstream Charter} {f-xcharter} - { -,\slant,\caps,\caps\slant: {\rm\bf\it\bi} } - -\_famfrom {George Matthiopoulos, Greek Font Society} -\_faminfo [GFSBodoni] {Based on Bodoni with greek letters} {f-gfsbodoni} - { -: {\rm\bf\it\bi} \caps: {\rm} } - -\_endcode - -Once you have prepared a font family file with the name `f-<famname>.opm` and -\TeX/can see it in your filesystem then you can type \^`\fontfam``[<famname>]` and -the file is read, so the information about the font family is loaded. The name -`<famname>` must be lowercase and without spaces in the file name -`f-<famname>.opm`. On the other hand, the `\fontfam` command is more tolerant: -you can write uppercase letters and spaces here. The spaces are ignored and -uppercase letters are converted to lowercase. -For example `\fontfam [LM Fonts]` is equivalent to `\fontfam [LMfonts]` and both -commands load the file `f-lmfonts.opm`. - -You can use your font file in sense of the previous paragraph without -registering it. But problem is that such families are not listed when -`\fontfam[?]` is used and it is not included in the font catalog when -`\fontfam[catalog]` is printed. The list of families taken in the catalog and -listed on the terminal is declared in two files: `fams-ini.opm` and -`fams-local.opm`. The second file is optional. Users can create it and write to -it the information about user-defined families using the same syntax as in -existed file `fams-ini.opm`. - -The information from the user's `fams-local.opm` file has precedence. -For example `fams-ini.opm` declares aliases Times$\to$Termes etc. If you -have the original Times purchased from Adobe then you can register your -declaration of Adobe's Times family in `fams-local.opm`. When a user writes -`\fontfam[Times]` then the original Times (not Termes) is used. - -The `fams-ini.opm` and `fams-local.opm` files use the macros -`\_famifo`, `\_famalias` and `\_famtext`. See the example from -`fams-ini.tex`: - -{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip} - \def\docfile{fams-ini.opm} -\verbinput (3-28) fams-ini.opm -... etc. -} -\medskip - -The \^`\_faminfo` commad has the syntax: -\begtt \catcode`\<=13 -\_faminfo [<Family Name>] {<comments>} {<file-name>} - { <mod-plus-vars> } -\endtt -% -The `<mod-plus-vars>` data is used only when printing the catalog. It consists of -one or more pairs `<mods>: {<vars>}`. -For each pair: each modifier (separated by comma) is applied to each -variant selector in <vars> -and prepared samples are printed. The `-` character means no modifiers -should be applied. - -The \^`\_famalias` declares an alias to the last -declared family. - -The \^`\_famtext` writes a line to the terminal and the log file when all -families are listed. - -The \^`\_famfrom` saves the information about font type foundry or -manufacturer or designer or license owner. You can use it before `\_faminfo` -to print `\_famfrom` info into the catalog. -The `\_famfrom` data is applied to each following declared families until new -`\_famfrom` is given. Use `\_famfrom {}` if the information is not known. diff --git a/Master/texmf-dist/tex/luatex/optex/base/fnotes.opm b/Master/texmf-dist/tex/luatex/optex/base/fnotes.opm deleted file mode 100644 index 612b32a17d7..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/fnotes.opm +++ /dev/null @@ -1,191 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \fnote {Footnotes, marginal notes OpTeX <2020-05-26>} % loaded in format - - \_doc ----------------------------- - \`\_gfnotenum` is a counter which counts footnotes globally in the whole document.\nl - \`\_lfnotenum` is a counter which counts footnotes at each chapter from one. - It is used for local page footnote counters too.\nl - \`\_ifpgfnote` says that footnote numbers are counted on each page from - one. We need to run `\openref` in this case.\nl - \`\fnotenum` is a macro that expands to footnote number counted in declared part.\nl - \`\fnotenumchapters` declares footnotes numbered in each chapter from one - (default), \`\fnotenumglobal` declares footnotes numbered in whole - document from one and \`\fnotenumpages` declares footnotes numbered - at each page from one. - \_cod ----------------------------- - -\_newcount\_gfnotenum \_gfnotenum=0 -\_newcount\_lfnotenum - -\_newifi \_ifpgfnote -\_def \_fnotenumglobal {\_def\_fnotenum{\_the\_gfnotenum}\_pgfnotefalse} -\_def \_fnotenumchapters {\_def\_fnotenum{\_the\_lfnotenum}\_pgfnotefalse} -\_def \_fnotenumpages {\_def\_fnotenum{\_trycs{_fn:\_the\_gfnotenum}{?}}\_pgfnotetrue} -\_fnotenumchapters % default are footnotes counted from one in each chapter -\_def \fnotenum{\_fnotenum} -\_public \fnotenumglobal \fnotenumchapters \fnotenumpages ; -\_let \runningfnotes = \fnotenumglobal % for backward compatibility - - \_doc ----------------------------- - The \`\_printfnotemark` prints the footnote mark. You can re-define this - macro if you want another design of footnotes. For example - \begtt - \fnotenumpages - \def \_printfnotemark {\ifcase 0\fnotenum\or - *\or**\or***\or$^\mathbox{†}$\or$^\mathbox{‡}$\or$^\mathbox{††}$\fi} - \endtt - This code gives footnotes* and ** and*** and$^\mathbox{†}$ etc.\ - and it supposes that there are no more than 6 footnotes at one page. - - If you want to distinguish between footnote marks in the text and in the front of - the footnote itself, then you can define `\_printfnotemarkA` and `\_printfnotemarkB`. - - The \`\fnotelinks``<colorA><colorB>` implements the hyperlinked footnotes - (from text to footnote and backward). - \_cod ----------------------------- - -\_def \_printfnotemark {$^{\_fnotenum}$} % default footnote mark -\_def \_printfnotemarkA {\_printfnotemark} % footnote marks used in text -\_def \_printfnotemarkB {\_printfnotemark} % footnote marks used in front of footnotes - -\_def \_fnotelinks#1#2{% <inText color> <inFootnote color> - \_def\_printfnotemarkA{\_link[fnt:\_the\_gfnotenum]{\_localcolor#1}{\_printfnotemark}% - \_dest[fnf:\_the\_gfnotenum]}% - \_def\_printfnotemarkB{\_link[fnf:\_the\_gfnotenum]{\_localcolor#2}{\_printfnotemark}% - \_dest[fnt:\_the\_gfnotenum]}% -} -\public \fnotelinks ; - - \_doc ---------------------------- - Each footnote saves the \`\_Xfnote` (without parameter) to the `.ref` - file (if `\openref`). We can create the mapping from `<gfnotenum>` to`<pgfnotenum>` - in the macro `\_fn:<fnotenum>`. Each \^`\_Xpage` macro sets the - `\_lfnotenum` to zero. - \_cod ---------------------------- - -\_def \_Xfnote {\_incr\_lfnotenum \_incr\_gfnotenum - \_sxdef{_fn:\_the\_gfnotenum}{\_the\_lfnotenum}} - - \_doc ---------------------------- - The \`\fnote` `{<text>}` macro is simple, \`\fnotemark` and \^`\fnotetext` - does the real work. - \_cod ---------------------------- - -\_def\_fnote{\_fnotemark1\_fnotetext} -\_def\_fnotemark#1{{\_advance\_gfnotenum by#1\_advance\_lfnotenum by#1\_relax \_printfnotemarkA}} - - \_doc ---------------------------- - The \`\fnotetext` calls \^`\_opfootnote` which is equivalent to plain \TeX/ - \^`\vfootnote`. It creates new data to Insert \^`\footins`. The only - difference is that we can propagate a macro parameter into the Insert group - before the text is printed (see section \ref[output]). - This propagated macro is \`\_fnset` which sets smaller fonts. - - Note that \^`\vfootnote` and \^`\_opfootnote` don't read the text as a - parameter but during the normal horizontal mode. This is the reason why catcode - changes (for example in-line verbatim) can be used here. - \_cod ---------------------------- - -\_def\_fnotetext{\_incr\_gfnotenum \_incr\_lfnotenum % global increment - \_ifpgfnote \_openref \_fi - \_wref \_Xfnote{}% - \_ifpgfnote \_ifcsname _fn:\_the\_gfnotenum \_endcsname \_else - \_opwarning{unknown \_noexpand\fnote mark. TeX me again}% - \_incr\_unresolvedrefs - \_fi\_fi - \_opfootnote\_fnset\_printfnotemarkB -} -\_def\_fnset{\_everypar={}\_scalemain \_typoscale[800/800]} - -\_public \fnote \fnotemark \fnotetext ; - - \_doc ----------------------------- - By default \`\mnote``{<text>}` are in right margin at odd pages and they are in left - margin at even pages. The `\mnote` macro saves its position to `.ref` - file as \`\_Xmnote` without parameter. We define `\_mn:<mnotenum>` as - `\right` or `\left` when the `.ref` file is read. - The `\ifnum 0`$\le$`0#2` trick returns true if `<pageno>` has a numeric type and false - if it is a non-numeric type (Roman numeral, for example). We prefer to use - `<pageno>`, but only if it has the numeric type. We use `<gpageno>` in other cases. - \_cod ----------------------------- - -\_newcount\_mnotenum \_mnotenum=0 % global counter of mnotes -\_def \_Xmnote {\_incr\_mnotenum \_ea \_XmnoteA \_currpage} -\_def \_XmnoteA #1#2{% #1=<gpageno> #2=<pageno> - \_sxdef{_mn:\_the\_mnotenum}{\_ifodd\_numtype{#2}{#1} \_right \_else \_left \_fi}} -\_def \_numtype #1#2{\_ifnum 0<0#1 #1\_else #2\_fi} - - \_doc ----------------------------- - User can declare \`\fixmnotes``\left` or \^`\fixmnotes``\right`. It defines - \`\_mnotesfixed` as `\_left` or `\_right` which declares the placement - of all marginal notes and such declaration has a precedence. - \_cod ----------------------------- - -\_def \_fixmnotes #1{\_edef\_mnotesfixed{\_cs{_\_csstring #1}}} -\_public \fixmnotes ; - - \_doc ----------------------------- - The \`\_mnoteD``{<text>}` macro sets the position of the marginal note. - The outer box of marginal note has zero width and zero depth and it is appended - after current line using `\vadjust` primitive or it is inverted to vertical mode - as a box with `\vskip-\baselineskip` followed. - \_cod ----------------------------- - -\_def\_mnote #1#{\_ifx^#1^\_else \_mnoteC#1\_end \_fi \_mnoteD} -\_def\_mnoteC up#1\_end{\_mnoteskip=#1\_relax} % \mnote up<dimen> {<text>} syntax -\_long\_def\_mnoteD#1{\_ifvmode {\_mnoteA{#1}}\_nobreak\_vskip-\_baselineskip \_else - \_lower\_dp\_strutbox\_hbox{}\_vadjust{\_kern-\_dp\_strutbox \_mnoteA{#1}\_kern\_dp\_strutbox}% - \_fi -} -\_public \mnote ; - - \_doc ----------------------------- - The \`\mnoteskip` is a dimen value that denotes the vertical shift of marginal - note from its normal position. A positive value means shift up, negative - down. The `\mnoteskip` register is set to zero - after the marginal note is printed. The new syntax `\mnote up<dimen>{<text>}` - is possible too, but public `\mnoteskip` is kept for backward compatibility. - \_cod ----------------------------- - -\_newdimen\_mnoteskip -\_public \mnoteskip ; - - \_doc ----------------------------- - The \`\_mnoteA` macro does the real work. The \`\_lrmnote``{<left>}{<right>}` - uses only first or only second parameter depending on the left or right - marginal note. - \_cod ----------------------------- - -\_long\_def\_mnoteA #1{\_incr\_mnotenum - \_ifx\_mnotesfixed\_undefined - \_ifcsname _mn:\_the\_mnotenum \_endcsname - \_edef\_mnotesfixed{\_cs{_mn:\_the\_mnotenum}}% - \_else - \_opwarning{unknown \_noexpand\mnote side. TeX me again}\_openref - \_incr\_unresolvedrefs - \_def\_mnotesfixed{\_right}% - \_fi\_fi - \_hbox to0pt{\_wref\_Xmnote{}\_everypar={}% - \_lrmnote{\_kern-\_mnotesize \_kern-\_mnoteindent}{\_kern\_hsize \_kern\_mnoteindent}% - \_vbox to0pt{\_vss \_setbox0=\_vtop{\_hsize=\_mnotesize - \_lrmnote{\_leftskip=0pt plus 1fill \_rightskip=0pt} - {\_rightskip=0pt plus 1fil \_leftskip=0pt}% - {\_the\_everymnote\_noindent#1\_endgraf}}% - \_dp0=0pt \_box0 \_kern\_mnoteskip \_global\_mnoteskip=0pt}\_hss}% -} -\_def \_lrmnote#1#2{\_ea\_ifx\_mnotesfixed\_left #1\_else #2\_fi} - - \_doc ----------------------------- - We don't want to process `\fnote`, `\fnotemark`, `\mnote` in TOC, headlines - nor outlines. - \_cod ----------------------------- - -\_regmacro {\_def\fnote#1{}} {\_def\fnote#1{}} {\_def\fnote#1{}} -\_regmacro {\_def\fnotemark#1{}} {\_def\fnotemark#1{}} {\_def\fnotemark#1{}} -\_regmacro {\_def\mnote#1{}} {\_def\mnote#1{}} {\_def\mnote#1{}} - -\_endcode % ------------------------------------- - -2020-05-26 \mnote up<dimen> implemented -2020-03-20 released diff --git a/Master/texmf-dist/tex/luatex/optex/base/fonts-catalog.opm b/Master/texmf-dist/tex/luatex/optex/base/fonts-catalog.opm deleted file mode 100644 index 3cd02e7b277..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/fonts-catalog.opm +++ /dev/null @@ -1,136 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \_undefined {Font catalogue <2020-02-26>} % loaded on demand by \fontfam[catalog] - -\_tracinglostchars=1 % only to log file -\_initunifonts -\_begingroup - -\_istoksempty\_catalogmathsample \_iftrue \_noloadmath \_fi -\_font\_ttfixed=[LMMono10-Regular]\_relax -\_fontlet\_smalltt=\_ttfixed at7pt -\_suppressfontnotfounderror=1 - -\_lowercase\_ea{\_ea\_def\_ea\_cataloglist\_ea{\_the\_catalogonly}} -\_lowercase\_ea{\_ea\_def\_ea\_catalognolist\_ea{\_the\_catalogexclude}} - -\_ifx\_cataloglist\_empty \_else - \_addto\_cataloglist{ } - \_edef\_cataloglist{\_ea\_removespaces\_cataloglist{} } -\_fi -\_ifx\_catalognolist\_empty \_else - \_addto\_catalognolist{ } - \_edef\_catalognolist{\_ea\_removespaces\_catalognolist{} } -\_fi - -\_def\_faminfo [#1]#2#3#4{% - \_bgroup - \_lowercase{\_edef\_famname{\_ea\_removespaces #1 {} }}% - \_edef\_act{\_noexpand\_isinlist{,\_cataloglist,}{,\_famname,}}\_act - \_iftrue \def\_cataloglist{}\_fi - \_edef\_act{\_noexpand\_isinlist{,\_catalognolist,}{,\_famname,}}\_act - \_iftrue \def\_cataloglist{.}\_fi - \_ifx\_cataloglist\_empty - \_ifx^#4^\_else - \_bigskip {\_ttfixed\_string\fontfam [#1] -- (#2)\_par} - \_input #3.opm - \_ifexistfam \_nobreak\_medskip \_dosamples #4:{} - \_ifx\_mathfaminfo\_empty - \_else \_istoksempty\_catalogmathsample - \_iftrue {\_ttfixed \$Default math font\$: \_mathfaminfo \_par} - \_else Default math font (\_mathfaminfo): \_the\_catalogmathsample \_par - \_fi\_fi - \_else {\_qquad\_ttfixed ... family skipped, fonts not found in your system.} - \_fi\_fi\_fi - \_egroup -} -\_def\_dosamples #1:#2{\_ifx^#2^\_else - \_def\_printvars{#2}% - \_ea\_dosamplesA\_romannumeral-`\.#1,,% - \_ea\_dosamples\_fi -} -\_def\_dosamplesA#1,{% - \_ifx^#1^\_else - \_ifx-#1\_def\_usemodifiers{}\_else \_def\_usemodifiers{#1}\_fi - \_ea \_dosamplesB \_printvars \_relax - \_ea \_dosamplesA \_fi -} -\_def\_dosamplesB#1{% - \_ifx\_relax#1 \_else - {\_ttfixed \_detokenize\_ea{\_usemodifiers}\_detokenize{#1}\_unskip:} - {\_usemodifiers #1\_ea\_ifx\_the\_font \_nullfont - \_ttfixed ... This font isn't available in your system.% - \_else \_the\_catalogsample \_fi }\_par - \_ea \_dosamplesB \_fi -} - -\_def\_wlog#1{\_nobreak\_smallskip - \_hbox to\_hsize{\_hskip25pt - \_edef\_tmp{#1}\_replstring\_tmp{^^J}{\_par}% - \_smalltt \_noindent \_ea \string \_csname \_currfamily\_endcsname - \_vtop{\leftskip=1em \_baselineskip=9pt \_tmp \_par}\_hss - \_if\_relax\_the\_famfrom\_relax \_else from: \_the\_famfrom \_fi - } -} - -\_def\0#1{\_ifnum#1<10 0\_fi\_the#1} -\_footline={\_hfil\_ttfixed\_the\_pageno\_hfil} -\_headline={\_ttfixed Font Catalogue generated by \_OpTeX/ \_hfill \_the\_year-\0\_month-\0\_day} -\_parindent=0pt -\_ttfixed - -\_input fams-ini.opm - -\_isfile {fams-local.opm}\_iftrue \_famfrom{}\_input fams-local.opm \_fi - -\_endgroup - -\parindent=0pt - -\nonum\sec Customization of the catalog - - -You can redeclare the printed sample of each font by: - -\begtt -\catalogsample={Hello world!} -\endtt - -before \code{\\fontfam[catalog]} command is used. You can specify -\code{\\catalogmathsample} if you want to show default math fonts too, for example - -\begtt -\catalogmathsample={Gamma function is defined as - $$ - \Gamma(z) = \int_0^\infty x^{z-1} e^{-x}{\rm d}x, \quad \Re(z)>0. - $$} -\endtt -% -The \code{\\catalogmathsample} is empty by default, so math fonts are not loaded, -only the family of default math font is listed. - -\bigskip -You can restrict the families to be printed in the catalog by: - -\begtt -\catalogonly={Termes, Latin Modern, Heros} -\endtt - -If the \code{\\catalogonly} is empty (this is default value) then all families are -printed but families listed in the \code{\\catalogexclude} are excluded. For example - -\begtt -\catalogexclude={Latin Modern, XCharter} -\endtt - -The \code{\\cataogexclude} is empty by default. - -\bigskip The font families printed in the catalogue must be declared by the -\code{\\_faminfo} command in the file \code{fams-ini.opm} (declarations used -as default for \OpTeX/) or in the file \code{fams-local.opm}. The second file -does not exist by default but users can create it. The syntax rules are -described in the \code{fams-ini.opm} file. - - -\_endcode % ------------------------------------- - diff --git a/Master/texmf-dist/tex/luatex/optex/base/fonts-opmac.opm b/Master/texmf-dist/tex/luatex/optex/base/fonts-opmac.opm deleted file mode 100644 index 3ae2f0c5e1c..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/fonts-opmac.opm +++ /dev/null @@ -1,226 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \typosize {Font managing macros from OPmac <2021-03-10>} % loaded in format - - \_doc ----------------------------- - \`\typosize` `[<font-size>/<baselineskip>]` sets given parameters. - It sets text font size by the \^`\setfontsize` macro and math font sizes - by setting internal macros \^`\_sizemtext`, \^`\_sizemscript` and - \^`\_sizemsscript`. It uses common concept font sizes: 100\,\%, - 70\,\% and 50\,\%. - The \^`\_setmainvalues` sets the parameters as main values when - the `\_typosize` is called first. - \_cod ----------------------------- - -\_protected\_def \_typosize [#1/#2]{% - \_textfontsize{#1}\_mathfontsize{#1}\_setbaselineskip{#2}% - \_setmainvalues \_ignorespaces -} -\_protected\_def \_textfontsize #1{\_if$#1$\_else \_setfontsize{at#1\_ptunit}\_fi} - -\_def \_mathfontsize #1{\_if$#1$\_else - \_tmpdim=#1\_ptunit - \_edef\_sizemtext{\_ea\_ignorept \_the\_tmpdim \_ptmunit}% - \_tmpdim=0.7\_tmpdim - \_edef\_sizemscript{\_ea\_ignorept \_the\_tmpdim \_ptmunit}% - \_tmpdim=#1\_ptunit \_tmpdim=0.5\_tmpdim - \_edef\_sizemsscript{\_ea\_ignorept \_the\_tmpdim \_ptmunit}% - \_fi -} -\_public \typosize ; - - \_doc ----------------------------- - \`\typoscale` `[<font-factor>/<baseline-factor>]` scales - font size and baselineskip by given factors in respect to current values. - It calculates the \^`\typosize` parameters and runs the \^`\typosize`. - \_cod ----------------------------- - -\_protected\_def \_typoscale [#1/#2]{% - \_ifx$#1$\_def\_tmp{[/}\_else - \_settmpdim{#1}\_optsize - \_edef\_tmp{[\_ea\_ignorept\_the\_tmpdim/}\_fi - \_ifx$#2$\_edef\_tmp{\_tmp]}\_else - \_settmpdim{#2}\_baselineskip - \_edef\_tmp{\_tmp \_ea\_ignorept\_the\_tmpdim]}\_fi - \_ea\_typosize\_tmp -} -\_def\_settmpdim#1#2{% - \_tmpdim=#1pt \_divide\_tmpdim by1000 - \_tmpdim=\_ea\_ignorept \_the#2\_tmpdim -} -\_public \typoscale ; - - \_doc ----------------------------- - \`\_setbaselineskip` `{<baselineskip>}` sets new `\baselineskip` and - more values of registers which are dependent on the `<baselineskip>` - including the \^`\strutbox`. - \_cod ----------------------------- - -\_def \_setbaselineskip #1{\_if$#1$\_else - \_tmpdim=#1\_ptunit - \_baselineskip=\_tmpdim \_relax - \_bigskipamount=\_tmpdim plus.33333\_tmpdim minus.33333\_tmpdim - \_medskipamount=.5\_tmpdim plus.16666\_tmpdim minus.16666\_tmpdim - \_smallskipamount=.25\_tmpdim plus.08333\_tmpdim minus.08333\_tmpdim - \_normalbaselineskip=\_tmpdim - \_jot=.25\_tmpdim - \_maxdepth=.33333\_tmpdim - \_setbox\_strutbox=\_hbox{\_vrule height.709\_tmpdim depth.291\_tmpdim width0pt}% - \_fi -} - - \_doc ----------------------------- - \`\_setmainvalues` sets the current font size and `\baselineskip` - values to the \`\mainfosize` and \hbox{\`\mainbaselineskip`} registers - and loads fonts at given sizes. - It redefines itself as \`\_setmainvaluesL` - to set the main values only first. The \^`\_setmainvaluesL` does only - fonts loading. - \nl - \`\scalemain` returns to these values if they were set. Else they are set - to 10/12\,pt. - \nl - \`\mfontsrule` gives the rule how math fonts are loaded when \^`\typosize` - or \^`\typoscale` are used. The value of \^`\mfontsrule` can be: - \begitems - * 0: no math fonts are loaded. User must use \^`\normalmath` or \^`\boldmath` explicitly. - * 1: `\_normalmath` is run if \^`\typosize`/\^`\typoscale` are used - first or they are run at outer group level. No - `\everymath`/`\everydisplay` are set in this case. If - \^`\typosize`/\^`\typoscale` are run repeatedly in a group then `\_normalmath` is - run only when math formula occurs. This is done using - `\everymath`/`\everydisplay` and \^`\_setmathfonts`. - \^`\mfontsrule=1` is default. - * 2: `\_normalmath` is run whenever \^`\typosize`/\^`\typoscale` are used. - `\everymath`/`\everydisplay` registers are untouched. - \enditems - \_cod ----------------------------- - -\_newskip \_mainbaselineskip \_mainbaselineskip=0pt \_relax -\_newdimen \_mainfosize \_mainfosize=0pt -\_newcount \_mfontsrule \_mfontsrule=1 - -\_def\_setmainvalues {% - \_mainbaselineskip=\_baselineskip - \_mainfosize=\_optsize - \_topskip=\_mainfosize \_splittopskip=\_topskip - \_ifmmode \_else \_bf \_it \_bi \_rm \_fi % load all basic variants of the family - \_ifnum \_mfontsrule>0 \_normalmath \_fi % load math fonts first - \_let \_setmainvalues =\_setmainvaluesL -} -\_def\_setmainvaluesL {\_relax \_ifmmode \_else \_rm \_fi % load text font - \_ifcase \_mfontsrule % load math fonts - \_or \_ifnum\_currentgrouplevel=0 \_normalmath - \_else \_everymath={\_setmathfonts}\_everydisplay={\_normalmath}% - \_let\_runboldmath=\_relax \_fi - \_or \_normalmath \_fi} -\_def\_scalemain {% - \_ifdim \_mainfosize=\_zo - \_mainfosize=10pt \_mainbaselineskip=12pt - \_let \_setmainvalues=\_setmainvaluesL - \_fi - \_optsize=\_mainfosize \_baselineskip=\_mainbaselineskip -} -\_public \scalemain \mainfosize \mainbaselineskip \mfontsrule ; - - \_doc ----------------------------- - Suppose following example: - `{\typosize[13/15] Let $M$ be a subset of $R$ and $x\in M$...}` - If \^`\mfontsrule=1` then \^`\typosize` does not load math fonts - immediatelly but at the first math formula. It is done by `\everymath` - register, but the contents of this register is processed inside the math - group. If we do `\everymath={\_normalmath}` then this complicated macro - will be processed three times in your example above. We want only one - pocessing, so we do `\everymath={`\`\_setmathfonts``}` and - this macro closes math mode first, loads fonts and opens math mode again. - \_cod ----------------------------- - -\_def\_setmathfonts{$\_normalmath\_everymath{}\_everydisplay{}$} - - \_doc ----------------------------- - \`\thefontsize` `[<size>]` and \`\thefontscale` `[<factor>]` - do modification of the size of the current font. They are implemented by the - \^`\newcurrfontsize` macro. - \_cod ----------------------------- - -\_protected\_def\_thefontsize[#1]{\_if$#1$\_else - \_tmpdim=#1\_ptunit - \_newcurrfontsize{at\_tmpdim}% - \_fi - \_ignorespaces -} -\_protected\_def\_thefontscale[#1]{\_ifx$#1$\_else - \_tmpdim=#1pt \_divide\_tmpdim by1000 - \_tmpdim=\_ea\_ea\_ea\_ignorept \_pdffontsize\_font \_tmpdim - \_newcurrfontsize{at\_tmpdim}% - \_fi - \_ignorespaces -} -\_public \thefontsize \thefontscale ; - - \_doc ----------------------------- - \`\em` keeps the weight of the current variant and switches - roman $\leftrightarrow$ italic. It adds the italic correction by - the \`\_additcorr` and \`\_afteritcorr` macros. The second does not - add italic correction if the next character is dot or comma. - \_cod ----------------------------- - -\_protected\_def\_em {% - \_ea\_ifx \_the\_font \_tenit \_additcorr \_rm \_else - \_ea\_ifx \_the\_font \_tenbf \_bi\_aftergroup\_afteritcorr\_else - \_ea\_ifx \_the\_font \_tenbi \_additcorr \_bf \_else - \_it \_aftergroup\_afteritcorr\_fi\_fi\_fi -} -\_def\_additcorr{\_ifdim\_lastskip>\_zo - \_skip0=\_lastskip \_unskip\_italcorr \_hskip\_skip0 \_else\_italcorr \_fi} -\_def\_afteritcorr{\_futurelet\_next\_afteritcorrA} -\_def\_afteritcorrA{\_ifx\_next.\_else\_ifx\_next,\_else \_italcorr \_fi\_fi} -\_let\_italcorr=\/ - - \_doc ----------------------------- - The \`\boldify` macro does `\let\rm\bf`, `\let\it\bi` and - `\let\normalmath=\boldmath`. All following text will be in bold. - If should be used after \^`\typosize` or \^`\typoscale` macros.\nl - The internal \`\_runboldmath` macro runs `\_boldmath` immediatelly - if no delay of the math font loading is set by \^`\_setmainvaluesL`.\nl - The `\rm`, `\it` in math mode must keep its original meaning. - \_cod ----------------------------- - -\_protected\_def \_boldify {% - \_let \_setmainvalues=\_setmainvaluesL - \_let\it =\_bi \_let\rm =\_bf \_let\_normalmath=\_boldmath \_bf - \_runboldmath - \_ifx\_ncharrmA\_undefined \_protected\_addto\rm{\_fam0 }\_protected\_addto\it{\_fam1 }% - \_else \_protected\_def\rm {\_tryloadbf \_tenbf \_inmath{\_rmvariables \_rmdigits}}% - \_protected\_def\it {\_tryloadbi \_tenbi \_inmath{\_itvariables}}% - \_fi -} -\_def\_runboldmath{\_boldmath} - -\_public \em \boldify ; - - \_doc ----------------------------- - We need to use a font selector for default pagination. Because we don't - know what default font size will be selected by the user, we use this - \`\_rmfixed` macro. It sets the `\rm` font from the default font size - (declared by first \^`\typosize` command and redefines itself be only - the font switch for the next pages. - \_cod ----------------------------- - -\_def \_rmfixed {% used in default \footline - {\_ifdim\_mainfosize=0pt \_mainfosize=10pt \_fi - \_fontdef\_tenrm{\_setfontsize{at\mainfosize}\_resetmod\_rm}% - \_global\_let\_rmfixed=\_tenrm}% next use will be font switch only - \_rmfixed -} -\_let \rmfixed = \_tenrm % user can redefine it - -\_endcode % ------------------------------------- - -History: -2021-03-10 \boldify corrected -2021-03-09 \mfontsrule and \_setmathfonts introduced -2020-12-12 \_rmfixed fixed -2020-04-28 \boldify: removed \let\_rm=\_bf -2020-04-14 \_setmainvaluesL: \_ifmmode test added -2020-03-27 \_setmainvalues: \_splittopskip=\_topskip added diff --git a/Master/texmf-dist/tex/luatex/optex/base/fonts-preload.opm b/Master/texmf-dist/tex/luatex/optex/base/fonts-preload.opm deleted file mode 100644 index 712730436c9..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/fonts-preload.opm +++ /dev/null @@ -1,36 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \tenrm {Latin Modern fonts (EC) preloaded <2020-01-23>} % loaded in format - -% Only few text fonts are preloaded: - -\_font\_tenrm=ec-lmr10 % roman text -\_font\_tenbf=ec-lmbx10 % boldface extended -\_font\_tenit=ec-lmri10 % text italic -\_font\_tenbi=ec-lmbxi10 % bold italic -\_font\_tentt=ec-lmtt10 % typewriter -\_tenrm - -\_public \tenrm \tenbf \tenit \tenbi \tentt ; - -\_endcode %--------------------------------------------------- - -The format in lua\TeX/ can download only non-Unicode fonts. Latin Modern EC is -loaded here. These fonts are totally unusable in LuaTeX when languages with out -of ASCII or ISO-8859-1 alphabets are used (for example Czech). We load only -a few 8bit fonts here especially for simple testing the format. -But, if the user needs to do more serious work, he/she can -use `\fontfam` macro to load a selected font family of Unicode fonts. - -We have a dilemma: when the Unicode fonts cannot be preloaded in the format then the basic -font set can be loaded by `\everyjob`. But why to load a set of fonts at the -beginning of every job when it is highly likely that the user will -load something completely different. Our decision is: there is a basic 8bit -font set in the format (for testing purposes only) and the user should load -a Unicode font family at beginning of the document. - -The fonts selectors \`\tenrm`, \`\tenbf`, \`\tenit`, \`\tenbi`, \`\tentt` -are declared as `\public` here but only for backward compatibility. We don't -use them in the Font Selection System. But the protected versions of these -control sequences are used in the Font Selection System. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/fonts-resize.opm b/Master/texmf-dist/tex/luatex/optex/base/fonts-resize.opm deleted file mode 100644 index ac0064df105..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/fonts-resize.opm +++ /dev/null @@ -1,354 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \setfontsize {Font resizing macros <2020-04-17>} % preloaded in format - - \_doc ----------------------------- - The \`\setfontsize` `{<sizespec>}` saves the `<sizespec>` to the \`\_sizespec` macro. - The \`\_optsize` value is calculated from the `<sizespec>`. - If the `<sizepec>` is in the `mag<number>` format then the contents of - the `\_sizespec` macro is re-calculated to the `at<dimen>` format using - previous `\_optsize` value. - \par \goodbreak - \_cod ----------------------------- - -\_newdimen \_optsize \_optsize=10pt -\_newdimen \_defaultoptsize \_defaultoptsize=10pt -\_newdimen\_lastmagsize - -\_def\_setfontsize #1{% - \_edef\_sizespec{#1}% - \_ea \_setoptsize \_sizespec\_relax - \_reloading -} -\_def\_setoptsize {\_isnextchar a{\_setoptsizeA} - {\_isnextchar m{\_setoptsizeC}{\_setoptsizeB}}} -\_def\_setoptsizeA at#1\_relax{\_optsize=#1\_relax\_lastmagsize=\_optsize} % at<dimen> -\_def\_setoptsizeB scaled#1\_relax{\_optsize=\_defaultoptsize\_relax} % scaled<scalenum> -\_def\_setoptsizeC mag#1\_relax{% - \_ifdim\_lastmagsize>\_zo \_optsize=\_lastmagsize \_else \_optsize=\_pdffontsize\_font \_fi - \_optsize=#1\_optsize - \_lastmagsize=\_optsize - \_edef\_sizespec{at\_the\_optsize}% -} -\_public \setfontsize \defaultoptsize ; - - \_doc ----------------------------- - \`\_resizefont` `{<variant-name>}\<font switch>`, - for example `\resizefont{bf}\_tenbf` resizes the font given by the - variant. The variant `XX` have its font switch `\_tenXX`. - The \`\_doresizefont``\fontswitch` is used. It works in - TFM mode (\`\_doresizetfmfont`) or OTF mode (\^`\_doresizeunifont`). - In both modes, it does - \begtt \catcode`\<=13 - \_font \_tenXX = <fontname> \_sizespec - \endtt - The `<fontname>` is generated by the `\fontname` \TeX/ primitive where - \`\_rfontskipat` removes the `at<dimen>` part of the `\_fontname` output. - The `<fontname>` is generated differently in OTF mode, see - \^`\_doresizeunifont` macro.\nl - The \`\_whatresize` is defined as `<variant-name>`. - \_cod ----------------------------- - -\_def\_resizefont#1#2{% - \_edef\_whatresize{#1}% - \_ifx \_fontselector \_undefined \_doresizefont#2% - \_else \_ea \_doresizefont \_fontselector \_fi - \_lastmagsize=\_zo - \_slet{_tryload#1}{_relax}% -} -\_def\_doresizetfmfont#1{\_logfont{#1}% - \_ea\_font\_ea#1\_ea\_rfontskipat - \_fontname \_cs{_ten\_whatresize} \_relax\_space \_sizespec \_relax -} -\_let\_doresizefont=\_doresizetfmfont -\_def\_logfont#1{} % default is no logging of used fonts - -\_def\_rfontskipat#1{\_ifx#1"\_ea\_rfskipatX \_else\_ea\_rfskipatN\_ea#1\_fi} -\_def\_rfskipatX #1" #2\_relax{"\_whichtfm{#1}"} -\_def\_rfskipatN #1 #2\_relax{\_whichtfm{#1}} - - \_doc ----------------------------- - \`\fontdef` `<font switch>{<modifiers><variant selector>}` - opens group, runs `<modifiers><variant selector>` (i.e.\ it runs `#2` parameter). - The font switch `#1` saved in the \`\_fontselector` macro is re-declared - because the variant selector runs the \^`\_resizefont`. Now, we need to - keep the current meaning of the font switch `#1` but we must leave the - opened group. This is done by the \`\_keepmeaning` macro. - \nl - \`\fontlet` `<font switch A> <font switch B> <size spec>` does - \begtt \catcode`\<=13 - \font <font switch A> = <fontname> <sizespec> - \endtt - The `<fontname>` is extracted using the primitive command `\_fontname <font switch B>`. - \_cod ----------------------------- - -\_def \_fontdef #1#2{\_begingroup - \_ifx\_fontselector\_undefined \_def\_fontselector{#1}\_fi - \_reloading #2% - \_ea \_keepmeaning \_fontselector \_endgroup -} -\_def\_fontlet#1#2{\_ifx #2=\_ea\_fontlet \_ea#1\_else - \_ea\_font\_ea#1\_ea\_rfontskipat\_fontname#2 \_relax\_space \_fi -} -\_def \_keepmeaning #1#2{\_global\_let\_keepmeaningdata=#1% - #2\_let#1=\_keepmeaningdata \_global\_let\_keepmeaningdata=\_undefined -} -\_public \fontdef \fontlet ; - - \_doc ----------------------------- - \`\newcurrfontsize` `<size spec>` sets current font size to the `<size spec>` - It is implemented by \^`\fontlet`. - The font switch of the current font is extracted by `\_the\_font`. - We must re-create the control sequence `\_the\_font` because - its original meaning is set to \"inaccessible" by \TeX/ when `\font` - primitive is started. - \nl - \`\resizethefont` is implemented by `\newcurrfontsize` using data from - the \^`\_sizespec` macro. - \_cod ----------------------------- - -\_def \_newcurrfontsize #1{% \newcurrfontsize{at25pt} - \_edef\_tmp{\_ea\_csstring \_the\_font}% - \_ea \_fontlet \_csname \_tmp\_ea\_endcsname \_the\_font \_space #1\_relax - \_csname \_tmp\_endcsname -} -\_protected\_def \_resizethefont{\_newcurrfontsize\_sizespec} - - \_public \newcurrfontsize \resizethefont ; - - \_doc ----------------------------- - The variant selector is defined by `\protected\def\XX{\_tryloadXX \_tenXX}` - The `\_tryloadXX` can be in `\_relax` state if no font modifiers were - declared. But normally it does \^`\_resizefont``{XX}\tenXX`. This meaning - is activated by the \`\_reloading` macro. - \_cod ----------------------------- - -\_def\_reloading{\_loadf{rm}\_tenrm \_loadf{bf}\_tenbf - \_loadf{it}\_tenit \_loadf{bi}\_tenbi -} -\_def\_loadf#1#2{\_sdef{_tryload#1}{\_ifmmode \_else \_resizefont{#1}#2\_fi}} -\_def\_tryloadtt{\_resizefont{tt}\_tentt} - -\_let\_tryloadrm=\_relax -\_let\_tryloadbf=\_relax -\_let\_tryloadit=\_relax -\_let\_tryloadbi=\_relax - - \_doc ---------------------------- - The font selection system allows to use \`\currvar` - instead explicitly specified variant selector. The current variant - is extracted from `\the\font` output which could be `\_tenXX` control - sequence. Then `\currvar` expands to `\_rm` or `\_it` etc. - \_cod ---------------------------- - -\_protected \_def \_currvar{\_cs{_currvar:\_ea \_csstring \_the\_font}} -\_sdef{_currvar:_tenrm}{\_rm} -\_sdef{_currvar:_tenbf}{\_bf} -\_sdef{_currvar:_tenit}{\_it} -\_sdef{_currvar:_tenbi}{\_bi} -\_sdef{_currvar:_tentt}{\_tt} -\_public \currvar ; - - \_doc ----------------------------- - The \`\_regtfm` `<font id> <optical size data>` - saves the <optical size data> concerned to `<font id>`. - The `<optical size data>` is in the form as shown below in the code where - `\_regtfm` is used. - \nl - The \`\_wichtfm` `<fontname>` expands to the `<fontname>` or to the corrected - `<fontname>` read from the `<optical size data>`. It is used in the - \^`\_rfontskipat` macro and it is used in \^`\fontlet` macro. - It means that each `<fontname>` generated by the `\fontname` primitive in the - `\fontlet` macro is processed by the `\_whichtfm`. The real `<fontname>` or - corrected `<fontname>` (depending on the optical data does not exist or exist) - is the output of the expansion before `\font` primitive takes this output - as its parameter. - - The implementation detail: The `\_<font id>:reg` is defined as the - `<optical size data>` and all control sequences `\_<fontname>:reg` - from this data line have the same meaning because of the - \`\_reversetfm` macro. The `\_whichtfm` expands this data line and apply - \`\_dowhichtfm`. This macro selects the right result from the data line - by testing with the current `\_optsize` value. - \_cod ----------------------------- - -\_def\_regtfm #1 0 #2 *{\_ea\_def \_csname _#1:reg\_endcsname{#2 16380 \_relax}% - \_def\_tmpa{#1}\_reversetfm #2 * % -} -\_def\_reversetfm #1 #2 {% we need this data for \_setmathfamily - \_ea\_let\_csname _#1:reg\_ea\_endcsname - \_csname _\_tmpa:reg\_endcsname - \_if*#2\_else \_ea\_reversetfm \_fi -} -\_def\_whichtfm #1{% - \_ifcsname _#1:reg\_endcsname - \_ea\_ea\_ea \_dowhichtfm - \_csname _#1:reg\_ea\_endcsname - \_else - #1% - \_fi -} -\_def\_dowhichtfm #1 #2 {% - \_ifdim\_optsize<#2pt #1\_ea\_ignoretfm\_else \_ea\_dowhichtfm -\_fi -} -\_def\_ignoretfm #1\_relax{} - - \_doc ----------------------------- - Optical sizes data for preloaded 8bit Latin Modern fonts: - \_cod ----------------------------- - -\_regtfm lmr 0 ec-lmr5 5.5 ec-lmr6 6.5 ec-lmr7 7.5 ec-lmr8 8.5 ec-lmr9 9.5 - ec-lmr10 11.1 ec-lmr12 15 ec-lmr17 * -\_regtfm lmbx 0 ec-lmbx5 5.5 ec-lmbx6 6.5 ec-lmbx7 7.5 ec-lmbx8 8.5 ec-lmbx9 9.5 - ec-lmbx10 11.1 ec-lmbx12 * -\_regtfm lmri 0 ec-lmri7 7.5 ec-lmri8 8.5 ec-lmri9 9.5 ec-lmri10 11.1 ec-lmri12 * -\_regtfm lmtt 0 ec-lmtt8 8.5 ec-lmtt9 9.5 ec-lmtt10 11.1 ec-lmtt12 * - -\_setfontsize {at10pt} % default font size - -\_endcode %--------------------------------------------------- - - -\sec[setfontsize] Scaling fonts in text mode (low-level macros) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\secc The `\setfontsize` macro - -The \^`\setfontsize` `{<size spec>}` -saves the information about `<size spec>`. This information is taken into -account when a variant selector (for example `\rm`, `\bf`, `\it`, `\bi`) -or `\resizethefont` is used. The `<size spec>` can be: -\begitems -* `at<dimen>`, for example `\setfontsize{at12pt}`. It gives the desired font size directly. -* `scaled<scale factor>`, for example `\setfontsize{scaled1200}`. The font is - scaled in respect to its native size (which is typically 10\,pt). It - behaves like `\font\... scaled<number>`. -* `mag<decimal number>`, for example `\setfontsize{mag1.2}`. The font is - scaled in respect to the current size of the fonts given by the previous - \^`\setfontsize` command. -\enditems -The initialization value in \OpTeX/ is given by `\setfontsize{at10pt}`. - -The \^`\resizethefont` resizes the currently selected font to the size given by previous -\^`\setfontsize`. For example - -\begtt - The 10 pt text is here, -\setfontsize{at12pt} the 10 pt text is here unchanged... -\resizethefont and the 12 pt text is here. -\endtt -% -The \^`\setfontsize` command acts like {\em font modifier}. It means that it -saves information about fonts but does not change the font actually until -variant selector or \^`\resizethefont` is used. - -The following example demonstrates the `mag` format of \^`\setfontsize` -parameter. It is only a curious example probably not used in practical -typography. - -\begtt -\def\smaller{\setfontsize{mag.9}\resizethefont} -Text \smaller text \smaller text \smaller text. -\endtt - -\secc[fontprimitive] The `\font` primitive - -If you load a font directly by `\font` primitive and you want to -create a size-dependent selector for such font then you can use -\~`\resizethefont`: - -\begtt -\font\tencomfortaa=Comfortaa-Regular-T1 at10pt -\def\comfortaa{\tencomfortaa\resizethefont} - -\comfortaa The 10 pt text is here -\setfontsize{at12pt} -\comfortaa The 12 pt text is here -\endtt -% -The example above uses the 8\,bit `tfm` font. You can use Unicode font too, of -course. The \^`\fontfam` macro initializes the extended `\font` primitive -features for \LuaTeX/ (see section \ref[exfont]). -If you didn't use this command, you must initialize -these features by the \^`\initunifonts` command explicitly, for example: - -\begtt -\initunifonts -\font\tencyklop=[cyklop-regular] at10pt % the font cyklop-regular.otf is loaded -\def\cyklop{\tencyklop\resizethefont} - -\cyklop The 10 pt text is here -\setfontsize{at12pt} -\cyklop The 12 pt text is here -\endtt - -\secc[fontdef] The \code{\\fontdef} declarator - -You can declare `\<newfont>` by the \~`\fontdef` command. - -\begtt \catcode`\<=13 - \fontdef \<newfont> {<font modifiers> \<variant-selector>} - example: - \fontdef \bigfont {\setfontsize{at15pt}\bf} -\endtt -% -This command runs `<font modifiers> \<variant-selector>` in an internal group and sets the -resulting selected font as `\<newfont>`. - -The resulting `\<newfont>` declared by \~`\fontdef` is \"fixed font switch" -independent of \^`\setfontsize` and other font modifiers. More exactly, it is -a fixed font switch when it is used but it can depend on the current font -modifiers and font family and given font modifiers when it is declared. - -The parameter of the \~`\fontdef` macro must be exactly finished by the -variant selector. More information about font modifiers -and variant selectors are in the section~\ref[fontsystem]. - -\secc[fontlet] The \code{\\fontlet} declarator - -We have another command for scaling: \^`\fontlet` which can resize -arbitrary font given by its font switch. -This font switch was declared by the -`\font` primitive or the \~`\fontdef` macro. - -\begtt \catcode`\<=13 - \fontlet \<newfont> = \<fontswitch> <sizespec> - example: - \fontlet \bigfont = \_tenbf at15pt -\endtt - -The resulted `\bigfont` is the same as in the previous example where \~`\fontdef` -was used. The advantage of \~`\fontdef` macro will be more clear when you load -font families by `\fontfam` and you are using more font modifiers declared -in such families. - -Summary: you can declare font switches: -\begitems -* by the `\font` primitive if you know the font file, -* by the \^`\fontlet` command if you know the font switch and the size, or -* by the \~`\fontdef` command if you know the variant and modifiers. -\enditems - -\secc Optical sizes - -There are font families with more font files where almost the same font is -implemented in various design sizes: `cmr5`, `cmr6`, `cmr7`, `cmr8`, `cmr9`, -`cmr10`, `cmr12`, `cmr17` for example. This feature is called \"optical -sizes". \OpTeX/ chooses a font with an optical size closest to desired size -specified by the \^`\setfontsize`, when `at<dimen>` or `mag<coefficient>` is used. -When `scaled<scale factor>` is used then optical size is chosen using the value -of the `\defaultoptsize` register and such font is scaled by the specified -`<scale factor>`. There is `\defaultoptsize=10pt` by default. - -Font collections with optical sizes must be registered by the -\^`\_regtfm` for `tfm` files or \^`\_regoptsizes` for Unicode fonts. -\OpTeX/ registers 8bit Latin Moder fonts in the format (`fonts-resize.opm` file) -and OTF Latin Modern fonts in the `f-lmfonts.opm` file. - -\secc Implementation notes - -\_endinput - -2020-04-17 \resizethefont introduced -2020-03-17 released diff --git a/Master/texmf-dist/tex/luatex/optex/base/fonts-select.opm b/Master/texmf-dist/tex/luatex/optex/base/fonts-select.opm deleted file mode 100644 index 740b311a677..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/fonts-select.opm +++ /dev/null @@ -1,846 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \fontfam {Fonts selection system <2021-02-25>} % preloaded in format - - \_doc ----------------------------- - \`\initunifonts` macro extends \LuaTeX's font capabalities, - in order to be able to load Unicode fonts. Unfortunately, this part of - \OpTeX/ depends on `luaotfload` package, which adapts Con\TeX/t's generic - font loader for plain \TeX/ and \LaTeX. `luaotfload` uses Lua functions - from \LaTeX's `luatexbase` namespace, we provide our own replacements. - Moreover, `\initunifont` switches with - the \^`\_doresizefont` macro to OTF mode which is represented by the - macro \`\_doresizeunifont`. This mode includes - a fallback to TFM mode if \^`\_fontnamegen` is not defined. - Finally, `\initunifonts` sets itself to relax because we don't want to do - this work twice.\nl - \`\_ttunifont` is default font for `\tt` variant if - `f-lmfonts.opm` (or another font file where `\tt` is declared) is not loaded. - \_cod ----------------------------- - -\_def\_initunifonts {% - \directlua{% - require('luaotfload-main') - luaotfload.main() - }% - \_gdef\_rfskipatX ##1" ##2\_relax{"##1"}% - \_global\_let \_doresizefont=\_doresizeunifont - \_gdef\_tryloadtt {\_fontdef\_tentt{\_let\_fontnamegen=\_ttunifont\_rm}}% - \_global\_let \_initunifonts=\_relax % we need not to do this work twice - \_global\_let \initunifonts=\_relax -} -\_gdef\_doresizeunifont #1{\_logfont{#1}% - \_ifx\_fontnamegen\_undefined \_doresizetfmfont#1\_else - \_font#1={\_fontnamegen} \_sizespec \_relax \_setwsp#1\_relax - \_fi -} -\_def\_ttunifont{[lmmono10-regular]:\_fontfeatures-tlig;} - -\_public \initunifonts ; - - \_doc ----------------------------- - The \`\_famdecl` `[<Family Name>] \<Famselector> {<comment>} {<modifiers>} {<variants>} {<math>}`\nl - `{<font for testing>} {\def`\^`\_fontnamegen``{<data>}}` runs \^`\initunifonts`, then - checks if `\<Famselector>` is defined. If it is true, then closes the file by - `\endinput`. Else it defines `\<Famselector>` and saves it to the - internal `\_f:<currfamily>:main.fam` command. - The macro \`\_initfontfamily` needs it. The \`\_currfamily` is set - to the `<Famselector>` because the following \^`\moddef` commands need to - be in the right font family context. The `\_currfamily` is set to the - `<Famselector>` by the `\<Famselector>` too, because `\<Famselector>` - must set the right font family context. The font family context is given by the current - `\_currfamily` value and by the actual meaning of the \^`\_fontnamegen` macro. - The \`\_mathfaminfo` is saved for usage in the catalog. - \_cod ----------------------------- - -\_def\_famdecl [#1]#2#3#4#5#6#7#8{% - \_initunifonts \_uniaccents - \_unless\_ifcsname _f:\_csstring#2:main.fam\_endcsname - \_isfont{#7}\_iffalse - \_opwarning{Family [#1] skipped, font "#7" not found}\_ea\_ea\_ea\_endinput \_else - \_edef\_currfamily {\_csstring #2}\_def\_mathfaminfo{#6}% - \_wterm {FONT: [#1] -- \_string#2 \_detokenize{(#3)^^J mods:{#4} vars:{#5} math:{#6}}}% - \_unless \_ifx #2\_undefined - \_opwarning{\_string#2 is redefined by \_string\_famdecl\_space[#1]}\_fi - \_protected\_edef#2{\_def\_noexpand\_currfamily{\_csstring #2}\_unexpanded{#8\_resetfam}}% - \_ea \_let \_csname _f:\_currfamily:main.fam\_endcsname =#2% - \_fi - \_else \_csname _f:\_csstring#2:main.fam\_endcsname \_reloading \_rm \_ea \_endinput \_fi -} -\_def\_initfontfamily{% - \_csname _f:\_currfamily:main.fam\_endcsname \_reloading \_rm -} - - \_doc ----------------------------- - \`\_regoptsizes` `<internal-template> <left-output>?<right-output> <resizing-data>` - prepares data for using by the \`\_optname` `<internal-template>` macro. - The data are saved to the `\_oz:<internal-template>` macro. - When the `\_optname` is expanded then the data are scanned by the macro - \`\_optnameA` `<left-output>?<right-output> <mid-output> `\code{<}`<size>` - in the loop.\nl - \`\_optfontalias` `{<template A>}{<template B>}` is defined as - `\let\_oz:<templateA>=\_oz:<templateB>`. - \_cod ----------------------------- - -\_def\_regoptsizes #1 #2?#3 #4*{\_sdef{_oz:#1}{#2?#3 #4* }} -\_def\_optname #1{\_ifcsname _oz:#1\_endcsname - \_ea\_ea\_ea \_optnameA \_csname _oz:#1\_ea\_endcsname - \_else \_failedoptname{#1}\_fi -} -\_def\_failedoptname #1{optname-fails:(#1)} -\_def\_optnameA #1?#2 #3 <#4 {\_ifx*#4#1#3#2\_else - \_ifdim\_optsize<#4pt #1#3#2\_optnameC - \_else \_afterfifi \_optnameA #1?#2 \_fi\_fi -} -\_def\_optnameC #1* {\_fi\_fi} -\_def\_afterfifi #1\_fi\_fi{\_fi\_fi #1} -\_def\_optfontalias #1#2{\_slet{_oz:#1}{_oz:#2}} - - \_doc ----------------------------- - \`\_fvars` `<rm-template> <bf-template> <it-template> <bi-template>` - saves data for usage by the `\_currV` macro. If a template is only dot - then previous template is used (it can be used if the font family doesn't - dispose with all standard variants). - \nl - \`\_currV` expands to a template declared by `\_fvars` depending on the - `<variant name>`. Usable only of standard four variants. Next variants - can be declared by the \^`\famvardef` macro. - \nl - \`\_fsetV` `<key>=<value>,...,<key>=<value>` expands to - `\def\_<key>V{<value>}` in the loop. - \nl - \`\_onlyif` `<key>=<value-a>,<value-b>...,<value-z>: {<what>}` - runs <what> only if the `\_<key>V` is defined as `<value-a>` or - `<value-b>` or ... or `<value-z>`. - \nl - \`\_prepcommalist` `ab,{},cd,\_end,` expands to `ab,,cd,` (auxiliary macro - used in `\_onlyif`). - \_cod ----------------------------- - -\_def\_fvars #1 #2 #3 #4 {% - \_sdef{_fvar:rm}{#1}% - \_sdef{_fvar:bf}{#2}% - \_ifx.#2\_slet{_fvar:bf}{_fvar:rm}\_fi - \_sdef{_fvar:it}{#3}% - \_ifx.#3\_slet{_fvar:it}{_fvar:rm}\_fi - \_sdef{_fvar:bi}{#4}% - \_ifx.#4\_slet{_fvar:bi}{_fvar:it}\_fi -} -\_def\_currV{\_cs{_fvar:\_whatresize}} -\_def\_V{ } -\_def \_fsetV #1 {\_fsetVa #1,=,} -\_def \_fsetVa #1=#2,{\_isempty{#1}\_iffalse - \_ifx,#1\_else\_sdef{_#1V}{#2}\_ea\_ea\_ea\_fsetVa\_fi\_fi -} -\_def \_onlyif #1=#2:#3{% - \_edef\_act{\_noexpand\_isinlist{,\_prepcommalist #2,\_end,}{,\_cs{_#1V},}}\_act - \_iftrue #3\_fi -} -\_def\_prepcommalist#1,{\_ifx\_end#1\_empty\_else #1,\_ea\_prepcommalist\_fi} - - \_doc ----------------------------- - The \`\moddef` `\<modifier> {<data>}` simply speaking does - `\def\<modifier>{<data>}`, but we need to respect - the family context. In fact, `\protected\def\_f:<current family>:<modifier>{<data>}` is - performed and the `\<modifier>` is defined as - \`\_famdepend``\<modifier>{_f:\_currfamily:<modifier>}`. It expands to - `\_f:\_currfamily:<modifier>` value if it is defined or it prints - the warning. When the `\_currfamily` value is - changed then we can declare the same `\<modifier>` with a different meaning. - - When a user declares a prefixed variant of the `\<modifier>` then unprefixed - modifier name is used in internal macros, this is the reason why we are using - the \`\_remifirstunderscore``\_tmp` (where `\_tmp` expands to - `_<something>` or to `<something>`. The `\_remifirstunderscore` - redefines `\_tmp` in the way that it - expands only to `<something>` without the first `_`. - - \`\_setnewmeaning` `<cs-name>=\_tmpa <by-what>` does exactly `\_let <csname>=\_tmpa` - but warning is printed if <cs-name> is defined already and it is not a variant - selector or font modifier. - - \`\_addtomodlist` `<font modifier>` adds given modifier to \`\_modlist` - macro. This list is used after `\resetmod` when a new family is selected by - a family selector, see \`\_resetfam` macro. - This allows reinitializing the same current modifiers in the font context - after the family is changed. - \_cod ----------------------------- - -\_def \_moddef #1#2{\_edef\_tmp{\_csstring#1}% - \_sdef{_f:\_currfamily:\_tmp}{\_addtomodlist#1#2\_reloading}% - \_protected \_edef \_tmpa{\_noexpand\_famdepend\_noexpand#1{_f:\_noexpand\_currfamily:\_tmp}}% - \_setnewmeaning #1=\_tmpa \moddef -} -\_protected \_def\_resetmod {\_cs{_f:\_currfamily:resetmod}} % private variant of \resetmod -\_def \_resetfam{\_def\_addtomodlist##1{}\_resetmod - \_edef \_modlist{\_ea}\_modlist - \_let\_addtomodlist=\_addtomodlistb -} -\_def \_currfamily{} % default current family is empty -\_def \_modlist{} % list of currently used modifiers - -\_def \_addtomodlist#1{\_addto\_modlist#1} -\_let \_addtomodlistb=\_addtomodlist - -\_def\_famdepend#1#2{\_ifcsname#2\_endcsname \_csname#2\_ea\_endcsname \_else - \_ifx\_addtomodlist\_addtomodlistb - \_opwarning{\_string#1 is undeclared in family "\_currfamily", ignored}\_fi\_fi -} -\_def\_setnewmeaning #1=\_tmpa#2{% - \_ifx #1\_undefined \_else \_ifx #1\_tmpa \_else - \_opwarning{\_string#1 is redefined by \_string#2}% - \_fi\_fi - \_let#1=\_tmpa -} -\_public \moddef ; - - \_doc ----------------------------- - The \`\famvardef` `\<XX> {<data>}` - uses analogical trick like \^`\moddef` with - the \^`\_famdepend` macro. The auxiliary - \`\_famvardefA` `\<XX> \_ten<XX> \_tryload<XX> {<data>}` is used. - It does: - \begitems - * `\def \_tryload:<currfam>:<XX> {`\^`\fontdef`` \_ten<XX> {<data>}}` loads font `\_ten<XX>`, - * `\protected\def \<XX> {\_famdepend \<XX> {_f:<currfam>:<XX>}}`, - * `\def \_f:<currfam>:<XX> {\_tryload:<currfam>:<XX>\_ten<XX>}` keeps family dependent definition, - * `\def \_currvar:_ten<XX> {\<XX>}` in order to the \^`\currvar` macro work correctly. - \enditems - `\famvardef\tt` behaves somewhat differently: it doesn't re-define the - `\tt` macro which is defined as `\_tryloadtt \_tentt` in sections~\ref[math-preload] - and~\ref[unimath-codes]. It only re-defines the internal `\_tryloadtt` macro. - \_cod ----------------------------- - -\_def\_famvardef#1{\_edef\_tmp{\_csstring#1}% - \_ea\_famvardefA \_ea#1\_csname _ten\_tmp\_ea\_endcsname - \_csname _tryload:\_currfamily:\_tmp\_endcsname -} -\_def\_famvardefA #1#2#3#4{% #1=\XX #2=\_tenXX #3=\_tryload:currfam:XX #4=data - \_isinlist{.\_rm\_bf\_it\_bi\currvar\_currvar}#1\_iftrue - \_opwarning{\_string\famvardef: - You cannot re-declare standard variant selector \_string#1}% - \_else - \_def#3{\_fontdef#2{#4}}% - \_protected\_edef\_tmpa{\_noexpand\_famdepend\_noexpand#1{_f:\_noexpand\_currfamily:\_tmp}}% - \_ifx #1\_tt \_let\_tryloadtt=#3\_else \_setnewmeaning #1=\_tmpa \famvardef \_fi - \_sdef{_f:\_currfamily:\_tmp}{#3#2}% - \_sdef{_currvar:\_csstring#2}{#1}% - \_fi -} -\_public \famvardef ; - - \_doc ----------------------------- - The \`\fontfam` `[<Font Family>]` does: - \begitems - * Convert its parameter to lower case and without spaces, e.g.\ `<fontfamily>`. - * If the file `f-<fontfamily>.opm` exists read it and finish. - * Try to load user defined `fams-local.opm`. - * If the `<fontfamily>` is declared in `fams-local.opm` or `fams-ini.opm` - read relevant file and finish. - * Print the list of declared families. - \enditems - The `fams-local.opm` is read by the \`\_tryloadfamslocal` macro. It sets - itself to `\_relax` because we need not load this file twice. - The \`\_listfamnames` macro prints registered font families to the - terminal and to the log file. - \_cod ----------------------------- - -\_def\_fontfam[#1]{% - \_lowercase{\_edef\_famname{\_ea\_removespaces #1 {} }}% - \_isfile {f-\_famname.opm}\_iftrue \_opinput {f-\_famname.opm}% - \_else - \_tryloadfamslocal - \_edef\_famfile{\_trycs{_famf:\_famname}{}}% - \_ifx\_famfile\_empty \_listfamnames - \_else \_opinput {\_famfile.opm}% - \_fi\_fi -} -\_def\_tryloadfamslocal{% - \_isfile {fams-local.opm}\_iftrue - \_opinput {fams-local.opm}\_famfrom={}% - \_fi - \_let \_tryloadfamslocal=\_relax % need not to load fams-local.opm twice -} -\_def\_listfamnames {% - \_wterm{===== List of font families ======} - \_begingroup - \_let\_famtext=\_wterm - \_def\_faminfo [##1]##2##3##4{% - \_wterm{ \_space\_noexpand\fontfam [##1] -- ##2}% - \_let\_famalias=\_famaliasA}% - \_opinput {fams-ini.opm}% - \_isfile {fams-local.opm}\_iftrue \_opinput {fams-local.opm}\_fi - \_message{^^J}% - \_endgroup -} -\_def\_famaliasA{\_message{ \_space\_space\_space\_space -- alias:} - \_def\_famalias[##1]{\_message{[##1]}}\_famalias -} -\_public \fontfam ; - - \_doc ----------------------------- - When the `fams-ini.opm` or `fams-local.opm` files are read then we need - to save only a mapping from family names or alias names to the font family file - names. All other information is ignored in this case. But if these files - are read by the `\_listfamnames` macro or when printing a catalog then more - information is used and printed.\nl - \`\_famtext` does nothing or prints the text on the terminal. - \nl - \`\_faminfo` `[<Family Name>] {<comments>} {<file-name>} {<mod-plus-vars>}` - does\nl `\_def \_famf:<familyname> {<file-name>}` or prints information on - the terminal. - \nl - \`\_famalias` `[<Family Alias>]` does `\def \_famf:<familyalias> {<file-name>}` - where `<file-name>` is stored from the previous `\_faminfo` command. Or - prints information on the terminal. - \nl - \`\_famfrom` declares type foundry or owner or designer of the font family. - It can be used in `fams-ini.opm` or `fams-local.opm` and it is printed - in the font catalog. - \_cod ----------------------------- - -\_def\_famtext #1{} -\_def\_faminfo [#1]#2#3#4{% - \_lowercase{\_edef\_tmp{\_ea\_removespaces #1 {} }}% - \_sdef{_famf:\_tmp}{#3}% - \_def\_famfile{#3}% -} -\_def\_famalias [#1]{% - \_lowercase{\_edef\_tmpa{\_ea\_removespaces #1 {} }}% - \_sdef{_famf:\_tmpa\_ea}\_ea{\_famfile}% -} -\_newtoks\_famfrom -\_input fams-ini.opm -\_let\_famfile=\_undefined -\_famfrom={} - - \_doc ----------------------------- - When the \^`\fontfam``[catalog]` is used then the file - `fonts-catalog.opm` is read. The macro \^`\_faminfo` is redefined here - in order to print catalog samples of all declared modifiers/variant - pairs. The user can declare different samples and different behavior of - the catalog, see the end of catalog listing for more information. - The default parameters - \`\catalogsample`, \`\catalogmathsample`, \`\catalogonly` and - \`\catalogexclude` of the catalog are declared here. - \_cod ----------------------------- - -\_newtoks \_catalogsample -\_newtoks \_catalogmathsample -\_newtoks \_catalogonly -\_newtoks \_catalogexclude -\_catalogsample={ABCDabcd Qsty fi fl áéíóúüů řžč ÁÉÍÓÚ ŘŽČ 0123456789} - -\_public \catalogonly \catalogexclude \catalogsample \catalogmathsample ; - - \_doc ----------------------------- - The font features are managed in the \`\_fontfeatures` macro. - They have their implicit values saved in the \`\_defaultfontfeatures` - and the \`\setff` `{<features>}` - can add next font features. If there is the same font feature as the newly - added one then the old value is removed from the `\_fontfeatures` list. - \_cod ----------------------------- - -\_def \_defaultfontfeatures {+tlig;} -\_def \_setff #1{% - \_ifx^#1^\_let \_fontfeatures=\_defaultfontfeatures - \_else \_edef\_fontfeatures{\_fontfeatures #1;}\_fi - \_reloading -} -\_setff {} % default font features: +tlig; -\_def\_removefeature #1{% - \_isinlist\_fontfeatures{#1}\_iftrue - \_def\_tmp ##1#1##2;##3\_relax{\_def\_fontfeatures{##1##3}}% - \_ea \_tmp \_fontfeatures \_relax - \_fi -} -\_public \setff ; - - \_doc ----------------------------- - The \`\setfontcolor` and \`\setletterspace` are macros based on the - special font features provided by \LuaTeX/ (and by \XeTeX/ too but it is not - our business). The \`\setwordspace` recalulates the `\fontdimen2,3,4` - of the font using the \`\setwsp` macro which is used by the - \^`\_doresizeunifont` macro. It activates a dummy font feature `+Ws` too in - order the font is reloded by the `\font` primitive (with independent - `\fontdimen` registers). - \_cod ----------------------------- - -\_def\_savedfontcolor{} -\_def\_savedletterspace{} -\_def\_savedwsp{} - -\_def \_setfontcolor #1{\_removefeature{color=}% - \_edef\_tmp{\_calculatefontcolor{#1}}% - \_ifx\_tmp\_empty \_else \_edef\_fontfeatures{\_fontfeatures color=\_tmp;}\_fi - \_reloading -} -\_def \_setletterspace #1{\_removefeature{letterspace=}% - \_if^#1^\_else \_edef\_fontfeatures{\_fontfeatures letterspace=#1;}\_fi - \_reloading -} -\_def \_setwordspace #1{% - \_if^#1^\_def\_setwsp##1{}\_removefeature{+Ws}% - \_else \_def\_setwsp{\_setwspA{#1}}\_setff{+Ws}\_fi - \_reloading -} -\_def\_setwsp #1{} -\_def\_setwspA #1#2{\_fontdimen2#2=#1\_fontdimen2#2% - \_fontdimen3#2=#1\_fontdimen3#2\_fontdimen4#2=#1\_fontdimen4#2} - -\_def\_calculatefontcolor#1{\_trycs{_fc:#1}{#1}} % you can define more smart macro ... -\_sdef{_fc:red}{FF0000FF} \_sdef{_fc:green}{00FF00FF} \_sdef{_fc:blue}{0000FFFF} -\_sdef{_fc:yellow}{FFFF00FF} \_sdef{_fc:cyan}{00FFFFFF} \_sdef{_fc:magenta}{FF00FFFF} -\_sdef{_fc:white}{FFFFFFFF} \_sdef{_fc:grey}{00000080} \_sdef{_fc:lgrey}{00000025} -\_sdef{_fc:black}{} % ... you can declare more colors... - -\_public \setfontcolor \setletterspace \setwordspace ; - -\_endcode %--------------------------------------------------- - - -\sec[fontsystem] The Font Selection System -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -The basic principles of the Font Selection System used in \OpTeX/ -was documented in the section~\ref[fontfam]. - -\secc Terminology - -We distinguish between -\begitems -* {\em font switchers}, they are declared by the `\font` primitive or by - \^`\fontlet` or \~`\fontdef` macros, they select given font. -* {\em variant selectors}, there are four basic variant selectors - \^`\rm`, \^`\bf`, \^`\it`, \^`\bi`, there is a special selector \^`\currvar`. - More variant selectors can be declared by the \~`\famvardef` macro. - They select the font depending on the given variant and on the {\em font context} - (i.e.\ on current family and on more features given by font modifiers). - In addition, \OpTeX/ defines \~`\tt` as variant selector - independent of chosen font family. It selects typewriter-like font. -* {\em font modifiers} are declared in a family (`\cond`, `\caps`) or are - \"build in" (\^`\setfontsize``{<size spec>}`, \~`\setff{<features>}`). - They do appropriate change in the {\em font context} but do not select - the font. -* {\em family selectors} (for example `\Termes`, `\LMfonts`), - they are declared typically in the {\em font family files}. - They enable to switch between font families, they do appropriate - change in the {\em font context} but do not select - the font. -\enditems - -These commands set their values locally. When the \TeX/ group is -left then the selected font and the {\em font context} are returned back to the values -used when the group was opened. They have the following features: - -The {\em font context} is a set of macro values that will affect the -selection of real font when the variant selector is processed. It includes the -value of {\em current family}, current font size, and -more values stored by font modifiers. - -The {\em family context} is the current family value stored in the font -context. The variant selectors declared by \~`\famvardef` and -font modifiers declared by \~`\moddef` are dependent on the {\em family context}. -They can have the same names but different behavior in different families. - -The fonts registered in \OpTeX/ have their macros in the {\em font family files}, -each family is declared in one font family file with the name `f-famname.opm`. -All families are collected in `fams-ini.opm` and users can give more -declarations in the file `fams-local.opm`. - -\secc Font families, selecting fonts - -The \^`\fontfam` `[<Font Family>]` opens the relevant font family file where -the `<Font Family>` is declared. The family selector is defined here by rules -described in the section~\ref[fontfamfiles]. Font modifiers and variant -selectors may be declared here. -The loaded family is set as current and `\rm` variant selector is processed. - -The available declared font modifiers and declared variant selectors are -listed in the log file when the font family is load. Or you can print -`\fontfam[catalog]` to show available font modifiers and variant selectors. - -The font modifiers can be independent, like `\cond` and `\light`. They can -be arbitrarily combined (in arbitrary order) and if the font family disposes -of all such sub-variants then the desired font is selected (after variant -selector is used). On the other hand, there are font modifiers that negates -the previous font modifier, for example: `\cond`, `\extend`. You can reset -all modifiers to their initial value by the \^`\resetmod` command. - -You can open more font families by more \^`\fontfam` commands. Then the -general method to selecting the individual font is: - -\begtt \catcode`\<=13 -<family selector> <font modifiers> <variant selector> -\endtt -For example: -\begtt -\fontfam [Heros] % Heros family is active here, default \rm variant. -\fontfam [Termes] % Termes family is active here, default \rm variant. -{\Heros \caps \cond \it The caps+condensed italics in Heros family is here.} -The Termes roman is here. -\endtt - -There is one special command \^`\currvar` which acts as a variant selector. -It keeps the current variant and the font of such variant is -reloaded with respect to the current font context by the previously given family -selector and font modifiers. - -You can use the \^`\setfontsize` `{<sizespec>}` command in the same sense as -other font modifiers. It saves information about font size to the font -context. See section~\ref[setfontsize]. Example: - -\begtt -\rm default size \setfontsize{at14pt}\rm here is 14pt size \it italic is -in 14pt size too \bf bold too. -\endtt - -A much more comfortable way to resize fonts is using OPmac-like commands -\~`\typosize` and \~`\typoscale`. -These commands prepare the right sizes for math -fonts too and they re-calculate many internal parameters like `\baselineskip`. -See section~\ref[opmac-fonts] for more information. - - -\secc Math Fonts -%--------------- - -Most font families are connected with a preferred Unicode-math font. This -Unicode-math is activated when the font family is loaded. If you don't prefer -this and you are satisfied with 8bit math CM+AMS fonts preloaded in the -\OpTeX/ format then you can use command \^`\noloadmath` before you load a first -font family. - -If you want to use your specially selected Unicode-math font then use -\^`\loadmath` `{[<font_file>]}` or \^`\loadmath` `{<font_name>}` before first -`\fontfam` is used. - - -\secc[fontcommands] Declaring font commands -%---------------------------- - -Font commands can be font switches, variant selectors, font modifiers, -family selectors and defined font macros doing something with fonts. - -\begitems -* Font switches can be decared by `\font` primitive (see - section~\ref[fontprimitive]) or by \^`\fontlet` command (see - section~\ref[fontlet]) or by \~`\fontdef` command (see - sections~\ref[fontdef2] and~\ref[fontdef]). - When the font switches are used then they select the given font independently - of the current font context. They can be used - in `\output` routine (for example) because we need to set fixed fonts - in headers and footers. -* Variant selectors are \^`\rm`, \^`\bf`, \^`\it`, \^`\bi`, \~`\tt` and \^`\currvar`. More - variant selectors can be declared by \~`\famvardef` command. They select a - font dependent on the current font context, see section~\ref[famvardef]. - The `\tt` selector is documented in section~\ref[tt]. -* Font modifiers are \"build in" or declared by \~`\moddef` command. - They do modifications in the font context but don't select any font. - \begitems - * \"build-in" font modifiers are \^`\setfontsize` (see - section~\ref[setfontsize]), \~`\setff` (see section~\ref[setff]), - \~`\setfontcolor`, \~`\setletterspace` and \~`\setwordspace` - (see section~\ref[specff]). They are independent of font family. - * Font modifiers declared by \~`\moddef` depend on the font family and they - are typically declared in font family files, see - section~\ref[fontfamfiles]. - \enditems -* Family selectors set the given - font family as current and re-set data used by the family-dependent font - modifiers to initial values and to the currently used modifiers. - They are declared in font family files - by \~`\_famdecl` macro, see section~\ref[fontfamfiles]. -* Font macros can be defined arbitrarily by `\def` primitive by users. - See an example in section~\ref[fontmacros]. -\enditems - -All declaration commands mentioned here: `\font`, `\fontlet`, `\fontdef`, `\famvardef`, -`\moddef`, `\_famdecl` and `\def` make local assignment. - -\secc[fontdef2] The `\fontdef` declarator in detail - -The general format for \^`\fontdef` usage is -\begtt \catcode`\<=13 -\fontdef\<font switch> {\<family selector> <font modifiers> \<variant selector>} -\endtt -% -where `\<family selector>` and `<font modifiers>` are optional and -`\<variant selector>` is mandatory. - -The \^`\fontdef` does the following steps. -It pushes the current font context to a stack, it does modifications of the font -context by given `\<family selector>` and/or `<font modifiers>` and it -finds the real font by `\<variant selector>`. This font is not selected but -it is assigned to the declared `\<font switch>` (like `\font` primitive does -it). Finally, `\fontdef` pops the font context stack, so the current -font context is the same as it was before `\fontdef` is used. - -More about `\fontdef` command including examples is written in -section~\ref[fontdef]. - - -\secc[famvardef] The `\famvardef` declarator - -You can declare a new variant selector by the \^`\famvardef` macro. This -macro has similar syntax as \^`\fontdef`: -\begtt \catcode`\<=13 -\famvardef\<new variant selector> {\<family selector> <font modifiers> \<variant selector>} -\endtt -% -where `\<family selector>` and `<font modifiers>` are optional and -`\<variant selector>` is mandatory. -The `\<new variant selector>` should be used in the same sense as `\rm`, -`\bf` etc. It can be used as the final command in next -\^`\fontdef` or \^`\famvardef` declarators -too. When the `\<new variant selector>` is used in the normal text then it does -the following steps: pushes current font context to a stack, modifies font -context by declared `\<family selector>` and/or `<font modifiers>`, -runs following `\<variant selector>`. -This last one selects a real font. Then pops the font context stack. -The new font is selected but the font context has its original values. -This is main difference between `\famvardef\foo{...}` and `\def\foo{...}`. - -Moreover, the \^`\famvardef` creates the `\<new variant selector>` family dependent. -When the selector is used in another family context than it is defined then a warning is -printed on the terminal \"<var selector> is undeclared in the current family" -and nothing happens. But you can declare the same variant selector by -\^`\famvardef` macro in the context of a new family. Then the same command -may do different work depending on the current font family. - -Suppose that the selected font family provides the font modifier `\medium` for -mediate weight of fonts. Then you can declare: -\begtt -\famvardef \mf {\medium\rm} -\famvardef \mi {\medium\it} -\endtt -Now, you can use six independent variant selectors `\rm`, `\bf`, `\it`, -`\bi`, `\mf` and `\mi` in the selected font family. - -A `\<family selector>` can be written before `<font modifiers>` in the -`\famvardef` parameter. Then the `\<new variant selector>` is declared in -the current family but it can use fonts from another family represented by -the `\<family selector>`. - -When you are mixing fonts from more families then you probably run -into a problem with incompatible ex-heights. This problem can be solved using -\^`\setfontsize` and \^`\famvardef` macros: -\begtt -\fontfam[Heros] \fontfam[Termes] - -\def\exhcorr{\setfontsize{mag.88}} -\famvardef\rmsans{\Heros\exhcorr\rm} -\famvardef\itsans{\Heros\exhcorr\it} - -Compare ex-height of Termes \rmsans with Heros \rm and Termes. -\endtt - -The variant selectors (declared by \~`\famvardef`) or font -modifiers (declared by \~`\moddef`) are (typically) control sequences in user name -space (`\mf`, `\caps`). They are most often declared in font family files and -they are loaded by \^`\fontfam`. A conflict with such names in -user namespace can be here. For example: if `\mf` is defined by a user and then -`\fontfam[Roboto]` is used then `\famvardef\mf` is performed for Roboto -family and the original meaning of `\mf` is lost. But \OpTeX/ prints warning -about it. There are two cases: - -\begtt -\def\mf{Metafont} -\fontfam[Roboto] % warning: "The \mf is redefined by \famvardef" is printed - or -\fontfam[Roboto] -\def\mf{Metafont} % \mf variant selector redefined by user, we suppose that \mf - % is used only in the meaning of "Metafont" in the document. -\endtt - -\secc[tt] The `\tt` variant selector - -\^`\tt` is an additional special variant selector which is defined as \"select typewriter -font independently of the current font family". By default, the typewriter font-face -from LatinModern font family is used. - -The \^`\tt` variant selector is used in \OpTeX/ internal macros -\^`\_ttfont` (verbatim texts) and \^`\_urlfont` (printing URL's). - -You can redefine the behavior of `\tt` by \^`\famvardef`. For example: - -\begtt -\fontfam[Cursor] -\fontfam[Heros] -\fontfam[Termes] -\famvardef\tt{\Cursor\setff{-liga;-tlig}\rm} - -Test in Termes: {\tt text}. {\Heros\rm Test in Heros: {\tt text}}. -Test in URL \url{http://something.org}. -\endtt -% -You can see that `\tt` stay family independent. This is a special feature only -for `\tt` selector. New definition is used in \^`\_ttfont` and \^`\_urlfont` too. -It is recommended to use `\setff{-liga;-tlig}` to suppress the -ligatures in typewriter fonts. - -If Unicode math font is loaded then the `\tt` macro selects typewriter -font-face in math mode too. This face -is selected from used Unicode math font and it is independent of -`\famvardef\tt` declaration. - - -\secc[fontmacros] Font commands defined by `\def` - -Such font commands can be used as fonts selectors for titles, footnotes, -citations, etc. Users can define them. - -The following example shows how to define a \"title-font selector". -Titles are not only bigger but they are typically in the bold variant. When a user puts -`{\it...}` into the title text then he/she expects bold italic here, no normal -italic. You can remember the great song by John Lennon \"Let It Be" and -define: - -\begtt -\def\titlefont{\setfontsize{at14pt}\bf \let\it\bi} -... -{\titlefont Title in bold 14pt font and {\it bold 14pt italics} too} -\endtt - -\OpTeX/ defines similar internal commands \^`\_titfont`, \^`\_chapfont`, \^`\_secfont` and -\^`\_seccfont`, see section~\ref[sections]. The commands \^`\typosize` and -\^`\boldify` are used in these macros. They set the math fonts to given size too and they -are defined in section~\ref[opmac-fonts]. - - -\secc[setff] Modifying font features -%---------------------------- - -Each OTF font provides \"font features". You can list these font features -by `otfinfo -f font.otf`. For example, LinLibertine fonts provide `frac` font -feature. If it is active then fractions like 1/2 are printed in a special -form. - -The font features are part of the font context data. -The macro \^`\setff` `{<feature>}` acts like family independent font modifier and -prepares a new <feature>. You must use a variant selector in order to -reinitialize the font with the new font feature. For example -\^`\setff``{+frac}\rm` or \^`\setff``{+frac}`\^`\currvar`. You can declare a new variant -selector too: - -\begtt -\fontfam[LinLibertine] -\famvardef \fraclig {\setff{+frac}\currvar} -Compare 1/2 or 1/10 \fraclig to 1/2 or 1/10. -\endtt - -If the used font does not support the given font feature then the font is reloaded -without warning nor error, silently. The font feature is not activated. - -The `onum` font feature (old-style digits) is connected to `\caps` macro for -Caps+SmallCaps variant in \OpTeX/ font family files. So you need not -create a new modifier, just use `{\caps`\^`\currvar`` 012345}`. - - -\secc[specff] Special font modifiers -%--------------------------- - -Despite the font modifiers declared in the font family file (and dependent on -the font family), we have following font modifiers (independent of font -family): - -\begtt \catcode`\<=13 -\setfontsize{<sizespec>} % sets the font size -\setff{<font feature>} % adds the font feature -\setfontcolor{<color>} % sets font color -\setletterspace{<number>} % sets letter spacing -\setwordspace{<scaling>} % modifies word spacing -\endtt - -The \^`\setfontsize` command is described in the section \ref[setfontsize]. -The \^`\setff` command was described in previous subsection. - -\^`\setfontcolor` `{<color>}` specifies the color and the opacity of the text. -The <color> parameter should be in the hexadecimal format of four bytes -`<red><green><blue><opacity>`, for example `FF0080FF` means full red, zero -green, half blue and full opacity. You can use names `red`, `green`, `blue`, -`yellow`, `cyan`, `magenta`, `white`, `grey`, `lgrey` (without the backslash) -instead of the hexadecimal specification. -The empty parameter `<color>` means default black color. - -These colors of fonts are implemented using \LuaTeX/ internal font feature. This -is different approach than using colors in section \ref[colors]. - -\^`\setletterspace` `{<number>}` specifies the letter spacing of the font. The -`<number>` is a decimal number without unit. The unit is supposed as 1/100 of -the font size. I.e. `2.5` means 0.25 pt when the font is at 10 pt size. The -empty parameter `<number>` means no letter spacing which is the default. - -\^`\setwordspace` `{<scaling>}` scales the default interword space (defined in the -font) and its stretching and shrinking parameters by given `<scaling>` -factor. For example `\setwordspace{2.5}` multiplies interword space by 2.5. - -If you need another font transformations, you can use `\setff` -with following font features provided by Lua\TeX/: - -\begtt -\setff{embolden=1.5}\rm % font is bolder because outline has nonzero width -\setff{slant=0.2}\rm % font is slanted by a linear transformation -\setff{extend=1.2}\rm % font is extended by a linear transformation. -\setff{colr=yes}\rm % if the font includes colored characters, use colors -\setff{upper}\rm % to uppercase (lower=lowecase) conversion at font level -\endtt - -Use font transformations mentioned above and \^`\setletterspace`, -\^`\setwordspace` with care. The best setting of these values is the default -setting in every font, of course. If you really need to set a different -letter spacing then it is strongly recommended to add `\setff{-liga}` -to disable ligatures. And setting a positive letter spacing probably -needs to scale interword spacing too. - -All mentioned font modifiers (except for `\setfontsize`) work only -with Unicode fonts loaded by \^`\fontfam`. - -\secc[fontfamfiles] How to create the font family file -%------------------------------------------------------ - -\printdoctail f-heros.opm - -\printdoctail f-lmfonts.opm - -\secc How to register the font family in the Font Selection System -%--------------------------------------------------------------- - -\printdoctail fams-ini.opm - -\secc[exfont] Notices about extension of `\font` primitive -%--------------------------------------------------------- - -Unicode fonts are loaded by extended `\font` primitive. This extension is -not activated in \OpTeX/ by default, \^`\initunifonts` macro activates it. -You need not use \^`\initunifonts` explicitly if \^`\fontfam` macro is -used because \^`\fontfam` runs it internally. - -The \^`\initunifonts` loads the Lua code from the Luaotfload package which -implements the `\font` primitive extension. See its -documentation `luaotfload-latex.pdf` for information about -all possibilities of extended `\font` primitive. - -The \OpTeX/ format is initialized by `luatex` engine by default but -you can initialize it by `luahbtex` engine too. Then the harfbuzz library is -ready to use for font rendering as an alternative to build-in font renderer -from Luaotfload. The harfbuzz library gives more features for rendering -Indic and Arabic scripts. But it is not used as default, you need to specify -`mode=harf` in the fontfeatures field when `\font` is used. Moreover, when -`mode=harf` is used, then you must specify `script` too. For example - -\begtt -\font\devafont=[NotoSansDevanagari-Regular]:mode=harf;script=dev2 -\endtt -% -If the `luahbtex` engine is not used then `mode=harf` is ignored. See -Luaotfload documentation for more information. - -\endinput - -2021-02-25 \_ttunifont introduced -2021-01-27 lua hack (print function) removed because luaotfload 3.17 removes bug. -2020-12-12 \_modlist added, doc improved -2020-04-18 \_tryloadfamslocal introduced - \_fontdecl -> \_famdecl with different concept -2020-03-18 released diff --git a/Master/texmf-dist/tex/luatex/optex/base/graphics.opm b/Master/texmf-dist/tex/luatex/optex/base/graphics.opm deleted file mode 100644 index afff1c12843..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/graphics.opm +++ /dev/null @@ -1,445 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \inspic {Graphics <2020-04-12>} % preloaded in format - - \_doc ----------------------------- - \`\inspic` accepts old syntax `\inspic <filename><space>` - or new syntax `\inspic{<filename>}`. So, we need to define - two auxiliary macros \`\_inspicA` and \`\_inspicB`. - - You can include more `\pdfximage` parameters (like `page<number>`) - in the \`\_picparams` macro. - - All `\inspic` macros are surrounded in `\hbox` in order user can - write `\moveright\inspic ...` or something similar. - \_cod ----------------------------- - -\_def\_inspic{\_hbox\_bgroup\_isnextchar\_bgroup\_inspicB\_inspicA} -\_def\_inspicA #1 {\_inspicB {#1}} -\_def\_inspicB #1{% - \_pdfximage \_ifdim\_picwidth=\_zo \_else width\_picwidth\_fi - \_ifdim\_picheight=\_zo \_else height\_picheight\_fi - \_picparams {\_the\_picdir#1}% - \_pdfrefximage\_pdflastximage\_egroup} - -\_def\_picparams{} - -\_public \inspic ; - - \_doc ----------------------------- - Inkscape can save a picture to `*.pdf` file and labels for the picture - to `*.pdf_tex` file. The second file is in \LaTeX/ format (unfortunately) - and it is intended to read immediately after `*.pdf` is included - in order to place labels of this picture in the same font as the document is printed. - We need to read this \LaTeX/ file by plain \TeX/ macros when \`\inkinspic` is used. - These macros are stored in the \`\_inkdefs` tokens list and it is used - locally in the group. The solution is borrowed from OPmac trick 0032. - \_cod ----------------------------- - -\_def\_inkinspic{\_hbox\_bgroup\_isnextchar\_bgroup\_inkinspicB\_inkinspicA} -\_def\_inkinspicA #1 {\_inkinspicB {#1}} -\_def\_inkinspicB #1{% - \_ifdim\_picwidth=0pt \_setbox0=\_hbox{\_inspic{#1}}\_picwidth=\_wd0 \_fi - \_the\_inkdefs - \_opinput {\_the\_picdir #1_tex}% file with labels - \_egroup} - -\_newtoks\_inkdefs \_inkdefs={% - \_def\makeatletter#1\makeatother{}% - \_def\includegraphics[#1]#2{\_inkscanpage#1,page=,\_end \_inspic{#2}\_hss}% - \_def\_inkscanpage#1page=#2,#3\_end{\_ifx,#2,\_else\_def\_picparams{page#2}\_fi}% - \_def\put(#1,#2)#3{\_nointerlineskip\_vbox to\_zo{\_vss\_hbox to\_zo{\_kern#1\_picwidth - \_pdfsave\_hbox to\_zo{#3}\_pdfrestore\_hss}\_kern#2\_picwidth}}% - \_def\begin#1{\_csname _begin#1\_endcsname}% - \_def\_beginpicture(#1,#2){\_vbox\_bgroup - \_hbox to\_picwidth{}\_kern#2\_picwidth \_def\end##1{\_egroup}}% - \_def\_begintabular[#1]#2#3\end#4{% - \_vtop{\_def\\{\_cr}\_tabiteml{}\_tabitemr{}\_table{#2}{#3}}}% - \_def\color[#1]#2{\_scancolor #2,}% - \_def\_scancolor#1,#2,#3,{\_pdfliteral{#1 #2 #3 rg}}% - \_def\makebox(#1)[#2]#3{\_hbox to\_zo{\_csname _mbx:#2\_endcsname{#3}}}% - \_sdef{_mbx:lb}#1{#1\_hss}\_sdef{_mbx:rb}#1{\_hss#1}\_sdef{_mbx:b}#1{\_hss#1\_hss}% - \_sdef{_mbx:lt}#1{#1\_hss}\_sdef{_mbx:rt}#1{\_hss#1}\_sdef{_mbx:t}#1{\_hss#1\_hss}% - \_def\rotatebox#1#2{\_pdfrotate{#1}#2}% - \_def\lineheight#1{}% - \_def\setlength#1#2{}% -} -\_public \inkinspic ; - - \_doc ---------------------------- - \`\pdfscale``{<x-scale>}{<y-scale>}` and \`\pdfrotate``{<degrees>}` - macros are implemented by `\pdfsetmatrix` - primitive. We need to know the values of sin, cos function in - the `\pdfrotate`. We use Lua code for this. - \_cod ---------------------------- - -\_def\_pdfscale#1#2{\_pdfsetmatrix{#1 0 0 #2}} - -\_def\_gonfunc#1#2{% - \_directlua{tex.print(string.format('\_pcent.4f',math.#1(3.14159265*(#2)/180)))}% -} -\_def\_sin{\_gonfunc{sin}} -\_def\_cos{\_gonfunc{cos}} - -\_def\_pdfrotate#1{\_pdfsetmatrix{\_cos{#1} \_sin{#1} \_sin{(#1)-180} \_cos{#1}}} - -\_public \pdfscale \pdfrotate ; - - \_doc ----------------------------- - The \`\transformbox``{<transformation>}{<text>}` - is copied from OPmac trick 0046.\nl - The \`\rotbox``{<degrees>}{<text>}` is a combination of - `\rotsimple` from OPmac trick 0101 and the `\transformbox`. - Note, that `\rotbox{-90}` puts the rotated text to the height of the outer - box (depth is zero) because code from `\rotsimple` is processed. - But `\rotbox{-90.0}` puts the rotated text to - the depth of the outer box (height is zero) because `\transformbox` is - processed. - \_cod ----------------------------- - -\_def\_multiplyMxV #1 #2 #3 #4 {% matrix * (vvalX, vvalY) - \_tmpdim = #1\_vvalX \_advance\_tmpdim by #3\_vvalY - \_vvalY = #4\_vvalY \_advance\_vvalY by #2\_vvalX - \_vvalX = \_tmpdim -} -\_def\_multiplyMxM #1 #2 #3 #4 {% currmatrix := currmatrix * matrix - \_vvalX=#1pt \_vvalY=#2pt \_ea\_multiplyMxV \_currmatrix - \_edef\_tmpb{\_ea\_ignorept\_the\_vvalX\_space \_ea\_ignorept\_the\_vvalY}% - \_vvalX=#3pt \_vvalY=#4pt \_ea\_multiplyMxV \_currmatrix - \_edef\_currmatrix{\_tmpb\_space - \_ea\_ignorept\_the\_vvalX\_space \_ea\_ignorept\_the\_vvalY\_space}% -} -\_def\_transformbox#1#2{\_hbox{\_setbox0=\_hbox{{#2}}% - \_dimendef\_vvalX 11 \_dimendef\_vvalY 12 % we use these variables - \_dimendef\_newHt 13 \_dimendef\_newDp 14 % only in this group - \_dimendef\_newLt 15 \_dimendef\_newRt 16 - \_preptransform{#1}% - \_kern-\_newLt \_vrule height\_newHt depth\_newDp width\_zo - \_setbox0=\_hbox{\_box0}\_ht0=\_zo \_dp0=\_zo - \_pdfsave#1\_rlap{\_box0}\_pdfrestore \_kern\_newRt}% -} -\_def\_preptransform #1{\_def\_currmatrix{1 0 0 1 }% - \_def\_pdfsetmatrix##1{\_edef\_tmpb{##1 }\_ea\_multiplyMxM \_tmpb\_unskip}% - \_let\pdfsetmatrix=\_pdfsetmatrix #1% - \_setnewHtDp 0pt \_ht0 \_setnewHtDp 0pt -\_dp0 - \_setnewHtDp \_wd0 \_ht0 \_setnewHtDp \_wd0 -\_dp0 - \_protected\_def \_pdfsetmatrix {\_pdfextension setmatrix}% - \_let\pdfsetmatrix=\_pdfsetmatrix -} -\_def\_setnewHtDp #1 #2 {% - \_vvalX=#1\_relax \_vvalY=#2\_relax \_ea\_multiplyMxV \_currmatrix - \_ifdim\_vvalX<\_newLt \_newLt=\_vvalX \_fi \_ifdim\_vvalX>\_newRt \_newRt=\_vvalX \_fi - \_ifdim\_vvalY>\_newHt \_newHt=\_vvalY \_fi \_ifdim-\_vvalY>\_newDp \_newDp=-\_vvalY \_fi -} - -\_def\_rotbox#1#2{% - \_isequal{90}{#1}\_iftrue \_rotboxA{#1}{\_kern\_ht0 \_tmpdim=\_dp0}{\_vfill}{#2}% - \_else \_isequal{-90}{#1}\_iftrue \_rotboxA{#1}{\_kern\_dp0 \_tmpdim=\_ht0}{}{#2}% - \_else \_transformbox{\_pdfrotate{#1}}{#2}% - \_fi \_fi -} -\_def\_rotboxA #1#2#3#4{\_hbox{\_setbox0=\_hbox{{#4}}#2% - \_vbox to\_wd0{#3\_wd0=\_zo \_dp0=\_zo \_ht0=\_zo - \_pdfsave\_pdfrotate{#1}\_box0\_pdfrestore\vfil}% - \_kern\_tmpdim -}} -\_public \transformbox \rotbox ; - - \_doc --------------------------- - \`\_scantwodimens` scans two objects with the syntactic rule `<dimen>` - and returns `{<number>}{<number>}` in `sp` unit. - \nl - \`\puttext` `<right> <up>{<text>}` puts the `<text>` to desired place: - From current point moves <down> and <right>, puts the <text> and returns - back. The current point is unchanged after this macro ends. - \nl - \`\putpic` `<right> <up> <width> <height> {<image-file>}` - does `\puttext` with the image scaled to desired <width> and <height>. - If <with> or <height> is zero, natural dimension is used. - The \`\nospec` is a shortcut to such a natural dimension. - \nl - \`\backgroundpic``{<image-file>}` puts the image to - the background of each page. It is used in the \~`\slides` style, for example. - \_cod --------------------------- - -\_def\_scantwodimens{% - \_directlua{tex.print(string.format('{\_pcent d}{\_pcent d}', - token.scan_dimen(),token.scan_dimen()))}% -} - -\_def\_puttext{\_ea\_ea\_ea\_puttextA\_scantwodimens} -\_def\_puttextA#1#2#3{{\_setbox0=\_hbox{{#3}}\_dimen1=#1sp \_dimen2=#2sp \_puttextB}} -\_def\_puttextB{% - \_ifvmode - \_ifdim\_prevdepth>\_zo \_vskip-\_prevdepth \_relax \_fi - \_nointerlineskip - \_fi - \_wd0=\_zo \_ht0=\_zo \_dp0=\_zo - \_vbox to\_zo{\_kern-\_dimen2 \_hbox to\_zo{\_kern\_dimen1 \_box0\_hss}\_vss}} - -\_def\_putpic{\_ea\_ea\_ea\_putpicA\_scantwodimens} -\_def\_putpicA#1#2{\_dimen1=#1sp \_dimen2=#2sp \_ea\_ea\_ea\_putpicB\_scantwodimens} -\_def\_putpicB#1#2#3{{\_setbox0=\_hbox{\_picwidth=#1sp \_picheight=#2sp \_inspic{#3}}\_puttextB}} - -\_newbox\_bgbox -\_def\_backgroundpic#1{% - \_setbox\_bgbox=\_hbox{\_picwidth=\_pdfpagewidth \_picheight=\_pdfpageheight \_inspic{#1}}% - \_pgbackground={\_copy\_bgbox} -} -\_def\nospec{0pt} -\_public \puttext \putpic \backgroundpic ; - - \_doc ----------------------------- - \`\_circle``{<x>}{<y>}` creates an ellipse with `<x>` axis and `<y>` axis. - The origin is in the center. - \nl - \`\_oval``{<x>}{<y>}{<roundness>}` creates an oval with `<x>`, `<y>` size and with - the given `<roundness>`. The real size is bigger by 2`<roundness>`. The - origin is at the left bottom corner. - \nl - \`\_mv``{<x>}{<y>}{<curve>}` moves current point to `<x>`, `<y>`, creates the - `<curve>` and returns the current point back. - All these macros are fully expandable and they can be used in the - `\pdfliteral` argument. - \_cod ----------------------------- - -\def\_circle#1#2{\_expr{.5*(#1)} 0 m - \_expr{.5*(#1)} \_expr{.276*(#2)} \_expr{.276*(#1)} \_expr{.5*(#2)} 0 \_expr{.5*(#2)} c - \_expr{-.276*(#1)} \_expr{.5*(#2)} \_expr{-.5*(#1)} \_expr{.276*(#2)} \_expr{-.5*(#1)} 0 c - \_expr{-.5*(#1)} \_expr{-.276*(#2)} \_expr{-.276*(#1)} \_expr{-.5*(#2)} 0 \_expr{-.5*(#2)} c - \_expr{.276*(#1)} \_expr{-.5*(#2)} \_expr{.5*(#1)} \_expr{-.276*(#2)} \_expr{.5*(#1)} 0 c h} - -\def\_oval#1#2#3{0 \_expr{-(#3)} m \_expr{#1} \_expr{-(#3)} l - \_expr{(#1)+.552*(#3)} \_expr{-(#3)} \_expr{(#1)+(#3)} \_expr{-.552*(#3)} - \_expr{(#1)+(#3)} 0 c - \_expr{(#1)+(#3)} \_expr{#2} l - \_expr{(#1)+(#3)} \_expr{(#2)+.552*(#3)} \_expr{(#1)+.552*(#3)} \_expr{(#2)+(#3)} - \_expr{#1} \_expr{(#2)+(#3)} c - 0 \_expr{(#2)+(#3)} l - \_expr{-.552*(#3)} \_expr{(#2)+(#3)} \_expr{-(#3)} \_expr{(#2)+.552*(#3)} - \_expr{-(#3)} \_expr{#2} c - \_expr{-(#3)} 0 l - \_expr{-(#3)} \_expr{-.552*(#3)} \_expr{-.552*(#3)} \_expr{-(#3)} 0 \_expr{-(#3)} c h} - -\def\_mv#1#2#3{1 0 0 1 \_expr{#1} \_expr{#2} cm #3 1 0 0 1 \_expr{-(#1)} \_expr{-(#2)} cm} - - \_doc ----------------------------- - The \`\inoval``{<text>}` is an example of \^`\_oval` usage.\nl - The \`\incircle``{<text>}` is an example of \^`\_circle` usage.\nl - The \`\ratio`, \`\lwidth`, \`\fcolor`, \`\lcolor`, \`\shadow` and \`\overlapmargins` - are parameters, they can be set by user in optional brackets `[...]`. - For example `\fcolor=\Red` does `\_let\_fcolorvalue=\Red` and it means - filling color.\nl - The \`\_setflcolor` uses the \^`\_fillstroke` macro to separate filling - color and drawing color. - \_cod ----------------------------- - -\_newdimen \_lwidth -\_def\_fcolor{\_let\_fcolorvalue} -\_def\_lcolor{\_let\_lcolorvalue} -\_def\_shadow{\_let\_shadowvalue} -\_def\_overlapmargins{\_let\_overlapmarginsvalue} -\_def\_ratio{\_isnextchar ={\_ratioA}{\_ratioA=}} -\_def\_ratioA =#1 {\_def\_ratiovalue{#1}} -\_def\_touppervalue#1{\_ifx#1n\_let#1=N\_fi} - -\_def\_setflcolors#1{% use only in a group - \_def\_setcolor##1{##1}% - \_def\_fillstroke##1##2{##1}% - \_edef#1{\_fcolorvalue}% - \_def\_fillstroke##1##2{##2}% - \_edef#1{#1\_space\_lcolorvalue\_space}% -} -\_optdef\_inoval[]{\_vbox\_bgroup - \_roundness=2pt \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp - \_shadow=N \_overlapmargins=N \_hhkern=0pt \_vvkern=0pt - \_the\_ovalparams \_relax \_the\_opt \_relax - \_touppervalue\_overlapmarginsvalue \_touppervalue\_shadowvalue - \_ifx\_overlapmarginsvalue N% - \_advance\_hsize by-2\_hhkern \_advance\_hsize by-2\_roundness \_fi - \_setbox0=\_hbox\_bgroup\_bgroup \_aftergroup\_inovalA \_kern\_hhkern \_let\_next=% -} -\_def\_inovalA{\_isnextchar\_colorstackpop\_inovalB\_inovalC} -\_def\_inovalB#1{#1\_isnextchar\_colorstackpop\_inovalB\_inovalC} -\_def\_inovalC{\_egroup % of \setbox0=\hbox\bgroup - \_ifdim\_vvkern=\_zo \_else \_ht0=\_dimexpr\_ht0+\_vvkern \_relax - \_dp0=\_dimexpr\_dp0+\_vvkern \_relax \_fi - \_ifdim\_hhkern=\_zo \_else \_wd0=\_dimexpr\_wd0+\_hhkern \_relax \_fi - \_ifx\_overlapmarginsvalue N\_dimen0=\_roundness \_dimen1=\_roundness - \_else \_dimen0=-\_hhkern \_dimen1=-\_vvkern \_fi - \_setflcolors\_tmp - \_hbox{\_kern\_dimen0 - \_vbox to\_zo{\_kern\_dp0 - \_ifx\_shadowvalue N\_else - \_edef\_tmpb{{\_bp{\_wd0+\_lwidth}}{\_bp{\_ht0+\_dp0+\_lwidth}}{\_bp{\_roundness}}}% - \_doshadow\_oval - \_fi - \_pdfliteral{q \_bp{\_lwidth} w \_tmp - \_oval{\_bp{\_wd0}}{\_bp{\_ht0+\_dp0}}{\_bp{\_roundness}} B Q}\_vss}% - \_ht0=\_dimexpr\_ht0+\_dimen1 \_relax \_dp0=\_dimexpr\_dp0+\_dimen1 \_relax - \_box0 - \_kern\_dimen0}% - \_egroup % of \vbox\bgroup -} -\_optdef\_incircle[]{\_vbox\_bgroup - \_ratio=1 \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp - \_shadow=N \_overlapmargins=N \_hhkern=3pt \_vvkern=3pt - \_ea\_the \_ea\_circleparams \_space \_relax - \_ea\_the \_ea\_opt \_space \_relax - \_touppervalue\_overlapmarginsvalue \_touppervalue\_shadowvalue - \_setbox0=\_hbox\_bgroup\_bgroup \_aftergroup\_incircleA \_kern\_hhkern \_let\_next=% -} -\_def\_incircleA {\_isnextchar\_colorstackpop\_incircleB\_incircleC} -\_def\_incircleB #1{#1\_isnextchar\_colorstackpop\_incircleB\_incircleC} -\_def\_incircleC {\_egroup % of \setbox0=\hbox\bgroup - \_wd0=\_dimexpr \_wd0+\_hhkern \_relax - \_ht0=\_dimexpr \_ht0+\_vvkern \_relax \_dp0=\_dimexpr \_dp0+\_vvkern \_relax - \_ifdim \_ratiovalue\_dimexpr \_ht0+\_dp0 > \_wd0 - \_dimen3=\_dimexpr \_ht0+\_dp0 \_relax \_dimen2=\_ratiovalue\_dimen3 - \_else \_dimen2=\_wd0 \_dimen3=\_expr{1/\_ratiovalue}\_dimen2 \_fi - \_setflcolors\_tmp - \_ifx\_overlapmarginsvalue N\_dimen0=\_zo \_dimen1=\_zo - \_else \_dimen0=-\_hhkern \_dimen1=-\_vvkern \_fi - \_hbox{\_kern\_dimen0 - \_ifx\_shadowvalue N\_else - \_edef\_tmpb{{\_bp{\_dimen2+\_lwidth}}{\_bp{\_dimen3+\_lwidth}}{}}% - \_doshadow\_circlet - \_fi - \_pdfliteral{q \_bp{\_lwidth} w \_tmp \_mv{\_bp{.5\_wd0}}{\_bp{(\_ht0-\_dp0)/2}} - {\_circle{\_bp{\_dimen2}}{\_bp{\_dimen3}} B} Q}% - \_ifdim\_dimen1=\_zo \_else - \_ht0=\_dimexpr \_ht0+\_dimen1 \_relax \_dp0=\_dimexpr \_dp0+\_dimen1 \_relax \_fi - \_box0 - \_kern\_dimen0} - \_egroup % of \vbox\bgroup -} -\_def\_circlet#1#2#3{\_circle{#1}{#2}} - -\_public \inoval \incircle \ratio \lwidth \fcolor \lcolor \shadow \overlapmargins ; - - \_doc ----------------------------- - A shadow effect is implemented here. The shadow is equal to the - silhouette of the given path in a gray-transparent color shifted by - \`\_shadowmoveto` vector and with blurred boundary. - A waistline with the width 2*\`\_shadowb` around the boundary is blurred. - The \`\shadowlevels` levels of transparent shapes is used for creating - this effect. The `\shadowlevels+1/2` level is equal to the shifted given path. - \_cod ----------------------------- - -\_def\_shadowlevels{9} % number of layers for blurr effect -\_def\_shadowdarknessA{0.025} % transparency of first shadowlevels/2 layers -\_def\_shadowdarknessB{0.07} % transparency of second half of layers -\_def\_shadowmoveto{1.8 -2.5} % vector defines shifting layer (in bp) -\_def\_shadowb{1} % 2*shadowb = blurring area thickness - - \_doc ----------------------------- - The `\_pdfpageresources` primitive is used to define transparency. - It does not work when used in a box. So, we use it at the beginning of - the output routine. The modification of the output routine is done - using \`\_insertshadowresources` only once when the shadow effect is used first. - \_cod ----------------------------- - -\_def\_insertshadowresources{% - \_global\_addto\_begoutput{\_setshadowresources}% - \_xdef\_setshadowresources{% - \_pdfpageresources{/ExtGState - << - /op1 <</Type /ExtGState /ca \_shadowdarknessA>> - /op2 <</Type /ExtGState /ca \_shadowdarknessB>> - \_morepgresources - >> - }% - }% - \_global\_let\_insertshadowresources=\_relax -} -\_def\_morepgresources{} - - \_doc ----------------------------- - The \`\_doshadow``{<curve>}` does the shadow effect. - \_cod ----------------------------- - -\_def\_doshadow#1{\_vbox{% - \_insertshadowresources - \_tmpnum=\_numexpr (\_shadowlevels-1)/2 \_relax - \_edef\_tmpfin{\_the\_tmpnum}% - \_ifnum\_tmpfin=0 \_def\_shadowb{0}\_def\_shadowstep{0}% - \_else \_edef\_shadowstep{\_expr{\_shadowb/\_tmpfin}}\_fi - \_def\_tmpa##1##2##3{\_def\_tmpb - {#1{##1+2*\_the\_tmpnum*\_shadowstep}{##2+2*\_the\_tmpnum*\_shadowstep}{##3}}}% - \_ea \_tmpa \_tmpb - \_def\_shadowlayer{% - \_ifnum\_tmpnum=0 /op2 gs \_fi - \_tmpb\_space f - \_immediateassignment\_advance\_tmpnum by-1 - \_ifnum-\_tmpfin<\_tmpnum - \_ifx#1\_oval 1 0 0 1 \_shadowstep\_space \_shadowstep\_space cm \_fi - \_ea \_shadowlayer \_fi - }% - \_pdfliteral{q /op1 gs 0 g 1 0 0 1 \_shadowmoveto\_space cm - \_ifx#1\_circlet 1 0 0 1 \_expr{\_bp{.5\_wd0}} \_expr{\_bp{(\_ht0-\_dp0)/2}} cm - \_else 1 0 0 1 -\_shadowb\_space -\_shadowb\_space cm \_fi - \_shadowlayer Q} -}} - - \_doc ----------------------------- - A generic macro \`\_clipinpath``<x> <y> <curve> <text>` declares - a clipping path by the `<curve>` shifted by the `<x>`, `<y>`. The `<text>` is typeset - when such clipping path is active. Dimensions are given by bp without the unit here. - The macros \`\clipinoval` `<x> <y> <width> <height> {<text>}` and - \`\clipincircle` `<x> <y> <width> <height> {<text>}` are defined here. - These macros read normal \TeX/ dimensions in their parameters. - \_cod ----------------------------- - -\_def\_clipinpath#1#2#3#4{% #1=x-pos[bp], #2=y-pos[bp], #3=curve, #4=text - \_hbox{\_setbox0=\_hbox{{#4}}% - \_tmpdim=\_wd0 \_wd0=\_zo - \_pdfliteral{q \_mv{#1}{#2}{#3 W n}}% - \_box0\_pdfliteral{Q}\_kern\_tmpdim - }% -} - -\_def\_clipinoval {\_ea\_ea\_ea\_clipinovalA\_scantwodimens} -\_def\_clipinovalA #1#2{% - \_def\_tmp{{#1/65781.76}{#2/65781.76}}% - \_ea\_ea\_ea\_clipinovalB\_scantwodimens -} -\_def\_clipinovalB{\_ea\_clipinovalC\_tmp} -\_def\_clipinovalC#1#2#3#4{% - \_ea\_clipinpath{#1-(#3/131563.52)+(\_bp{\_roundness})}{#2-(#4/131563.52)+(\_bp{\_roundness})}% - {\_oval{#3/65781.76-(\_bp{2\_roundness})}{#4/65781.76-(\_bp{2\_roundness})}{\_bp{\_roundness}}}% -} -\_def\_clipincircle {\_ea\_ea\_ea\_clipincircleA\_scantwodimens} -\_def\_clipincircleA #1#2{% - \_def\_tmp{{#1/65781.76}{#2/65781.76}}% - \_ea\_ea\_ea\_clipincircleB\_scantwodimens -} -\_def\_clipincircleB#1#2{% - \_ea\_clipinpath\_tmp{\_circle{#1/65781.76}{#2/65781.76}}% -} -\_public \clipinoval \clipincircle ; - - -\_endcode % ------------------------------------- - -The \^`\inspic` is defined by `\pdfximage` and `\pdfrefximage` primitives. -If you want to use one picture more than once in your document, then the -following code is recommended: -\begtt \catcode`\<=13 -\newbox\mypic -\setbox\mypic = \hbox{\picw=3cm \inspic{<picture>}} - -My picture: \copy\mypic, again my picture: \copy\mypic, etc. -\endtt -This code downloads the picture data to the PFD output only once (when -`\setbox` is processed). Each usage of `\copy\mypic` puts only a pointer to -the picture data in the PDF. - -If you want to copy the same picture in different sizes, then choose -a \"basic size" used in `\setbox` and all different sizes can be realized by -the \^`\transformbox{<transformation>}{\copy\mypic}`. - -\_endinput - -2020-12-21: \puttext: \box0 in goup, bugfix -2020-04-12: \_public \clipinoval \clipincircle ; added, bug fixed - diff --git a/Master/texmf-dist/tex/luatex/optex/base/hi-syntax.opm b/Master/texmf-dist/tex/luatex/optex/base/hi-syntax.opm deleted file mode 100644 index eb6d747914e..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/hi-syntax.opm +++ /dev/null @@ -1,223 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \hisyntax {Syntax highlithing of verbatim listings <2020-04-04>} % preloaded in format - - \_doc ----------------------------- - The following macros `\replfromto` and `\replthis` manipulate with the - verbatim text which has been read already and stored in the `\_tmpb` macro. - - The \`\replfromto` `{<from>}{<to>}{<what>}` finds first `<from>` then the - first `<to>` following by `<from>` pattern and the - `<text>` between them is packed to `#1`. - Then `<from><text><to>` is replaced by `<what>`. The `<what>` parameter - can use `#1` which is replaced by the `<text>`. - - The `\replfromto` continues by finding next `<from>`, then, next `<to>` - repeatedly over the whole verbatim text. If the verbatim text is ended by - opened `<from>` but not closing by `<to>` then `<to>` is appended to the - verbatim text automatically and the last part of the verbatim text is replaced too. - - First two parameters are expanded before usage of `\replfromto`. You can - use `\csstring\%` or something else here. - \_cod ----------------------------- - -\_def\_replfromto #1#2{\_edef\_tmpa{{#1}{#2}}\_ea\_replfromtoE\_tmpa} -\_def\_replfromtoE#1#2#3{% #1=from #2=to #3=what to replace - \_def\_replfrom##1#1##2{\_addto\_tmpb{##1}% - \_ifx\_end##2\_ea\_replstop \_else \_afterfi{\_replto##2}\_fi}% - \_def\_replto##1#2##2{% - \_ifx\_end##2\_afterfi{\_replfin##1}\_else - \_addto\_tmpb{#3}% - \_afterfi{\_replfrom##2}\_fi}% - \_def\_replfin##1#1\_end{\_addto\_tmpb{#3}\_replstop}% - \_edef\_tmpb{\_ea}\_ea\_replfrom\_tmpb#1\_end#2\_end\_end\_relax -} -\_def\_replstop#1\_end\_relax{} -\_def\_finrepl{} - - \_doc ----------------------------- - The \`\replthis` `{<pattern>}{<what>}` replaces each `<pattern>` by `<what>`. - Both parameters of `\replthis` are expanded first. - \_cod ----------------------------- - -\_def\_replthis#1#2{\_edef\_tmpa{{#1}{#2}}\_ea\_replstring\_ea\_tmpb \_tmpa} - -\_public \replfromto \replthis ; - - \_doc ----------------------------- - The patterns `<from>`, `<to>` and `<pattern>` are not found when they are - hidden in braces `{...}`. Example: - \begtt - \replfromto{/*}{*/}{\x C{/*#1/*}} - \endtt - replaces all C comments by `\x C{...}`. The patterns inside `{...}` are - not used by next usage of `\replfromto` or `\replthis` macros. - - The \`\_xscan` macro does replacing `\x` by `\z` in the post-processing - phase. The `\x <letter>{<text>}` expands to `\_xscan {<letter>}<text>^^J^`. - If `#3` is `\_end` then it signals that something wrong happens, the - `<from>` was not terminated by legal `<to>` when `\replfromto` did work. - We must to fix it by the \`\_xscanR` macro. - \_cod ----------------------------- - -\_def\_xscan#1#2^^J#3{\_ifx\_end#3 \_ea\_xscanR\_fi - \z{#1}{#2}% - \_ifx^#3\_else ^^J\_afterfi{\_xscan{#1}#3}\_fi} -\_def\_xscanR#1\_fi#2^{^^J} - - \_doc ----------------------------- - The \`\hicolor` `<letter> <color>` defines `\_z<letter>{<text>}` - as `{<color><text>}`. It should be used in the context of - `\x <letter>{<text>}` macros. - \_cod ----------------------------- - -\_def\_hicolor #1#2{\_sdef{_z:#1}##1{{#2##1}}} - - \_doc ----------------------------- - The \`\hisyntax``{<name>}` re-defines default \^`\_prepareverbdata``<macro><verbtext>` - in order to it does more things: - It saves `<verbtext>` to `\_tmpb`, appends `\n` around spaces and - `^^J` characters in pre-processing phase, it opens `hisyntax-<name>.opm` - file if `\_hisyntax<name>` is not defined. Then `\_the\_isyntax<name>` - is processed. Finally, the post-processing phase is realized by setting - appropriate values to `\x` and `\y` macros and doing - `\_edef\_tmpb{\_tmpb}`. - \_cod ----------------------------- - -\_def\_hisyntax#1{\_def\_prepareverbdata##1##2{% - \_let\n=\_relax \_let\b=\_relax \_def\t{\n\_noexpand\t\n}\_let\_start=\_relax - \_adef{ }{\n\_noexpand\ \n}\_edef\_tmpb{\_start^^J##2\_end}% - \_replthis{^^J}{\n^^J\b\n}\_replthis{\b\n\_end}{\_end}% - \_let\x=\_relax \_let\y=\_relax \_let\z=\_relax \_let\t=\_relax - \_hicomments % keeps comments declared by \commentchars - \_endlinechar=`\^^M - \_lowercase{\_def\_tmpa{#1}}% - \_ifcsname _hialias:\_tmpa\_endcsname \_edef\_tmpa{\_cs{_hialias:\_tmpa}}\_fi - \_ifx\_tmpa\_empty \_else - \_unless \_ifcsname _hisyntax\_tmpa\_endcsname - \_isfile{hisyntax-\_tmpa.opm}\_iftrue \_opinput {hisyntax-\_tmpa.opm} \_fi\_fi - \_ifcsname _hisyntax\_tmpa\_endcsname - \_ifcsname hicolors\_tmpa\_endcsname - \_cs{_hicolors\_tmpa}=\_cs{hicolors\_tmpa}% - \_else - \_if^\_the\_hicolors^\_else - \_ifcsname _hicolors\_tmpa\_endcsname - \_global\_cs{_hicolors\_tmpa}=\_hicolors \_global\_hicolors={}% - \_fi\_fi\_fi - \_ea\_the \_csname _hisyntax\_tmpa\_endcsname % \_the\_hisyntax<name> - \_else\_opwarning{Syntax "\_tmpa" undeclared (no file hisyntax-\_tmpa.opm)} - \_fi\_fi - \_replthis{\_start\n^^J}{}\_replthis{^^J\_end}{^^J}% - \_def\n{}\_def\b{}\_adef{ }{\_dsp}% - \_bgroup \_lccode`\~=`\ \_lowercase{\_egroup\_def\ {\_noexpand~}}% - \_def\w####1{####1}\_def\x####1####2{\_xscan{####1}####2^^J^}% - \_def\y####1{\_ea \_noexpand \_csname ####1\_endcsname}% - \_edef\_tmpb{\_tmpb}% - \_def\z####1{\_cs{_z:####1}}% - \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}% - \_localcolor -}} -\_public \hisyntax \hicolor ; - - \_doc ----------------------------- - Aliases for languages can be declared like this. - When `\hisyntax{xml}` is used then this is the same as `\hisyntax{html}`. - \_cod ----------------------------- - -\_sdef{_hialias:xml}{html} -\_sdef{_hialias:json}{c} - -\_endcode % ------------------------------------------- - -The user can write - -\begtt \adef/{\_csstring\\} -\begtt \hisytnax{C} -... -/endtt -\endtt -and the code is colorized by C syntax. -The user can write `\everytt={\hisyntax{C}}` and all verbatim listings are -colorized. - -The \^`\hisyntax``{<name>}` reads the file `hisyntax-<name>.opm` where the -colorization is declared. The parameter `<name>` is case insensitive and the -file name must include it in lowercase letters. For example, the file -`hisyntax-c.opm` looks like this: - -\printdoc hisyntax-c.opm - -\OpTeX/ provides `hisyntax-{c,python,tex,html}.opm` files. -You can take inspiration from these files and declare more languages. - -User can re-declare colors by `\hicolors={...}` This value has precedence -before `\_hicolors<name>` values declared in the `hicolors-<name>.opm` file. -What exactly to do: copy `\_hicolors<name>={...}` -from `hicolors-<name>.opm` to your document, -rename it as `\hicolors={...}` and do you own colors modifications. - -Another way to set non-default colors is to declare -`\newtoks\hicolors<name>` (without the `_` prefix) and set the colors palette here. -It has precedence before `\_hicolors<name>` (with the `_` prefix) declared in -the `hicolors-<name>.opm` file. -This is useful when there are more hi-syntax languages used in one document. - -\secl4 Notes for hi-syntax macro writers -The file `hisyntax-<name>.opm` is read only once in the \TeX/ group. -If there are definitions then they must be declared as global. - -The `hisyntax-<name>.opm` file must (globally) declare `\_hisyntax<name>` tokens string -where the action over verbatim text is declared typically by `\replfromto` or -`\replthis` macros. - -The verbatim text is prepared by {\em pre-processing phase}, then the -`\_hisyntax<name>` is applied and then {\em post-processing phase} does final -corrections. Finally, the verbatim text is printed line by line. - -The pre-processing phase does: - -\begitems -* Each space is replaced by {\visiblesp`\n\ \n`}, so `\n<word>\n` should be a pattern to - finding whole words (no subwords). The `\n` control sequence is removed in - the post-processing phase. -* Each end of line is represented by `\n^^J\n`. -* The `\_start` control sequence is added before the verbatim text and the `\_end` control - sequence is appended to the end of the verbatim text. These control - sequences are removed in the post-processing phase. -\enditems - -Special macros are working only in a group when processing the verbatim -text. - - -\begitems -* `\n` means noting but it should be used as a boundary of words as mentioned above. -* `\t` means a tabulator. It is prepared as `\n\t\n` because it can be at - the boundary of a word. -* `\x <letter>{<text>}` can be used as replacing text. Suppose the example - \begtt - \replfromto{/*}{*/}{\x C{/*#1*/}} - \endtt - This replaces all C comments `/*...*/` by `\x C{/*...*/}`. But the - C comments may span more lines, i.e. the `^^J` should be inside it. - - The macro `\x <letter>{<text>}` is replaced by one or more - `\z <letter>{<text>}` in post-processing phase where each parameter `<text>` of - `\z` keeps inside one line. Inside-line parameters are represented - by `\x C{<text>}` and they are replaced to `\z C{<text>}` without any change. - But: - \begtt \catcode`\<=13 - \x C{<text1>^^J<text3>^^J<text3>} - is replaced by - \z C{<text1>}^^J\z C{<text2>}^^J\z C{<text3>} - \endtt - The `\z <letter>{<text>}` is expanded to `\_z:<letter>{<text>}` and if - `\hicolor <letter> <color>` is declared then - `\_z:<letter>{<text>}` expands to `{<color><text>}`. So, required color is - activated at all lines (separately) where C comment spans. -* `\y {<text>}` is replaced by `\<text>` in the post processing phase. It should - be used for macros without a parameter. You cannot use unprotected macros - as replacement text before the post-processing phase, because the post-processing - phase is based on expansion whole verbatim text. -\enditems - diff --git a/Master/texmf-dist/tex/luatex/optex/base/hisyntax-c.opm b/Master/texmf-dist/tex/luatex/optex/base/hisyntax-c.opm deleted file mode 100644 index 3c1f228f88c..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/hisyntax-c.opm +++ /dev/null @@ -1,66 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \_hisyntaxc {Syntax highlighting for C sources <2020-04-03>} - -\_newtoks \_hisyntaxc \_newtoks \_hicolorsc - -\_global\_hicolorsc={% colors for C language - \_hicolor K \Red % Keywords - \_hicolor S \Magenta % Strings - \_hicolor C \Green % Comments - \_hicolor N \Cyan % Numbers - \_hicolor P \Blue % Preprocessor - \_hicolor O \Blue % Non-letters -} -\_global\_hisyntaxc={% - \_the\_hicolorsc - \_let\c=\_relax \_let\e=\_relax \_let\o=\_relax - \_replfromto {/*}{*/} {\x C{/*#1*/}}% /*...*/ - \_replfromto {//}{^^J} {\z C{//#1}^^J}% //... - \_replfromto {\_string#}{^^J} {\z P{\##1}^^J}% #include ... - \_replthis {\_string\"} {{\_string\"}}% \" protected inside strings - \_replfromto {"}{"} {\x S{"#1"}}% "..." - % - \_edef\_tmpa {()\_string{\_string}+-*/=[]<>,:;\_pcent\_string&\_string^|!?}% non-letters - \_ea \_foreach \_tmpa - \_do {\_replthis{#1}{\n\o#1\n}} - \_foreach % keywords - {auto}{break}{case}{char}{continue}{default}{do}{double}% - {else}{entry}{enum}{extern}{float}{for}{goto}{if}{int}{long}{register}% - {return}{short}{sizeof}{static}{struct}{switch}{typedef}{union}% - {unsigned}{void}{while} - \_do {\_replthis{\n#1\n}{\z K{#1}}} - \_replthis{.}{\n.\n} % numbers - \_foreach 0123456789 - \_do {\_replfromto{\n#1}{\n}{\c#1##1\e}} - \_replthis{\e.\c}{.} - \_replthis{\e.\n}{.\e} - \_replthis{\n.\c}{\c.} - \_replthis{e\e\o+\c}{e+}\_replthis{e\e\o-\c}{e-} - \_replthis{E\e\o+\c}{E+}\_replthis{E\e\o-\c}{E-} - \_def\o#1{\z O{#1}} - \_def\c#1\e{\z N{#1}} -} - -\_endcode %------------------------------------------------ - - -Each `hisyntax-<name>.opm` file must declare the token list -`\_hisyntax<name>` using `\newtoks` and must declare the syntax declaration -in it. The second token list `\_hicolors<name>` is optional but recommended. -User can re-declare his/her own colors by `\hicolors` which has precedence -before `\_hicolors<name>`. - -The public variants can be declared if you want to give these token lists to -the user namespace. But it is not explicitly needed. - -All settings must be global here because the file is typically read inside -a group and we need not read it repeatedly before each code chunk -again and again. - -Note that `\foreach` is used for each non-letters (expanded via \string -because we needn't treat with active or special TeX characters). The -keyword is applied in the `\foreach` loop too. - -See `hi-sytax.opm` for more information about `\hicolor`, `\replfromto` and -`\replthis` macros. diff --git a/Master/texmf-dist/tex/luatex/optex/base/hisyntax-html.opm b/Master/texmf-dist/tex/luatex/optex/base/hisyntax-html.opm deleted file mode 100644 index 3f0be6a23e8..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/hisyntax-html.opm +++ /dev/null @@ -1,31 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl\_hisyntaxhtml {Syntax highlighting for html or xml sources <2020-04-03>} - -\_newtoks\_hisyntaxhtml \_newtoks\_hicolorshtml - -\_global\_hicolorshtml={% colors in html codes - \_hicolor A \Cyan % <, > and parameters - \_hicolor T \Red % tag names - \_hicolor C \Green % comments - \_hicolor E \Blue % HTML entities - \_hicolor S \Magenta % strings in parameters -} -\_global\_hisyntaxhtml={ - \_the\_hicolorshtml - \_replfromto{<!--}{-->}{\x C{<!--#1-->}} - \_replthis{<}{\y{_hitaghtml}} - \_replthis{\_string&}{\y{_hientityhtml}} -} -\_gdef\_hitaghtml#1>{\_hitaghtmlA#1\ >} -\_gdef\_hitaghtmlA#1\ #2>{\z A{<}\z T{#1}\_def\_tmpb{#2^}% - \_if^\_tmpb - \_else \_space - \_replthis{\ ^}{}\_replfromto{"}{"}{\_histringhtml{"##1"}}\z A{\_tmpb}\_fi - \z A{>}% -} -\_gdef\_histringhtml#1{\_visiblesp \z S{#1}} -\_gdef\_hientityhtml#1;{\z E{\}} - -\_endcode %------------------------------------------------ - diff --git a/Master/texmf-dist/tex/luatex/optex/base/hisyntax-python.opm b/Master/texmf-dist/tex/luatex/optex/base/hisyntax-python.opm deleted file mode 100644 index 6250eed0e38..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/hisyntax-python.opm +++ /dev/null @@ -1,82 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \_hisyntaxpython {Syntax highlighting for Python sources <2020-04-04>} - -\_newtoks \_hisyntaxpython \_newtoks \_hicolorspython - -\_global\_hicolorspython={% colors for Python language - \_hicolor M \Orange % Multi line strings - \_hicolor S {\_visiblesp \Grey} % Single line strings - \_hicolor C \Green % Comments - \_hicolor K \LightBlue % Keywords - \_hicolor O \Blue % Operators - \_hicolor N \Red % Numbers - \_hicolor D \Magenta % def names - \_hicolor L \Black % class names - \_hicolor R \Magenta % Decorators -} -\_global\_hisyntaxpython={% - \_the\_hicolorspython - \_let\s=\_relax \_let\c=\_relax \_let\e=\_relax \_let\o=\_relax - \_replthis{\_string\"}{{\_string\"}} % protect \", \' - \_replthis{\_string\'}{{\_string\'}} - % - \_replfromto{\_string#}{^^J}{\z C{\##1}^^J} % comments - % - \_replthis{'''}{\_noexpand\_hipystr0{'''}M} % search string marks - \_replthis{"""}{\_noexpand\_hipystr1{"""}M} - \_replthis{"}{\_noexpand\_hipystr2{"}S} - \_replthis{'}{\_noexpand\_hipystr3{'}S} - \_edef\_tmpb{\_tmpb} % realize string marks - % - \_foreach {br}{Br}{bR}{BR}{rb}{rB}{Rb}{RB}uUrRbB % string prefixes - \_do {\_replthis{#1\s}{\_noexpand\_hipystrpre#1}} - \_def\s{} - \_edef\_tmpb{\_tmpb} - % - \_edef \_tmpa {+-*./=<>()[]:,;!|\_pcent % operators - \_string{\_string}@\_string&\_string~\_string^} - \_ea\_foreach \_tmpa - \_do {\_replthis{#1}{\n\o#1\n}} - % - \_foreach % keywords - {and}{as}{assert}{async}{await}{break}{continue}{del}{elif}{else}{except}% - {exec}{False}{finally}{for}{from}{global}{if}{import}{in}{is}{lambda}{None}% - {nonlocal}{not}{or}{pass}{print}{raise}{return}{True}{try}{while}{with}{yield}% - \_do {\_replthis{\n#1\n}{\z K{#1}}} - \_replfromto{\n def\n}{\n\o(\n}{\z K{def}\x D{#1}\n\o(\n} - \_replfromto{\n class\n}{\n\o(\n}{\z K{class}\x L{#1}\n\o(\n} - % - \_foreach 0123456789 % numbers - \_do {\_replfromto{\n#1}{\n}{\c#1##1\e}} - % - \_replthis{\e\o.\c}{.} - \_replthis{\e\o.\n}{.\e} - \_replthis{\n\o.\c}{\c.} - \_replthis{e\e\o+\c}{e+}\_replthis{e\e\o-\c}{e-} - \_replthis{E\e\o+\c}{E+}\_replthis{E\e\o-\c}{E-} - \_replthis{\e j}{j\e} - % - \_replfromto{\n\o@\n}{^^J}{\z R{#1}^^J} % decorators - % - \_def\o#1{\z O{#1}} - \_def\c#1\e{\z N{#1}} -} - -\_gdef\_hipystr#1#2#3#4\_hipystr#5#6#7{% - \_ifx#1#5\s\x#3{#2#4#2}% - \_else \_afterfi{\_hipystr#1{#2}#3#4#6}\_fi -} -\_gdef\_hipystrpre#1\x#2{\x#2{#1}\x#2} - -\_ifx\LightBlue\_undefined \_gdef\LightBlue {\_setcmykcolor{1 0.43 0 0}}\_fi -\_ifx\Orange\_undefined \_gdef\Orange {\_setcmykcolor{0 0.64 1 0}}\_fi - -\_endcode %------------------------------------------------ - -This code was greatly inspired by the OPMac hisyntax macros for Python: - - https://gitlab.fit.cvut.cz/krajnpet/PySyntax - -created by Petr Krajnik. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/hisyntax-tex.opm b/Master/texmf-dist/tex/luatex/optex/base/hisyntax-tex.opm deleted file mode 100644 index 583676a2ca4..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/hisyntax-tex.opm +++ /dev/null @@ -1,38 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl\_hisyntaxtex {Syntax highlighting for TeX sources <2020-04-03>} - -\_newtoks\_hisyntaxtex \_newtoks\_hicolorstex - -\_global\_hicolorstex={% colors in TeX codes - \_hicolor S \Blue % control sequences - \_hicolor B \Magenta % {, }, $ - \_hicolor C \Green % comments -} -\_global\_hisyntaxtex={ - \_the\_hicolorstex - \_replthis{\_string\%}{\y{_createcs}{\_csstring\%}} - \_replfromto{\_csstring\%}{^^J}{\x C{\_csstring\%#1}^^J} - \_replthis{\_string\\}{\y{_createcs}{\_csstring\\}} - \_replthis{\_string\{}{\y{_createcs}{\_csstring\{}} - \_replthis{\_string\}}{\y{_createcs}{\_csstring\}}} - \_replthis{\_string\$}{\y{_createcs}{\_csstring\$}} - \_replthis{\_csstring\\}{\y{_createcs}} - \_replthis{\_csstring\{}{\x B{\_csstring\{}} - \_replthis{\_csstring\}}{\x B{\_csstring\}}} - \_replthis{\_csstring\$}{\x B{\_csstring\$}} -} -\_gdef\_createcs#1{\_def\_csletters{#1}% - \_ifcat a\_noexpand#1\_afterfi{\_futurelet\_next\_createcsA}% - \_else \_ea\_createcsF \_fi -} -\_gdef\_createcsA{\_ifcat a\_noexpand\_next \_ea\_createcsB \_else \_ea\_createcsF \_fi} -\_gdef\_createcsB#1{\_addto\_csletters{#1}\_futurelet\_next\_createcsA} -\_gdef\_createcsF{\z S{\_csstring\\\_csletters}} -\_gdef\_createbb{\_ea\_createcs\_csstring\\} - -\_endcode %------------------------------------------------ - -The `\_createcs` reads next tokens as the tokenizer does it until the name -of a control sequence is read. It is saved to the `\_csletters` macro and -the macro \_createcsF prints it. diff --git a/Master/texmf-dist/tex/luatex/optex/base/hyperlinks.opm b/Master/texmf-dist/tex/luatex/optex/base/hyperlinks.opm deleted file mode 100644 index 5fc8a32233b..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/hyperlinks.opm +++ /dev/null @@ -1,157 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \ulink {Hyperlinks <2021-01-27>} % preloaded in format - - \_doc ---------------------------- - \`\dest``[<type>:<spec>]` creates a destination of internal links. The - destination is declared in the format `<type>:<spec>`. If the \^`\hyperlinks` - command in not used, then `\dest` does nothing else it is set to `\_destactive`. - The \`\_destactive` is implemented by `\_pdfdest` primitive. It creates a box - in which the destination is shifted by \`\_destheight`. The reason is that - the destination is exactly at the top border of the PDF viewer but we want to see - the line where the destination is. The destination box is positioned by a - different way dependent on the current vertical or horizontal mode. - \_cod ---------------------------- - -\_def\_destheight{1.4em} -\_def\_destactive[#1:#2]{\_if$#2$\_else\_ifvmode - \_tmpdim=\_prevdepth \_prevdepth=-1000pt - \_destbox[#1:#2]\_prevdepth=\_tmpdim - \_else \_destbox[#1:#2]% - \_fi\_fi -} -\_def\_destbox[#1]{\_vbox to\_zo{\_kern-\_destheight \_pdfdest name{#1} xyz\_vss}} -\_def\_dest[#1]{} -\_public \dest ; - - \_doc ---------------------------- - \`\link``[<type>:<spec>]{<color>}{<text>}` creates an internal link to \^`\dest` - with the same `<type>:<spec>`. You can have more links with the same - `<type>:<spec>` but only one `\dest` in the document. If \^`\hyperlinks` - command is not used, then `\link` only prints `<text>` else it is set to - `\_linkactive`. - The \`\_linkactive` is implemented by `\_pdfstartlink...\_pdfendlink` - primitives. - \nl - \`\ilink``[<type>:<spec>]{<text>}` is equivalent to `\_link` but - the `<color>` is used from \^`\hyperlinks` declaration. - \_cod ---------------------------- - -\_protected\_def\_linkactive[#1:#2]#3#4{\_leavevmode\_pdfstartlink height.9em depth.3em - \_pdfborder{#1} goto name{#1:#2}\_relax {#3#4}\_pdfendlink -} -\_protected\_def\_link[#1]#2#3{\_leavevmode{#3}} -\_protected\_def\_ilink[#1]#2{\_leavevmode{#2}} -\_public \ilink \link ; - - \_doc ---------------------------- - \`\ulink``[<url>]{<text>}` creates external link. It prints only the `<text>` by default but - the \^`\hyperlinks` declaration defines it as \`\_urlactive``[url:<url>]{<text>}`. - The external link is created by the `\_pdfstartlink...\pdfendlink` primitives. - The `<url>` is detokenized with `\escapechar=-1` before it is used, so - `\%`, `\#` etc. can be used in the `<url>`. - \_cod ---------------------------- - -\_protected\_def\_urlactive[#1:#2]#3#4{\_leavevmode{\_escapechar=-1 - \_pdfstartlink height.9em depth.3em \_pdfborder{#1}% - user{/Subtype/Link/A <</Type/Action/S/URI/URI(\_detokenize{#2})>>}\_relax - {#3#4}\_pdfendlink}% -} -\_def\_ulink[#1]#2{\_leavevmode{#2}} -\_def\_urlcolor{} -\_public \ulink ; - - \_doc ---------------------------- - The `\_pdfstartlink` primitive uses `\_pdfborder{<type>}` in its parameter - (see \^`\_linkactive` or \^`\_urlactive` macros). The \`\_pdfborder``{<type>}` - expands to `attr{/C[? ? ?] /Border[0 0 .6]}` if the - `\_<type>border` (i.e.\ \`\_refborder`, \`\_citeborder`, \`\_tocborder`, - \`\_pgborder`, \`\_urlborder`, \`\_fntborder` or \`\_fnfborder`) - is defined. Users can define it in - order to create colored frames around active links. For example - `\def\_tocborder{1 0 0}` causes red frames in TOC (not printed, only visible - in PDF viewers). - \_cod ---------------------------- - -\_def\_pdfborder#1{\_ifcsname _#1border\_endcsname - attr{/C[\_csname _#1border\_endcsname] /Border[0 0 .6]}% - \_else attr{/Border[0 0 0]}\_fi -} - - \_doc ---------------------------- - \`\hyperlinks``{<ilink_color>}{<ulink_color>}` activates `\dest`, `\link`, - `\ilink`, `\ulink` in order they create links. These macros are redefined - here to their \"active" version. - \_cod ---------------------------- - -\_def\_hyperlinks#1#2{% - \_let\_dest=\_destactive \_let\_link=\_linkactive - \_def\_ilink[##1]##2{\_link[##1]{\_localcolor#1}{##2}}% - \_def\_ulink[##1]##2{\_urlactive[url:##1]{\_localcolor#2}{##2}}% - \_public \dest \ilink \ulink \link ;% -} -\_public \hyperlinks ; - - \_doc ---------------------------- - \`\url``{<url>}` does approximately the same as \^`\ulink``[<url>]{<url>}`, but - more work is done before the `\ulink` is processed. The link-version of <url> - is saved to `\_tmpa` and the printed version in `\_tmpb`. The printed - version is modified in order to set breakpoints to special places of the - `<url>`. For example `//` is replaced by `\_urlskip/\_urlskip/\_urlbskip` - where `\urlskip` adds a small nonbreakable glue between these two slashes and - before them and `\_urlbskip` adds a breakable glue after them. - \nl - The text version of the `<url>` is printed in \`\_urlfont`. - \_cod ---------------------------- - -\_def\_url#1{{% - \_def\_tmpa{#1}\_replstring\_tmpa {\|}{}% - {\_escapechar=-1 \_ea}\_ea\_edef\_ea\_tmpa\_ea{\_detokenize\_ea{\_tmpa}}% - \_def\_tmpb{#1}\_replstring\_tmpb {\|}{\_urlbskip}% - \_replstring\_tmpb {//} {{\_urlskip\_urlslashslash\_urlbskip}}% - \_replstring\_tmpb {/} {{\_urlskip/\_urlbskip}}% - \_replstring\_tmpb {.} {{\_urlskip.\_urlbskip}}% - \_replstring\_tmpb {?} {{\_urlskip?\_urlbskip}}% - \_replstring\_tmpb {=} {{\_urlskip=\_urlbskip}}% - \_ea\_replstring\_ea\_tmpb \_ea{\_string &} {{\_urlbskip\_char`\& \_urlskip}}% - \_ea\_replstring\_ea\_tmpb \_ea{\_bslash|} {{\_penalty0}}% - \_ea\_ulink \_ea[\_tmpa] {\_urlfont\_tmpb\_null}% -}} -\_def\_urlfont{\_tt} -\_def\_urlskip{\_null\_nobreak\_hskip0pt plus0.05em\_relax} -\_def\_urlbskip{\_penalty100 \_hskip0pt plus0.05em\_relax} -\_def\_urlslashslash{/\_urlskip/} - -\_public \url ; - -\_endcode % ---------------------------------------- - - -There are four types of internal links and one type of external link: - -\begitems -* `ref:<label>` -- the destination is created when `\label[<label>]` is used, - see also the section \ref[references]. -* `toc:<tocrefnum>` -- the destination is created at chap/sec/secc titles, - see also the section \ref[maketoc]. -* `pg:<gpageno>` -- the destination is created at beginning of each page, - see also the section \ref[output]. -* `cite:<bibnum>` -- the destination is created in bibliography reference, - see also the section \ref[bib]. -* `url:<url>` -- used by `\url` or `\ulink`, - see also the end of this section. -\enditems - -The `<tocrefnum>`, `<gpageno>`, and `<bibnum>` are numbers starting from one and -globally incremented by one in the whole document. The registers \^`\tocrefnum`, -\^`\gpageno` and \^`\bibnum` are used for these numbers. - -When a chap/sec/secc title is prefixed by `\label[<label>]`, then both types -of internal links are created at the same destination place: -`toc:<tocrefnum>` and `ref:<label>`. - -\_endinput - -2021-01-27 \public \link added to \hyperlinks, bug fixed. -2020-04-22 \| in \url: bug fixed -2020-03-15 introduced \ No newline at end of file diff --git a/Master/texmf-dist/tex/luatex/optex/base/hyphen-lan.opm b/Master/texmf-dist/tex/luatex/optex/base/hyphen-lan.opm deleted file mode 100644 index dad0b26657e..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/hyphen-lan.opm +++ /dev/null @@ -1,245 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \langlist {Initialization of hypenation patterns <2020-03-10>} % preloaded in format - - \_doc ----------------------------- - The <iso-code> means a shortcut of language name (mostly by ISO 639-1). - The following control sequences are used for language switching: - \begitems - * `\_lan:<number>` expands to `<iso-code>` of the language. - The <number> is an internal number of languages used as a value of - `\language` register. - * `\_ulan:<long-lang>` expands to `<iso-code>` too. This is transformation - from long name of language (lowercase letters) to <iso-code>. - * `\_<iso-code>Patt` (for example `\_csPatt`) is the language `<number>` declared by `\chardef`. - * `\<iso-code>lang` - (for example \`\enlang`, \`\cslang`, \`\sklang`, \`\delang`, \`\pllang`) - is language selector. It exists in two states - \begitems - * Initialization state: when `\<iso-code>lang` is used first then it - must load the patterns into memory using Lua code. If it is done then - the `\<iso-code>lang` re-defines itself to the processing state. - * Processing state: it only sets `\language=\_<iso-code>Patt`, i.e it - selects the hyphenation patterns. It does a little more - language-dependent work, as mentioned below. - \enditems - * `\_langspecific:<isocode>` is processed by `\<iso-code>lang` and it - should include language-specific macros declared by the user or macro designer. - \enditems - The USenglish patters are preloaded first: - \_cod ----------------------------- - -\_chardef\_enPatt=0 -\_def\_pattlist{\_enPatt=0} -\_def\_langlist{en(USenglish)} -\_sdef{_lan:0}{en} -\_sdef{_ulan:usenglish}{en} -\_def\_enlang{\_uselang{en}\_enPatt23} % \lefthyph=2 \righthyph=3 -\_def\enlang{\_enlang} -\_sdef{_langspecific:en}{\_nonfrenchspacing} - -\_lefthyphenmin=2 \_righthyphenmin=3 % disallow x- or -xx breaks -\_input hyphen % en(USenglish) patterns from TeX82 - - \_doc ----------------------------- - \`\_preplang` `<iso-code> <long-lang> <hyph-file-spec> <number> <pre-hyph><post-hyph>` - prepares the\nl `\<iso-code>lang` to its initialization state. Roughly - speaking, it does: - \begtt \catcode`\<=13 - \chardef\_<iso-code>Patt = <number> - \def\_lan:<number> {<iso-code>} - \def\_ulan:<long-lang> {<iso-code>} - \def\_<iso-code>lang {% - \_loadpattrs <hyph-file-spec> <number> <long-lang> % loads patterns using Lua code - \gdef\_<iso-code>lang {\_uselang{<iso-code>}\_<iso-code>Patt <pre-hyph><post-hyph>} - \_<iso-code>lang % runs itself in processing state - } - \def\<iso-code>lang {\_<iso-code>lang} % public version \<iso-code>lang - \endtt - You can see that `\<iso-code>lang` runs \^`\_loadpattrs` and - \^`\_uselang` first (in initialization state) and it runs - only \^`\_uselang` when it is called again (in processing state). - \_cod ----------------------------- - -\_def\_preplang #1 #2 #3 #4 #5 {% - \_ea\_chardef \_csname _#1Patt\_endcsname=#4 - \_sdef{_lan:#4}{#1}\_lowercase{\_sdef{_ulan:#2}}{#1}% - \_def\_next{\_ea\_noexpand\_csname _#1lang\_endcsname}% - \_ea\_edef \_csname _#1lang\_endcsname {% - \_noexpand\_loadpattrs #3 #4 #2 % loads patterns - \_gdef\_next{\_noexpand\_uselang{#1}\_csname _#1Patt\_endcsname #5}% re-defines itself - \_next % runs itself in processing state - } - \_addto\_langlist{ #1(#2)}% - \_sdef{#1lang\_ea}\_ea{\_csname _#1lang\_endcsname}% unprefixed \<isocode>lang -} - - \_doc ----------------------------- - \`\_loadpattrs` `<hyph-file-spec> <number> <long-lang>` - loads hyphenation patterns and hyphenation exceptions for given language - and registers them as `\language=<number>`. - - The <hyph-file-spec> is a part of full file name wich is read: - `hyph-<hyph-file-spec>.tex`. The patterns and hyphenation exceptions - are saved here in UTF-8 encoding. - The <hyph-file-spec> should be a list of individual <hyph-file-spec>'s - separated by commas, see the language Serbian below for an example. - \_cod ----------------------------- - -\_def\_loadpattrs#1 #2 #3 {% - \_wlog{Loading hyphenation #3: (#1) \_string\language=#2}% - \_begingroup\_setbox0=\_vbox{% we don't want spaces in horizontal mode - \_language=#2\_def\\{#3}% - \_let\patterns=\_patterns \_let\hyphenation=\_hyphenation \_def\message##1{}% - \_loadpattrsA #1,,% - }\_endgroup -} -\_def\_loadpattrsA #1,{\_ifx,#1,\_else - \_isfile {hyph-#1}\_iftrue \_opinput{hyph-#1}% - \_else \_opwarning{No hyph. patterns #1 for \\, missing package?}% - \_def\_opwarning##1{}\_fi - \_ea \_loadpattrsA \_fi -} - - \_doc ----------------------------- - \`\_uselang``{<iso-code>}\_<iso-code>Patt <pre-hyph><post-hyph>`\nl - sets `\language`, `\lefthyphenmin`, `\righthyphenmin` and runs - `\frenchspacing`. This default language-dependent settings - should be re-declared by `\_langspecific:<iso-code>` which is run - finally (it is `\relax` by default, only `\_langspecific:en` runs - \^`\nonfrenchspacing`). - \_cod ----------------------------- - -\_def\_uselang#1#2#3#4{\_language=#2\_lefthyphenmin=#3\_righthyphenmin=#4\_relax - \_frenchspacing % \nonfrenchspacing can be set in \cs{_langspecific:lan} - \_cs{_langspecific:#1}% -} - \_doc ----------------------------- - The \`\uselanguage` `{<long-lang>}` is defined here - (for compatibility with e-plain users). - \_cod ----------------------------- - -\_def\_uselanguage#1{\_lowercase{\_cs{_\_cs{_ulan:#1}lang}}} -\_public \uselanguage ; - - \_doc ----------------------------- - The numbers for languages are declared as fixed constants (no - auto-generated). This concept is inspired by CSplain. - There are typical numbers of languages in CSplain: 5=Czech in IL2, - 15=Czech in T1 and 115=Czech in Unicode. We keep these constants - but we load only Unicode patterns (greater than 100), of course. - \_cod ----------------------------- - -\_preplang enus USenglishmax en-us 100 23 -\_preplang engb UKenglish en-gb 101 23 -\_preplang it Italian it 102 22 -\_preplang ia Interlingua ia 103 22 -\_preplang id Indonesian id 104 22 - -\_preplang cs Czech cs 115 23 -\_preplang sk Slovak sk 116 23 -\_preplang de nGerman de-1996 121 22 -\_preplang fr French fr 122 22 -\_preplang pl Polish pl 123 22 -\_preplang cy Welsh cy 124 23 -\_preplang da Danish da 125 22 -\_preplang es Spanish es 126 22 -\_preplang sl Slovenian sl 128 22 -\_preplang fi Finnish fi 129 22 -\_preplang hu Hungarian hu 130 22 -\_preplang tr Turkish tr 131 22 -\_preplang et Estonian et 132 23 -\_preplang eu Basque eu 133 22 -\_preplang ga Irish ga 134 23 -\_preplang nb Bokmal nb 135 22 -\_preplang nn Nynorsk nn 136 22 -\_preplang nl Dutch nl 137 22 -\_preplang pt Portuguese pt 138 23 -\_preplang ro Romanian ro 139 22 -\_preplang hr Croatian hr 140 22 -\_preplang zh Pinyin zh-latn-pinyin 141 11 -\_preplang is Icelandic is 142 22 -\_preplang hsb Uppersorbian hsb 143 22 -\_preplang af Afrikaans af 144 12 -\_preplang gl Galician gl 145 22 -\_preplang kmr Kurmanji kmr 146 22 -\_preplang tk Turkmen tk 147 22 -\_preplang la Latin la 148 22 -\_preplang lac classicLatin la-x-classic 149 22 -\_preplang lal liturgicalLatin la-x-liturgic 150 22 -\_preplang elm monoGreek el-monoton 201 11 -\_preplang elp Greek el-polyton 202 11 -\_preplang grc ancientGreek grc 203 11 -\_preplang ca Catalan ca 204 22 -\_preplang cop Coptic cop 205 11 -\_preplang mn Mongolian mn-cyrl 206 22 -\_preplang sa Sanskrit sa 207 13 -\_preplang ru Russian ru 208 22 -\_preplang uk Ukrainian uk 209 22 -\_preplang hy Armenian hy 210 12 -\_preplang as Assamese as 211 11 -\_preplang hi Hindi hi 212 11 -\_preplang kn Kannada kn 213 11 -\_preplang lv Latvian lv 215 22 -\_preplang lt Lithuanian lt 216 22 -\_preplang ml Malayalam ml 217 11 -\_preplang mr Marathi mr 218 11 -\_preplang or Oriya or 219 11 -\_preplang pa Panjabi pa 220 11 -\_preplang ta Tamil ta 221 11 -\_preplang te Telugu te 222 11 - -\_preplang be Belarusian be 223 22 -\_preplang bg Bulgarian bg 224 22 -\_preplang bn Bengali bn 225 11 -\_preplang cu churchslavonic cu 226 12 -\_preplang deo oldGerman de-1901 227 22 -\_preplang gsw swissGerman de-ch-1901 228 22 -\_preplang eo Esperanto eo 229 22 -\_preplang fur Friulan fur 230 22 -\_preplang gu Gujarati gu 231 11 -\_preplang ka Georgian ka 232 12 -\_preplang mk Macedonian mk 233 22 -\_preplang oc Occitan oc 234 22 -\_preplang pi Pali pi 235 12 -\_preplang pms Piedmontese pms 236 22 -\_preplang rm Romansh rm 237 22 -\_preplang sr Serbian sh-cyrl,sh-latn 238 22 -\_preplang sv Swedish sv 239 22 -\_preplang th Thai th 240 23 -\_preplang ethi Ethiopic mul-ethi 241 11 - - \_doc ----------------------------- - The \`\langlist` includes names of all languages which are ready to load - and use their hyphenation patterns. This list is printed to the terminal and - to log at ini\TeX/ state here. It can be used when processing documents too. - \_cod ----------------------------- - -\_message{Language hyph.patterns ready to load: \_langlist. - Use \_string\<shortname>lang to initialize language, - \_string\cslang\_space for example} - -\_public \langlist ; - -\_endcode % --------------------------------------------- - - -Maybe, you need to do more language-specific actions than just switching -hyphenation patterns. For example, you need to load a specific font with a -specific script used in the selected language, you can define macros for -quotation marks depending on the language, etc. - -The example shows how to declare such language-specific things. - -\begtt -\def\langset #1 #2{\sdef{_langspecific:#1}{#2}} - -\langset fr {... declare French quotation marks} -\langset de {... declare German quotation marks} -\langset gr {... switch to Greek fonts family} -... etc. -\endtt - -Note that you need not set language-specific phrases (like `\today`) -by this code. Another concept is used for such tasks. See the -section~\ref[langphrases] for more details. diff --git a/Master/texmf-dist/tex/luatex/optex/base/if-macros.opm b/Master/texmf-dist/tex/luatex/optex/base/if-macros.opm deleted file mode 100644 index 462e4960172..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/if-macros.opm +++ /dev/null @@ -1,313 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \newif {Special if-macros, is-macros and loops <2021-02-03>} % preloaded in format - - \_doc ---------------------------- - \secc Classical \code{\\newif} - The \`\newif` macro implements boolean value. - It works as in plain \TeX. It means that - after `\newif\ifxxx` you can use `\xxxtrue` or - `\xxxfalse` to set the boolean value and use `\ifxxx true\else false\fi` - to test this value. The default value is false. - - The macro \`\_newifi` enables to declare `\_ifxxx` and to use `\_xxxtrue` and - `\_xxxfalse`. This means that it is usable for the internal namespace - (`_`prefixed macros). - \_cod ---------------------------- - -\_def\_newif #1{\_ea\_newifA \_string #1\_relax#1} -\_ea\_def \_ea\_newifA \_string\if #1\_relax#2{% - \_sdef{#1true}{\_let#2=\_iftrue}% - \_sdef{#1false}{\_let#2=\_iffalse}% - \_let#2=\_iffalse -} -\_def\_newifi #1{\_ea\_newifiA \string#1\_relax#1} -\_ea\_def \_ea\_newifiA \_string\_if #1\_relax#2{% - \_sdef{_#1true}{\_let#2=\_iftrue}% - \_sdef{_#1false}{\_let#2=\_iffalse}% - \_let#2=\_iffalse -} -\_public \newif ; - - \_doc ---------------------------- - \`\afterfi` `{<what to do>}<ignored>\fi` closes condition by `\fi` and processes - <what to do>. Usage: - \begtt - \if<something> \afterfi{<result is true>} \else \afterfi{<resut is false>} \fi - \endtt - \_cod ---------------------------- - -\_def\_afterfi#1#2\_fi{\_fi#1} -\_def\afterfi#1#2\fi{\_fi#1} - - \_doc ---------------------------- - \secc Loops - The \`\loop` `<codeA> \ifsomething <codeB>` \`\repeat` loops `<codeA><codeB>` - until `\ifsomething` is false. Then `<codeB>` is not executed and loop is - finished. This works like in plain \TeX, but implementation is somewhat - better (you can use `\else` clause after the `\ifsomething`). - - There are public version `\loop...\repeat` and private version - \`\_loop` ...\`\_repeat`. You cannot mix both versions in one loop. - - The `\loop` macro keeps its original plain TeX meaning. It is not - expandable and nested `\loop`s are possible only in a \TeX/ group. - \_cod ---------------------------- - -\_long\_def \_loop #1\_repeat{\_def\_body{#1}\_iterate} -\_long\_def \loop #1\repeat{\_def\_body{#1}\_iterate} -\_let \_repeat=\_fi % this makes \loop...\if...\repeat skippable -\_let \repeat=\_fi -\_def \_iterate {\_body \_ea \_iterate \_fi} - - \_doc ----------------------------- - \`\foreach` `<list>`\`\do` `{<what>}` - repeats `<what>` for each element of the - `<list>`. The `<what>` can include `#1` which is substituted by each - element of the `<list>`. The macro is expandable. - \nl - \`\foreach` `<list>`\`\do` `<parameter-mask>{<what>}` - reads parameters from <list> repeatedly and does <what> for each such reading. - The parameters are declared by <parameter-mask>. Examples: - \begtt - \foreach (a,1)(b,2)(c,3)\do (#1,#2){#1=#2 } - \foreach word1,word2,word3,\do #1,{Word is #1.} - \foreach A=word1 B=word2 \do #1=#2 {"#1 is set as #2".} - \endtt - Note that `\foreach <list>\do {<what>}` is equivalent to `\foreach <list>\do #1{<what>}`. - - Recommendation: it is better to use private variants of \`\_foreach`. - When the user writes `\input tikz` then `\foreach` macro is redefined! The - private variants use \`\_do` separator instead `\do` separator. - \_cod ----------------------------- - -\_newcount\_frnum % the numeric variable used in \fornum -\_def\_do{\_doundefined} % we need to ask \_ifx#1\_do ... - -\_long\_def\_foreach #1\_do #2#{\_isempty{#2}\_iftrue - \_afterfi{\_foreachA{#1}{##1}}\_else\_afterfi{\_foreachA{#1}{#2}}\_fi} -\_long\_def\_foreachA #1#2#3{\_putforstack - \_immediateassignment \_long\_gdef\_fbody#2{\_testparam##1..\_iftrue #3\_ea\_fbody\_fi}% - \_fbody #1#2\_finbody\_getforstack -} -\_def\_testparam#1#2#3\_iftrue{\_ifx###1\_empty\_ea\_finbody\_else} -\_def\_finbody#1\_finbody{} - -\_long\_def\foreach #1\do#2#{\_isempty{#2}\_iftrue - \_afterfi{\_foreachA{#1}{##1}}\_else\_afterfi{\_foreachA{#1}{#2}}\_fi} - - \_doc ----------------------------- - \`\fornum` `<from>..<to>` \`\do` `{<what>}` or - \`\fornumstep` `<num>: <from>..<to>` \`\do` `{<what>}` - repeats `<what>` for each number from `<from>` to `<to>` (with step `<num>` - or with step one). The `<what>` can include `#1` which is substituted by - current number. The <from>, <to>, <step> parameters can be numeric expressions. - The macro is expandable.\nl - The test in the \`\_fornumB` says: if (<to> $\string<$ <current number> - AND <step> is positive) or if (<to> $>$ <current number> AND <step> is - negative) then close loop by `\_getforstack`. Sorry, the condition is - writen by somewhat cryptoid \TeX/ language. - \_cod ----------------------------- - -\_def\_fornum#1..#2\_do{\_fornumstep 1:#1..#2\_do} -\_long\_def\_fornumstep#1:#2..#3\_do#4{\_putforstack - \_immediateassigned{% - \_gdef\_fbody##1{#4}% - \_global\_frnum=\_numexpr#2\_relax - }% - \_ea\_fornumB\_ea{\_the\_numexpr#3\_ea}\_ea{\_the\_numexpr#1}% -} -\_def\_fornumB #1#2{\_ifnum#1\_ifnum#2>0<\_else>\_fi \_frnum \_getforstack - \_else \_ea\_fbody\_ea{\_the\_frnum}% - \_immediateassignment\_global\_advance\_frnum by#2 - \_afterfi{\_fornumB{#1}{#2}}\_fi -} -\_def\fornum#1..#2\do{\_fornumstep 1:#1..#2\_do} -\_def\fornumstep#1:#2..#3\do{\_fornumstep #1:#2..#3\_do} - - \_doc ---------------------------- - The `\foreach` and `\fornum` macros can be nested and arbitrary combined. - When they are nested then use `##1` for the variable of nested level, - `####1` for the variable of second nested level etc. Example: - \begtt - \foreach ABC \do {\fornum 1..5 \do {letter:#1, number: ##1. }} - \endtt - Implementation note: - we cannot use \TeX/-groups for nesting levels because we want to do the - macros expandable. We must implement a special for-stack which saves the - data needed by `\foreach` and `\fornum`. The \`\_putforstack` is used - when `\for*` is initialized and \`\_getforstack` is used when the - `\for*` macro ends. The \`\_forlevel` variable keeps the current nesting - level. If it is zero, then we need not save nor restore any data. - \_cod ---------------------------- - -\_newcount\_forlevel -\_def\_putforstack{\_immediateassigned{% - \_ifnum\_forlevel>0 - \_sxdef{_frnum:\_the\_forlevel\_ea}{\_the\_frnum}% - \_global\_slet{_fbody:\_the\_forlevel}{_fbody}% - \_fi - \_incr\_forlevel -}} -\_def\_getforstack{\_immediateassigned{% - \_decr\_forlevel - \_ifnum\_forlevel>0 - \_global\_slet{_fbody}{_fbody:\_the\_forlevel}% - \_global\_frnum=\_cs{_frnum:\_the\_forlevel}\_space - \_fi -}} -\_ifx\_immediateassignment\_undefined % for compatibility with older LuaTeX - \_let\_immediateassigned=\_useit \_let\_immediateassignment=\_empty -\_fi - - \_doc ---------------------------- - User can define own expandable \"foreach" macro by - \`\foreachdef` `\macro <parameter-mask>{<what>}` - which can be used by `\macro {<list>}`. The macro reads repeatedly parameters from <list> - using <parameter-mask> and does <what> for each such reading. For example - \begtt - \foreachdef\mymacro #1,{[#1]} - \mymacro{a,b,cd,efg,} - \endtt - expands to [a][b][cd][efg]. Such user defined macros are more effecive during processing - than `\foreach` itself because they need not to operate with the for-stack. - \_cod ---------------------------- - -\_def\_foreachdef#1#2#{\_toks0{#2}% - \_long\_edef#1##1{\_ea\_noexpand\_csname _body:\_csstring#1\_endcsname - ##1\_the\_toks0 \_noexpand\_finbody}% - \_foreachdefA#1{#2}} -\_def\_foreachdefA#1#2#3{% - \_long\_sdef{_body:\_csstring#1}#2{\_testparam##1..\_iftrue #3\_cs{_body:\_csstring#1\_ea}\_fi}} - -\_public \foreachdef ; - - \_doc ---------------------------- - \secc Is-macros - There are a collection of macros - \^`\isempty`, \^`\istoksempty`, \^`\isequal`, \^`\ismacro`, - \^`\isdefined`, \^`\isinlist`, \^`\isfile` and \^`\isfont` - with common syntax: - \begtt \catcode`\<=13 - \issomething <params> \iftrue <codeA> \else <codeB> \fi - or - \issomething <params> \iffalse <codeB> \else <codeA> \fi - \endtt - The `\else` part is optional. The `<codeA>` is processed if - `\issomething<params>` generates true condition. The `<codeB>` - is processed if `\issomething<params>` generates false condition. - - The `\iftrue` or `\iffalse` is an integral part of this syntax - because we need to keep skippable nested `\if` conditions. - - Implementation note: - we read this `\iftrue` or `\iffalse` into unseparated parameter and repeat - it because we need to remove an optional space before this command. - - \medskip\noindent - \`\isempty` `{<text>}\iftrue` - is true if the `<text>` is empty. This macro is expandable.\nl - \`\istoksempty` `<tokens variable>\iftrue` - is true if the `<tokens variable>` is empty. It is expandable. - \_cod ---------------------------- - -\_long\_def \_isempty #1#2{\_if\_relax\_detokenize{#1}\_relax \_else \_ea\_unless \_fi#2} -\_def \_istoksempty #1#2{\_ea\_isempty\_ea{\_the#1}#2} -\_public \isempty \istoksempty ; - - \_doc ---------------------------- - \`\isequal` `{<textA>}{<textB>}\iftrue` - is true if the <textA> and <textB> are - equal, only from strings point of view, category codes are ignored. - The macro is expandable. - \_cod ---------------------------- - -\_def\_isequal#1#2#3{\_directlua{% - if "\_luaescapestring{\_detokenize{#1}}"=="\_luaescapestring{\_detokenize{#2}}" - then else tex.print("\_nbb unless") end}#3} -\_public \isequal ; - - \_doc ---------------------------- - \`\ismacro` `\macro{text}\iftrue` is true if macro is defined as {<text>}. - Category codes are ignored in this testing. The macro is expandable. - \_cod ---------------------------- - -\_def\_ismacro#1{\_ea\_isequal\_ea{#1}} -\_public \ismacro ; - - \_doc ---------------------------- - \`\isdefined` `{<csname>}\iftrue` is true if `\<csname>` is defined. - The macro is expandable. - \_cod ---------------------------- - -\_def\_isdefined #1#2{\_ifcsname #1\_endcsname \_else \_ea\_unless \_fi #2} -\_public \isdefined ; - - \_doc ---------------------------- - \`\isinlist` `\list{<text>}\iftrue` is true if the - `<text>` is included the macro body of the `\list`. - The category codes are relevant here. The macro is not expandable. - \_cod ---------------------------- - -\_long\_def\_isinlist#1#2{\_begingroup - \_long\_def\_tmp##1#2##2\_end/_% - {\_endgroup\_if\_relax\_detokenize{##2}\_relax \_ea\_unless\_fi}% - \_ea\_tmp#1\_endlistsep#2\_end/_% -} -\_public \isinlist ; - - \_doc ----------------------------- - \`\isfile` `{<filename>}\iftrue` is true if the file <filename> exists and are - readable by \TeX. - \_cod ----------------------------- - -\_newread \_testin -\_def\_isfile #1{% - \_openin\_testin ={#1}\_relax - \_ifeof\_testin \_ea\_unless - \_else \_closein\_testin - \_fi -} -\_public \isfile ; - - \_doc ----------------------------- - \`\isfont` `{<fontname or [fontfile]>}\iftrue` - is true if a given font exists. The result of this testing - is saved to the \`\_ifexistfam`. - \_cod ----------------------------- - -\_newifi \_ifexistfam -\_def\_isfont#1#2{% - \_begingroup - \_suppressfontnotfounderror=1 - \_font\_testfont={#1}\_relax - \_ifx\_testfont\_nullfont \_def\_tmp{\_existfamfalse \_unless} - \_else \_def\_tmp{\_existfamtrue}\_fi - \_ea \_endgroup \_tmp #2% -} -\_public \isfont ; - - \_doc ---------------------------- - The last macro \`\isnextchar` `<char>{<codeA>}{<codeB>}` - has a different syntax than all other is-macros. - It executes `<codeA>` if next character is equal to <char>. - Else the `<codeB>` is executed. The macro is not expandable. - \_cod ---------------------------- - -\_long\_def\_isnextchar#1#2#3{\_begingroup\_toks0={\_endgroup#2}\_toks1={\_endgroup#3}% - \_let\_tmp= #1\_futurelet\_next\_isnextcharA -} -\_def\_isnextcharA{\_the\_toks\_ifx\_tmp\_next0\_else1\_fi\_space} - -\_public \isnextchar ; - - -\_endcode - -2021-02-03 public version of \loop and \foreach are \long -2020-05-22 \foreach, \fornum: all settings are global, independent on TeX group -2020-05-06 \isnextchar: \let\tmp=#1 -> \let\tmp= #1 (bug fix, #1 should be space) -2020-05-02 \newif bug fix -2020-04-15 \fornumstep 3: 1..12 instead \fornum 1..12\step 3 -2020-04-15 \fornum, \foreach can be nested without groups -2020-04-01 implemented diff --git a/Master/texmf-dist/tex/luatex/optex/base/keyval.opm b/Master/texmf-dist/tex/luatex/optex/base/keyval.opm deleted file mode 100644 index b0462296b37..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/keyval.opm +++ /dev/null @@ -1,82 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \readkv {Key-value dictionaries <2020-12-21>} % preloaded in format - - \_doc ---------------------------- - {\bf Implementation.} - The \`\readkv` expands its parameter and does replace-strings in order to - remove spaces around equal signs and after commas. Double commas are - removed. Then \`\_kvscan` reads the parameters list finished by the double - comma and saves values to `\_kv:<key>` macros.\nl - The \`\kv``{<key>}` expands the `\_kv:<key>` macro. If this macro isn't - defined then \`\_kvunknown` is processed. You can re-define it if you want. - \_cod ---------------------------- - -\_def\_readkv#1{\_ea\_def\_ea\_tmpb\_ea{#1}% - \_replstring\_tmpb{= }{=}\_replstring\_tmpb{ =}{=}% - \_replstring\_tmpb{, }{,}\_replstring\_tmpb{,,}{,}% - \_ea \_kvscan \_tmpb,,=,} -\_def\_kvscan #1#2=#3,{\_ifx#1,\_else \_sdef{_kv:#1#2}{#3}\_ea\_kvscan\_fi} -\_def\_kv#1{\_trycs{_kv:#1}{\_kvunknown}} -\_def\_kvunknown{???} - -\public \readkv \kv ; - -\_endcode - -Users or macro programmers can define macros with options in key=value format. -It means a comma-separated list of equations key=value. First, we give an -example. - -Suppose that you want to define a macro `\myframe` with options: color of -rules, color of text inside the frame, rule-width, space between text and -rules. You want to use this macro as: - -\begtt -\myframe [margins=5pt,rule-width=2pt,frame-color=\Red,text-color=\Blue] {text1} -or -\myframe [frame-color=\Blue] {text2} % other parameters are default -\endtt -% -You can define `\myframe` as follows: - -\begtt -\def\myframedefaults{% defaults: - frame-color=\Black, % color of frame rules - text-color=\Black, % color ot text nside the frame - rule-width=0.4pt, % width of rules used in the frame - margins=2pt, % space between text inside and rules. -} -\optdef\myframe [] #1{\bgroup - \ea\addto\ea\myframedefaults\ea{\ea,\the\opt}% - \readkv\myframedefaults - \rulewidth=\kv{rule-width} - \hhkern=\kv{margins}\vvkern=\kv{margins}\relax - \kv{frame-color}\frame{\kv{text-color}\strut #1}% - \egroup} -\endtt -% -We recommend using \^`\optdef` for defining macros with optional parameters -written in `[]`. Then the optional parameters are saved in the \^`\opt` tokens -register. First: we append the \^`\opt` (actual optional parameters) to -`\myframedefault` by \^`\addto` macro. -Second: we read the parameters by -\^`\readkv{<pramaters list>}` macro. -Third: the values can be used by expandable \^`\kv{<key>}` macro. -The \^`\kv{<key>}` returns `???` if such key is not declared. - -You can use keys without values in the parameters list too, but with -additional care. For example, suppose `draft` option without parameter. -If a user writes `\myframe [..., draft, ...]{text}` then `\myframe` should behave differently. -We have to add `DRAFTv=0,` in `\myframedefault` macro. -Moreover, `\myframe` macro must include preprocessing of `\myframedefault` using -\^`\replstring` which replaces the occurrence of `draft` by `DRAFTv=1`. -\begtt -\optdef\myframe [] #1{... - \ea\addto\ea\myframedefaults\ea{\the\opt}% - \replstring\myframedefaults{draft}{DRAFTv=1}% - \readkv\myframedefaults - ... - \ifnum\kv{DRAFTv}=1 draft mode\else normal mode\fi - ...} -\endtt diff --git a/Master/texmf-dist/tex/luatex/optex/base/languages.opm b/Master/texmf-dist/tex/luatex/optex/base/languages.opm deleted file mode 100644 index ff9373b7202..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/languages.opm +++ /dev/null @@ -1,188 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \_mtext {Languages <2021-01-21>} % preloaded in format - - \_doc ----------------------------- - Only four words are generated by \OpTeX/ macros: \"Chapter", - \"Table", \"Figure" and \"Subject". These phrases can be generated depending - on the current value of `\language` register, if you use \`\_mtext``{<phrase-id>}`, - specially `\_mtext{chap}`, `\_mtext{t}`, `\_mtext{f}` or `\_mtext{subj}`. - If your macros generate more words then - you can define such words by `\sdef{_mt:<phrase-id>:<lang>}` where - `<phrase-id>` is a label for the declared word and `<lang>` is a language shortcut - (iso code). - \_cod ----------------------------- - -\_def\_mtext#1{\_trycs{_mt:#1:\_trycs{_lan:\_the\_language}{en}} - {\_csname _mt:#1:en\_endcsname}} - -\_sdef{_mt:chap:en}{Chapter} \_sdef{_mt:chap:cs}{Kapitola} \_sdef{_mt:chap:sk}{Kapitola} -\_sdef{_mt:t:en}{Table} \_sdef{_mt:t:cs}{Tabulka} \_sdef{_mt:t:sk}{Tabuľka} -\_sdef{_mt:f:en}{Figure} \_sdef{_mt:f:cs}{Obrázek} \_sdef{_mt:f:sk}{Obrázok} -\_sdef{_mt:subj:en}{Subject} \_sdef{_mt:subj:cs}{Věc} \_sdef{_mt:subj:sk}{Vec} - - \_doc ----------------------------- - Using \`\_langw` `<lang> <chapter> <table> <figure> <subject>` you can - declare these words more effectively: - \maxlines=13 - \_cod ----------------------------- - -\_def \_langw #1 #2 #3 #4 #5 {% - \_sdef{_mt:chap:#1}{#2}\_sdef{_mt:t:#1}{#3}\_sdef{_mt:f:#1}{#4}% - \_sdef{_mt:subj:#1}{#5}% -} - -\_langw en Chapter Table Figure Subject -%-------------------------------------------------------------- -\_langw cs Kapitola Tabulka Obrázek Věc -\_langw de Kapitel Tabelle Abbildung Betreff -\_langw es Capítulo Tabla Figura Sujeto -\_langw fr Chaptire Tableau Figure Matière -\_langw it Capitolo Tabella Fig. Oggetto -\_langw pl Rozdział Tabela Ilustracja Temat -\_langw gr Κεφάλαιο Πίνακας Σχήμα θέμα -\_langw ru Глава Таблица Рисунок Предмет -\_langw sk Kapitola Tabuľka Obrázok Vec - - \_doc ----------------------------- - You can add more words as you wish. For example \`\today` macro: - \_cod ----------------------------- - -\_def \_monthw #1 #2 #3 #4 #5 #6 #7 {% - \_sdef{_mt:m1:#1}{#2}\_sdef{_mt:m2:#1}{#3}\_sdef{_mt:m3:#1}{#4}% - \_sdef{_mt:m4:#1}{#5}\_sdef{_mt:m5:#1}{#5}\_sdef{_mt:m6:#1}{#5}% - \_monthwB #1 -} -\_def \_monthwB #1 #2 #3 #4 #5 #6 #7 {% - \_sdef{_mt:m7:#1}{#2}\_sdef{_mt:m8:#1}{#3}\_sdef{_mt:m9:#1}{#4}% - \_sdef{_mt:m10:#1}{#5}\_sdef{_mt:m11:#1}{#5}\_sdef{_mt:m12:#1}{#5}% -} - -\_monthw en January February March April May June - July August September October November December -\_monthw cs ledna února března dubna května června - července srpna září října listopadu prosince -\_monthw sk januára februára marca apríla mája júna - júla augusta septembra októbra novembra decembra -\_monthw it gennaio febbraio marzo aprile maggio giugno - luglio agosto settembre ottobre novembre dicembre - - -\_sdef{_mt:today:en}{\_mtext{m\_the\_month} \_the\_day, \_the\_year} -\_sdef{_mt:today:cs}{\_the\_day.~\_mtext{m\_the\_month} \_the\_year} -\_slet{_mt:today:sk}{_mt:today:cs} - -\_def\_today{\_mtext{today}} -\_public \today ; - - \_doc ----------------------------- - Quotes should be tagged by `\"<text>"` and `\'<text>'` if `\<iso-code>quotes` - is declared at beginning of the document (for example `\enquotes`). - If not, then the control - sequences `\"` and `\'` are undefined. Remember, that they are used in - another meaning when the `\oldaccents` command is used. - The macros `\"` and `\'` are not defined as `\protected` because we need - their expansion when `\outlines` are created. - User can declare quotes by \^`\quoteschars``<clqq><crqq><clq><crq>`, where - `<clqq>...<crqq>` are normal quotes and `<clq>...<crq>` are alternative quotes. - or use \`\altquotes` to swap between the meaning of these two types of quotes. - \nl - \`\enquotes`, \`\csquotes`, \`\dequotes`, \`\frquotes` etc. are defined here. - \_cod ----------------------------- - -\_def \_enquotes {\_quoteschars “”‘’} -\_def \_csquotes {\_quoteschars „“‚‘} -\_def \_frquotes {\_quoteschars “”«»} -\_let \_plquotes = \_frquotes -\_let \_esquotes = \_frquotes -\_let \_grquotes = \_frquotes -\_let \_ruquotes = \_frquotes -\_let \_itquotes = \_frquotes -\_let \_skquotes = \_csquotes -\_let \_dequotes = \_csquotes - - \_doc ----------------------------- - The \`\quoteschars``<lqq><rqq><lq><rq>` defines `\"` and `\"` as `\_qqA` - in in normal mode and as expadable macros in outline mode. - We want to well process the common cases: \code{\\"`&`"} or \code{\\"`\{`"}. - This is the reason why the quotes parameter is read in verbatim mode and retokenized - again by `\scantextokens`. We want to allow to quote the quotes mark - itself by \code{\\"{`"`}"}. This is the reason why the sub-verbatim mode is - used when the first character is \code{\{} in the parameter.\nl - The `\"` is defined as `\_qqA\_qqB<lqq><rqq>` and `\'` as `\_qqA\_qqC<lq><rq>`. - The \`\_qqA``\_qqB<clqq><crqq>` runs \`\_qqB``<lqq><rqq><text>"`.\nl - The \`\_regquotes``\""<L><R>` does `\def\"#1"{<L>#1<R>}` for outlines but the `"` - separator is active (because `"` and `'` are active in \^`\pdfunidef`). - \_cod ----------------------------- - -\_def \_quoteschars #1#2#3#4{\_def\_altquotes{\_quoteschars#3#4#1#2}\_public\altquotes;% - \_protected\_def \"{\_qqA\_qqB#1#2}\_protected\_def \'{\_qqA\_qqC#3#4}% - \_regmacro{}{}{\_regquotes\""#1#2\_regquotes\''#3#4}} - -\_def\_qqA#1#2#3{\_bgroup\_setverb \_catcode`\ =10 - \_isnextchar\_bgroup{\_catcode`\{=1 \_catcode`\}=2 #1#2#3}{#1#2#3}} -\_long\_def\_qqB#1#2#3"{\_egroup#1\_scantextokens{#3}#2} -\_long\_def\_qqC#1#2#3'{\_egroup#1\_scantextokens{#3}#2} -\_def\_regquotes#1#2#3#4{\_bgroup \_lccode`~=`#2\_lowercase{\_egroup \_def#1##1~}{#3##1#4}} - - \_doc ----------------------------- - Sometimes should be usable to leave the markup `"such"` or `'such'` i.e.~without - the first backslash. Then you can make the characters `"` and `'` active - by the \`\activequotes` macro and leave quotes without the first backslash. - First, declare `\<iso-code>quotes`, then \^`\altquotes` (if needed) and finally - \^`\activequotes`. - \_cod ----------------------------- - -\_def\_activequotes{\_let\_actqq=\"\_adef"{\_actqq}\_let\_actq=\'\_adef'{\_actq}% - \_regmacro{}{}{\_adef"{\"}\_adef'{\'}}} - -\_public \quoteschars \activequotes \enquotes \csquotes \skquotes \frquotes \plquotes - \esquotes \grquotes \ruquotes \itquotes \dequotes ; - - \_doc ----------------------------- - Bibliography references generated by \^`\usebib` uses more - language-dependent phrases. They are declared here. We don't want to save - all these phrases into the format, so the trick with {`\_endinput`} - is used here. When \^`\usebib` is processed then the following part of the file - `languages.opm` is read again. - - Only phrases of few languages are declared here now. If you want to declare - phrases of your language, please create an \"issue" or a \"request" at - \url{https://github.com/olsak/OpTeX} or send me an email with new - phrases for your language (or language you know:). I am ready to put them here. - Temporarily, you can put your definitions into `\bibtexhook` token list. - \_cod ----------------------------- - -\_endinput % don't save these \def's to the format - -\_def\_langb#1 #2#3#4#5#6#7#8#9{\_def\_mbib##1##2{\_sdef{_mt:bib.##2:#1}{##1}}% - \_mbib{#2}{and}\_mbib{#3}{etal}\_mbib{#4}{edition}\_mbib{#5}{citedate}\_mbib{#6}{volume}% - \_mbib{#7}{number}\_mbib{#8}{prepages}\_mbib{#9}{postpages}\_langbA} -\_def\_langbA#1#2#3#4#5#6#7{\_mbib{#1}{editor}\_mbib{#2}{editors}\_mbib{#3}{available}% - \_mbib{#4}{availablealso}\_mbib{#5}{bachthesis}\_mbib{#6}{masthesis}\_mbib{#7}{phdthesis}} - -\_langb en {, and } { et al.} { ed.} {cit.~} {Vol.~} {No.~} {pp.~} {~p.} {,~ed.} {,~eds.} - {Available from } {Available also from } - {Bachelor's Thesis} {Master's Thesis} {Ph.D. Thesis} -%------------------------------------------------------------------------------------------ -\_langb cs { a } { a~kol.} { vyd.} {vid.~} {ročník~} {č.~} {s.~} {~s.} {,~editor} {,~editoři} - {Dostupné na } {Dostupné též na } - {Bakalářská práce} {Diplomová práce} {Disertační práce} -\_langb sk { a } { a~kol.} { vyd.} {vid.~} {ročník~} {č.~} {s.~} {~s.} {,~editor} {,~editoři} - {Dostupné na } {Dostupné tiež na } - {Bakalárska práca} {Diplomová práca} {Dizertačná práca} - -% \_<lang>dateformat year/month/day\relax, for example: \_csdateformat 2020/05/21\relax -% This is used in iso690 bib-style when the field "citedate" is used. - -\_def\_endateformat #1/#2/#3\relax{#1-#2-#3} -% \_csdateformat 2020/05/21\relax -> \hbox{21. 5. 2020} -\_def\_csdateformat #1/#2/#3\relax{\hbox{\_tmpnum=#3 \_the\_tmpnum. \_tmpnum=#2 \_the\_tmpnum. #1}} -\_let\_skdateformat =\_csdateformat - -\_endcode % ------------------------------------- - -2021-01-21 more robust quotes in outlines -2020-12-05 bib phrases moved here -2020-04-29 Obrazek -> Abbildung: bug fixed -2020-03-15 introduced diff --git a/Master/texmf-dist/tex/luatex/optex/base/lists.opm b/Master/texmf-dist/tex/luatex/optex/base/lists.opm deleted file mode 100644 index 189719302dd..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/lists.opm +++ /dev/null @@ -1,128 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \begitems {Lists: begitems, enditems <2021-03-10>} % preloaded in format - - \_doc ----------------------------- - \`\_aboveliskip` is used above the list of items,\nl - \`\_belowliskip` is used below the list of items and\nl - \`\_interliskip` is used between items.\nl - \`\_listskipA` is used as `\listskipamount` at level 1 of items.\nl - \`\_listskipB` is used as `\listskipamount` at other levels.\nl - \`\_setlistskip` sets the skip dependent on the current level of items - \_cod ----------------------------- - -\_def\_aboveliskip {\_removelastskip \_penalty-100 \_vskip\_listskipamount} -\_def\_belowliskip {\_penalty-200 \_vskip\_listskipamount} -\_def\_interliskip {} -\_def\_listskipA {\_medskipamount} -\_def\_listskipB {0pt plus.5\_smallskipamount} - -\_def\_setlistskip {% - \_ifnum \_ilevel = 1 \_listskipamount = \_listskipA \_relax - \_else \_listskipamount = \_listskipB \_relax - \_fi} - - \_doc ----------------------------- - The \`\itemnum` is locally reset to zero in each group declared by - `\begitems`. So nested lists are numbered independently. Users can set - initial value of `\itemnum` to another value after `\beitems` if they want. - \nl - Each level of nested lists is indented by the new `\iindent` from left. - The default item mark is `\_printitem`. - \nl - The \`\begitems` runs `\_aboveliskip` only if we are not near below a title, - where a vertical skip is placed already and where the `\penalty` 11333 is. - It activates `*` and defines it as \`\_startitem`. - \nl - The \`\enditems` runs `\_isnextchar\_par{}{\_noindent}` thus the next - paragraph is without indentation if there is no empty line between - the list and this paragraph (it is similar behavior as after display math). - \_cod ----------------------------- - -\_newcount\_itemnum \_itemnum=0 -\_newtoks\_printitem - -\_def\_begitems{\_par - \_bgroup - \_advance \_ilevel by1 - \_setlistskip - \_ifnum\_lastpenalty<10000 \_aboveliskip \_fi - \_itemnum=0 \_adef*{\_relax\_ifmmode*\_else\_ea\_startitem\_fi} - \_advance\_leftskip by\_iindent - \_printitem=\_defaultitem - \_the\_everylist \_relax -} -\_def\_enditems{\_par\_belowliskip\_egroup \_isnextchar\_par{}{\_noindent}} - -\_def\_startitem{\_par \_ifnum\_itemnum>0 \_interliskip \_fi - \_advance\_itemnum by1 - \_the\_everyitem \_noindent\_llap{\_the\_printitem}\_ignorespaces -} -\_public \begitems \enditems \itemnum ; - - \_doc ---------------------------- - \`\novspaces` sets \`\listskipamount` to 0pt. - \_cod ---------------------------- - -\_def\_novspaces {\_removelastskip \_listskipamount=0pt \_relax} -\_public \novspaces ; - - \_doc ----------------------------- - Various item marks are saved in `\_item:<letter>` macros. - You can re-define then or define more such macros. - The \`\style` `<letter>` does \`\_printitem``={\_item:<letter>}`. - More exactly: \^`\begitems` does `\_printitem=`\^`\defaultitem` first, - then \`\style` `<letter>` does \`\_printitem``={\_item:<letter>}` - when it is used and finally, `\_startitem` alias `*` uses `\_printitem`. - \_cod ----------------------------- - -\_def\_style#1{% - \_ifcsname _item:#1\_endcsname \_printitem=\ea{\_csname _item:#1\_endcsname}% - \_else \_printitem=\_defaultitem \_fi -} -\_sdef{_item:o}{\_raise.4ex\_hbox{$\_scriptscriptstyle\_bullet$} } -\_sdef{_item:-}{- } -\_sdef{_item:n}{\_the\_itemnum. } -\_sdef{_item:N}{\_the\_itemnum) } -\_sdef{_item:i}{(\_romannumeral\_itemnum) } -\_sdef{_item:I}{\_uppercase\_ea{\_romannumeral\_itemnum}\_kern.5em} -\_sdef{_item:a}{\_athe\_itemnum) } -\_sdef{_item:A}{\_uppercase\_ea{\_athe\_itemnum}) } -\_sdef{_item:x}{\_raise.3ex\_fullrectangle{.6ex}\_kern.4em} -\_sdef{_item:X}{\_raise.2ex\_fullrectangle{1ex}\_kern.5em} - - \_doc ----------------------------- - \`\_athe``{<num>}` returns the `<num>`s lowercase letter from the alphabet.\nl - \`\_fullrectangle``{<dimen>}` prints full rectangle with given `<dimen>`. - \_cod ----------------------------- - -\_def\_fullrectangle#1{\_hbox{\_vrule height#1 width#1}} - -\_def\_athe#1{\_ifcase#1?\_or a\_or b\_or c\_or d\_or e\_or f\_or g\_or h\_or - i\_or j\_or k\_or l\_or m\_or n\_or o\_or p\_or q\_or r\_or s\_or t\_or - u\_or v\_or w\_or x\_or y\_or z\_else ?\_fi -} -\_public \style ; - - \_doc ----------------------------- - The \`\begblock` macro selects fonts from footnotes \^`\_fnset` - and opens new indentation in a group. - \`\endblock` closes the group. - This is implemented as an counterpart - of Markdown's Blockquotes. Redefine these macros if you want to declare - different design. - The \ulink[http://petr.olsak.net/optex/optex-tricks.html\#greyblock]{\OpTeX/ trick 0031} - shows how to create blocks with grey background splittable to more pages. - \_cod ----------------------------- - -\_def\_begblock{\_bgroup\_fnset \_medskip \_advance\_leftskip by\_iindent \_firstnoindent} -\_def\_endblock{\_par\_medskip\_egroup\_isnextchar\_par{}{\_noindent}} - -\_public \begblock \endblock ; - - -\_endcode % ------------------------------------- - -2021-03-10 \_ifmmode*\_else\_ea\_startitem\_fi added to * defintition -2020-04-21 \isnextchar\par added to \enditems -2020-03-18 introduced diff --git a/Master/texmf-dist/tex/luatex/optex/base/logos.opm b/Master/texmf-dist/tex/luatex/optex/base/logos.opm deleted file mode 100644 index a510a74a304..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/logos.opm +++ /dev/null @@ -1,61 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \TeX {Logos TeX, LuaTeX, etc. <2020-02-28>} % preloaded in format - - \_doc ---------------------------- - Despite plain \TeX/ each macro for logos ends by \`\ignoreslash`. - This macro ignores the next slash if it is present. - You can `use \TeX/ like this` for protecting the space following the logo. - This is visually more comfortable. - The macros \`\TeX`, \`\OpTeX`, \`\LuaTeX`, \`\XeTeX` are defined. - \_cod ---------------------------- - -\_protected\_def \_TeX {T\_kern-.1667em\_lower.5ex\_hbox{E}\_kern-.125emX\_ignoreslash} -\_protected\_def \_OpTeX {Op\_kern-.1em\_TeX} -\_protected\_def \_LuaTeX {Lua\_TeX} -\_protected\_def \_XeTeX {X\_kern-.125em\_phantom E% - \_pdfsave\_rlap{\_pdfscale{-1}{1}\_lower.5ex\_hbox{E}}\_pdfrestore \_kern-.1667em \_TeX} - -\_def\_ignoreslash {\_isnextchar/\_ignoreit{}} - -\_public \TeX \OpTeX \LuaTeX \XeTeX \ignoreslash ; - - \_doc ----------------------------- - The \`\_slantcorr` macro expands to the slant-correction of the current font. It is - used to shifting A if the \`\LaTeX` logo is in italic. - \_cod ----------------------------- - -\_protected\_def \_LaTeX{\_tmpdim=.42ex L\_kern-.36em \_kern \_slantcorr % slant correction - \_raise \_tmpdim \_hbox{\_thefontscale[710]A}% - \_kern-.15em \_kern-\_slantcorr \_TeX} -\_def\_slantcorr{\_ea\_ignorept \_the\_fontdimen1\_font\_tmpdim} - -\_public \LaTeX ; - - \_doc ----------------------------- - \`\OPmac`, \`\CS` and \`\csplain` logos. - \_cod ----------------------------- - -\_def\_OPmac{\_leavevmode - \_lower.2ex\_hbox{\_thefontscale[1400]O}\_kern-.86em P{\_em mac}\_ignoreslash} -\_def\_CS{$\_cal C$\_kern-.1667em\_lower.5ex\_hbox{$\_cal S$}\_ignoreslash} -\_def\_csplain{\_CS plain\_ignoreslash} - -\_public \OPmac \CS \csplain ; - - \_doc ---------------------------- - The expandable versions of logos used in Outlines need the expandable - \`\ingnslash` (instead of the \^`\ignoreslash`). - \_cod \_fin ---------------------- - -\_def\_ignslash#1{\_ifx/#1\_else #1\_fi} -\_regmacro {}{}{% conversion for PDF outlines - \_def\TeX{TeX\_ignslash}\_def\OpTeX{OpTeX\_ignslash}% - \_def\LuaTeX{LuaTeX\_ignslash}\_def\XeTeX{XeTeX\_ignslash}% - \_def\LaTeX{LaTeX\_ignslash}\_def\OPmac{OPmac\_ignslash}% - \_def\CS{CS}\_def\csplain{csplain\_ignslash}% -} -\_public \ignslash ; - -\_endcode - diff --git a/Master/texmf-dist/tex/luatex/optex/base/luatex-ini.opm b/Master/texmf-dist/tex/luatex/optex/base/luatex-ini.opm deleted file mode 100644 index e0526a48d61..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/luatex-ini.opm +++ /dev/null @@ -1,136 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \pdfprimitive {LuaTeX initialization code <2020-02-21>} % preloaded in format - -\_let\_pdfpagewidth \pagewidth -\_let\_pdfpageheight \pageheight -\_let\_pdfadjustspacing \adjustspacing -\_let\_pdfprotrudechars \protrudechars -\_let\_pdfnoligatures \ignoreligaturesinfont -\_let\_pdffontexpand \expandglyphsinfont -\_let\_pdfcopyfont \copyfont -\_let\_pdfxform \saveboxresource -\_let\_pdflastxform \lastsavedboxresourceindex -\_let\_pdfrefxform \useboxresource -\_let\_pdfximage \saveimageresource -\_let\_pdflastximage \lastsavedimageresourceindex -\_let\_pdflastximagepages \lastsavedimageresourcepages -\_let\_pdfrefximage \useimageresource -\_let\_pdfsavepos \savepos -\_let\_pdflastxpos \lastxpos -\_let\_pdflastypos \lastypos -\_let\_pdfoutput \outputmode -\_let\_pdfdraftmode \draftmode -\_let\_pdfpxdimen \pxdimen -\_let\_pdfinsertht \insertht -\_let\_pdfnormaldeviate \normaldeviate -\_let\_pdfuniformdeviate \uniformdeviate -\_let\_pdfsetrandomseed \setrandomseed -\_let\_pdfrandomseed \randomseed -\_let\_pdfprimitive \primitive -\_let\_ifpdfprimitive \ifprimitive -\_let\_ifpdfabsnum \ifabsnum -\_let\_ifpdfabsdim \ifabsdim - -\_public - \pdfpagewidth \pdfpageheight \pdfadjustspacing \pdfprotrudechars - \pdfnoligatures \pdffontexpand \pdfcopyfont \pdfxform \pdflastxform - \pdfrefxform \pdfximage \pdflastximage \pdflastximagepages \pdfrefximage - \pdfsavepos \pdflastxpos \pdflastypos \pdfoutput \pdfdraftmode \pdfpxdimen - \pdfinsertht \pdfnormaldeviate \pdfuniformdeviate \pdfsetrandomseed - \pdfrandomseed \pdfprimitive \ifpdfprimitive \ifpdfabsnum \ifpdfabsdim ; - -\_directlua {tex.enableprimitives('pdf',{'tracingfonts'})} - -\_protected\_def \_pdftexversion {\_numexpr 140\_relax} - \_def \_pdftexrevision {7} -\_protected\_def \_pdflastlink {\_numexpr\_pdffeedback lastlink\_relax} -\_protected\_def \_pdfretval {\_numexpr\_pdffeedback retval\_relax} -\_protected\_def \_pdflastobj {\_numexpr\_pdffeedback lastobj\_relax} -\_protected\_def \_pdflastannot {\_numexpr\_pdffeedback lastannot\_relax} - \_def \_pdfxformname {\_pdffeedback xformname} -{\_outputmode=1 - \_xdef\_pdfcreationdate {\_pdffeedback creationdate} -} - \_def \_pdffontname {\_pdffeedback fontname} - \_def \_pdffontobjnum {\_pdffeedback fontobjnum} - \_def \_pdffontsize {\_pdffeedback fontsize} - \_def \_pdfpageref {\_pdffeedback pageref} - \_def \_pdfcolorstackinit {\_pdffeedback colorstackinit} -\_protected\_def \_pdfliteral {\_pdfextension literal} -\_protected\_def \_pdfcolorstack {\_pdfextension colorstack} -\_protected\_def \_pdfsetmatrix {\_pdfextension setmatrix} -\_protected\_def \_pdfsave {\_pdfextension save\_relax} -\_protected\_def \_pdfrestore {\_pdfextension restore\_relax} -\_protected\_def \_pdfobj {\_pdfextension obj } -\_protected\_def \_pdfrefobj {\_pdfextension refobj } -\_protected\_def \_pdfannot {\_pdfextension annot } -\_protected\_def \_pdfstartlink {\_pdfextension startlink } -\_protected\_def \_pdfendlink {\_pdfextension endlink\_relax} -\_protected\_def \_pdfoutline {\_pdfextension outline } -\_protected\_def \_pdfdest {\_pdfextension dest } -\_protected\_def \_pdfthread {\_pdfextension thread } -\_protected\_def \_pdfstartthread {\_pdfextension startthread } -\_protected\_def \_pdfendthread {\_pdfextension endthread\_relax} -\_protected\_def \_pdfinfo {\_pdfextension info } -\_protected\_def \_pdfcatalog {\_pdfextension catalog } -\_protected\_def \_pdfnames {\_pdfextension names } -\_protected\_def \_pdfincludechars {\_pdfextension includechars } -\_protected\_def \_pdffontattr {\_pdfextension fontattr } -\_protected\_def \_pdfmapfile {\_pdfextension mapfile } -\_protected\_def \_pdfmapline {\_pdfextension mapline } -\_protected\_def \_pdftrailer {\_pdfextension trailer } -\_protected\_def \_pdfglyphtounicode {\_pdfextension glyphtounicode } - -\_protected\_edef\_pdfcompresslevel {\_pdfvariable compresslevel} -\_protected\_edef\_pdfobjcompresslevel {\_pdfvariable objcompresslevel} -\_protected\_edef\_pdfdecimaldigits {\_pdfvariable decimaldigits} -\_protected\_edef\_pdfgamma {\_pdfvariable gamma} -\_protected\_edef\_pdfimageresolution {\_pdfvariable imageresolution} -\_protected\_edef\_pdfimageapplygamma {\_pdfvariable imageapplygamma} -\_protected\_edef\_pdfimagegamma {\_pdfvariable imagegamma} -\_protected\_edef\_pdfimagehicolor {\_pdfvariable imagehicolor} -\_protected\_edef\_pdfimageaddfilename {\_pdfvariable imageaddfilename} -\_protected\_edef\_pdfpkresolution {\_pdfvariable pkresolution} -\_protected\_edef\_pdfinclusioncopyfonts {\_pdfvariable inclusioncopyfonts} -\_protected\_edef\_pdfinclusionerrorlevel {\_pdfvariable inclusionerrorlevel} -\_protected\_edef\_pdfgentounicode {\_pdfvariable gentounicode} -\_protected\_edef\_pdfpagebox {\_pdfvariable pagebox} -\_protected\_edef\_pdfminorversion {\_pdfvariable minorversion} -\_protected\_edef\_pdfuniqueresname {\_pdfvariable uniqueresname} -\_protected\_edef\_pdfhorigin {\_pdfvariable horigin} -\_protected\_edef\_pdfvorigin {\_pdfvariable vorigin} -\_protected\_edef\_pdflinkmargin {\_pdfvariable linkmargin} -\_protected\_edef\_pdfdestmargin {\_pdfvariable destmargin} -\_protected\_edef\_pdfthreadmargin {\_pdfvariable threadmargin} -\_protected\_edef\_pdfpagesattr {\_pdfvariable pagesattr} -\_protected\_edef\_pdfpageattr {\_pdfvariable pageattr} -\_protected\_edef\_pdfpageresources {\_pdfvariable pageresources} -\_protected\_edef\_pdfxformattr {\_pdfvariable xformattr} -\_protected\_edef\_pdfxformresources {\_pdfvariable xformresources} -\_protected\_edef\_pdfpkmode {\_pdfvariable pkmode} - -\_public - \pdftexversion \pdftexrevision \pdflastlink \pdfretval \pdflastobj - \pdflastannot \pdfxformname \pdfcreationdate \pdffontname \pdffontobjnum - \pdffontsize \pdfpageref \pdfcolorstackinit \pdfliteral \pdfcolorstack - \pdfsetmatrix \pdfsave \pdfrestore \pdfobj \pdfrefobj \pdfannot - \pdfstartlink \pdfendlink \pdfoutline \pdfdest \pdfthread \pdfstartthread - \pdfendthread \pdfinfo \pdfcatalog \pdfnames \pdfincludechars \pdffontattr - \pdfmapfile \pdfmapline \pdftrailer \pdfglyphtounicode \pdfcompresslevel - \pdfobjcompresslevel \pdfdecimaldigits \pdfgamma \pdfimageresolution - \pdfimageapplygamma \pdfimagegamma \pdfimagehicolor \pdfimageaddfilename - \pdfpkresolution \pdfinclusioncopyfonts \pdfinclusionerrorlevel - \pdfgentounicode \pdfpagebox \pdfminorversion \pdfuniqueresname \pdfhorigin - \pdfvorigin \pdflinkmargin \pdfdestmargin \pdfthreadmargin \pdfpagesattr - \pdfpageattr \pdfpageresources \pdfxformattr \pdfxformresources \pdfpkmode ; - -\_pdfminorversion = 5 -\_pdfobjcompresslevel = 2 -\_pdfcompresslevel = 9 -\_pdfdecimaldigits = 3 -\_pdfpkresolution = 600 - -\_endcode - -Common pdf\TeX/ primitives equivalents are declared here. Initial values are set. diff --git a/Master/texmf-dist/tex/luatex/optex/base/makeindex.opm b/Master/texmf-dist/tex/luatex/optex/base/makeindex.opm deleted file mode 100644 index e5f7b4032e4..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/makeindex.opm +++ /dev/null @@ -1,463 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \makeindex {Makeindex and sorting <2021-02-15>} % loaded in format - - \_doc ----------------------------- - \^`\makeindex` implements sorting algorithm at \TeX/ macro-language level. - You need not any external program. - - There are two passes in the sorting algorithm. The primary pass does not - distinguish between a group of letters (typically non-accented and - accented). If the result of comparing two string is equal in primary pass - then the secondary pass is started. It distinguishes between variously accented - letters. Czech rules, for example, says: not accented before dieresis - before acute before circumflex before ring. At less priority: lowercase - letters must be before uppercase letters. - - The \`\_sortingdata``<iso-code>` implements these rules for the language - <iso-code>. The groups between commas are not distinguished in the first - pass. The second pass distinguishes all characters mentioned in the - `\_sortingdata<iso-code>` (commas are ignored). The order of letters - in the `\_sortingdata<iso-code>` macro is significant for the sorting algorithm. - The Czech rules (`cs`) are implemented here: - \_cod ----------------------------- - -\_def \_sortingdatacs {% - /,{ },-,&,@,% - aAäÄáÁ,% - bB,% - cC,% - čČ,% - dDďĎ,% - eEéÉěĚ,% - fF,% - gG,% - hH,% - ^^T^^U^^V,% ch Ch CH - iIíÍ,% - jJ,% - kK,% - lLĺĹľĽ,% - mM,% - nNňŇ,% - oOöÖóÓôÔ,% - pP,% - qQ,% - rRŕŔ,% - řŘ,% - sS,% - šŠ,% - tTťŤ,% - uUüÜúÚůŮ,% - vV,% - wW,% - xX,% - yYýÝ,% - zZ,% - žŽ,% - 0,1,2,3,4,5,6,7,8,9,'% -} - - \_doc ----------------------------- - Characters ignored by the sorting algorithm are declared in \`\_ignoredchars``<iso-code>`. - The compound characters (two or more characters interpreted as one - character in the sorting algorithm) are mapped to single invisible characters - in \`\_compoundchars``<iso-code>`. Czech rules declare ch or Ch or CH as - a single letter sorted between H and I. See \`\_sortingdatacs` above where - these declared characters are used. - - The characters declared in `\_ignoredchars` are ignored in the first pass - without additional condition. All characters are taken into account in - second pass: ASCII characters with code $\string<65$ are sorted first if they - are not mentioned in the `\_sortingdata<iso-code>` macro. - Others not mentioned characters have undefined behavior during sorting. - \_cod ----------------------------- - -\_def \_ignoredcharscs {.,;?!:'"|()[]<>=+} -\_def \_compoundcharscs {ch:^^T Ch:^^U CH:^^V} % DZ etc. are sorted normally - - \_doc ----------------------------- - Slovak sorting rules are the same as Czech. The macro `\_sortingdatacs` - includes Slovak letters too. Compound characters are the same. - English sorting rules can be defined by `\_sortingdatacs` too because - English alphabet is a subset of the Czech and Slovak alphabets. Only - difference: \`\_compoundcharsen` is empty in English rules. - - You can declare these macros for more languages if you wish to use - `\makeindex` with sorting rules with respect to your language. - Note: if you need to map compound characters to a character, don't use - `^^I` or `^^M` because these characters have very specific category codes. - And use space to separate more mappings, like in \`\_compoundcharscs` above. - \_cod ----------------------------- - -\_let \_sortingdatask = \_sortingdatacs -\_let \_compoundcharssk = \_compoundcharscs -\_let \_ignoredcharssk = \_ignoredcharscs -\_let \_sortingdataen = \_sortingdatacs -\_def \_compoundcharsen {} -\_let \_ignoredcharsen = \_ignoredcharscs - - \_doc ----------------------------- - Preparing to primary pass is implemented by the \`\_setprimarysorting` macro. - It is called from `\makeindex` macro and all processing of sorting is in a group. - \_cod ----------------------------- - -\_def\_setprimarysorting {% - \_ea\_let \_ea\_sortingdata \_csname _sortingdata\_sortinglang\_endcsname - \_ea\_let \_ea\_compoundchars \_csname _compoundchars\_sortinglang\_endcsname - \_ea\_let \_ea\_ignoredchars \_csname _ignoredchars\_sortinglang\_endcsname - \_ifx \_sortingdata\_relax \_addto\_nold{ sortingdata}% - \_let \_sortingdata = \_sortingdataen \_fi - \_ifx \_compoundchars\_relax \_addto\_nold{ compoundchars}% - \_let \_compoundchars = \_compoundcharsen \_fi - \_ifx \_ignoredchars\_relax \_addto\_nold{ ignoredchars}% - \_let \_ignoredchars = \_ignoredcharsen \_fi - \_ifx \_compoundchars\_empty \_else - \_edef \_compoundchars {\_detokenize\_ea{\_compoundchars} }\_fi % all must be catcode 12 - \_def \_act ##1{\_ifx##1\_relax \_else - \_ifx##1,\_advance\_tmpnum by1 - \_else \_lccode`##1=\_tmpnum \_fi - \_ea\_act \_fi}% - \_tmpnum=65 \_ea\_act \_sortingdata \_relax - \_def \_act ##1{\_ifx##1\_relax \_else - \_lccode`##1=`\^^I - \_ea\_act \_fi}% - \_ea\_act \_ignoredchars \_relax -} - - \_doc ----------------------------- - Preparing to secondary pass is implemented by the \`\_setsecondarysorting` macro. - \_cod ----------------------------- - -\_def\_setsecondarysorting {% - \_def \_act ##1{\_ifx##1\_relax \_else - \_ifx##1,\_else \_advance\_tmpnum by1 \_lccode`##1=\_tmpnum \_fi - \_ea\_act \_fi}% - \_tmpnum=64 \_ea\_act \_sortingdata \_relax -} - - \_doc ----------------------------- - Strings to be sorted are prepared in `\,<string>` control sequences - (to save `\TeX` memory). - The \`\_preparesorting` `\,<string>` converts `<string>` to `\_tmpb` - with respect to the data initialized in \^`\_setprimarysorting` or - \^`\_setsecondarysorting`.\nl - The compoud characters are converted to single characters by the - \`\_docompound` macro. - \_cod ----------------------------- - -\_def \_preparesorting #1{% - \_edef \_tmpb {\_ea\_ignorefirst\_csstring #1}% \,<string> -> <string> - \_ea \_docompound \_compoundchars \_relax:{} % replace compound characters - \_lowercase \_ea{\_ea\_def \_ea\_tmpb \_ea{\_tmpb}}% convert in respect to \_sortingdata - \_ea\_replstring \_ea\_tmpb \_ea{\_csstring\^^I}{}% remove ignored characters -} -\_def \_docompound #1:#2 {% - \_ifx\_relax#1\_else \_replstring\_tmpb {#1}{#2}\_ea\_docompound \_fi -} -\_def \_ignorefirst#1{} - - \_doc ----------------------------- - Macro \`\_isAleB` `\,<string1> \,<string2>` returns the result of comparison - of given two strings to \`\_ifAleB` control sequence. Usage: - `\isAleB \,<string1> \,<string2> \_ifAleB ... \_else ... \_fi` - The converted strings (in respect of the data prepared for first pass) - must be saved as values of `\,<string1>` and `\,<string2>` macros. - The reason is speed: we don't want to convert them repeatedly in each - comparison. - \nl - The macro - \`\_testAleB` `<converted string1>&\_relax<converted-string2>\_relax \,<string1>\,<string2>`\nl - does the real work. It reads the first character from both converted strings, compares them - and if it is equal then calls itself recursively else gives the result. - \_cod ----------------------------- - -\_newifi \_ifAleB - -\_def\_isAleB #1#2{% - \_edef\_tmpb {#1&\_relax#2&\_relax}% - \_ea \_testAleB \_tmpb #1#2% -} -\_def\_testAleB #1#2\_relax #3#4\_relax #5#6{% - \_if #1#3\_if #1&\_testAleBsecondary #5#6% goto to the second pass:: - \_else \_testAleB #2\_relax #4\_relax #5#6% - \_fi - \_else \_ifnum `#1<`#3 \_AleBtrue \_else \_AleBfalse \_fi - \_fi -} -\_def\_testAleBsecondary#1#2{% - \_bgroup - \_setsecondarysorting - \_preparesorting#1\_let\_tmpa=\_tmpb \_preparesorting#2% - \_edef\_tmpb{\_tmpa0\_relax\_tmpb1\_relax}% - \_ea\_testAleBsecondaryX \_tmpb - \_egroup -} -\_def\_testAleBsecondaryX #1#2\_relax #3#4\_relax {% - \_if #1#3\_testAleBsecondaryX #2\_relax #4\_relax - \_else \_ifnum `#1<`#3 \_global\_AleBtrue \_else \_global \_AleBfalse \_fi - \_fi -} - - \_doc ----------------------------- - Merge sort is very effectively implemented by \TeX/ macros. The following - code is created by my son Miroslav. - The \`\_mergesort` macro expects that all items in `\_iilist` are separated - by a comma when it starts. It ends with sorted items in `\_iilist` without commas. - So `\_dosorting` macro must prepare commas between items. - \_cod ----------------------------- - -\_def\_mergesort #1#2,#3{% by Miroslav Olsak - \_ifx,#1% % prazdna-skupina,neco, (#2=neco #3=pokracovani) - \_addto\_iilist{#2,}% % dvojice skupin vyresena - \_sortreturn{\_fif\_mergesort#3}% % \mergesort pokracovani - \_fi - \_ifx,#3% % neco,prazna-skupina, (#1#2=neco #3=,) - \_addto\_iilist{#1#2,}% % dvojice skupin vyresena - \_sortreturn{\_fif\_mergesort}% % \mergesort dalsi - \_fi - \_ifx\_end#3% % neco,konec (#1#2=neco) - \_ifx\_empty\_iilist % neco=kompletni setrideny seznam - \_def\_iilist{#1#2}% - \_sortreturn{\_fif\_fif\_gobbletoend}% % koncim - \_else % neco=posledni skupina nebo \end - \_sortreturn{\_fif\_fif % spojim \indexbuffer+necoa cele znova - \_edef\_iilist{\_ea}\_ea\_mergesort\_iilist#1#2,#3}% - \_fi\_fi % zatriduji: p1+neco1,p2+neco2, (#1#2=p1+neco1 #3=p2) - \_isAleB #1#3\_ifAleB % p1<p2 - \_addto\_iilist{#1}% % p1 do bufferu - \_sortreturn{\_fif\_mergesort#2,#3}% % \mergesort neco1,p2+neco2, - \_else % p1>p2 - \_addto\_iilist{#3}% % p2 do bufferu - \_sortreturn{\_fif\_mergesort#1#2,}% % \mergesort p1+neco1,neco2, - \_fi - \_relax % zarazka, na ktere se zastavi \sortreturn -} -\_def\_sortreturn#1#2\_fi\_relax{#1} \_def\_fif{\_fi} -\_def\_gobbletoend #1\_end{} - - \_doc ----------------------------- - The \`\_dosorting` `\list` macro redefines `\list` as sorted `\list`. - The `\list` have to include control sequences in the form `\<c><string>`. - These control sequences will be sorted with respect to <strings> without - change of meanings of these control sequences. Their meanings are - irrelevant when sorting. The first character <c> in `\<c><string>` should - be whatever. It does not influence the sorting. \OpTeX/ uses comma at - this place for sorting indexes: `\,<word1> \,<word2> \,<word3> ...`. - - The actual language (chosen for hyphenation patterns) is used for - sorting data. If the `\_sortinglang` macro - is defined as `<iso-code>`(for example `\def\sortinglang{de}`) - then this has precedence and actual language is not used. - Moreover, if you specify \`\_asciisortingtrue` then ASCII - sorting will be processed and all language sorting data will be ignored. - \_cod ----------------------------- - -\_newifi \_ifasciisorting \_asciisortingfalse -\_def\_dosorting #1{% - \_begingroup - \_def\_nold{}% - \_ifx\_sotringlang\_undefined \_edef\_sortinglang{\_cs{_lan:\_the\_language}}\_fi - \_ifasciisorting - \_edef\_sortinglang{ASCII}% - \_def \_preparesorting##1{\_edef\_tmpb{\_ea\_ignorefirst\_csstring##1}}% - \_let \_setsecondarysorting=\_relax - \_else - \_setprimarysorting - \_fi - \_message{OpTeX: Sorting \_string#1 (\_sortinglang) ...^^J}% - \_ifx\_nold\_empty\_else \_opwarning{Missing\_nold\_space for language (\_sortinglang)}\_fi - \_def \_act##1{\_preparesorting ##1\_edef##1{\_tmpb}}% - \_ea\_xargs \_ea\_act #1;% - \_def \_act##1{\_addto #1{##1,}}% - \_edef #1{\_ea}\_ea\_xargs \_ea\_act #1;% - \_edef \_iilist{\_ea}\_ea\_mergesort #1\_end,\_end - \_ea\_endgroup - \_ea\_def\_ea#1\_ea{\_iilist}% -} - - \_doc ----------------------------- - The \`\makeindex` prints the index. First, it sorts the `\_iilist` - second, it prints the sorted `\_iilist`, each item is printed - using \^`\_printindexitem`. - \_cod ----------------------------- - -\_def\_makeindex{\_par - \_ifx\_iilist\_empty \_opwarning{index data-buffer is empty. TeX me again}% - \_incr\_unresolvedrefs - \_else - \_dosorting \_iilist % sorting \_iilist - \_bgroup - \_rightskip=0pt plus1fil \_exhyphenpenalty=10000 \_leftskip=\_iindent - \_ea\_xargs \_ea\_printindexitem \_iilist ;\_par - \_egroup - \_fi -} -\_public \makeindex ; - - \_doc ----------------------------- - The \`\_printindexitem` `\,<word>` prints one item to the index. - If `\_,<word>` is defined then this is used instead real <word> - (this exception is declared by `\iis` macro). Else <word> is printed by - \^`\_printii`. Finally, \^`\_printiipages` prints the value of `\,<word>`, - i.e. the list of pages. - \_cod ----------------------------- - -\_def\_printindexitem #1{% - \_ifcsname _\_csstring #1\_endcsname - \_ea\_ea\_ea \_printii \_csname _\_csstring #1\_endcsname &% - \_else - \_ea\_ea\_ea\_printii \_ea\_ignorefirst \_csstring #1&% - \_fi - \_ea\_printiipages #1& -} - - \_doc ----------------------------- - \`\_printii` `<word>&` does more intelligent work because we are working with - words in the form `<main-word>/<sub-word>/<sub-sub-word>`. - The \^`\everyii` tokens register is applied before `\noindent`. User can - declare something special here. - - The \`\_newiiletter``{<letter>}` macro is empty by default. It is invoked if first - letter of index entries is changed. You can declare a design between - index entries here. You can try, for example: - \begtt - \def\_newiiletter#1#2{% - \bigskip \hbox{\setfontsize{at15pt}\bf\uppercase{#1}}\medskip} - \endtt - \_cod ----------------------------- - -\_def\_printii #1#2&{% - \_ismacro\_lastii{#1}\_iffalse \_newiiletter{#1}{#2}\_def\_lastii{#1}\_fi - \_gdef\_currii{#1#2}\_the\_everyii\_noindent - \_hskip-\_iindent \_ignorespaces\_printiiA#1#2//} -\_def\_printiiA #1/{\_if^#1^\_let\_previi=\_currii \_else - \_ea\_scanprevii\_previi/&\_edef\_tmpb{\_detokenize{#1}}% - \_ifx\_tmpa\_tmpb \_iiemdash \_else#1 \_gdef\_previi{}\_fi - \_ea\_printiiA\_fi -} -\_def\_iiemdash{\_kern.1em---\_space} -\_def\_lastii{} -\_def\_newiiletter#1#2{} - -\_def\_scanprevii#1/#2&{\_def\_previi{#2}\_edef\_tmpa{\_detokenize{#1}}} -\_def\_previi{} % previous index item - - \_doc ----------------------------- - \`\_printiipages` `<pglist>&` gets `<pglist>` in the form - `<pg>:<type>,<pg>:<type>,...<pg>:<type>` and it converts them to - `<pg>, <pg>, <from>--<to>, <pg>` etc. The same pages must be printed only once - and continuous consequences of pages must be compressed to the form <from>-<to>. - Moreover, the consequence is continuous only if all pages have the same <type>. - Empty <type> is most common, pages with `b` <type> must be printed as bold - and with `i` `<type>` as italics. - Moreover, the `<pg>` mentioned here are <gpageno>, but we have to print - <pageno>. The following macros solve these tasks. - \_cod ----------------------------- - -\_def\_printiipages#1&{\_let\_pgtype=\_undefined \_tmpnum=0 \_printpages #1,:,\_par} -\_def\_printpages#1:#2,{% state automaton for compriming pages - \_ifx,#1,\_uselastpgnum - \_else \_def\_tmpa{#2}% - \_ifx\_pgtype\_tmpa \_else - \_let\_pgtype=\_tmpa - \_uselastpgnum \_usepgcomma \_pgprint#1:{#2}% - \_tmpnum=#1 \_returnfi \_fi - \_ifnum\_tmpnum=#1 \_returnfi \_fi - \_advance\_tmpnum by1 - \_ifnum\_tmpnum=#1 \_ifx\_lastpgnum\_undefined \_usepgdash\_fi - \_edef\_lastpgnum{\_the\_tmpnum:{\_pgtype}}% - \_returnfi \_fi - \_uselastpgnum \_usepgcomma \_pgprint#1:{#2}% - \_tmpnum=#1 - \_relax - \_ea\_printpages \_fi -} -\_def\_returnfi #1\_relax{\_fi} -\_def\_uselastpgnum{\_ifx\_lastpgnum\_undefined - \_else \_ea\_pgprint\_lastpgnum \_let\_lastpgnum=\_undefined \_fi -} -\_def\_usepgcomma{\_ifnum\_tmpnum>0, \_fi} % comma+space between page numbers -\_def\_usepgdash{\_hbox{--}} % dash in the <from>--<to> form - - \_doc ----------------------------- - You can re-define \`\_pgprint` `<gpageno>:{<iitype>}` - if you need to implement more <iitypes>. - \_cod ----------------------------- - -\_def\_pgprint #1:#2{% - \_ifx ,#2,\_pgprintA{#1}\_returnfi \_fi - \_ifx b#2{\_bf \_pgprintA{#1}}\_returnfi \_fi - \_ifx i#2{\_it \_pgprintA{#1}}\_returnfi \_fi - \_ifx u#2\_pgu{\_pgprintA{#1}}\_returnfi \_fi - \_pgprintA{#1}\_relax -} -\_def\_pgprintA #1{\_ilink[pg:#1]{\_cs{_pgi:#1}}} % \ilink[pg:<gpageno>]{<pageno>} -\_def\_pgu#1{\_leavevmode\_vtop{\_hbox{#1}\kern.3ex\_hrule}} - - \_doc ----------------------------- - The \`\iindex``{<word>}` puts one <word> to the index. It writes - \^`\_Xindex``{<word>}{<iitype>}` to the `.ref` file. - All other variants of indexing macros expand internally to `\iindex`. - \_cod ----------------------------- - -\_def\_iindex#1{\_isempty{#1}\_iffalse - \_openref{\_def~{ }\_ewref\_Xindex{{#1}{\_iitypesaved}}}\_fi} -\_public \iindex ; - - \_doc ----------------------------- - The \`\_Xindex``{<word>}{<iitype>}` stores `\,<word>` to the `\_iilist` if - there is the first occurrence of the <word>. The list of pages where `<word>` - occurs, is the value of the macro `\,<word>`, so the `<gpageno>:<iitype>` - is appended to this list. - Moreover, we need a mapping from <gpageno> to `<pageno>`, because we print - `<pageno>` in the index, but hyperlinks are implemented by `<gpageno>`. - So, the macro `\_pgi:<gpageno>` is defined as `<pageno>`. - \_cod ----------------------------- - -\_def \_iilist {} -\_def \_Xindex #1#2{\_ea\_XindexA \_csname ,#1\_ea\_endcsname \_currpage {#2}} -\_def \_XindexA #1#2#3#4{% #1=\,<word> #2=<gpageno> #3=<pageno> #4=<iitype> - \_ifx#1\_relax \_global\_addto \_iilist {#1}% - \_gdef #1{#2:#4}% - \_else \_global\_addto #1{,#2:#4}% - \_fi - \_sxdef{_pgi:#2}{#3}% -} - - \_doc ----------------------------- - The implementation of macros \`\ii`, \`\iid`, \`\iis` follows. - Note that `\ii` works in the horizontal mode in order to the `\write` whatsit - is not broken from the following word. If you need to keep vertical mode, - use \^`\iindex``{<word>}` directly. - \nl - The \`\iitype` `{<type>}` saves the `<type>` to the \`\_iitypesaved` macro. It is - used in the \^`\iindex` macro. - \_cod ----------------------------- - -\_def\_ii #1 {\_leavevmode\_def\_tmp{#1}\_iiA #1,,\_def\_iitypesaved{}} - -\_def\_iiA #1,{\_if$#1$\_else\_def\_tmpa{#1}% - \_ifx\_tmpa\_iiatsign \_ea\_iiB\_tmp,,\_else\_iindex{#1}\_fi - \_ea\_iiA\_fi} -\_def\_iiatsign{@} - -\_def\_iiB #1,{\_if$#1$\_else \_iiC#1/\_relax \_ea\_iiB\_fi} -\_def\_iiC #1/#2\_relax{\_if$#2$\_else\_iindex{#2#1}\_fi} - -\_def\_iid #1 {\_leavevmode\_iindex{#1}#1\_futurelet\_tmp\_iiD\_def\_iitypesaved{}} -\_def\_iiD{\_ifx\_tmp,\_else\_ifx\_tmp.\_else\_space\_fi\_fi} - -\_def\_iis #1 #2{{\_def~{ }\_global\_sdef{_,#1}{#2}}\_ignorespaces} - -\_def\_iitypesaved{} -\_def\_iitype #1{\_def\_iitypesaved{#1}\_ignorespaces} - -\_public \ii \iid \iis \iitype ; - -\_endcode % ------------------------------------- - -2021-02-15 \_expandafter -> \_ea -2021-02-01 secodary sorting: start from code 65 -2020-04-21 \isempty \iffalse ... \fi added to \iindex -2020-03-26 introduced diff --git a/Master/texmf-dist/tex/luatex/optex/base/maketoc.opm b/Master/texmf-dist/tex/luatex/optex/base/maketoc.opm deleted file mode 100644 index 8dfd821640a..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/maketoc.opm +++ /dev/null @@ -1,154 +0,0 @@ -% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \maketoc {Macros for maketoc <2020-02-09>} % preloaded in format - - \_doc ------------------------------------ - \`\_Xtoc` `{<level>}{<type>}{<number>}{<o-title>}<title>` (in `.ref` file) reads - given data and appends them to the \`\_toclist` as - \^`\_tocline``{<level>}{<type>}{<number>}{<o-title>}{<title>}{<gpageno>}{<pageno>}` - where: - \begitems - * `<level>`: 0 reserved, 1: chapter, 2: section, 3: subsection - * `<type>`: the type of the level, i.e. chap, sec, secc - * `<number>`: the number of the chapter/section/subsection in the format 1.2.3 - * `<o-title>`: outlines title, if differs from `<title>`. - * `<title>`: the title text - * `<gpageno>`: the page number numbered from 1 independently of pagination - * `<pageno>`: the page number used in the pagination - \enditems - The last two parameters are restored from previous - \^`\_Xpage``{<pageno>}{<gpageno>}`, data were saved in the \^`\_currpage` macro. - - We read the <title> parameter by \^`\scantoeol` from `.ref` file - because the <title> can include something like \code{`\{`}. - \_cod ------------------------------------ - -\_def\_toclist{} -\_newifi \_ifischap \_ischapfalse - -\_def\_Xtoc#1#2#3#4{\_ifnum#1=0 \_ischaptrue\_fi - \_addto\_toclist{\_tocline{#1}{#2}{#3}{#4}}\_scantoeol\_XtocA} -\_def\_XtocA#1{\_addto\_toclist{{#1}}\_ea\_addto\_ea\_toclist\_ea{\_currpage}} - - \_doc ------------------------------------ - \`\_tocline``{<level>}{<type>}{<number>}{<o-title>}{<title>}{<gpageno>}{<pageno>}` - prints the record to the table of contents. It opens group, reduces `\_leftskip`, - `\_rightskip`, runs the \^`\everytocline` (user can customise the design of TOC - here) and runs `\_tocl:<level> {<number>}{<title>}{<pageno>}` macro. - This macro starts with vertical mode, - inserts one record with given `<level>` and it should end by \^`\_tocpar` - which returns to horizontal mode. The `\_tocpar` - appends `\_nobreak \_hskip-2\_iindent\_null \_par`. This causes - that the last line of the record is shifted outside the margin given by - `\_rightskip`. A typical record (with long `<title>`) looks like this: - \begtt \catcode`\<=13 - | | - \llap{<number>} text text text text text - text text text text text - text text .................... <pageno> - \endtt - Margins given by `\leftskip` and `\rightskip` are denoted by `|` in the - examle above. - \nl - \`\tocrefnum` is the global counter of all TOC records (used by hyperlinks). - \_cod ------------------------------------ - -\_newcount \_tocrefnum -\_def\_tocline#1#2#3#4#5#6#7{% - \_advance\_tocrefnum by1 - \_bgroup - \_leftskip=\_iindent \_rightskip=2\_iindent - \_ifischap \_advance\_leftskip by \_iindent \_fi - \_def\_pgn{\_ilink[pg:#6]}% - \_the\_everytocline - \_ifcsname _tocl:#1\_endcsname - \_cs{_tocl:#1}{#3}{\_scantextokens{#5}}{#7}\_par - \_fi - \_egroup -} -\_public \tocrefnum ; - - \_doc ----------------------------------- - You can re-define default macros for each level of tocline if you want.\nl - Parameters are `{<number>}{<title>}{<pageno>}`. - \_cod ----------------------------------- - -\_sdef{_tocl:1}#1#2#3{\_nofirst\_bigskip \_bf\_llaptoclink{#1}{#2}\_hfill \_pgn{#3}\_tocpar} -\_sdef{_tocl:2}#1#2#3{\_llaptoclink{#1}{#2}\_tocdotfill \_pgn{#3}\_tocpar} -\_sdef{_tocl:3}#1#2#3{\_advance\_leftskip by\_iindent \_cs{_tocl:2}{#1}{#2}{#3}} - - \_doc ----------------------------------- - The auxiliary macros are: - \begitems - * \`\_llaptoclink``<text>` does `\_noindent\_llap{<linked text>}`. - * \`\_tocdotfill` creates dots in the TOC. - * \`\_nofirst``\macro` applies the `\macro` only if we don't print the first - record of the TOC. - * \`\_tocpar` finalizes one TOC recors whith rlapped `<pageno>`. - * \`\_pgn``{<pageno>}` creates <pageno> as link to real `<gpage>` saved in `#6` - of \^`\_tocline`. This is temporarily defined in the \^`\_tocline`. - \enditems - \_cod ---------------------------------- - -\_def\_llaptoclink#1{\_noindent - \_llap{\_ilink[toc:\_the\_tocrefnum]{\_enspace#1\_kern.4em}\_kern.1em}} -\_def\_tocdotfill{\_nobreak\_leaders\_hbox to.8em{\_hss.\_hss}\_hskip 1em plus1fill\_relax} -\_def\_nofirst #1{\_ifnum \_lastpenalty=11333 \_else #1\_fi} -\_def\_tocpar{\_nobreak \_hskip-2\_iindent\_null \_par} - - \_doc ----------------------------------- - If you want a special formating of TOC with adding more - special lines (no generated as titles from `\chap`, `\sec`, `\secc`), you - can define `\addtotoc{<level>}{<type>}{<number>}{<o-title>}{<title>}` macro: - \begtt - \def\addtotoc#1#2#3#4#5{% - \incr\_tocrefnum - \_dest[toc:\_the\_tocrefnum]% - \_ewref\_Xtoc{{#1}{#2}{#3}{#4}#5}% - } - \endtt - and you can declare special lines (or something else) - as an unused level (10 in the following example): - \begtt - \sdef{_tocl:10}#1#2#3{\medskip\hbox{\Blue #2}\medskip} - \endtt - Now, users can add a blue line into TOC by - \begtt \catcode`\<=13 - \addtotoc{10}{blue-line}{}{\relax}{<blue text to be added in the TOC>} - \endtt - anywhere in the document. Note that `\relax` in the fourth parameter - means that outline will be not generated. And second parameter - `blue-line` is only a comment (unused in macros). - - \`\maketoc` prints warning if TOC data is empty, else it creates TOC by - running \^`\_toclist` - \_cod ---------------------------------- - -\_def\_maketoc{\_par \_ifx\_toclist\_empty - \_opwarning{\_noexpand\maketoc -- data unavailable, TeX me again}\_openref - \_incr\_unresolvedrefs - \_else \_begingroup - \_tocrefnum=0 \_penalty11333 - \_the\_regtoc \_toclist - \_endgroup \_fi -} - - \_doc ----------------------------------- - \`\regmacro` appends its parameters to \`\_regtoc`, \`\_regmark` and - \`\_regoul`. These token lists are used in \^`\maketoc`, \^`\_begoutput` and - \^`\pdfunidef`. - \_cod \_fin ----------------------------- - -\_newtoks \_regtoc \_newtoks \_regmark \_newtoks \_regoul - -\_def\_regmacro #1#2#3{% - \_toksapp\_regtoc{#1}\_toksapp\_regmark{#2}\_toksapp\_regoul{#3}% -} -\_public \maketoc \regmacro ; - -\_endcode - -2021-02-09 \thisoutline implemented -2020-04-23 \_tocpar introduced (incompatible change) -2020-04-22 \_pg -> \_pgn (incompatible change) -2020-03-12 introduced diff --git a/Master/texmf-dist/tex/luatex/optex/base/margins.opm b/Master/texmf-dist/tex/luatex/optex/base/margins.opm deleted file mode 100644 index d88cc04237f..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/margins.opm +++ /dev/null @@ -1,80 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \margins {Macros for margins setting <2021-03-15>} % preloaded in format - - \_doc ---------------------------- - \`\margins``/<pg> <fmt> (<left>,<right>,<top>,<bot>)<unit>` - takes its parameters, does calculation and sets `\hoffset`, `\voffset`, - `\hsize` and `\vsize` registers. Note that \OpTeX/ sets the page origin at - the top left corner of the paper, no at the obscure position 1\,in, 1\,in. - It is much more comfortable for macro writers. - \_cod ---------------------------- - -\_newdimen\_pgwidth \_newdimen\_pgheight \_pgwidth=0pt -\_newdimen\_shiftoffset - -\_def\_margins/#1 #2 (#3,#4,#5,#6)#7 {\_def\_tmp{#7}% - \_ifx\_tmp\_empty - \_opwarning{\_string\_margins: missing unit, mm inserted}\_def\_tmp{mm}\_fi - \_setpagedimens #2 % setting \_pgwidth, \_pgheight - \_ifdim\_pgwidth=0pt \_else - \_hoffset=0pt \_voffset=0pt - \_if$#3$\_if$#4$\_hoffset =\_dimexpr (\_pgwidth -\_hsize)/2 \_relax - \_else \_hoffset =\_dimexpr \_pgwidth -\_hsize - #4\_tmp \_relax % only right margin - \_fi - \_else \_if$#4$\_hoffset = #3\_tmp \_relax % only left margin - \_else \_hsize =\_dimexpr \_pgwidth - #3\_tmp - #4\_tmp \_relax % left+right margin - \_hoffset = #3\_tmp \_relax - \_xhsize =\_hsize \_setxhsize % \_xhsize used by \output routine - \_fi\_fi - \_if$#5$\_if$#6$\_voffset =\_dimexpr (\_pgheight -\_vsize)/2 \_relax - \_else \_voffset =\_dimexpr \_pgheight -\_vsize - #6\_tmp \_relax % only bottom margin - \_fi - \_else \_if$#6$\_voffset = #5\_tmp \_relax % only top margin - \_else \_vsize=\_dimexpr \_pgheight - #5\_tmp - #6\_tmp \_relax % top+bottom margin - \_voffset = #5\_tmp \_relax - \_fi\_fi - \_if 1#1\_shiftoffset=0pt \_def\_prepoffsets{}\_else \_if 2#1% double-page layout - \_shiftoffset = \_dimexpr \_pgwidth -\_hsize -2\_hoffset \_relax - \_def\_prepoffsets{\_ifodd\_pageno \_else \_advance\_hoffset \_shiftoffset \_fi}% - \_else \_opwarning{use \_string\_margins/1 or \_string\_margins/2}% - \_fi\_fi\_fi -} -\_def\_setpagedimens{\_isnextchar({\_setpagedimensB}{\_setpagedimensA}} -\_def\_setpagedimensA#1 {\_ifcsname _pgs:#1\_endcsname - \_ea\_ea\_ea\_setpagedimensB \_csname _pgs:#1\_ea\_endcsname\_space - \_else \_opwarning{page specification "#1" is undefined}\_fi} -\_def\_setpagedimensB (#1,#2)#3 {\_setpagedimensC\_pgwidth=#1:#3 - \_setpagedimensC\_pgheight=#2:#3 - \_pdfpagewidth=\_pgwidth \_pdfpageheight=\_pgheight -} -\_def\_setpagedimensC #1=#2:#3 {#1=#2\_ifx^#3^\_tmp\_else#3\_fi\_relax\_truedimen#1} - -\_public \margins ; - - \_doc ---------------------------- - The common page dimensions are defined here. - \_cod ---------------------------- - -\_sdef{_pgs:a3}{(297,420)mm} \_sdef{_pgs:a4}{(210,297)mm} \_sdef{_pgs:a5}{(148,210)mm} -\_sdef{_pgs:a3l}{(420,297)mm} \_sdef{_pgs:a4l}{(297,210)mm} \_sdef{_pgs:a5l}{(210,148)mm} -\_sdef{_pgs:b5}{(176,250)mm} \_sdef{_pgs:letter}{(8.5,11)in} - - \_doc ---------------------------- - \`\magscale` `[<factor>]` does `\mag=<factor>` and recalculates page - dimensions to their true values. - \_cod ---------------------------- - -\_def\_trueunit{} -\_def\_magscale[#1]{\_mag=#1\_def\_trueunit{true}% - \_ifdim\_pgwidth=0pt \_else \_truedimen\_pgwidth \_truedimen\_pgheight \_fi - \_truedimen\_pdfpagewidth \_truedimen\_pdfpageheight -} -\_def\_truedimen#1{\_ifx\_trueunit\_empty \_else#1=\_ea\_ignorept\_the#1truept \_fi} - -\_public \magscale ; - -\_endcode % ----------------------------------------- - -2021-03-15 \_setxhsize added -2020-03-14 released diff --git a/Master/texmf-dist/tex/luatex/optex/base/math-macros.opm b/Master/texmf-dist/tex/luatex/optex/base/math-macros.opm deleted file mode 100644 index 2b090ee1b8b..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/math-macros.opm +++ /dev/null @@ -1,1079 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \sin {Math macros plus mathchardefs <2021-02-15>} % preloaded in format - - \_doc ----------------------------- - The category code of the character `_` remains as the letter (11) and the mathocode - of it is `"8000`. - It means that it is an active character in math mode. It is defined as the subscript prefix. - - There is a problem: The `x_n` is tokenized as `x`, `_`, `n` and it works - without problems. But `\int``_a^b` is tokenized as `\int``_a`, `^`, `b`. The - control sequence `\int``_a` isn't defined. We must write `\int _a^b`. - - The Lua code presented here solves this problem. But you cannot set your own - control sequence in the form `\<word>_` or `\<word>_<one-letter>` (where - <word> is a sequence of letters) because such control sequences are - inaccessible: preprocessor rewrites it. - - The \`\mathsbon` macro activates the rewriting rule `\<word>_<nonleter>` to - `\<word> _<nonletter>` and - `\<word>``_<letter><nonletter>` to `\<word> _<letter><nonletter>` at input - processor level. The \`\mathsboff` deactivates it. - You can ask by \`\_ifmathsb` if this feature is activated or deactivated. - By default, it is activated in the `\everyjob`, see section~\ref[init]. - Note, that the `\everyjob` is processed after the first line of the document is - read, so the \^`\mathsbon` is activated from the second line of the document. - \_cod ----------------------------- - -\catcode`\_ = 8 \let\sb = _ -\catcode`\_ = 13 \let _ = \sb -\catcode`\_ = 11 -\_private \sb ; - -\_newifi\_ifmathsb \_mathsbfalse -\_def \_mathsbon {% - \_directlua{ - callback.add_to_callback("process_input_buffer", - function (str) - return string.gsub(str.." ", "(\_nbb[a-zA-Z]+)_([a-zA-Z]?[^_a-zA-Z])", "\_pcent 1 _\_pcent 2") - end, "_mathsb") }% - \_global\_mathsbtrue -} -\_def \_mathsboff {% - \_directlua{ callback.remove_from_callback("process_input_buffer", "_mathsb") }% - \_global \_mathsbfalse -} -\_public \mathsboff \mathsbon ; - - \_doc ----------------------------- - All mathcodes are set to equal values as in plain\TeX/. - But all encoding-dependent declarations (like these) will be set - to different values when a Unicode-math font is used. - \_cod ----------------------------- - -\_mathcode`\^^@="2201 % \cdot -\_mathcode`\^^A="3223 % \downarrow -\_mathcode`\^^B="010B % \alpha -\_mathcode`\^^C="010C % \beta -\_mathcode`\^^D="225E % \land -\_mathcode`\^^E="023A % \lnot -\_mathcode`\^^F="3232 % \in -\_mathcode`\^^G="0119 % \pi -\_mathcode`\^^H="0115 % \lambda -\_mathcode`\^^I="010D % \gamma -\_mathcode`\^^J="010E % \delta -\_mathcode`\^^K="3222 % \uparrow -\_mathcode`\^^L="2206 % \pm -\_mathcode`\^^M="2208 % \oplus -\_mathcode`\^^N="0231 % \infty -\_mathcode`\^^O="0140 % \partial -\_mathcode`\^^P="321A % \subset -\_mathcode`\^^Q="321B % \supset -\_mathcode`\^^R="225C % \cap -\_mathcode`\^^S="225B % \cup -\_mathcode`\^^T="0238 % \forall -\_mathcode`\^^U="0239 % \exists -\_mathcode`\^^V="220A % \otimes -\_mathcode`\^^W="3224 % \leftrightarrow -\_mathcode`\^^X="3220 % \leftarrow -\_mathcode`\^^Y="3221 % \rightarrow -\_mathcode`\^^Z="8000 % \ne -\_mathcode`\^^[="2205 % \diamond -\_mathcode`\^^\="3214 % \le -\_mathcode`\^^]="3215 % \ge -\_mathcode`\^^^="3211 % \equiv -\_mathcode`\^^_="225F % \lor -\_mathcode`\ ="8000 % \space -\_mathcode`\!="5021 -\_mathcode`\'="8000 % ^\prime -\_mathcode`\(="4028 -\_mathcode`\)="5029 -\_mathcode`\*="2203 % \ast -\_mathcode`\+="202B -\_mathcode`\,="613B -\_mathcode`\-="2200 -\_mathcode`\.="013A -\_mathcode`\/="013D -\_mathcode`\:="303A -\_mathcode`\;="603B -\_mathcode`\<="313C -\_mathcode`\=="303D -\_mathcode`\>="313E -\_mathcode`\?="503F -\_mathcode`\[="405B -\_mathcode`\\="026E % \backslash -\_mathcode`\]="505D -\_mathcode`\_="8000 % math-active subscript -\_mathcode`\{="4266 -\_mathcode`\|="026A -\_mathcode`\}="5267 -\_mathcode`\^^?="1273 % \smallint - -\_delcode`\(="028300 -\_delcode`\)="029301 -\_delcode`\[="05B302 -\_delcode`\]="05D303 -\_delcode`\<="26830A -\_delcode`\>="26930B -\_delcode`\/="02F30E -\_delcode`\|="26A30C -\_delcode`\\="26E30F - - \_doc ----------------------------- - All control sequences declared by `\mathchardef` are supposed (by default) - only for public usage. It means that they are declared without `_` prefix. - If such sequences are used in internal \OpTeX/ macro then their internal - prefixed form is declared using `\_private` macro.\nl - These encoding dependent declarations will be set to different values - when Unicode-math font is loaded.\nl - The declared sequences for math symbols are not hyperlinked in this documentation. - \maxlines=15 - \_cod ----------------------------- - -\_mathchardef\alpha="010B -\_mathchardef\beta="010C -\_mathchardef\gamma="010D -\_mathchardef\delta="010E -\_mathchardef\epsilon="010F -\_mathchardef\zeta="0110 -\_mathchardef\eta="0111 -\_mathchardef\theta="0112 -\_mathchardef\iota="0113 -\_mathchardef\kappa="0114 -\_mathchardef\lambda="0115 -\_mathchardef\mu="0116 -\_mathchardef\nu="0117 -\_mathchardef\xi="0118 -\_mathchardef\pi="0119 -\_mathchardef\rho="011A -\_mathchardef\sigma="011B -\_mathchardef\tau="011C -\_mathchardef\upsilon="011D -\_mathchardef\phi="011E -\_mathchardef\chi="011F -\_mathchardef\psi="0120 -\_mathchardef\omega="0121 -\_mathchardef\varepsilon="0122 -\_mathchardef\vartheta="0123 -\_mathchardef\varpi="0124 -\_mathchardef\varrho="0125 -\_mathchardef\varsigma="0126 -\_mathchardef\varphi="0127 -\_mathchardef\Gamma="7000 -\_mathchardef\Delta="7001 -\_mathchardef\Theta="7002 -\_mathchardef\Lambda="7003 -\_mathchardef\Xi="7004 -\_mathchardef\Pi="7005 -\_mathchardef\Sigma="7006 -\_mathchardef\Upsilon="7007 -\_mathchardef\Phi="7008 -\_mathchardef\Psi="7009 -\_mathchardef\Omega="700A - -\_mathchardef\aleph="0240 -\_mathchardef\imath="017B -\_mathchardef\jmath="017C -\_mathchardef\ell="0160 -\_mathchardef\wp="017D -\_mathchardef\Re="023C -\_mathchardef\Im="023D -\_mathchardef\partial="0140 -\_mathchardef\infty="0231 -\_mathchardef\prime="0230 -\_mathchardef\emptyset="023B -\_mathchardef\nabla="0272 -\_protected\_def \surd{{\_mathchar"1270}} -\_mathchardef\top="023E -\_mathchardef\bot="023F -\_mathchardef\triangle="0234 -\_mathchardef\forall="0238 -\_mathchardef\exists="0239 -\_mathchardef\neg="023A \_let\lnot=\neg -\_mathchardef\flat="015B -\_mathchardef\natural="015C -\_mathchardef\sharp="015D -\_mathchardef\clubsuit="027C -\_mathchardef\diamondsuit="027D -\_mathchardef\heartsuit="027E -\_mathchardef\spadesuit="027F - -\_mathchardef\coprod="1360 -\_mathchardef\bigvee="1357 -\_mathchardef\bigwedge="1356 -\_mathchardef\biguplus="1355 -\_mathchardef\bigcap="1354 -\_mathchardef\bigcup="1353 -\_mathchardef\intop="1352 -\_protected\_def \int{\_intop\_nolimits} \_private \intop; -\_mathchardef\prod="1351 -\_mathchardef\sum="1350 -\_mathchardef\bigotimes="134E -\_mathchardef\bigoplus="134C -\_mathchardef\bigodot="134A -\_mathchardef\ointop="1348 -\_protected\_def\_oint {\_ointop\_nolimits} \_private \ointop; -\_mathchardef\bigsqcup="1346 -\_mathchardef\smallint="1273 - -\_mathchardef\triangleleft="212F \_private \triangleleft; -\_mathchardef\triangleright="212E \_private \trianglerigt; -\_mathchardef\bigtriangleup="2234 -\_mathchardef\bigtriangledown="2235 -\_mathchardef\wedge="225E \let\land=\wedge -\_mathchardef\vee="225F \let\lor=\vee -\_mathchardef\cap="225C -\_mathchardef\cup="225B -\_mathchardef\ddagger="227A -\_mathchardef\dagger="2279 -\_mathchardef\sqcap="2275 -\_mathchardef\sqcup="2274 -\_mathchardef\uplus="225D -\_mathchardef\amalg="2271 -\_mathchardef\diamond="2205 -\_mathchardef\bullet="220F \_private \bullet; -\_mathchardef\wr="226F -\_mathchardef\div="2204 -\_mathchardef\odot="220C -\_mathchardef\oslash="220B -\_mathchardef\otimes="220A -\_mathchardef\ominus="2209 -\_mathchardef\oplus="2208 -\_mathchardef\mp="2207 -\_mathchardef\pm="2206 -\_mathchardef\circ="220E -\_mathchardef\bigcirc="220D -\_mathchardef\setminus="226E % for set difference A\setminus B -\_mathchardef\cdot="2201 -\_mathchardef\ast="2203 -\_mathchardef\times="2202 -\_mathchardef\star="213F - -\_mathchardef\propto="322F -\_mathchardef\sqsubseteq="3276 -\_mathchardef\sqsupseteq="3277 -\_mathchardef\parallel="326B -\_mathchardef\mid="326A -\_mathchardef\dashv="3261 -\_mathchardef\vdash="3260 -\_mathchardef\nearrow="3225 -\_mathchardef\searrow="3226 -\_mathchardef\nwarrow="322D -\_mathchardef\swarrow="322E -\_mathchardef\Leftrightarrow="322C -\_mathchardef\Leftarrow="3228 -\_mathchardef\Rightarrow="3229 -\_protected\_def \neq{\_not=} \_let\ne=\neq -\_mathchardef\leq="3214 \let\le=\leq -\_mathchardef\geq="3215 \let\ge=\geq -\_mathchardef\succ="321F -\_mathchardef\prec="321E -\_mathchardef\approx="3219 -\_mathchardef\succeq="3217 -\_mathchardef\preceq="3216 -\_mathchardef\supset="321B -\_mathchardef\subset="321A -\_mathchardef\supseteq="3213 -\_mathchardef\subseteq="3212 -\_mathchardef\in="3232 -\_mathchardef\ni="3233 \let\owns=\ni -\_mathchardef\gg="321D -\_mathchardef\ll="321C -% \_mathchardef\not="3236 % defined below -\_mathchardef\leftrightarrow="3224 -\_mathchardef\leftarrow="3220 \_let\gets=\leftarrow -\_mathchardef\rightarrow="3221 \_let\to=\rightarrow -\_mathchardef\mapstochar="3237 -\_protected\_def\mapsto{\_mapstochar\_rightarrow} \_private \mapstochar \rightarrow ; -\_mathchardef\sim="3218 -\_mathchardef\simeq="3227 -\_mathchardef\perp="323F -\_mathchardef\equiv="3211 -\_mathchardef\asymp="3210 -\_mathchardef\smile="315E -\_mathchardef\frown="315F -\_mathchardef\leftharpoonup="3128 -\_mathchardef\leftharpoondown="3129 -\_mathchardef\rightharpoonup="312A -\_mathchardef\rightharpoondown="312B - - \_doc ----------------------------- - The math functions like log, sin, cos are declared in the same way as in - plain\TeX/, but they are `\protected` in \OpTeX/. - \_cod ----------------------------- - -\_protected\_def\log {\_mathop{\_rm log}\_nolimits} -\_protected\_def\lg {\_mathop{\_rm lg}\_nolimits} -\_protected\_def\ln {\_mathop{\_rm ln}\_nolimits} -\_protected\_def\lim {\_mathop{\_rm lim}} -\_protected\_def\limsup {\_mathop{\_rm lim\_thinsk sup}} -\_protected\_def\liminf {\_mathop{\_rm lim\_thinsk inf}} -\_protected\_def\sin {\_mathop{\_rm sin}\_nolimits} -\_protected\_def\arcsin {\_mathop{\_rm arcsin}\_nolimits} -\_protected\_def\sinh {\_mathop{\_rm sinh}\_nolimits} -\_protected\_def\cos {\_mathop{\_rm cos}\_nolimits} -\_protected\_def\arccos {\_mathop{\_rm arccos}\_nolimits} -\_protected\_def\cosh {\_mathop{\_rm cosh}\_nolimits} -\_protected\_def\tan {\_mathop{\_rm tan}\_nolimits} -\_protected\_def\arctan {\_mathop{\_rm arctan}\_nolimits} -\_protected\_def\tanh {\_mathop{\_rm tanh}\_nolimits} -\_protected\_def\cot {\_mathop{\_rm cot}\_nolimits} -\_protected\_def\coth {\_mathop{\_rm coth}\_nolimits} -%\_protected\_def\sec {\_mathop{\_rm sec}\_nolimits} % \sec is section -\_protected\_def\csc {\_mathop{\_rm csc}\_nolimits} -\_protected\_def\max {\_mathop{\_rm max}} -\_protected\_def\min {\_mathop{\_rm min}} -\_protected\_def\sup {\_mathop{\_rm sup}} -\_protected\_def\inf {\_mathop{\_rm inf}} -\_protected\_def\arg {\_mathop{\_rm arg}\_nolimits} -\_protected\_def\ker {\_mathop{\_rm ker}\_nolimits} -\_protected\_def\dim {\_mathop{\_rm dim}\_nolimits} -\_protected\_def\hom {\_mathop{\_rm hom}\_nolimits} -\_protected\_def\det {\_mathop{\_rm det}} -\_protected\_def\exp {\_mathop{\_rm exp}\_nolimits} -\_protected\_def\Pr {\_mathop{\_rm Pr}} -\_protected\_def\gcd {\_mathop{\_rm gcd}} -\_protected\_def\deg {\_mathop{\_rm deg}\_nolimits} - - \_doc ----------------------------- - These macros are defined similarly as in plain\TeX. Only internal macro - names from plain\TeX/ with `@` character are re-written in a more readable - form.\nl - \`\sp` is an alternative for `^`. The \`\sb` alternative for `_` was defined - at line 27 of the file `math-macros.opm`. - \_cod ----------------------------- - -\_let\_sp=^ \public \sp ; -% \sb=_ , defined at beginning of this file - -\_def\_thinsk {\_mskip\_thinmuskip} -\_protected\_def\,{\_relax\_ifmmode \_thinsk \_else \_thinspace \_fi} -\_protected\_def\>{\_mskip\_medmuskip} \let\_medsk = \> -\_protected\_def\;{\_mskip\_thickmuskip} \let\_thicksk = \; -\_protected\_def\!{\_mskip-\_thinmuskip} \let\_thinneg = \! -%\_def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}} % obsolete - - \_doc ----------------------------- - Active \`\prime` character is defined here. - \_cod ----------------------------- - -{\_catcode`\'=\active \_gdef'{^\_bgroup\_primes}} % primes dance -\_def\_primes{\_prime\_isnextchar'{\_primesA}% - {\_isnextchar^{\_primesB}{\_egroup}}} -\_def\_primesA #1{\_primes} -\_def\_primesB #1#2{#2\egroup} -\_private \prime ; - - \_doc ----------------------------- - \`\big`, \`\Big`, \`\bigg`, \`\Bigg`, \`\bigl`, \`\bigm`, \`\bigr`, \`\Bigl`, \`\Bigm`, - \`\Bigr`, \`\biggl`, \`\biggm`, \`\biggr`, \`\Biggl`, \`\Biggm`, \`\Bigg`, \`\Biggr` - are based on the \`\_scalebig` macro because we need the dependency on - the various sizes of the fonts. - \_cod ----------------------------- - -%{\catcode`\^^Z=\active \gdef^^Z{\not=}} % ^^Z is like \ne in math %obsolete - -\_def\_scalebig#1#2{{\_left#1\_vbox to#2\_fontdimen6\_textfont1{}% - \_kern-\_nulldelimiterspace\_right.}} -\_protected\_def\_big#1{\_scalebig{#1}{.85}} -\_protected\_def\_Big#1{\_scalebig{#1}{1.15}} -\_protected\_def\_bigg#1{\_scalebig{#1}{1.45}} -\_protected\_def\_Bigg#1{\_scalebig{#1}{1.75}} -\_public \big \Big \bigg \Bigg ; - -\_protected\_def\_bigl{\_mathopen\_big} -\_protected\_def\_bigm{\_mathrel\_big} -\_protected\_def\_bigr{\_mathclose\_big} -\_protected\_def\_Bigl{\_mathopen\_Big} -\_protected\_def\_Bigm{\_mathrel\_Big} -\_protected\_def\_Bigr{\_mathclose\_Big} -\_protected\_def\_biggl{\_mathopen\_bigg} -\_protected\_def\_biggm{\_mathrel\_bigg} -\_protected\_def\_biggr{\_mathclose\_bigg} -\_protected\_def\_Biggl{\_mathopen\_Bigg} -\_protected\_def\_Biggm{\_mathrel\_Bigg} -\_protected\_def\_Biggr{\_mathclose\_Bigg} -\_public \bigl \bigm \bigr \Bigl \Bigm \Bigr \biggl \biggm \biggr \Biggl \Biggm \Biggr ; - - \_doc ----------------------------- - Math relations defined by the \`\jointrel` plain \TeX/ macro: - \_cod ----------------------------- - -\_protected\_def\_joinrel{\_mathrel{\_mkern-2.5mu}} % -3mu in plainTeX -\_protected\_def\relbar{\_mathrel{\_smash-}} % \_smash, because - has the same height as + -\_protected\_def\Relbar{\_mathrel=} -\_mathchardef\lhook="312C -\_protected\_def\hookrightarrow{\_lhook\_joinrel\_rightarrow} -\_mathchardef\rhook="312D -\_protected\_def\hookleftarrow{\_leftarrow\_joinrel\_rhook} -\_protected\_def\bowtie{\_mathrel\_triangleright\_joinrel\_mathrel\_triangleleft} -\_protected\_def\models{\_mathrel|\_joinrel=} -\_protected\_def\Longrightarrow{\_Relbar\_joinrel\_Rightarrow} -\_protected\_def\longrightarrow{\_relbar\_joinrel\_rightarrow} -\_protected\_def\longleftarrow{\_leftarrow\_joinrel\_relbar} -\_protected\_def\Longleftarrow{\_Leftarrow\_joinrel\_Relbar} -\_protected\_def\longmapsto{\_mapstochar\_longrightarrow} -\_protected\_def\longleftrightarrow{\_leftarrow\_joinrel\_rightarrow} -\_protected\_def\Longleftrightarrow{\_Leftarrow\_joinrel\_Rightarrow} -\_protected\_def\iff{\_thicksk\_Longleftrightarrow\_thicksk} -\_private \lhook \rightarrow \leftarrow \rhook \triangleright \triangleleft - \Relbar \Rightarrow \relbar \rightarrow \Leftarrow \mapstochar - \longrightarrow \Longleftrightarrow ; -\_public \joinrel ; - - \_doc ----------------------------- - \`\ldots`, \`\cdots`, \`\vdots`, \`\ddots` from plain \TeX/ - \_cod ----------------------------- - -\_mathchardef\_ldotp="613A % ldot as a punctuation mark -\_mathchardef\_cdotp="6201 % cdot as a punctuation mark -\_mathchardef\_colon="603A % colon as a punctuation mark -\_public \ldotp \cdotp \colon ; - -\_protected\_def\_ldots{\_mathinner{\_ldotp\_ldotp\_ldotp}} -\_protected\_def\_cdots{\_mathinner{\_cdotp\_cdotp\_cdotp}} -\_protected\_def\_vdots{\_vbox{\_baselineskip=.4em \_lineskiplimit=\_zo - \_kern.6em \_hbox{.}\_hbox{.}\_hbox{.}}} -\_protected\_def\_ddots{\_mathinner{% - \_mkern1mu\_raise.7em\_vbox{\_kern.7em\_hbox{.}}\_mkern2mu - \_raise.4em\_hbox{.}\_mkern2mu\_raise.1em\_hbox{.}\_mkern1mu}} - -\_public \ldots \cdots \vdots \ddots ; - - \_doc ----------------------------- - \`\adots` inspired by plain \TeX/ - \_cod ----------------------------- - -\_protected\_def\_adots{\_mathinner{% - \_mkern1mu\_raise.1em\_hbox{.}\_mkern2mu - \_raise.4em\_hbox{.}\_mkern2mu\_raise.7em\_vbox{\_kern.7em\_hbox{.}}\_mkern1mu}} - -\_public \adots ; - - \_doc ----------------------------- - Math accents (encoding dependent declarations). - \_cod ----------------------------- - -\_protected\_def\acute{\_mathaccent"7013 } -\_protected\_def\grave{\_mathaccent"7012 } -\_protected\_def\ddot{\_mathaccent"707F } -\_protected\_def\tilde{\_mathaccent"707E } -\_protected\_def\bar{\_mathaccent"7016 } -\_protected\_def\breve{\_mathaccent"7015 } -\_protected\_def\check{\_mathaccent"7014 } -\_protected\_def\hat{\_mathaccent"705E } -\_protected\_def\vec{\_mathaccent"017E } -\_protected\_def\dot{\_mathaccent"705F } -\_protected\_def\widetilde{\_mathaccent"0365 } -\_protected\_def\widehat{\_mathaccent"0362 } - - \_doc ----------------------------- - \`\_math`, \`\skew`, - \`\overrightarrow`, \`\overleftarrow`, \`\overbrace`, \`\underbrace` macros. - The last four are redefined when Unicode math is loaded. - \_cod ----------------------------- - -\_def\_math{\_mathsurround\_zo} -\_protected\_def\_skew #1#2#3{{\_muskip0=#1mu\_divide\_muskip0=by2 \_mkern\_muskip0 - #2{\_mkern-\_muskip0{#3}\_mkern\_muskip0}\_mkern-\_muskip0}{}} -\_protected\_def\_overrightarrow #1{\_vbox{\_math\_ialign{##\_crcr - \_rightarrowfill\_crcr\_noalign{\_kern-.1em \_nointerlineskip} - $\_hfil\_displaystyle{#1}\_hfil$\_crcr}}} -\_protected\_def\_overleftarrow #1{\_vbox{\_math\_ialign{##\_crcr - \_leftarrowfill\_crcr\_noalign{\_kern-.1em \_nointerlineskip} - $\_hfil\_displaystyle{#1}\_hfil$\_crcr}}} -\_protected\_def\_overbrace #1{\_mathop{% - \_vbox{\_math\_ialign{##\_crcr\_noalign{\_kern.3em} - \_downbracefill\_crcr\_noalign{\_kern.3em \_nointerlineskip} - $\_hfil\_displaystyle{#1}\_hfil$\_crcr}}}\_limits} -\_protected\_def\_underbrace #1{\_mathop{\_vtop{\_math\_ialign{##\_crcr - $\_hfil\_displaystyle{#1}\_hfil$\_crcr\_noalign{\_kern.3em \_nointerlineskip} - \_upbracefill\_crcr\_noalign{\_kern.3em}}}}\_limits} - -\_public \overrightarrow \overleftarrow \overbrace \underbrace \skew ; - - \_doc ----------------------------- - Macros based on `\delimiter`, `\*witdelims` and `\radical` primitives. - \_cod ----------------------------- - -\_protected\_def\lmoustache{\_delimiter"437A340 } % top from (, bottom from ) -\_protected\_def\rmoustache{\_delimiter"537B341 } % top from ), bottom from ( -\_protected\_def\lgroup{\_delimiter"462833A } % extensible ( with sharper tips -\_protected\_def\rgroup{\_delimiter"562933B } % extensible ) with sharper tips -\_protected\_def\arrowvert{\_delimiter"26A33C } % arrow without arrowheads -\_protected\_def\Arrowvert{\_delimiter"26B33D } % double arrow without arrowheads -\_protected\_def\bracevert{\_delimiter"77C33E } % the vertical bar that extends braces -\_protected\_def\Vert{\_delimiter"26B30D } \_let\|=\Vert -\_protected\_def\vert{\_delimiter"26A30C } -\_protected\_def\uparrow{\_delimiter"3222378 } -\_protected\_def\downarrow{\_delimiter"3223379 } -\_protected\_def\updownarrow{\_delimiter"326C33F } -\_protected\_def\Uparrow{\_delimiter"322A37E } -\_protected\_def\Downarrow{\_delimiter"322B37F } -\_protected\_def\Updownarrow{\_delimiter"326D377 } -\_protected\_def\backslash{\_delimiter"26E30F } % for double coset G\_backslash H -\_protected\_def\rangle{\_delimiter"526930B } -\_protected\_def\langle{\_delimiter"426830A } -\_protected\_def\rbrace{\_delimiter"5267309 } \_let\}=\rbrace \_let\_rbrace=\rbrace -\_protected\_def\lbrace{\_delimiter"4266308 } \_let\{=\lbrace \_let\_lbrace=\lbrace -\_protected\_def\rceil{\_delimiter"5265307 } -\_protected\_def\lceil{\_delimiter"4264306 } -\_protected\_def\rfloor{\_delimiter"5263305 } -\_protected\_def\lfloor{\_delimiter"4262304 } - -\_protected\_def\choose{\_atopwithdelims()} -\_protected\_def\brack{\_atopwithdelims[]} -\_protected\_def\brace{\_atopwithdelims\_lbrace\_rbrace} - -\_protected\_def\_sqrt{\_radical"270370 } \_public \sqrt ; - - \_doc ----------------------------- - \`\mathpalette`, \`\vphantom`, \`\hphantom`, \`\phantom`, \`\mathstrut`, and - \`\smash` macros from plain \TeX. - \_cod ----------------------------- - -\_def\_mathpalette#1#2{\_mathchoice{#1\_displaystyle{#2}}% - {#1\_textstyle{#2}}{#1\_scriptstyle{#2}}{#1\_scriptscriptstyle{#2}}} -\_newbox\_rootbox -\_protected\_def\root#1\of{\_setbox\_rootbox - \_hbox{$\_math\_scriptscriptstyle{#1}$}\_mathpalette\_rootA} -\_def\_rootA#1#2{\_setbox0=\_hbox{$\_math#1\_sqrt{#2}$}\_dimen0=\_ht0 - \_advance\_dimen0by-\_dp0 - \_mkern5mu\_raise.6\_dimen0\_copy\_rootbox \_mkern-10mu\_box0 } -\_newifi\_ifvp \_newifi\_ifhp -\_protected\_def\_vphantom{\_vptrue\_hpfalse\_phant} -\_protected\_def\_hphantom{\_vpfalse\_hptrue\_phant} -\_protected\_def\_phantom{\_vptrue\_hptrue\_phant} -\_def\_phant{\_ifmmode\_def\_next{\_mathpalette\_mathphant}% - \_else\_let\_next=\_makephant\_fi\_next} -\_def\_makephant#1{\_setbox0\_hbox{#1}\_finphant} -\_def\_mathphant#1#2{\_setbox0=\_hbox{$\_math#1{#2}$}\_finphant} -\_def\_finphant{\_setbox2=\_null - \_ifvp \_ht2=\_ht0 \_dp2=\_dp0 \_fi - \_ifhp \_wd2=\_wd0 \_fi \_hbox{\_box2}} -\_def\_mathstrut{\_vphantom(} -\_protected\_def\_smash{\_relax % \_relax, in case this comes first in \halign - \_ifmmode\_def\_next{\_mathpalette\_mathsmash}\_else\_let\_next\_makesmash - \_fi\_next} -\_def\_makesmash#1{\_setbox0=\_hbox{#1}\_finsmash} -\_def\_mathsmash#1#2{\_setbox0=\_hbox{$\_math#1{#2}$}\_finsmash} -\_def\_finsmash{\_ht0=\_zo \_dp0=\_zo \_hbox{\_box0}} -\_public \mathpalette \vphantom \hphantom \phantom \mathstrut \smash ; - - \_doc ----------------------------- - \`\cong`, \`\notin`, \`\rightleftharpoons`, \`\buildrel`, \`\doteq`, \`\bmod` - and \`\pmod` macros from plain \TeX/. - \_cod ----------------------------- - -\_protected\_def\_cong{\_mathrel{\_mathpalette\_overeq\_sim}} % congruence sign -\_def\_overeq#1#2{\_lower.05em\_vbox{\_lineskiplimit\_maxdimen\_lineskip=-.05em - \_ialign{$\_math#1\_hfil##\_hfil$\_crcr#2\_crcr=\_crcr}}} -\_protected\_def\_notin{\_mathrel{\_mathpalette\_cancel\_in}} -\_def\_cancel#1#2{\_math\_ooalign{$\_hfil#1\_mkern1mu/\_hfil$\_crcr$#1#2$}} -\_protected\_def\_rightleftharpoons{\_mathrel{\_mathpalette\_rlhp{}}} -\_def\_rlhp#1{\_vcenter{\_math\_hbox{\_ooalign{\_raise.2em - \_hbox{$#1\_rightharpoonup$}\_crcr - $#1\_leftharpoondown$}}}} -\_protected\_def\_buildrel#1\over#2{\_mathrel{\_mathop{\_kern\_zo #2}\_limits^{#1}}} -\_protected\_def\_doteq{\_buildrel\_textstyle.\over=} -\_private \in \sim ; -\_public \cong \notin \rightleftharpoons \buildrel \doteq ; - -\_protected\_def\_bmod{\_nonscript\_mskip-\_medmuskip\_mkern5mu - \_mathbin{\_rm mod}\_penalty900\_mkern5mu\_nonscript\_mskip-\_medmuskip} -\_protected\_def\_pmod#1{\_allowbreak\_mkern18mu({\_rm mod}\_thinsk\_thinsk#1)} -\_public \bmod \pmod ; - - \_doc ----------------------------- - \`\matrix` and \`\pmatrix` - behave as in Plain \TeX/, if it is used in the - `\displaystyle`. On the other hand, it is printed in smaller size - (by appropriate amount) in `\textstyle` = `\scriptstyle` and `\scriptscriptstyle`. - This feature is new in \OpTeX/. - \_cod ----------------------------- - -\_protected\_def\_matrix#1{\_null\_thinsk - \_edef\_tmpa{\_the\_numexpr \_mathstyle/4\_relax}% 0 0 1 1 1 1 2 2 - \_vcenter{\_matrixbaselines\_math - \_ialign{\_the\_lmfil$\_matrixstyle##$\_hfil&&\_quad\_the\_lmfil$\_matrixstyle##$\_hfil\_crcr - \_mathstrut\_crcr\_noalign{\_kern-\_baselineskip} - #1\_crcr\_mathstrut\_crcr\_noalign{\_kern-\_baselineskip}}}\_thinsk} - -\_def\_matrixbaselines{\_normalbaselines \_def\_matrixstyle{}% - \_let\_matrixbaselines=\_relax % \matrix inside matrix does not change size again - \_ifcase\_tmpa \_or - \_baselineskip=.7\_baselineskip \_def\_quad {\_hskip.7em\_relax}% - \_let\_matrixstyle=\_scriptstyle - \_or - \_baselineskip=.5\_baselineskip \_def\_quad {\_hskip.5em\_relax}% - \_let\_matrixstyle=\_scriptscriptstyle - \_fi -} -\_protected\_def\_pmatrix#1{\_left(\_matrix{#1}\_right)} - -\_public \matrix \pmatrix ; - - \_doc ----------------------------- - The \`\cases` and \`\bordermatrix` macros are almost identical as in plain \TeX/. - You can simply re-define `\bordermatrix` with other delimiters - using the common \`\_bordermatrixwithdelims` macro. - \_cod ----------------------------- - -\_protected\_long\_def\_cases#1{\_left\{\_thinsk\_vcenter{\_normalbaselines\_math - \_ialign{$##\_hfil$&\_quad{##\_unsskip}\_hfil\_crcr#1\_crcr}}\_right.} - -\_newdimen\_ptrenwd -\_ptrenwd=8.75pt % width of the big left ( -\_protected\_def\_bordermatrix{\_bordermatrixwithdelims()} -\_def\_bordermatrixwithdelims#1#2#3{\_begingroup \_math - \_setbox0=\_vbox{\_bordermatrixA #3\_stopbmatrix}% - \_setbox2=\_vbox{\_unvcopy0 \_global\_setbox1=\_lastbox}% - \_setbox2=\_hbox{\_unhbox1 \_unskip\_global\_setbox1=\_lastbox}% - \_setbox2=\_hbox{$\_kern\_wd1 \_kern-\_ptrenwd\_left#1\_kern-\_wd1 - \_global\_setbox1=\_vbox{\_box1 \_kern.2em}% - \_vcenter{\_kern-\_ht1 \_unvbox0 \_kern-\_baselineskip}\_thinsk\_right#2$}% - \_null\_thicksk\_vbox{\_kern\_ht1 \_box2}\_endgroup} -\_def\_bordermatrixA #1\cr#2\_stopbmatrix{% - \_ialign{$##$\_hfil\_kern.2em\_kern\_ptrenwd&\_thinspace\_hfil$##$\_hfil - &&\_quad\_hfil$##$\_hfil\_crcr - \_omit\_strut\_hfil\_crcr\_noalign{\_kern-\_baselineskip}% - #1\_crcr\_noalign{\_kern.2em}#2\_crcr\_omit\_strut\_cr}} - -\_public \cases \bordermatrix ; - - \_doc ----------------------------- - The \`\eqalign` macro behaves like in Plain \TeX/ by default. - It creates the `\vcenter` in the math mode. The content is two column - `\halign` with right-aligned left column and left-aligned right column. - The table items are in `\displaystyle` and the `\baselineskip` is - advanced by `\jot` (3pt in plain \TeX). It follows from the default - settings of \^`\eqlines` and \^`\eqstyle` parameters. - - In \OpTeX/, this macro is more flexible. See section 4.4 in the - \ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf] - {Typesetting Math with \OpTeX/}. - The `\baselineskip` value is set by the \^`\eqlines` parameter and math style - by the \^`\eqstyle` parameter. - - There are more possible columns than two (used in classical Plain TeX): - `rlcrlcrlc` etc.\ where `r` and `l` columns are without spaces and `c` column - (if used) has space \^`\eqspace`/2 at its both sides. - \_cod ----------------------------- - -\_long\_def\_eqalign#1{\_null\_thinsk\_vcenter{\_the\_eqlines\_math - \_ialign{&\_hfil$\_the\_eqstyle{##}$&$\_the\_eqstyle{{}##}$\_hfil - &\_hskip.5\_eqspace\_hfil$\_the\_eqstyle{##}$\_hskip.5\_eqspace\_hfil - \_crcr#1\_crcr}}\_thinsk} - -\_public \eqalign ; - - \_doc ----------------------------- - The \`\displaylines``{<formula>\cr<formula>\cr...<formula>}` - creates horizontally centered formulae. - It behaves exactly as in Plain \TeX/. The `\halign` is applied directly - in the outer display environment with lines of type `\hbox to\displaywidth`. - This enables to break lines inside such display to more pages but it is - impossible to use `\eqno` or `\leqno` or \^`\eqmark`. - - \OpTeX/ offers - `\dislaylines to<dimen>{<formula>\cr<formula>\cr...<formula>}` - as an alternative case of usage `\displaylines`. See section 4.3 in the - \ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf] - {Typesetting Math with \OpTeX/}. - The centered formulas are in `\vcenter` in this case, - so lines cannot be broken into more pages, but this case - enables to use `\eqno` or `\leqno` or \^`\eqmark`. - \_cod ----------------------------- - -\_def\_displaylines #1#{\_ifx&\_ea\_displaylinesD - \_else \_def\_tmp to##1\_end{\_def\_tmp{\_dimexpr ##1}}\_tmp #1\_end - \_ea\_displaylinesto \_fi} -\_long\_def\_displaylinesD #1{\_display \_tabskip=\_zoskip - \_halign{\_hbox to\_displaywidth{$\_elign\_hfil\_displaystyle##\_hfil$}\_crcr - #1\_crcr}} -\_long\_def\_displaylinesto #1{\_vcenter{\_openup\_jot \_math \_tabskip=\_zoskip - \_halign{\_strut\_hbox to\_span\_tmp{$\_hss\_displaystyle##\_hss$}\_crcr - #1\_crcr}}} - -\_public\displaylines ; - - \_doc ----------------------------- - \`\openup`, \`\eqalignno` and `\leqalignno` macros are copied from - Plain \TeX/ unchanged. - \_cod ----------------------------- - -\_def\_openup{\_afterassignment\_openupA\_dimen0=} -\_def\_openupA{\_advance\_lineskip by\_dimen0 - \_advance\_baselineskip by\_dimen0 - \_advance\_lineskiplimit by\_dimen0 } -\_newifi\_ifdtop -\_def\_display{\_global\_dtoptrue\_openup\_jot\_math - \_everycr{\_noalign{\_ifdtop \_global\_dtopfalse \_ifdim\_prevdepth>-1000pt - \_vskip-\_lineskiplimit \_vskip\_normallineskiplimit \_fi - \_else \_penalty\_interdisplaylinepenalty \_fi}}} -\_def\_elign{\_tabskip=\_zoskip\_everycr{}} % restore inside \_display -\_long\_def\_eqalignno#1{\_display \_tabskip=\_centering - \_halign to\_displaywidth{\_hfil$\_elign\_displaystyle{##}$\_tabskip=\_zoskip - &$\_elign\_displaystyle{{}##}$\_hfil\_tabskip\_centering - &\_llap{$\_elign##$}\_tabskip\_zoskip\_crcr - #1\_crcr}} -\_long\_def\_leqalignno#1{\_display \_tabskip=\_centering - \_halign to\_displaywidth{\_hfil$\_elign\_displaystyle{##}$\_tabskip=\_zoskip - &$\_elign\_displaystyle{{}##}$\_hfil\_tabskip=\_centering - &\_kern-\_displaywidth\_rlap{$\_elign##$}\_tabskip\_displaywidth\_crcr - #1\_crcr}} -\_public \openup \eqalignno \leqalignno ; - - \_doc ----------------------------- - These macros are inspired by `ams-math.tex` file. - \maxlines=15 - \_cod ----------------------------- - -\_def\_amsafam{4} \_def\_amsbfam{5} - -\_mathchardef \boxdot "2\_amsafam 00 -\_mathchardef \boxplus "2\_amsafam 01 -\_mathchardef \boxtimes "2\_amsafam 02 -\_mathchardef \square "0\_amsafam 03 -\_mathchardef \blacksquare "0\_amsafam 04 -\_mathchardef \centerdot "2\_amsafam 05 -\_mathchardef \lozenge "0\_amsafam 06 -\_mathchardef \blacklozenge "0\_amsafam 07 -\_mathchardef \circlearrowright "3\_amsafam 08 -\_mathchardef \circlearrowleft "3\_amsafam 09 -\_mathchardef \rightleftharpoons "3\_amsafam 0A -\_mathchardef \leftrightharpoons "3\_amsafam 0B -\_mathchardef \boxminus "2\_amsafam 0C -\_mathchardef \Vdash "3\_amsafam 0D -\_mathchardef \Vvdash "3\_amsafam 0E -\_mathchardef \vDash "3\_amsafam 0F -\_mathchardef \twoheadrightarrow "3\_amsafam 10 -\_mathchardef \twoheadleftarrow "3\_amsafam 11 -\_mathchardef \leftleftarrows "3\_amsafam 12 -\_mathchardef \rightrightarrows "3\_amsafam 13 -\_mathchardef \upuparrows "3\_amsafam 14 -\_mathchardef \downdownarrows "3\_amsafam 15 -\_mathchardef \upharpoonright "3\_amsafam 16 -\_mathchardef \downharpoonright "3\_amsafam 17 -\_mathchardef \upharpoonleft "3\_amsafam 18 -\_mathchardef \downharpoonleft "3\_amsafam 19 -\_mathchardef \rightarrowtail "3\_amsafam 1A -\_mathchardef \leftarrowtail "3\_amsafam 1B -\_mathchardef \leftrightarrows "3\_amsafam 1C -\_mathchardef \rightleftarrows "3\_amsafam 1D -\_mathchardef \Lsh "3\_amsafam 1E -\_mathchardef \Rsh "3\_amsafam 1F -\_mathchardef \rightsquigarrow "3\_amsafam 20 -\_mathchardef \leftrightsquigarrow "3\_amsafam 21 -\_mathchardef \looparrowleft "3\_amsafam 22 -\_mathchardef \looparrowright "3\_amsafam 23 -\_mathchardef \circeq "3\_amsafam 24 -\_mathchardef \succsim "3\_amsafam 25 -\_mathchardef \gtrsim "3\_amsafam 26 -\_mathchardef \gtrapprox "3\_amsafam 27 -\_mathchardef \multimap "3\_amsafam 28 -\_mathchardef \therefore "3\_amsafam 29 -\_mathchardef \because "3\_amsafam 2A -\_mathchardef \doteqdot "3\_amsafam 2B -\_mathchardef \triangleq "3\_amsafam 2C -\_mathchardef \precsim "3\_amsafam 2D -\_mathchardef \lesssim "3\_amsafam 2E -\_mathchardef \lessapprox "3\_amsafam 2F -\_mathchardef \eqslantless "3\_amsafam 30 -\_mathchardef \eqslantgtr "3\_amsafam 31 -\_mathchardef \curlyeqprec "3\_amsafam 32 -\_mathchardef \curlyeqsucc "3\_amsafam 33 -\_mathchardef \preccurlyeq "3\_amsafam 34 -\_mathchardef \leqq "3\_amsafam 35 -\_mathchardef \leqslant "3\_amsafam 36 -\_mathchardef \lessgtr "3\_amsafam 37 -\_mathchardef \backprime "0\_amsafam 38 -\_mathchardef \risingdotseq "3\_amsafam 3A -\_mathchardef \fallingdotseq "3\_amsafam 3B -\_mathchardef \succcurlyeq "3\_amsafam 3C -\_mathchardef \geqq "3\_amsafam 3D -\_mathchardef \geqslant "3\_amsafam 3E -\_mathchardef \gtrless "3\_amsafam 3F -\_mathchardef \sqsubset "3\_amsafam 40 -\_mathchardef \sqsupset "3\_amsafam 41 -\_mathchardef \vartriangleright "3\_amsafam 42 -\_mathchardef \vartriangleleft "3\_amsafam 43 -\_mathchardef \trianglerighteq "3\_amsafam 44 -\_mathchardef \trianglelefteq "3\_amsafam 45 -\_mathchardef \bigstar "0\_amsafam 46 -\_mathchardef \between "3\_amsafam 47 -\_mathchardef \blacktriangledown "0\_amsafam 48 -\_mathchardef \blacktriangleright "3\_amsafam 49 -\_mathchardef \blacktriangleleft "3\_amsafam 4A -\_mathchardef \vartriangle "3\_amsafam 4D -\_mathchardef \blacktriangle "0\_amsafam 4E -\_mathchardef \triangledown "0\_amsafam 4F -\_mathchardef \eqcirc "3\_amsafam 50 -\_mathchardef \lesseqgtr "3\_amsafam 51 -\_mathchardef \gtreqless "3\_amsafam 52 -\_mathchardef \lesseqqgtr "3\_amsafam 53 -\_mathchardef \gtreqqless "3\_amsafam 54 -\_mathchardef \Rrightarrow "3\_amsafam 56 -\_mathchardef \Lleftarrow "3\_amsafam 57 -\_mathchardef \veebar "2\_amsafam 59 -\_mathchardef \barwedge "2\_amsafam 5A -\_mathchardef \doublebarwedge "2\_amsafam 5B -\_mathchardef \angle "0\_amsafam 5C -\_mathchardef \measuredangle "0\_amsafam 5D -\_mathchardef \sphericalangle "0\_amsafam 5E -\_mathchardef \varpropto "3\_amsafam 5F -\_mathchardef \smallsmile "3\_amsafam 60 -\_mathchardef \smallfrown "3\_amsafam 61 -\_mathchardef \Subset "3\_amsafam 62 -\_mathchardef \Supset "3\_amsafam 63 -\_mathchardef \Cup "2\_amsafam 64 -\_mathchardef \Cap "2\_amsafam 65 -\_mathchardef \curlywedge "2\_amsafam 66 -\_mathchardef \curlyvee "2\_amsafam 67 -\_mathchardef \leftthreetimes "2\_amsafam 68 -\_mathchardef \rightthreetimes "2\_amsafam 69 -\_mathchardef \subseteqq "3\_amsafam 6A -\_mathchardef \supseteqq "3\_amsafam 6B -\_mathchardef \bumpeq "3\_amsafam 6C -\_mathchardef \Bumpeq "3\_amsafam 6D -\_mathchardef \lll "3\_amsafam 6E -\_mathchardef \ggg "3\_amsafam 6F -\_protected\_def \ulcorner {\_delimiter"4\_amsafam 70\_amsafam 70 } -\_protected\_def \urcorner {\_delimiter"5\_amsafam 71\_amsafam 71 } -\_mathchardef \circledS "0\_amsafam 73 -\_mathchardef \pitchfork "3\_amsafam 74 -\_mathchardef \dotplus "2\_amsafam 75 -\_mathchardef \backsim "3\_amsafam 76 -\_mathchardef \backsimeq "3\_amsafam 77 -\_protected\_def \llcorner {\_delimiter"4\_amsafam 78\_amsafam 78 } -\_protected\_def \lrcorner {\_delimiter"5\_amsafam 79\_amsafam 79 } -\_mathchardef \complement "0\_amsafam 7B -\_mathchardef \intercal "2\_amsafam 7C -\_mathchardef \circledcirc "2\_amsafam 7D -\_mathchardef \circledast "2\_amsafam 7E -\_mathchardef \circleddash "2\_amsafam 7F -\_mathchardef \rhd "2\_amsafam 42 -\_mathchardef \lhd "2\_amsafam 43 -\_mathchardef \unrhd "2\_amsafam 44 -\_mathchardef \unlhd "2\_amsafam 45 - - \_let\restriction\upharpoonright - \_let\Doteq\doteqdot - \_let\doublecup\Cup - \_let\doublecap\Cap - \_let\llless\lll - \_let\gggtr\ggg - \_let\Box=\square % LaTeX symbol - \_let\Box=\square % LaTeX symbol - -\_mathchardef \lvertneqq "3\_amsbfam 00 -\_mathchardef \gvertneqq "3\_amsbfam 01 -\_mathchardef \nleq "3\_amsbfam 02 -\_mathchardef \ngeq "3\_amsbfam 03 -\_mathchardef \nless "3\_amsbfam 04 -\_mathchardef \ngtr "3\_amsbfam 05 -\_mathchardef \nprec "3\_amsbfam 06 -\_mathchardef \nsucc "3\_amsbfam 07 -\_mathchardef \lneqq "3\_amsbfam 08 -\_mathchardef \gneqq "3\_amsbfam 09 -\_mathchardef \nleqslant "3\_amsbfam 0A -\_mathchardef \ngeqslant "3\_amsbfam 0B -\_mathchardef \lneq "3\_amsbfam 0C -\_mathchardef \gneq "3\_amsbfam 0D -\_mathchardef \npreceq "3\_amsbfam 0E -\_mathchardef \nsucceq "3\_amsbfam 0F -\_mathchardef \precnsim "3\_amsbfam 10 -\_mathchardef \succnsim "3\_amsbfam 11 -\_mathchardef \lnsim "3\_amsbfam 12 -\_mathchardef \gnsim "3\_amsbfam 13 -\_mathchardef \nleqq "3\_amsbfam 14 -\_mathchardef \ngeqq "3\_amsbfam 15 -\_mathchardef \precneqq "3\_amsbfam 16 -\_mathchardef \succneqq "3\_amsbfam 17 -\_mathchardef \precnapprox "3\_amsbfam 18 -\_mathchardef \succnapprox "3\_amsbfam 19 -\_mathchardef \lnapprox "3\_amsbfam 1A -\_mathchardef \gnapprox "3\_amsbfam 1B -\_mathchardef \nsim "3\_amsbfam 1C -\_mathchardef \ncong "3\_amsbfam 1D -\_mathchardef \diagup "0\_amsbfam 1E -\_mathchardef \diagdown "0\_amsbfam 1F -\_mathchardef \varsubsetneq "3\_amsbfam 20 -\_mathchardef \varsupsetneq "3\_amsbfam 21 -\_mathchardef \nsubseteqq "3\_amsbfam 22 -\_mathchardef \nsupseteqq "3\_amsbfam 23 -\_mathchardef \subsetneqq "3\_amsbfam 24 -\_mathchardef \supsetneqq "3\_amsbfam 25 -\_mathchardef \varsubsetneqq "3\_amsbfam 26 -\_mathchardef \varsupsetneqq "3\_amsbfam 27 -\_mathchardef \subsetneq "3\_amsbfam 28 -\_mathchardef \supsetneq "3\_amsbfam 29 -\_mathchardef \nsubseteq "3\_amsbfam 2A -\_mathchardef \nsupseteq "3\_amsbfam 2B -\_mathchardef \nparallel "3\_amsbfam 2C -\_mathchardef \nmid "3\_amsbfam 2D -\_mathchardef \nshortmid "3\_amsbfam 2E -\_mathchardef \nshortparallel "3\_amsbfam 2F -\_mathchardef \nvdash "3\_amsbfam 30 -\_mathchardef \nVdash "3\_amsbfam 31 -\_mathchardef \nvDash "3\_amsbfam 32 -\_mathchardef \nVDash "3\_amsbfam 33 -\_mathchardef \ntrianglerighteq "3\_amsbfam 34 -\_mathchardef \ntrianglelefteq "3\_amsbfam 35 -\_mathchardef \ntriangleleft "3\_amsbfam 36 -\_mathchardef \ntriangleright "3\_amsbfam 37 -\_mathchardef \nleftarrow "3\_amsbfam 38 -\_mathchardef \nrightarrow "3\_amsbfam 39 -\_mathchardef \nLeftarrow "3\_amsbfam 3A -\_mathchardef \nRightarrow "3\_amsbfam 3B -\_mathchardef \nLeftrightarrow "3\_amsbfam 3C -\_mathchardef \nleftrightarrow "3\_amsbfam 3D -\_mathchardef \divideontimes "2\_amsbfam 3E -\_mathchardef \varnothing "0\_amsbfam 3F -\_mathchardef \nexists "0\_amsbfam 40 -\_mathchardef \Finv "0\_amsbfam 60 -\_mathchardef \Game "0\_amsbfam 61 -\_mathchardef \mho "0\_amsbfam 66 -\_mathchardef \eth "0\_amsbfam 67 -\_mathchardef \eqsim "3\_amsbfam 68 -\_mathchardef \beth "0\_amsbfam 69 -\_mathchardef \gimel "0\_amsbfam 6A -\_mathchardef \daleth "0\_amsbfam 6B -\_mathchardef \lessdot "2\_amsbfam 6C -\_mathchardef \gtrdot "2\_amsbfam 6D -\_mathchardef \ltimes "2\_amsbfam 6E -\_mathchardef \rtimes "2\_amsbfam 6F -\_mathchardef \shortmid "3\_amsbfam 70 -\_mathchardef \shortparallel "3\_amsbfam 71 -\_mathchardef \smallsetminus "2\_amsbfam 72 -\_mathchardef \thicksim "3\_amsbfam 73 -\_mathchardef \thickapprox "3\_amsbfam 74 -\_mathchardef \approxeq "3\_amsbfam 75 -\_mathchardef \precapprox "3\_amsbfam 76 -\_mathchardef \succapprox "3\_amsbfam 77 -\_mathchardef \curvearrowleft "3\_amsbfam 78 -\_mathchardef \curvearrowright "3\_amsbfam 79 -\_mathchardef \digamma "0\_amsbfam 7A -\_mathchardef \varkappa "0\_amsbfam 7B -\_mathchardef \Bbbk "0\_amsbfam 7C -\_mathchardef \hslash "0\_amsbfam 7D -\_mathchardef \hbar "0\_amsbfam 7E -\_mathchardef \backepsilon "3\_amsbfam 7F - -\_let\circledplus\oplus -\_let\circledminus\ominus -\_let\circledtimes\otimes -\_let\circledslash\oslash -\_let\circleddot\odot - - \_doc ----------------------------- - The \^`\not` macro is re-defined to be smarter than in plain - \TeX/. The macro follows this rule: - \begtt - \not< becomes \_nless - \not> becomes \_ngtr - if \_notXXX is defined, \not\XXX becomes \_notXXX; - if \_nXXX is defined, \not\XXX becomes \_nXXX; - otherwise, \not\XXX is done in the usual way. - \endtt - \_cod ----------------------------- - -\_mathchardef \_notchar "3236 - -\_protected\_def \_not#1{% - \_ifx #1<\_nless \_else - \_ifx #1>\_ngtr \_else - \_edef\_tmpn{\_csstring#1}% - \_ifcsname _not\_tmpn\_endcsname \_csname _not\_tmpn\_endcsname - \_else \_ifcsname _n\_tmpn\_endcsname \_csname _n\_tmpn\_endcsname - \_else \_mathrel{\_mathord{\_notchar}\_mathord{#1}}% - \_fi \_fi \_fi \_fi} -\_private - \nleq \ngeq \nless \ngtr \nprec \nsucc \nleqslant \ngeqslant \npreceq - \nsucceq \nleqq \ngeqq \nsim \ncong \nsubseteqq \nsupseteqq \nsubseteq - \nsupseteq \nparallel \nmid \nshortmid \nshortparallel \nvdash \nVdash - \nvDash \nVDash \ntrianglerighteq \ntrianglelefteq \ntriangleleft - \ntriangleright \nleftarrow \nrightarrow \nLeftarrow \nRightarrow - \nLeftrightarrow \nleftrightarrow \nexists ; -\_public \not ; - - \_doc ----------------------------- - \`\mathstyles``{<math list>}` - behaves like `{<math list>}`, but you can use the following commands in the - `<math list>`: - \begitems - * \`\currstyle` which expands to `\displaystyle`, `\textstyle`, - `\scriptstyle` or `\scriptscriptstyle` depending on the current math style - when \^`\mathstyles` was opened. - * \`\dobystyle``{<D>}{<T>}{<S>}{<SS>}` is expandable macro. It expands to - `<D>`, `<T>`, `<S>` or `<SS>` depending on the current math style - when \^`\mathstyles` was opened. - * The value of the \`\stylenum` is 0, 1, 2 or 3 - depending on the current math style when \^`\mathstyles` was opened. - \enditems - Example of usage of \^`\mathstyles`: - `\def\mathframe#1{\mathstyles{\frame{$\currstyle{#1}$}}}`. - \_cod ----------------------------- - -\_newcount\_stylenum -\_def\_mathstyles#1{{\_mathchoice{\_stylenum0 #1}{\_stylenum1 #1}% - {\_stylenum2 #1}{\_stylenum3 #1}}} -\_def\_dobystyle#1#2#3#4{\_ifcase\_stylenum#1\_or#2\_or#3\_or#4\_fi} -\_def\_currstyle{\_dobystyle\_displaystyle\_textstyle\_scriptstyle\_scriptscriptstyle} -\_public \mathstyles \dobystyle \currstyle \stylenum ; - - \_doc ----------------------------- - The \`\cramped` macro - sets the cramped variant of the current style. - Note that \^`\currstyle` initializes non-cramped variants. - The example `\mathframe` above should be:\nl - `\def\mathframe#1{\mathstyles{\frame{$\currstyle\cramped #1$}}}`.\nl - Second note: `\cramped` macro reads the current math style from - the `\mathstyle` LuaTeX primitive, so it does not work in numerators of - generalized fractions but you can use it before the fraction is opened: - `$\cramped {x^2\over y^2}$`. - \_cod ----------------------------- - -\_def\_cramped{\_ifcase\_numexpr(\_mathstyle+1)/2\_relax\_or - \_crampeddisplaystyle \_or \_crampedtextstyle \_or - \_crampedscriptstyle \_or \_crampedscriptscriptstyle \_fi -} -\_public \cramped ; - - \_doc ----------------------------- - The \`\mathbox``{<text>}` macro is copied from OPmac trick 078. - It behaves like `\hbox{<text>}` but the `<text>` is scaled to a smaller - size if it is used in scriptstyle or scriptscript style.\nl - The \^`\_textmff` and \^`\_scriptmff` are redefined in order to - respect optical sizes. If we are in script style then the math mode - starts in text style, but optical size is given to script style. - The `\mathbox` in non-Unicode math respects optical sizes - using different principle. - \_cod ----------------------------- - -\_def\_mathbox#1{{\_mathstyles{\_hbox{% - \_ifnum\_stylenum<2 \_everymath{\_currstyle}% - \_else - \_ifnum\_stylenum=2 \_def\_textmff{+ssty=0;}\_fi - \_ifnum\_stylenum=3 \_def\_textmff{+ssty=1;}\_def\_scriptmff{+ssty=1;}\_fi - \_typoscale[\_dobystyle{}{}{700}{500}/]\_fi #1}}}% -} -\_public \mathbox ; - -\_endcode %--------------------------------------------------- - -2021-02-15 \_mathbox redefines \_textmff etc. in order to respect optical sizes -2021-02-04 \_bordermatrixwithdelims introduced. -2021-01-23 better expession for math styles in \matrix -2021-01-22 bad use of \_stylenum in \matrix + bad value (bug fix: \_stylenum->\_mtstylenum) -2020-12-17 \box0->\hbox{\box0} in \_finphant and \_finsmash, see https://tex.stackexchange.com/questions/574997/ -2020-06-14 \borermatrix, \cases corrected -2020-06-13 \adots introduced, \matrix smaller in T mode too. -2020-06-03 \notin corrected -2020-06-02 $$\par$$ error is supressed, so we define \(l)eqalign(no), \displayines as \long -2020-05-30 \cases: group added in the second column. - "\displaylines to<size>" implemented and documented. -2020-05-11 \let\|=\Vert, bug fixed -2020-04-27 \mathstyles introduced -2020-03-14 implemented diff --git a/Master/texmf-dist/tex/luatex/optex/base/math-preload.opm b/Master/texmf-dist/tex/luatex/optex/base/math-preload.opm deleted file mode 100644 index 0ec9abae2f7..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/math-preload.opm +++ /dev/null @@ -1,227 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \normalmath {Math fonts CM + AMS preloaded <2020-05-06>} % preloaded in format - - \_doc ------------------------------ - We have two math macros \`\normalmath` for the normal shape of all math - symbols and \`\boldmath` for the bold shape of all math symbols. The second one - can be used in bold titles, for example. - These macros load all fonts from all given math font families. - \_cod ------------------------------ - -\_def\_normalmath{% - \_loadmathfamily 0 cmr % CM Roman - \_loadmathfamily 1 cmmi % CM Math Italic - \_loadmathfamily 2 cmsy % CM Standard symbols - \_loadmathfamily 3 cmex % CM extra symbols - \_loadmathfamily 4 msam % AMS symbols A - \_loadmathfamily 5 msbm % AMS symbols B - \_loadmathfamily 6 rsfs % script - \_loadmathfamily 7 eufm % fractur - \_loadmathfamily 8 bfsans % sans serif bold - \_loadmathfamily 9 bisans % sans serif bold slanted (for vectors) -% \_setmathfamily 10 \_tentt -% \_setmathfamily 11 \_tenit - \_setmathdimens -} -\_def\_boldmath{% - \_loadmathfamily 0 cmbx % CM Roman Bold Extended - \_loadmathfamily 1 cmmib % CM Math Italic Bold - \_loadmathfamily 2 cmbsy % CM Standard symbols Bold - \_loadmathfamily 3 cmexb % CM extra symbols Bold - \_loadmathfamily 4 msam % AMS symbols A (bold not available?) - \_loadmathfamily 5 msbm % AMS symbols B (bold not available?) - \_loadmathfamily 6 rsfs % script (bold not available?) - \_loadmathfamily 7 eufb % fractur bold - \_loadmathfamily 8 bbfsans % sans serif extra bold - \_loadmathfamily 9 bbisans % sans serif extra bold slanted (for vectors) -% \_setmathfamily 10 \_tentt -% \_setmathfamily 11 \_tenbi - \_setmathdimens -} -\_count18=9 % families declared by \newfam are 12, 13, ... - -\_def \normalmath {\_normalmath} \_def\boldmath {\_boldmath} - - \_doc ----------------------------- - The classical math family selectors - \`\mit`, \^`\cal`, \^`\bbchar`, \^`\frak` and \^`\script` - are defined here. - The \^`\rm`, \^`\bf`, \^`\it`, \^`\bi` and \^`\tt` does two things: - they are variant selectors for text fonts and math family selectors for math fonts. - The idea was adapted from plain \TeX/.\nl - These macros are redefined when `unimat-codes.opm` is loaded, - see the section~\ref[unimath-codes]. - \_cod ----------------------------- - -\_chardef\_bffam = 8 -\_chardef\_bifam = 9 -%\_chardef\_ttfam = 10 -%\_chardef\_itfam = 11 - -\_protected\_def \_rm {\_tryloadrm \_tenrm \_fam0 } -\_protected\_def \_bf {\_tryloadbf \_tenbf \_fam\_bffam} -\_protected\_def \_it {\_tryloadit \_tenit \_fam1 } -\_protected\_def \_bi {\_tryloadbi \_tenbi \_fam\_bifam} -\_protected\_def \_tt {\_tryloadtt \_tentt} - -\_protected\_def \_mit {\_fam1 } -\_protected\_def \_cal {\_fam2 } -\_protected\_def \_bbchar {\_fam5 } % double stroked letters -\_protected\_def \_frak {\_fam7 } % fraktur -\_protected\_def \_script {\_fam6 } % more extensive script than \cal - -\_public \rm \bf \it \bi \tt \mit \cal \bbchar \frak \script ; - - \_doc ----------------------------- - The optical sizes of Computer Modern fonts, AMS, and other fonts - are declared here. - \_cod ----------------------------- - -%% CM math fonts, optical sizes: - -\_regtfm cmmi 0 cmmi5 5.5 cmmi6 6.5 cmmi7 7.5 cmmi8 8.5 cmmi9 9.5 - cmmi10 11.1 cmmi12 * -\_regtfm cmmib 0 cmmib5 5.5 cmmib6 6.5 cmmib7 7.5 cmmib8 8.5 cmmib9 9.5 cmmib10 * -\_regtfm cmtex 0 cstex8 8.5 cstex9 9.5 cstex10 * -\_regtfm cmsy 0 cmsy5 5.5 cmsy6 6.5 cmsy7 7.5 cmsy8 8.5 cmsy9 9.5 cmsy10 * -\_regtfm cmbsy 0 cmbsy5 5.5 cmbsy6 6.5 cmbsy7 7.5 cmbsy8 8.5 cmbsy9 9.5 cmbsy10 * -\_regtfm cmex 0 cmex7 7.5 cmex8 8.5 cmex9 9.5 cmex10 * -\_regtfm cmexb 0 cmexb10 * - -\_regtfm cmr 0 cmr5 5.5 cmr6 6.5 cmr7 7.5 cmr8 8.5 cmr9 9.5 - cmr10 11.1 cmr12 15 cmr17 * -\_regtfm cmbx 0 cmbx5 5.5 cmbx6 6.5 cmbx7 7.5 cmbx8 8.5 cmbx9 9.5 - cmbx10 11.1 cmbx12 * -\_regtfm cmti 0 cmti7 7.5 cmti8 8.5 cmti9 9.5 cmti10 11.1 cmti12 * -\_regtfm cmtt 0 cmtt8 8.5 cmtt9 9.5 cmtt10 11.1 cmtt12 * - -%% AMS math fonts, optical sizes: - -\_regtfm msam 0 msam5 5.5 msam6 6.5 msam7 7.5 msam8 8.5 msam9 9.5 msam10 * -\_regtfm msbm 0 msbm5 5.5 msbm6 6.5 msbm7 7.5 msbm8 8.5 msbm9 9.5 msbm10 * - -%% fraktur, rsfs, optical sizes: - -\_regtfm eufm 0 eufm5 6 eufm7 8.5 eufm10 * -\_regtfm eufb 0 eufb5 6 eufb7 8.5 eufb10 * -\_regtfm rsfs 0 rsfs5 6 rsfs7 8.5 rsfs10 * - -%% bf and bi sansserif math alternatives: - -\_regtfm bfsans 0 ecsx0500 5.5 ecsx0600 6.5 ecsx0700 7.5 ecsx0800 - 8.5 ecsx0900 9.5 ecsx1000 11.1 ecsx1200 * -\_regtfm bisans 0 ecso0500 5.5 ecso0600 6.5 ecso0700 7.5 ecso0800 - 8.5 ecso0900 9.5 ecso1000 11.1 ecso1200 * -\_regtfm bbfsans 0 ecsx0500 5.5 ecsx0600 6.5 ecsx0700 7.5 ecsx0800 - 8.5 ecsx0900 9.5 ecsx1000 11.1 ecsx1200 * -\_regtfm bbisans 0 ecso0500 5.5 ecso0600 6.5 ecso0700 7.5 ecso0800 - 8.5 ecso0900 9.5 ecso1000 11.1 ecso1200 * - - \_doc ----------------------------- - \`\_loadmathfamily` `<number> <font>` loads one math family, i.\,e.\ - the triple of fonts in the text size, script size and script-script size. - The `<font>` is `<font-id>` used in the `\_regtfm` parameter or - the real TFM name. The family is saved as `\fam<number>`. - \nl - \`\_setmathfamily` `<number> \<font-switch>` loads one math family - like `\_loadmathfamily` does it. But the second parameter is a - `\<font-switch>` declared previously by the `\font` primitive. - \nl - The font family is loaded at \`\_sizemtext`, \`\_sizemscript` and - \`\_sizemsscript` sizes. These sizes are set by the - \`\setmathsizes` `[<text-size>/<script-size>/<scriptscript-size>]` macro. - These parameters are given in the \`\ptmunit` unit, it is set to - 1\`\ptunit` and it is set to 1\,pt by default. - \nl - \`\_corrmsize` `<factor><space>` can be used just before - `\_loadmathfamily` or `\_setmathfamily`. - The `<factor>` is decimal number, it denotes - scale-factor \"size of loaded math font in `\textstyle` : size of text font". - You can use it in `\_normalmath` or `\_boldmath` macros if you want to do a - corrections (for example due to different ex-height in text and math - font). The `\_corrmsize` is applied only to one following - `\_loadmathfamily` or `\_setmathfamily`. If it is missing - then the `<factor>` is 1 for such math family (i.e.\ no size corrections). - \_cod ----------------------------- - -\_def\_corrmsize#1 {\_ptmunit=#1\_ptunit} % for corrections of sizes in diferent fonts - -\_def\_loadmathfamily #1 #2 {% - \_edef\_optsizesave{\_the\_optsize}% - \_optsize=\_sizemtext \_font\_mF=\_whichtfm{#2} at\_optsize \_textfont#1=\_mF - \_optsize=\_sizemscript \_font\_mF=\_whichtfm{#2} at\_optsize \_scriptfont#1=\_mF - \_optsize=\_sizemsscript \_font\_mF=\_whichtfm{#2} at\_optsize \_scriptscriptfont#1=\_mF - \_optsize=\_optsizesave \_ptmunit=\_ptunit -} -\_def\_setmathfamily #1 #2{\_let\_mF=#2% - \_edef\_optsizesave{\_the\_optsize}% - \_optsize=\_sizemtext \_fontlet#2=#2 at\_optsize \_textfont#1=#2% - \_optsize=\_sizemscript \_fontlet#2=#2 at\_optsize \_scriptfont#1=#2% - \_optsize=\_sizemsscript \_fontlet#2=#2 at\_optsize \_scriptscriptfont#1=#2% - \_optsize=\_optsizesave \_ptmunit=\_ptunit \_let#2=\_mF -} -\_def\_setmathsizes[#1/#2/#3]{\_ptmunit=\_ptunit - \_def\_sizemtext{#1\_ptmunit}\_def\_sizemscript{#2\_ptmunit}% - \_def\_sizemsscript{#3\_ptmunit}% -} -\_newdimen\_ptunit \_ptunit=1pt -\_newdimen\_ptmunit \_ptmunit=1\_ptunit - -\_public \setmathsizes \ptunit \ptmunit ; - - \_doc ----------------------------- - The \`\_setmathdimens` macro is used in \^`\normalmath` or \^`\boldmath` - macros. It makes math dimensions dependent on the font size (plain \TeX/ sets - them only for 10\,pt typesetting). The `\skewchar` of some math families are - set here too. - \_cod ----------------------------- - -\_def\_setmathdimens{% PlainTeX sets these dimens for 10pt size only: - \_delimitershortfall=0.5\_fontdimen6\_textfont3 - \_nulldelimiterspace=0.12\_fontdimen6\_textfont3 - \_scriptspace=0.05\_fontdimen6\_textfont3 - \_skewchar\_textfont1=127 \_skewchar\_scriptfont1=127 - \_skewchar\_scriptscriptfont1=127 - \_skewchar\_textfont2=48 \_skewchar\_scriptfont2=48 - \_skewchar\_scriptscriptfont2=48 - \_skewchar\_textfont6=127 \_skewchar\_scriptfont6=127 - \_skewchar\_scriptscriptfont6=127 -} - - \_doc ----------------------------- - Finally, we preload a math fonts collection in [10/7/5] sizes - when the format is generated. This is done when - `\_suppressfontnotfounderror=1` because we need not errors when the format is - generated. Maybe there are not all fonts in the \TeX/ distribution - installed. - \_cod ----------------------------- - -\_suppressfontnotfounderror=1 -\_setmathsizes[10/7/5]\_normalmath -\_suppressfontnotfounderror=0 - - -\_endcode %--------------------------------------------------- - -The Computer Modern and AMS fonts are preloaded here in classical math-fam -concept, where each math family includes three fonts with max 256 characters -(typically 128 characters). - -On the other hand, when \^`\fontfam` macro is used in the document then text -font family and appropriate math family is loaded with Unicode fonts, i.e. -Unicode-math is used. It re-defines all settings given here. - -The general rule of usage the math fonts in different sizes in \OpTeX/ says: set three -sizes by the macro -\^`\setmathsizes` `[<text-size>/<script-size>/<scriptscript-size>]` and then -load all math fonts in given sizes by \^`\normalmath` or \^`\boldmath` macros. -For example -\begtt -\setmathsizes[12/8.4/6]\normalmath ... math typesetting at 12 pt is ready. -\endtt - -\_endinput - -2020-05-06: \itfam, \ttfam removed, (Unicode math preferred) -2020-04-14: \skewchar\fam6 added diff --git a/Master/texmf-dist/tex/luatex/optex/base/math-unicode.opm b/Master/texmf-dist/tex/luatex/optex/base/math-unicode.opm deleted file mode 100644 index 96f99833808..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/math-unicode.opm +++ /dev/null @@ -1,266 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \loadmath {Unicode Math fonts <2021-03-09>} % preloaded in format - - \_doc ----------------------------- - \`\loadmath` `{<Unicode-math font>}` loads the given font. It does: - \begitems - * define \`\_unimathfont` as `<Unicode-math font>`, - * redefine `\normalmath` and `\boldmath` macros to their Unicode counterparts, - * load the `\_unimathfont` by `\normalmath`, - * print information about the loaded font on the terminal, - * redefine all encoding dependent setting by `\input unimath-codes.opm`, - * protect new loading by setting \`\_ifmathloading` to false. - \enditems - \`\noloadmath` disallows Unicode-math loading by \`\_mathloadingfalse`.\nl - \`\doloadmath` allows Unicode-math loading by \`\_mathloadingtrue`. - \_cod ----------------------------- - -\_newifi \_ifmathloading \_mathloadingtrue - -\_def\_noloadmath{\_mathloadingfalse} -\_def\_doloadmath{\_mathloadingtrue} - -\_def\_loadmath#1{% - \_ifmathloading - \_initunifonts - \_isfont{#1}\_iffalse - \_opwarning{Math font "#1" not found, skipped...}% - \_else - \_def\_unimathfont{#1}% - \_let\_normalmath = \_normalunimath \_let\_boldmath = \_boldunimath - \_normalmath - \_wterm {MATH-FONT: "#1" -- unicode math prepared.}% - \_ifx\_ncharrmA\_undefined \_opinput {unimath-codes.opm}\_fi - \_mathloadingfalse - \_fi\_fi} - -\_public \loadmath \noloadmath \doloadmath ; - - \_doc ----------------------------- - \`\loadboldmath` `{<bold-font>} \to {<normal-font>}` - defines \`\_unimathboldfont` as `<bold-font>` only if `\_unimathfont` is - defined as `<normal-font>`. It is used when \^`\boldmath` macro is run. - When no `\_unimathboldfont` is defined then the `\boldmath` macro - use \"fake bold" generated by `embolden` \LuaTeX/ font feature. - \_cod ----------------------------- - -\_def\_loadboldmath#1#2\to #3{% - \_def\_tmp{#3}\_ifx\_unimathfont\_tmp % do work only if #3 is loaded as normal Math - \_isfont{#1}\_iffalse - \_opwarning{Bold-Math font "#1" not found, skipped...} - \_else - \_def\_unimathboldfont{#1}% - \_wterm {MATH-FONT: "#1" -- unicode math bold prepared.}% - \_fi\_fi} - -\_public \loadboldmath ; - - \_doc ----------------------------- - The Unicode version of the \^`\normalmath` and \^`\boldmath` macros - are defined here as \`\_normalunimath` and \`\_boldunimath` macros. - They are using \`\_setunimathdimens` in a similar sense as - \^`\_setmathdimens`. - \nl - You can combine more fonts if you register them to another - math families (5, 6, 7, etc.) in the \^`\normalmath` macro. - \nl - The default value of \^`\_normalunimath` shows a combination of base Unicode-math - font with 8bit Math font at family 4. See definition of `\script` macro where - `\fam4` is used. - \_cod ----------------------------- - -\_def\_normalunimath{% - \_loadumathfamily 1 {\_unimathfont}{} % Base font - \_loadmathfamily 4 rsfs % script - \_setunimathdimens -}% -\_def\_boldunimath{% - \_ifx\_unimathboldfont \_undefined - \_loadumathfamily 1 {\_unimathfont}{embolden=1.7;} % Base faked bold - \_else - \_loadumathfamily 1 {\_unimathboldfont}{} % Base real bold font - \_fi - \_loadmathfamily 4 rsfs % script - \_setunimathdimens -}% -\_def\_setunimathdimens{% PlainTeX sets these dimens for 10pt size only: - \_delimitershortfall=0.5\_fontdimen6\_textfont3 - \_nulldelimiterspace=0.12\_fontdimen6\_textfont3 - \_scriptspace=0.05\_fontdimen6\_textfont3 - \_begingroup % correction for \choose - \_everymath{}\_global\_setbox0=\_hbox{$\_fam1\_displaystyle{0\_atop0}$}\_endgroup - \_Umathfractiondelsize\_displaystyle = \_dimexpr(\_ht0-\_Umathaxis\_displaystyle)*2\_relax -} - - \_doc ----------------------------- - If you try the example above about - \~`\loadboldmath``{[xitsmath-bold]} \to {[xitsmath-regular]}` - then you can find a bug in XITSMath-Bold font: the symbols for norm - $\|x\|$ are missing. So, we have to define `\_boldmath` macro manually. - The missing symbol is loaded from family 5 as no-bold variant in our example: - \begtt - \loadmath{[xitsmath-regular]} - \def\_boldmath{% - \_loadumathfamily 1 {[xitsmath-bold]}{} % Base font - \_loadmathfamily 4 rsfs % script - \_loadumathfamily 5 {[xitsmath-regular]}{} - \_def\|{\_Udelimiter 0 5 "02016 }% % norm delimiter from family 5 - \_setmathdimens - } - \endtt - - \`\_loadumathfamily` `<number> {<font>}{<font features>}` - loads the given Unicode-math fonts in three sizes given by the - \^`\setmathsizes` macro and sets it as the math family `<number>`. - The `<font features>` are added to the default - \`\_mfontfeatures` and to the size-dependent features `+ssty=0` - if script size is asked or `+ssty=1` if scriptscriptsize is asked. - If the math family 1 is loaded then the family 2 and 3 are set by the same - font because \TeX/ needs to read dimension information about generating - math formulae from these three math families. All information needed by - \TeX/ is collected in single Unicode-math font.\nl - The \^`\_corrmsize` `<factor><space>` can be used just before - `\_loadumathfamily`, see section~\ref[math-preload] for more information.\nl - The \`\_textmff`, \`\_scriptmff` and \`\_sscriptmff` are additional font - features for text, script and sscript sizes respectively. They are - locally re-defined in \^`\mathbox` macro. - \_cod ----------------------------- - -\_def\_umathname#1#2{"#1:\_mfontfeatures#2"} -\_def\_mfontfeatures{mode=base;script=math;} - -\_def\_loadumathfamily #1 #2#3 {% - \_edef\_optsizesave{\_the\_optsize}% - \_optsize=\_sizemtext \_font\_mF=\_umathname{#2}{\_textmff #3} at\_optsize - \_textfont#1=\_mF \_ifnum#1=1 \_textfont2=\_mF \_textfont3=\_mF \_fi - \_optsize=\_sizemscript \_font\_mF=\_umathname{#2}{\_scriptmff #3} at\_optsize - \_scriptfont#1=\_mF \_ifnum#1=1 \_scriptfont2=\_mF \_scriptfont3=\_mF \_fi - \_optsize=\_sizemsscript \_font\_mF=\_umathname{#2}{\_sscriptmff #3} at\_optsize - \_scriptscriptfont#1=\_mF \_ifnum#1=1 \_scriptscriptfont2=\_mF \_scriptscriptfont3=\_mF \_fi - \_optsize=\_optsizesave \_ptmunit=\_ptunit -} -\_def\_textmff{} \_def\_scriptmff{+ssty=0;} \_def\_sscriptmff{+ssty=1;} - - \_doc ----------------------------- - Unicode math font includes all typical math alphabets together, user needs not to - load more \TeX/ math families. These math alphabets are encoded by - different parts of Unicode table. We need auxiliary macros for setting - mathcodes by selected math alphabet. - \nl - \`\_umathrange` `{<from->-<to>}<class><family>\<first>` sets `\Umathcode`s - of the characters in the interval `<from>-<to>` to `\<first>`, - `\<first>+1`, `\<first>+2` - etc., but \`\_umathcharholes` are skipped - (`\_umathcharholes` are parts of the Unicode table not designed for math - alphabets but they cause that the math alphabets are - not continuously spread out in the table; I mean that the - designers were under the influence of drugs when they created - this part of the Unicode table). - The `<from>-<to>` clause includes normal letters like `A-Z`. - \nl - \`\_umahrangegreek` `\<first>` is the same as - `\_umathrange {<alpha>-<omega>}\<first>`. - \nl - \`\_umahrangeGREEK` `\<first>` is the same as - `\_umathrange {<Alpha>-<Omega>}\<first>`. - \nl - \`\_greekdef` `<control sequences> \_relax` defines each control sequence - as a normal character with codes `\_umathnumB`, `\_umathnumB+1`, - `\_umathnumB+2` etc. It is used for redefinig the contol sequences for - math Greek `\alpha`, `\beta`, `\gamma` etc. - \_cod ----------------------------- - -\_newcount\_umathnumA \_newcount\_umathnumB - -\_def\_umathcorr#1#2{\_ea#1\_ea{\_the#2}} -\_def\_umathprepare#1{\_def\_umathscanholes##1[#1]##2##3\_relax{##2}} -\_def\_umathvalue#1{\_ea\_umathscanholes\_umathcharholes[#1]{#1}\_relax} - -\_def\_umathcharholes{% holes in math alphabets: - [119893]{"210E}[119965]{"212C}[119968]{"2130}[119969]{"2131}% - [119971]{"210B}[119972]{"2110}[119975]{"2112}[119976]{"2133}[119981]{"211B}% - [119994]{"212F}[119996]{"210A}[120004]{"2134}% - [120070]{"212D}[120075]{"210C}[120076]{"2111}[120085]{"211C}[120093]{"2128}% - [120122]{"2102}[120127]{"210D}[120133]{"2115}[120135]{"2119} - [120136]{"211A}[120137]{"211D}[120145]{"2124}% -} -\_def\_umathrange#1#2#3#4{\_umathnumB=#4\_def\_tmp{#2 #3 }\_umathrangeA#1} -\_def\_umathrangeA#1-#2{\_umathnumA=`#1\_relax - \_loop - \_umathcorr\_umathprepare\_umathnumB - \_Umathcode \_umathnumA = \_tmp \_umathcorr\_umathvalue{\_umathnumB} - \_ifnum\_umathnumA<`#2\_relax - \_advance\_umathnumA by1 \_advance\_umathnumB by1 - \_repeat -} -\_def\_umathrangeGREEK{\_umathrange{^^^^0391-^^^^03a9}} -\_def\_umathrangegreek{\_umathrange{^^^^03b1-^^^^03d6}} -\_def\_greekdef#1{\_ifx#1\_relax \_else - \_begingroup \_lccode`X=\_umathnumB \_lowercase{\_endgroup \_def#1{X}}% - \_advance\_umathnumB by 1 - \_ea\_greekdef \_fi -} - -\_endcode - - -The \^`\loadmath` `{<Unicode-math font>}` macro loads math fonts and -redefines all default math-codes using `\input unimath-codes.opm`. -If Unicode-math font is loaded then \^`\_mathloadingfalse` -is set, so the new Unicode-math font isn't loaded until \^`\doloadmath` is used. - -\^`\loadboldmath` `{<bold-font>} \to {<normal-font>}` loads bold variant only -if `<normal-font>` was sucessully loaded by the previous `\loadmath`. For example: - -\begtt -\loadmath {[xitsmath-regular]} -\loadboldmath {[xitsmath-bold]} \to {[xitsmath-regular]} -\endtt -There are very few Unicode-math fonts with full \^`\boldmath` support. -I know only XITSMath-Bold and KpMath-Bold. If \^`\loadboldmath` is not used -then \"faked bold" created from \^`\normalmath` is used by default. - -The \^`\loadmath` macro was succesfully tested on: - -\begtt -\loadmath{[XITSMath-Regular]} ... XITS MATH -\loadmath{[latinmodern-math]} ... Latin Modern Math -\loadmath{[texgyretermes-math]} ... TeXGyre Termes Math -\loadmath{[texgyrebonum-math]} ... TeXGyre Bonum Math -\loadmath{[texgyrepagella-math]} ... TeXGyre Pagella Math -\loadmath{[texgyreschola-math]} ... TeXGyre Schola Math -\loadmath{[texgyredejavu-math]} ... TeXGyre DeJaVu Math -\loadmath{[LibertinusMath-Regular]} ... Libertinus Math -\loadmath{[FiraMath-Regular]} ... Fira Math -\loadmath{[Asana-Math]} ... Asana Math -\loadmath{[KpMath-Regular]} ... KP fonts Math -\endtt - -\secc Unicode-math macros preloaded in the format - -\printdoc math-unicode.opm - - -\secc[unimath-codes] Macros and codes set when \code{\\loadmatfont} is processed - -The file `unimath-codes.opm` is loaded when the \^`\loadmath` is used. The -macros here redefines globally all encoding dependent settings declared in -the section~\ref[math-macros]. - -\printdoc unimath-codes.opm -\printdoctail unimath-codes.opm - -\secc Printing all Unicode math slots in used math font - -\printdoctail print-unimath.opm -\printdoc print-unimath.opm - -\_endinput - -2021-03-09 \_setunimathdimes: \_begin/end/group instead {}, bug fixed -2021-02-15 \_textmff, \_scriptmff and \_sscriptmff introduced -2021-02-15 \_expandafter -> \_ea -2020-06-07 \Umathfractiondelsize (for \choose brackets) corrected, see https://tug.org/pipermail/luatex/2020-June/007365.html -2020-04-15 \_setmathdimens -> \_setuniathdimens -2020-02-25 implemented diff --git a/Master/texmf-dist/tex/luatex/optex/base/mathclass.opm b/Master/texmf-dist/tex/luatex/optex/base/mathclass.opm deleted file mode 100644 index 458431abcad..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/mathclass.opm +++ /dev/null @@ -1,1591 +0,0 @@ -# File: MathClass.txt -# Revision: 15 -# Date: 2017-06-01, 12:35:00 GMT -# -# © 2017 Unicode®, Inc. -# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html -# For documentation, see http://www.unicode.org/reports/tr25/ -# -# ------------------------------------------------ -# This file is a classification of characters based on their usage in -# mathematical notation. -# -# While the contents of this file represent the best information -# available to the authors and the Unicode Technical Committee as -# of the date referenced above, it is likely that the information -# in this file will change from time to time. -# -# This file is *NOT* formally part of the Unicode Character Database -# at this time. -# -# The character encoding of this plain-text file is UTF-8. -# -# The data consists of 2 fields. -# -# 1: code point or range -# -# 2: class, one of: -# -# N - Normal - includes all digits and symbols requiring only one form -# A - Alphabetic -# B - Binary -# C - Closing - usually paired with opening delimiter -# D - Diacritic -# F - Fence - unpaired delimiter (often used as opening or closing) -# G - Glyph_Part - piece of large operator -# L - Large - n-ary or large operator, often takes limits -# O - Opening - usually paired with closing delimiter -# P - Punctuation -# R - Relation - includes arrows -# S - Space -# U - Unary - operators that are only unary -# V - Vary - operators that can be unary or binary depending on context -# X - Special - characters not covered by other classes -# -# Fields are delimited by ';'. Spaces adjacent to the delimiter or the '#' are -# not significant. Future versions of this file may use different amounts of -# whitespace. -# -# Some character positions in the Mathematical Alphanumeric Symbols block are -# reserved and have been mapped to the Letterlike Symbols block in Unicode. -# This is indicated in 24 special purpose comments. -# -# The character repertoire of this revision is the repertoire of Unicode -# Version 9.0. For more information see Revision 15 or later of UTR #25. -# ------------------------------------------------ - -0020;S -0021;N -0023;N -0024;N -0025;N -0026;N -0028;O -0029;C -002A;N -002B;V -002C;P -002D;N -002E;P -002F;B -0030..0039;N -003A;P -003B;P -003C;R -003D;R -003E;R -003F;P -0040;N -0041..005A;A -005B;O -005C;B -005D;C -005E;N -005F;N -0060;D -0061..007A;A -007B;O -007C;F -007D;C -007E;N -00A0;S -00A1;P -00A2;N -00A3;N -00A4;N -00A5;N -00A6;N -00A7;N -00A8;D -00AC;U -00AF;D -00B0;N -00B1;V -00B2;N -00B3;N -00B4;N -00B5;N -00B6;N -00B7;B -00B9;N -00BC;N -00BD;N -00BE;N -00BF;P -00D7;B -00F7;B -0131;A -0237;A -02C6;D -02C7;D -02D8;D -02D9;D -02DA;D -02DC;D -0300;D -0301;D -0302;D -0303;D -0304;D -0305;D -0306;D -0307;D -0308;D -030A;D -030C;D -0311;D -0323;D -032C;D -032D;D -032E;D -032F;D -0330;D -0331;D -0332;D -0333;D -0338;D -033A;D -033F;D -0346;D -0391;A -0392;A -0393;A -0394;A -0395;A -0396;A -0397;A -0398;A -0399;A -039A;A -039B;A -039C;A -039D;A -039E;A -039F;A -03A0;A -03A1;A -03A3;A -03A4;A -03A6;A -03A7;A -03A8;A -03A9;A -03B1;A -03B2;A -03B3;A -03B4;A -03B5;A -03B6;A -03B7;A -03B8;A -03B9;A -03BA;A -03BB;A -03BC;A -03BD;A -03BE;A -03BF;A -03C0;A -03C1;A -03C3;A -03C4;A -03C5;A -03C6;A -03C7;A -03C8;A -03C9;A -03D0;A -03D1;A -03D2;A -03D5;A -03D6;A -03D8;N -03D9;N -03DA;A -03DB;A -03DC;A -03DD;A -03E0;A -03E1;A -03F0;A -03F1;A -03F4;A -03F5;A -03F6;N -0428;A -0606;L -0607;L -0608;A -2000;S -2001;S -2002;S -2003;S -2004;S -2005;S -2006;S -2007;S -2009;S -200A;S -200B;S -2010;P -2012;P -2013;P -2014;P -2016;F -2020;R -2021;R -2022;B -2026;N -2032;N -2033;N -2034;N -2035;N -2036;N -2037;N -203B;N -203C;N -2040;B -2044;B -204E;B -204F;R -2050;R -2051;N -2052;N -2057;N -205F;S -2061;B -2062;B -2063;P -2064;X -207A..207E;N -208A..208E;N -20D0;D -20D1;D -20D2;D -20D3;X -20D4;D -20D5;D -20D6;D -20D7;D -20D8;D -20D9;D -20DA;D -20DB;D -20DC;D -20DD;D -20DE;D -20DF;D -20E1;D -20E4;D -20E5;D -20E6;D -20E7;D -20E8;D -20E9;D -20EA;D -20EB;D -20EC;D -20ED;D -20EE;D -20EF;D -2102;A -2107;N -210A;A -210B;A -210C;A -210D;A -210E;N -210F;N -2110;A -2111;A -2112;A -2113;A -2115;A -2118;A -2119;A -211A;A -211B;A -211C;A -211D;A -2124;A -2126;N -2127;N -2128;A -2129;N -212B;A -212C;A -212D;A -212F;A -2130;A -2131;A -2132;N -2133;A -2134;A -2135;A -2136;A -2137;A -2138;A -213C;A -213D;A -213E;N -213F;A -2140;L -2141;N -2142;N -2143;N -2144;N -2145;N -2146;N -2147;N -2148;N -2149;N -214B;N -2190..21B3;R -21B6;R -21B7;R -21BA..21FF;R -2200;U -2201;U -2202;N -2203;U -2204;U -2205;N -2206;U -2207;U -2208;R -2209;R -220A;R -220B;R -220C;R -220D;R -220E;N -220F;L -2210;L -2211;L -2212;V -2213;V -2214;B -2215;B -2216;B -2217;B -2218;B -2219;B -221A;L -221B;L -221C;L -221D;R -221E;N -221F;N -2220;N -2221;N -2222;N -2223;R -2224;R -2225;R -2226;R -2227;B -2228;B -2229;B -222A;B -222B;L -222C;L -222D;L -222E;L -222F;L -2230;L -2231;L -2232;L -2233;L -2234;R -2235;R -2236;R -2237;R -2238;B -2239;R -223A;R -223B;R -223C;R -223D;R -223E;B -223F;N -2240;B -2241;R -2242;R -2243;R -2244;R -2245;R -2246;R -2247;R -2248;R -2249;R -224A;R -224B;R -224C;R -224D;R -224E;R -224F;R -2250;R -2251;R -2252;R -2253;R -2254;R -2255;R -2256;R -2257;R -2258;R -2259;R -225A;R -225B;R -225C;R -225D;R -225E;R -225F;R -2260;R -2261;R -2262;R -2263;R -2264;R -2265;R -2266;R -2267;R -2268;R -2269;R -226A;R -226B;R -226C;R -226D;R -226E;R -226F;R -2270;R -2271;R -2272;R -2273;R -2274;R -2275;R -2276;R -2277;R -2278;R -2279;R -227A;R -227B;R -227C;R -227D;R -227E;R -227F;R -2280;R -2281;R -2282;R -2283;R -2284;R -2285;R -2286;R -2287;R -2288;R -2289;R -228A;R -228B;R -228C;B -228D;B -228E;B -228F;R -2290;R -2291;R -2292;R -2293;B -2294;B -2295;B -2296;B -2297;B -2298;B -2299;B -229A;B -229B;B -229C;B -229D;B -229E;B -229F;B -22A0;B -22A1;B -22A2;R -22A3;R -22A4;N -22A5;R -22A6;R -22A7;R -22A8;R -22A9;R -22AA;R -22AB;R -22AC;R -22AD;R -22AE;R -22AF;R -22B0;R -22B1;R -22B2;R -22B3;R -22B4;R -22B5;R -22B6;R -22B7;R -22B8;R -22B9;B -22BA;B -22BB;B -22BC;B -22BD;B -22BE;N -22BF;N -22C0;L -22C1;L -22C2;L -22C3;L -22C4;B -22C5;B -22C6;B -22C7;B -22C8;R -22C9;B -22CA;B -22CB;B -22CC;B -22CD;R -22CE;B -22CF;B -22D0;R -22D1;R -22D2;B -22D3;B -22D4;R -22D5;R -22D6;R -22D7;R -22D8;R -22D9;R -22DA;R -22DB;R -22DC;R -22DD;R -22DE;R -22DF;R -22E0;R -22E1;R -22E2;R -22E3;R -22E4;R -22E5;R -22E6;R -22E7;R -22E8;R -22E9;R -22EA;R -22EB;R -22EC;R -22ED;R -22EE;R -22EF;R -22F0;R -22F1;R -22F2;R -22F3;R -22F4;R -22F5;R -22F6;R -22F7;R -22F8;R -22F9;R -22FA;R -22FB;R -22FC;R -22FD;R -22FE;R -22FF;R -2300;N -2302;N -2305;B -2306;B -2308;O -2309;C -230A;O -230B;C -2310;N -2311;N -2319;N -231C;O -231D;C -231E;O -231F;C -2320..2321;G -2322;R -2323;R -#2329;O -#232A;C -2336;N -233D;B -233F;R -237C;R -2394;N -239B..23AF;G -23B0;R -23B1;R -23B2..23B3;G -23B4;N -23B5;N -23B6;N -23B7;G -23D0;G -23DC;N -23DD;N -23DE;N -23DF;N -23E0;N -23E1;N -23E2;N -23E3;N -23E4;N -23E5;N -23E6;N -23E7;N -24C8;N -25A0;N -25A1;N -25AA;N -25AB;N -25AD;N -25AE;N -25AF;N -25B0;N -25B1;N -25B2;B -25B3;B -25B4;B -25B5;B -25B6;B -25B7;B -25B8;B -25B9;B -25BC;B -25BD;B -25BE;B -25BF;B -25C0;B -25C1;B -25C2;B -25C3;B -25C4;B -25C5;B -25C6;N -25C7;N -25C8;N -25C9;N -25CA;B -25CB;B -25CE;N -25CF;N -25D0..25D3;N -25D6;N -25D7;N -25E2;N -25E3;N -25E4;N -25E5;N -25E6;B -25E7..25EA;N -25EB;B -25EC;B -25EF;N -25F8;B -25F9;B -25FA;B -25FB;B -25FC;B -25FD;B -25FE;B -25FF;B -2605;B -2606;B -2609;N -260C;N -263D;N -263E;N -263F;N -2640;N -2641;N -2642;N -2643;N -2644;N -2646;N -2647;N -2648;N -2649;N -2660;N -2661;N -2662;N -2663;N -2664;N -2665;N -2666;N -2667;N -2669;N -266D;N -266E;N -266F;N -2680;N -2681;N -2682;N -2683;N -2684;N -2685;N -2686;N -2687;N -2688;N -2689;N -26AA;N -26AB;N -26AC;N -26B2;N -2713;N -2717;N -2720;N -272A;N -2736;N -2772;O -2773;C -27C0;N -27C1;N -27C2;R -27C3;R -27C4;R -27C5;R -27C6;R -27C7;R -27C8;R -27C9;R -27CA;R -27CB;R -27CC;L -27CD;R -27CE;B -27CF;B -27D0;N -27D1;B -27D2;R -27D3;R -27D4;R -27D5;L -27D6;L -27D7;L -27D8;L -27D9;L -27DA;R -27DB;R -27DC;R -27DD;R -27DE;R -27DF;R -27E0;B -27E1;B -27E2;B -27E3;B -27E4;B -27E5;B -27E6;O -27E7;C -27E8;O -27E9;C -27EA;O -27EB;C -27EC;O -27ED;C -27EE;O -27EF;C -27F0;R -27F1;R -27F2;R -27F3;R -27F4;R -27F5;R -27F6;R -27F7;R -27F8;R -27F9;R -27FA;R -27FB;R -27FC;R -27FD;R -27FE;R -27FF;R -2900;R -2901;R -2902;R -2903;R -2904;R -2905;R -2906;R -2907;R -2908;R -2909;R -290A;R -290B;R -290C;R -290D;R -290E;R -290F;R -2910;R -2911;R -2912;R -2913;R -2914;R -2915;R -2916;R -2917;R -2918;R -2919;R -291A;R -291B;R -291C;R -291D;R -291E;R -291F;R -2920;R -2921;R -2922;R -2923;R -2924;R -2925;R -2926;R -2927;R -2928;R -2929;R -292A;R -292B;R -292C;R -292D;R -292E;R -292F;R -2930;R -2931;R -2932;R -2933;R -2934;R -2935;R -2936;R -2937;R -2938;R -2939;R -293A;R -293B;R -293C;R -293D;R -293E;R -293F;R -2940;R -2941;R -2942;R -2943;R -2944;R -2945;R -2946;R -2947;R -2948;R -2949;R -294A;R -294B;R -294C;R -294D;R -294E;R -294F;R -2950;R -2951;R -2952;R -2953;R -2954;R -2955;R -2956;R -2957;R -2958;R -2959;R -295A;R -295B;R -295C;R -295D;R -295E;R -295F;R -2960;R -2961;R -2962;R -2963;R -2964;R -2965;R -2966;R -2967;R -2968;R -2969;R -296A;R -296B;R -296C;R -296D;R -296E;R -296F;R -2970;R -2971;R -2972;R -2973;R -2974;R -2975;R -2976;R -2977;R -2978;R -2979;R -297A;R -297B;R -297C;R -297D;R -297E;R -297F;R -2980;F -2981;N -2982;F -2983;O -2984;C -2985;O -2986;C -2987;O -2988;C -2989;O -298A;C -298B;O -298C;C -298D;O -298E;C -298F;O -2990;C -2991;O -2992;C -2993;O -2994;C -2995;O -2996;C -2997;O -2998;C -2999;F -299A;F -299B;N -299C;N -299D;N -299E;N -299F;N -29A0;N -29A1;N -29A2;N -29A3;N -29A4;N -29A5;N -29A6;N -29A7;N -29A8;N -29A9;N -29AA;N -29AB;N -29AC;N -29AD;N -29AE;N -29AF;N -29B0;N -29B1;N -29B2;N -29B3;N -29B4;N -29B5;N -29B6;B -29B7;B -29B8;B -29B9;B -29BA;N -29BB;N -29BC;N -29BD;N -29BE;N -29BF;N -29C0;B -29C1;B -29C2;N -29C3;N -29C4;B -29C5;B -29C6;B -29C7;B -29C8;B -29C9;N -29CA;N -29CB;N -29CC;N -29CD;N -29CE;R -29CF;R -29D0;R -29D1;R -29D2;R -29D3;R -29D4;R -29D5;R -29D6;B -29D7;B -29D8;O -29D9;C -29DA;O -29DB;C -29DC;N -29DD;N -29DE;N -29DF;R -29E0;N -29E1;R -29E2;B -29E3;R -29E4;R -29E5;R -29E6;R -29E7;N -29E8;N -29E9;N -29EA;N -29EB;B -29EC;N -29ED;N -29EE;N -29EF;N -29F0;N -29F1;N -29F2;N -29F3;N -29F4;R -29F5;B -29F6;B -29F7;B -29F8;L -29F9;L -29FA;B -29FB;B -29FC;O -29FD;C -29FE;B -29FF;B -2A00;L -2A01;L -2A02;L -2A03;L -2A04;L -2A05;L -2A06;L -2A07;L -2A08;L -2A09;L -2A0A;L -2A0B;L -2A0C;L -2A0D;L -2A0E;L -2A0F;L -2A10;L -2A11;L -2A12;L -2A13;L -2A14;L -2A15;L -2A16;L -2A17;L -2A18;L -2A19;L -2A1A;L -2A1B;L -2A1C;L -2A1D;L -2A1E;L -2A1F;L -2A20;L -2A21;L -2A22;B -2A23;B -2A24;B -2A25;B -2A26;B -2A27;B -2A28;B -2A29;B -2A2A;B -2A2B;B -2A2C;B -2A2D;B -2A2E;B -2A2F;B -2A30;B -2A31;B -2A32;B -2A33;B -2A34;B -2A35;B -2A36;B -2A37;B -2A38;B -2A39;B -2A3A;B -2A3B;B -2A3C;B -2A3D;B -2A3E;B -2A3F;B -2A40;B -2A41;B -2A42;B -2A43;B -2A44;B -2A45;B -2A46;B -2A47;B -2A48;B -2A49;B -2A4A;B -2A4B;B -2A4C;B -2A4D;B -2A4E;B -2A4F;B -2A50;B -2A51;B -2A52;B -2A53;B -2A54;B -2A55;B -2A56;B -2A57;B -2A58;B -2A59;R -2A5A;B -2A5B;B -2A5C;B -2A5D;B -2A5E;B -2A5F;B -2A60;B -2A61;B -2A62;B -2A63;B -2A64;B -2A65;B -2A66;R -2A67;R -2A68;R -2A69;R -2A6A;R -2A6B;R -2A6C;R -2A6D;R -2A6E;R -2A6F;R -2A70;R -2A71;B -2A72;B -2A73;R -2A74;R -2A75;R -2A76;R -2A77;R -2A78;R -2A79;R -2A7A;R -2A7B;R -2A7C;R -2A7D;R -2A7E;R -2A7F;R -2A80;R -2A81;R -2A82;R -2A83;R -2A84;R -2A85;R -2A86;R -2A87;R -2A88;R -2A89;R -2A8A;R -2A8B;R -2A8C;R -2A8D;R -2A8E;R -2A8F;R -2A90;R -2A91;R -2A92;R -2A93;R -2A94;R -2A95;R -2A96;R -2A97;R -2A98;R -2A99;R -2A9A;R -2A9B;R -2A9C;R -2A9D;R -2A9E;R -2A9F;R -2AA0;R -2AA1;R -2AA2;R -2AA3;R -2AA4;R -2AA5;R -2AA6;R -2AA7;R -2AA8;R -2AA9;R -2AAA;R -2AAB;R -2AAC;R -2AAD;R -2AAE;R -2AAF;R -2AB0;R -2AB1;R -2AB2;R -2AB3;R -2AB4;R -2AB5;R -2AB6;R -2AB7;R -2AB8;R -2AB9;R -2ABA;R -2ABB;R -2ABC;R -2ABD;R -2ABE;R -2ABF;R -2AC0;R -2AC1;R -2AC2;R -2AC3;R -2AC4;R -2AC5;R -2AC6;R -2AC7;R -2AC8;R -2AC9;R -2ACA;R -2ACB;R -2ACC;R -2ACD;R -2ACE;R -2ACF;R -2AD0;R -2AD1;R -2AD2;R -2AD3;R -2AD4;R -2AD5;R -2AD6;R -2AD7;R -2AD8;R -2AD9;R -2ADA;R -2ADB;R -2ADC;R -2ADD;R -2ADE;R -2ADF;R -2AE0;R -2AE1;N -2AE2;R -2AE3;R -2AE4;R -2AE5;R -2AE6;R -2AE7;R -2AE8;R -2AE9;R -2AEA;R -2AEB;R -2AEC;R -2AED;R -2AEE;R -2AEF;R -2AF0;R -2AF1;N -2AF2;R -2AF3;R -2AF4;B -2AF5;B -2AF6;B -2AF7;R -2AF8;R -2AF9;R -2AFA;R -2AFB;B -2AFC;L -2AFD;B -2AFE;B -2AFF;L -2B00..2B11;R -2B12;N -2B13;N -2B14;N -2B15;N -2B16;N -2B17;N -2B18;N -2B19;N -2B1B..2B1F;N -2B20;N -2B21;N -2B22;N -2B23;N -2B24..2B2F;N -2B30..2B44;R -2B45;R -2B46;R -2B47..2B4C;R -2B50..2B54;N -2B95;R -2BC2..2BC8;N -2BCA;N -2BCB;N -3008;X -3009;X -#3014;O -#3015;C -#3018;O -#3019;C -301A;X -301B;X -306E;N -FB29;X -FE00;D -#deprecFE35; -#deprecFE36; -#deprecFE37; -#deprecFE38; -FE61..FE66;X -FE68;X -FF0B;X -FF1C..FF1E;X -FF3C;X -FF3E;X -FF5C;X -FF5E;X -FFE2;X -FFE9..FFEC;X -1D400..1D454;A -#1D455=210E;N -1D456..1D49B;A -1D49C;A -#1D49D=212C;A -1D49E;A -1D49F;A -#1D4A0=2130;A -#1D4A1=2131;A -1D4A2;A -#1D4A3=210B;A -#1D4A4=2110;A -1D4A5;A -1D4A6;A -#1D4A7=2112;A -#1D4A8=2133;A -1D4A9;A -1D4AA;A -1D4AB;A -1D4AC;A -#1D4AD=211B;A -1D4AE;A -1D4AF;A -1D4B0;A -1D4B1;A -1D4B2;A -1D4B3;A -1D4B4;A -1D4B5;A -1D4B6;A -1D4B7;A -1D4B8;A -1D4B9;A -#1D4BA=212F;A -1D4BB;A -#1D4BC=210A;A -1D4BD;A -1D4BE;A -1D4BF;A -1D4C0;A -1D4C1;A -1D4C2;A -1D4C3;A -#1D4C4=2134;A -1D4C5;A -1D4C6;A -1D4C7;A -1D4C8;A -1D4C9;A -1D4CA;A -1D4CB;A -1D4CC;A -1D4CD;A -1D4CE;A -1D4CF;A -1D4D0..1D503;A -1D504;A -1D505;A -#1D506=212D;A -1D507;A -1D508;A -1D509;A -1D50A;A -#1D50B=210C;A -#1D50C=2111;A -1D50D;A -1D50E;A -1D50F;A -1D510;A -1D511;A -1D512;A -1D513;A -1D514;A -#1D515=211C;A -1D516;A -1D517;A -1D518;A -1D519;A -1D51A;A -1D51B;A -1D51C;A -#1D51D=2128;A -1D51E;A -1D51F;A -1D520;A -1D521;A -1D522;A -1D523;A -1D524;A -1D525;A -1D526;A -1D527;A -1D528;A -1D529;A -1D52A;A -1D52B;A -1D52C;A -1D52D;A -1D52E;A -1D52F;A -1D530;A -1D531;A -1D532;A -1D533;A -1D534;A -1D535;A -1D536;A -1D537;A -1D538;A -1D539;A -#1D53A=2102;A -1D53B;A -1D53C;A -1D53D;A -1D53E;A -#1D53F=210D;A -1D540;A -1D541;A -1D542;A -1D543;A -1D544;A -#1D545=2115;A -1D546;A -#1D547=2119;A -#1D548=211A;A -#1D549=211D;A -1D54A;A -1D54B;A -1D54C;A -1D54D;A -1D54E;A -1D54F;A -1D550;A -#1D551=2124;A -1D552;A -1D553;A -1D554;A -1D555;A -1D556;A -1D557;A -1D558;A -1D559;A -1D55A;A -1D55B;A -1D55C;A -1D55D;A -1D55E;A -1D55F;A -1D560;A -1D561;A -1D562;A -1D563;A -1D564;A -1D565;A -1D566;A -1D567;A -1D568;A -1D569;A -1D56A;A -1D56B;A -1D56C..1D6A3;A -1D6A4;A -1D6A5;A -1D6A8..1D7C9;A -1D7CA;A -1D7CB;A -1D7CE..1D7FF;N -1EE00..1EE03;A -1EE05..1EE1F;A -1EE21;A -1EE22;A -1EE24;A -1EE27;A -1EE29..1EE32;A -1EE34..1EE37;A -1EE39;A -1EE3B;A -1EE42;A -1EE47;A -1EE49;A -1EE4B;A -1EE4D..1EE4F;A -1EE51;A -1EE52;A -1EE54;A -1EE57;A -1EE59;A -1EE5B;A -1EE5D;A -1EE5F;A -1EE61;A -1EE62;A -1EE64;A -1EE67..1EE6A;A -1EE6C..1EE72;A -1EE74..1EE77;A -1EE79..1EE7C;A -1EE7E;A -1EE80..1EE89;A -1EE8B..1EE9B;A -1EEA1..1EEA3;A -1EEA5..1EEA9;A -1EEAB..1EEBB;A -1EEF0;L -1EEF1;L -1F784;N -1F78C;N -1F78D;N -1F797..1F799;N -1F79D..1F79F;N - -# EOF diff --git a/Master/texmf-dist/tex/luatex/optex/base/more-macros.opm b/Master/texmf-dist/tex/luatex/optex/base/more-macros.opm deleted file mode 100644 index d5ce88c1a67..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/more-macros.opm +++ /dev/null @@ -1,284 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \eoldef {OpTeX useful macos <2020-05-22>} % preloaded in format - - \_doc ----------------------------- - We define \`\opinput` `{<file name>}` macro which - does `\input {<file name>}` but the catcodes are set to normal catcodes - (like \OpTeX/ initializes them) and the catcodes setting is returned back to - the current values when the file is read. You can use `\opinput` - in any situation inside the document and you will be sure that the file - is read correctly with correct catcode settings. - - To achieve this, we declare \`\optexcatcodes` catcode table - and \`\plaintexcatcodes`. They save the commonly used catcode tables. - Note that `\catcodetable` is a part of \LuaTeX/ extension. - The catcodetable stack is implemented by \OpTeX/ macros. - The \`\setctable` `<catcode table>` pushes - current catcode table to the stack and activates catcodes from - the `<catcode table>`. The \`\restorectable` returns to the saved catcodes - from the catcode table stack. - - The `\opinput` works inside the catcode table stack. It reads `\optexcatcodes` - table and stores it to \`\_tmpcatcodes` table. - This table is actually used during `\input` (maybe catcodes are - changed here). Finally, `\_restoretable` pops the stacks and returns - to the catcodes used before `\opinput` is run. - \_cod ----------------------------- - -\_def\_opinput #1{\_setctable\_optexcatcodes - \_savecatcodetable\_tmpcatcodes \_catcodetable\_tmpcatcodes - \_input {#1}\_relax\_restorectable} - -\_newcatcodetable \_optexcatcodes -\_newcatcodetable \_plaintexcatcodes -\_newcatcodetable \_tmpcatcodes - -\_public \optexcatcodes \plaintexcatcodes \opinput ; - -\_savecatcodetable\_optexcatcodes -{\_catcode`_=8 \savecatcodetable\plaintexcatcodes} - - \_doc ----------------------------- - The implementation of the catcodetable stack follows. - - The current catcodes are - managed in the `\catcodetable0`. If the `\setctable` is used first (or at - the outer level of the stack), then the `\catcodetable0` is pushed to the - stack and the current table is re-set to the given `<catcode table>`. - The numbers of these tables are stacked to the \`\_ctablelist` macro. - The `\restorectable` reads the last saved catcode table number from the - `\_ctablelist` and uses it. - \_cod ----------------------------- - -\_newcount\_currctable \_currctable=0 -\_catcodetable0 - -\_def\_setctable#1{\_edef\_ctablelist{{\_the\_currctable}\_ctablelist}% - \_catcodetable#1\_relax \_currctable=#1\_relax -} -\_def\_restorectable{\_ea\_restorectableA\_ctablelist\_relax} -\_def\_restorectableA#1#2\_relax{% - \_ifx^#2^\_opwarning - {You can't use \_noindent\restorectable without previous \_string\setctable}% - \_else \_def\_ctablelist{#2}\_catcodetable#1\_relax \_currctable=#1\_relax \_fi -} -\_def\_ctablelist{.} - -\_public \setctable \restorectable ; - - \_doc ----------------------------- - When a special macro is defined with different catcodes then - \`\normalcatcodes` can be used at the end of such definition. - The normal catcodes are restored. - The macro reads - catcodes from `\optecatodes` table and sets it to the main catcode table 0. - \_cod ----------------------------- - -\_def\_normalcatcodes {\_catcodetable\_optexcatcodes \_savecatcodetable0 \_catcodetable0 } -\_public \normalcatodes ; - - \_doc ----------------------------- - The \`\load` `[<filename-list>]` loads files specfied in - comma separated `<filename-list>`. The first space (after comma) - is ignored using the trick `#1#2,`: first parameter is unseparated. - The `\load` macro saves information about loaded files by setting - `\_load:<filename>` as a defined macro. - - If the \`\_afterload` macro is defined then it is run after `\_opinput`. - The catcode setting should be here. Note that catcode setting done in the - loaded file is forgotten after the `\opinput`. - \_cod ----------------------------- - -\_def \_load [#1]{\_loadA #1,,,\_end} -\_def \_loadA #1#2,{\_ifx,#1 \_ea \_loadE \_else \_loadB{#1#2}\_ea\_loadA\_fi} -\_def \_loadB #1{% - \_ifcsname _load:#1\_endcsname \_else - \_isfile {#1.opm}\_iftrue \_opinput {#1.opm}\_else \_opinput {#1}\_fi - \_sxdef{_load:#1}{}% - \_trycs{_afterload}{}\_let\_afterload=\_undefined - \_fi -} -\_def \_loadE #1\_end{} -\_public \load ; - - \_doc ----------------------------- - The declarator \`\optdef``\macro [<opt default>] <params>{<replacement text>}` - defines the `\macro` with the optional parameter followed by normal parameters - declared in `<params>`. The optional parameter must be used as the first - first parameter in brackets `[...]`. If it isn't used then <opt default> - is taken into account. The `<replacement text>` can use `\the\opt` - because optional parameter is saved to the \`\opt` tokens register. - Note the difference from \LaTeX/ concept where the optional parameter is - in `#1`. \OpTeX/ uses `#1` as the first normal parameter (if declared). - - The \`\_nospaceafter` ignores the following optional space at expand - processor level using the negative `\romannumeral` trick. - \_cod ----------------------------- - -\_def\_optdef#1[#2]{% - \_def#1{\_opt={#2}\_isnextchar[{\_cs{_oA:\_string#1}}{\_cs{_oB:\_string#1}}}% - \_sdef{_oA:\_string#1}[##1]{\_opt={##1}\_cs{_oB:\_string#1\_nospaceafter}}% - \_sdef{_oB:\_string#1\_nospaceafter}% -} -\_def\_nospaceafter#1{\_ea#1\_romannumeral-`\.} -\_newtoks\_opt - -\_public \opt \optdef ; - - \_doc ----------------------------- - The declarator \`\eoldef``\macro #1{<replacement text>}` defines a `\macro` - which scans its parameter to the end of the current line. - This is the parameter `#1` which can be used in the `<replacement text>`. - The catcode of the `\endlinechar` is reset temporarily when the parameter is scanned. - - The macro defined by `\eoldef` cannot be used with its parameter inside - other macros because the catcode dancing is not possible here. But the - \`\bracedparam``\macro{<parameter>}` can be used here. The `\bracedparam` - is a prefix that re-sets temporarily the `\macro` to a `\macro` with - normal one parameter. - - The \`\skiptoeol` macro reads the text to the end of the current line - and ignores it. - \_cod ----------------------------- - -\_def\_eoldef #1{\_def #1{\_begingroup \_catcode`\^^M=12 \_eoldefA #1}% - \_ea\_def\_csname _\_csstring #1:M\_endcsname} -\_catcode`\^^M=12 % -\_def\_eoldefA #1#2^^M{\_endgroup\_csname _\_csstring #1:M\_endcsname{#2}}% -\_normalcatcodes % - -\_eoldef\_skiptoeol#1{} -\_def\_bracedparam#1{\_ifcsname _\_csstring #1:M\_endcsname - \_csname _\_csstring #1:M\_ea \_endcsname - \_else \_csname __in\_csstring #1:M\_ea \_endcsname \_fi -} -\_public \eoldef \skiptoeol \bracedparam ; - - \_doc ----------------------------- - \`\scantoeol``\macro <text to end of line>` scans the - `<text to end of line>` in verbatim mode and runs the - `\macro{<text to end of line>}`. The `\macro` - can be defined `\def\macro#1{...\scantextokens{#1}...}`. - The new tokenization of the parameter is processed when the parameter is used, - no when the parameter is scanned. This principle is used in definition - of \^`\chap`, \^`\sec`, \^`\secc` and \^`\_Xtoc` macros. - It means that user can write \code{\\sec text `&` text} for example. - Inline verbatim works in title sections. - - The verbatim scanner of `\scatoeol` keeps category 7 for `^` in - order to be able to use `^^J` as comment character which means that - the next line continues. - \_cod ----------------------------- - -\_def\_scantoeol#1{\def\_tmp{#1}\_begingroup \_setscancatcodes \_scantoeolA} -\_def\_setscancatcodes{\_setverb \_catcode`\^^M=12\_catcode`\^=7\_catcode`\ =10\_catcode`\^^J=14 } -\_catcode`\^^M=12 % -\_def\_scantoeolA#1^^M{\_endgroup \_tmp{#1}}% -\_normalcatcodes % - -\_public \scantoeol ; - - \_doc ----------------------------- - The \`\replstring``\macro{<textA>}{<textB>}` - replaces all occurrences of `<textA>` by `<textB>` in the `\macro` body. - The `\macro` must be defined without parameters. The occurrences of - `<textA>` are not replaced if they are \"hidden" in braces, for example - `...{...<textA>...}...`. The category codes in the `<textA>` must exactly - match. - - How it works: `\replstring\foo{<textA>}{<textB>}` prepares - `\_replacestringsA#1<textA>{...}` and runs - `\_replacestringsA<foo-body>?<textA>!<textA>`. - So, `#1` includes the first part of <foo-body> before first <textA>. - It is saved to \`\_tmptoks` and `\_replacestringsB` is run in a loop. - It finishes processing or appends the next part to `\_tmptoks` separated by - <textB> and continues loop. The final part of the macro removes the last `?` - from resulting `\_tmptoks` and defines a new version of the `\foo`. - \_cod ----------------------------- - -\_newtoks\_tmptoks -\_catcode`!=3 \_catcode`?=3 -\_def\_replstring #1#2#3{% \replstring #1{stringA}{stringB} - \_long\_def\_replacestringsA##1#2{\_tmptoks{##1}\_replacestringsB}% - \_long\_def\_replacestringsB##1#2{\_ifx!##1\_relax \_else \_toksapp\_tmptoks{#3##1}% - \_ea\_replacestringsB\_fi}% - \_ea\_replacestringsA #1?#2!#2% - \_long\_def\_replacestringsA##1?{\_tmptoks{##1}\_edef#1{\_the\_tmptoks}}% - \_ea\_replacestringsA \_the\_tmptoks} -\_normalcatcodes - -\_public \replstring ; - - \_doc ----------------------------- - The \`\catcode` primitive is redefined here. Why? - There is very common cases like \code{\\catcode`}`<something>` - or `\catcode"<number>` but these characters - \code{\`} or \code{"} can be set as active (typically by `\verbchar` macro). - Nothing problematic happens if re-defined `\catcode` is used in this case. - - If you really need primitive `\catcode` then you can use `\_catcode`. - \_cod ----------------------------- - -\_def\catcode#1{\_catcode \_if`\_noexpand#1\_ea`\_else\_if"\_noexpand#1"\_else - \_if'\_noexpand#1'\_else \_ea\_ea\_ea\_ea\_ea\_ea\_ea#1\_fi\_fi\_fi} - - \_doc ----------------------------- - The \`\removespaces` `<text with spaces >{}` expands to <textwithoutspaces>. - \nl - The `\_ea`\`\ignorept``\the<dimen>` expands to a decimal - number `\the<dimen>` but without `pt` unit. - \_cod ----------------------------- - -\_def\_removespaces #1 {\_isempty{#1}\_iffalse #1\_ea\_removespaces\_fi} -\_ea\_def \_ea\_ignorept \_ea#\_ea1\_detokenize{pt}{#1} - -\public \removespaces \ignorept ; - - \_doc ----------------------------- - You can use expandable \`\bp``{<dimen>}` convertor from - \TeX/ `<dimen>` (or from an expression accepted by - `\dimexpr` primitive) to a decimal value in big points - (used as natural unit in the PDF format). So, you can write, for example: - \begtt - \pdfliteral{q \_bp{.3\hsize-2mm} \_bp{2mm} m 0 \_bp{-4mm} l S Q} - \endtt - You can use expandable \`\expr``{<expression>}` for analogical purposes. - It expands to the value of the `<expression>` at expand processor level - with \`\_decdigits` digits after the decimal point. - The `<expression>` can include `+-*/()` and decimal numbers in common syntax. - - The usage of prefixed versions \`\_expr` or \`\_bp` is more recommended - because a user can re-define the control sequences `\expr` or `\bp`. - \_cod ----------------------------- - -\_def\_decdigits{3} % digits after decimal point in \_bp and \_expr outputs. -\_def\_pttopb{% - \_directlua{tex.print(string.format('\_pcent.\_decdigits f', - token.scan_dimen()/65781.76))}% pt to bp conversion -} -\def\_bp#1{\_ea\_pttopb\_dimexpr#1\_relax} -\def\_expr#1{\_directlua{tex.print(string.format('\_pcent.\_decdigits f',#1))}} - -\_public \expr \bp ; - - \_doc ------------------ - The pair {\`\_doc` ... \`\_cod`} is used for documenting macros and to - printing the technical documentation of the \OpTeX/. The syntax is: - {\begtt \catcode`\<=13 - \_doc <ignored text> - <documentation> - \_cod <ignored text> - \endtt - } - The `<documentation>` (and `<ignored text>` too) must be `<balanced text>`. - It means that you cannot document only the `{` but you must document the `}` too. - \_cod ------------------ - -\_long\_def\_doc #1\_cod {\_skiptoeol} - -\_endcode % ------------------------------------- - -2020-05-22 robust \catcode newly defined in order \catcode\string.... be possible -2020-05-03 \load macro introduced -2020-03-15 released diff --git a/Master/texmf-dist/tex/luatex/optex/base/multicolumns.opm b/Master/texmf-dist/tex/luatex/optex/base/multicolumns.opm deleted file mode 100644 index bf5b05f7db1..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/multicolumns.opm +++ /dev/null @@ -1,114 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \begmulti {Balanced columns <2020-03-26>} % preloaded in format - - \_doc ----------------------------- - This code is documented in detail in the \"\TeX/book naruby", pages 244--246, - free available, \url{http://petr.olsak.net/tbn.html}, but in Czech. - Roughly speaking, macros complete all material between - \`\begmulti``<num-columns>` and \`\endmulti` - into one `\vbox 6`. Then the macro measures the amount of free space at the current - page using `\pagegoal` and `\pagtotal` and does `\vsplit` of `\vbox 6` to - columns with a height of such free space. This is done only if we have - enough amount of material in `\vbox 6` to fill the full page by columns. - This is repeated in a loop until we have less amount of material in `\vbox 6`. - Then we run `\_balancecolumns` which balances the last part of the columns. - Each part of printed material is distributed to the main vertical list as - `\hbox{<columns>}` and we need not do any change in the output routine. - - If you have paragraphs in `\begmulti`... `\endmulti` environment then - you may say `\raggedright` inside this environment and you can re-assign - `\widowpenalty` and `\clubppenalty` (they are set to 10000 in \OpTeX/). - \_cod ----------------------------- - -\_def\_multiskip{\_medskip} % space above and below \begmulti...\endmulti - -\_newcount\_mullines - -\_def\_begmulti #1 {\_par\_bgroup\_wipeepar\_multiskip\_penalty0 \_def\_Ncols{#1} - \_setbox6=\_vbox\_bgroup \_let\_setxhsize=\_relax \_penalty0 - %% \hsize := column width = (\hsize+\colsep) / n - \colsep - \_advance\_hsize by\_colsep - \_divide\_hsize by\_Ncols \_advance\_hsize by-\_colsep - \_mullines=0 - \_def\par{\_ifhmode\_endgraf\_global\_advance\_mullines by\_prevgraf\_fi}% -} -\_def\_endmulti{\_vskip-\_prevdepth\_vfil - \_ea\_egroup\_ea\_baselineskip\_the\_baselineskip\_relax - \_dimen0=.8\_maxdimen \_tmpnum=\_dimen0 \_divide\_tmpnum by\_baselineskip - \_splittopskip=\_baselineskip - \_setbox1=\_vsplit6 to0pt - %% \dimen1 := the free space on the page - \_ifdim\_pagegoal=\_maxdimen \_dimen1=\_vsize \_corrsize{\_dimen1} - \_else \_dimen1=\_pagegoal \_advance\_dimen1 by-\_pagetotal \_fi - \_ifdim \_dimen1<2\_baselineskip - \_vfil\_break \_dimen1=\_vsize \_corrsize{\_dimen1} \_fi - \_ifnum\_mullines<\_tmpnum \_dimen0=\_ht6 \_else \_dimen0=.8\_maxdimen \_fi - \_divide\_dimen0 by\_Ncols \_relax - %% split the material to more pages? - \_ifdim \_dimen0>\_dimen1 \_splitpart - \_else \_balancecolumns \_fi % only balancing - \_multiskip\_egroup -} - - \_doc ----------------------------- - Splitting columns... - \_cod ----------------------------- - -\_def\_makecolumns{\_bgroup % full page, destination height: \dimen1 - \_vbadness=20000 \_setbox1=\_hbox{}\_tmpnum=0 - \_loop \_ifnum\_Ncols>\_tmpnum - \_advance\_tmpnum by1 - \_setbox1=\_hbox{\_unhbox1 \_vsplit6 to\_dimen1 \_hss} - \_repeat - \_hbox{}\_nobreak\_vskip-\_splittopskip \_nointerlineskip - \_line{\_unhbox1\_unskip} - \_dimen0=\_dimen1 \_divide\_dimen0 by\_baselineskip \_multiply\_dimen0 by\_Ncols - \_global\_advance\_mullines by-\_dimen0 - \_egroup -} -\_def\_splitpart{% - \_makecolumns % full page - \_vskip 0pt plus 1fil minus\_baselineskip \_break - \_ifnum\_mullines<\_tmpnum \_dimen0=\_ht6 \_else \_dimen0=.8\_maxdimen \_fi - \_divide\_dimen0 by\_Ncols \_relax - \_ifx\_balancecolumns\_flushcolumns \_advance\_dimen0 by-.5\_vsize \_fi - \_dimen1=\_vsize \_corrsize{\_dimen1}\_dimen2=\_dimen1 - \_advance\_dimen2 by-\_baselineskip - %% split the material to more pages? - \_ifvoid6 \_else - \_ifdim \_dimen0>\_dimen2 \_ea\_ea\_ea \_splitpart - \_else \_balancecolumns % last balancing - \_fi \_fi -} - - \_doc ----------------------------- - Final balancing of the columns. - \_cod ----------------------------- - -\_def\_balancecolumns{\_bgroup \_setbox7=\_copy6 % destination height: \dimen0 - \_ifdim\_dimen0>\_baselineskip \_else \_dimen0=\_baselineskip \_fi - \_vbadness=20000 - \_def\_tmp{% - \_setbox1=\_hbox{}\_tmpnum=0 - \_loop \_ifnum\_Ncols>\_tmpnum - \_advance\_tmpnum by1 - \_setbox1=\_hbox{\_unhbox1 - \_ifvoid6 \_hbox to\_wd6{\_hss}\_else \_vsplit6 to\_dimen0 \_fi\_hss} - \_repeat - \_ifvoid6 \_else - \_advance \_dimen0 by.2\_baselineskip - \_setbox6=\_copy7 - \_ea \_tmp \_fi}\_tmp - \_hbox{}\_nobreak\_vskip-\_splittopskip \_nointerlineskip - \_hbox to\_hsize{\_unhbox1\_unskip}% - \_egroup -} -\_def\_corrsize #1{%% #1 := #1 + \splittopskip - \topskip - \_advance #1 by \_splittopskip \_advance #1 by-\_topskip -} -\_public \begmulti \endmulti ; - -\_endcode % ------------------------------------- - - diff --git a/Master/texmf-dist/tex/luatex/optex/base/optex.ini b/Master/texmf-dist/tex/luatex/optex/base/optex.ini deleted file mode 100644 index c695b7d8098..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/optex.ini +++ /dev/null @@ -1,107 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -%% OpTeX ini file -%% Petr Olsak <project started from: Jan. 2020> - -% Catcodes: - -\catcode `\{=1 % left brace is begin-group character -\catcode `\}=2 % right brace is end-group character -\catcode `\$=3 % dollar sign is math shift -\catcode `\&=4 % ampersand is alignment tab -\catcode `\#=6 % hash mark is macro parameter character -\catcode `\^=7 % -\catcode `\^^K=7 % circumflex and uparrow are for superscripts -\catcode `\^^A=8 % downarrow is for subscripts -\catcode `\^^I=10 % ascii tab is a blank space -\catcode `\_=11 % underline can be used in control sequences -\catcode `\~=13 % tilde is active -\catcode `\^^a0=13 % non breaking space in Unicode -\catcode 127=12 % normal character - -% OpTeX version - -\def\optexversion{1.01 Mar.2021} -\def\fmtname{OpTeX} -\let\fmtversion=\optexversion - -% Engine testing: - -\newlinechar=`\^^J -\ifx\directlua\undefined - \message{This format is based only on LuaTeX, use luatex -ini optex.ini^^J} - \endinput \fi - -\ifx\bgroup\undefined \else - \message{This file can be used only for format initialisation, use luatex -ini^^J} - \endinput \fi - -% Basic .opm syntax: - -\let\_endcode =\endinput -\def \_codedecl #1#2{\message{#2^^J}}% information about .opm file -\long\def\_doc#1\_cod#2 {} % skip documentation - -% Initialization: - -\message{OpTeX (Olsak's Plain TeX) initialization <\optexversion>^^J} - -\input prefixed.opm % prefixed primitives and code syntax -\input luatex-ini.opm % luaTeX initialization -\input basic-macros.opm % basic macros -\input alloc.opm % allocators for registers -\input if-macros.opm % special \if-macros, \is-macros and loops -\input parameters.opm % parameters setting -\input more-macros.opm % OpTeX useful macros (todo: doc) -\input keyval.opm % key=value dictionaries -\input plain-macros.opm % plainTeX macros -\input fonts-preload.opm % preloaded Latin Modern fonts -\input fonts-resize.opm % font resizing (low-level macros) -\input fonts-select.opm % font selection system -\input math-preload.opm % math fams CM + AMS preloaded -\input math-macros.opm % basic macros for math plus mathchardefs -\input math-unicode.opm % macros for loading UnicodeMath fonts -\input fonts-opmac.opm % font managing macros from OPmac -\input output.opm % output routine -\input margins.opm % macros for margins setting -\input colors.opm % colors -\input ref-file.opm % ref file -\input references.opm % references -\input hyperlinks.opm % hyperlinks -\input maketoc.opm % maketoc -\input outlines.opm % PDF outlines -\input pdfuni-string.opm % PDFunicode strings for outlines -\input sections.opm % titles, chapters, sections -\input lists.opm % lists, \begitems, \enditems -\input verbatim.opm % verbatim -\input hi-syntax.opm % syntax highlighting of verbatim listimgs -\input graphics.opm % graphics -\input table.opm % table macro -\input multicolumns.opm % more columns by \begmulti ...\endmulti -\input cite-bib.opm % Bibliography, \cite -\input makeindex.opm % Make index and sorting -\input fnotes.opm % \fnotes, \mnotes -\input styles.opm % styles \report, \letter -\input logos.opm % standard logos -\input uni-lcuc.opm % Setting lccodes and uccodes for Unicode characters -\input hyphen-lan.opm % initialization of hyphenation patterns -\input languages.opm % languages -\input others.opm % miscenaleous - -\_directlua{ - % preload OpTeX's lua code into format as bytecode - lua.bytecode[1] = assert(loadfile(kpse.find_file("optex", "lua"))) -} - -\_everyjob = {% - \_message{This is OpTeX (Olsak's Plain TeX), version <\optexversion>^^J}% - \_mathchardef\_fnotestack=\_pdfcolorstackinit page {0 g 0 G}% - \_directlua{lua.bytecode[1]()}% load OpTeX's Lua code - \_mathsbon % replaces \int_a^b to \int _a^b - \_inputref % inputs \jobname.ref if exists -} - -\_dump - -\_endcode % ------------------------------ - diff --git a/Master/texmf-dist/tex/luatex/optex/base/optex.lua b/Master/texmf-dist/tex/luatex/optex/base/optex.lua deleted file mode 100644 index 2d83f38ed6f..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/optex.lua +++ /dev/null @@ -1,356 +0,0 @@ --- This is part of the OpTeX project, see http://petr.olsak.net/optex - --- The basic lua functions and declarations used in \OpTeX/ are here - --- GENERAL - --- Error function used by following functions for critical errors. -local function err(message) - error("\nerror: "..message.."\n") -end --- --- For a `\chardef`'d, `\countdef`'d, etc., csname return corresponding register --- number. The responsibility of providing a `\XXdef`'d name is on the caller. -function registernumber(name) - return token.create(name).index -end --- --- ALLOCATORS -alloc = alloc or {} --- --- An attribute allocator in Lua that cooperates with normal \OpTeX/ allocator. -local attributes = {} -function alloc.new_attribute(name) - local cnt = tex.count["_attributealloc"] + 1 - if cnt > 65534 then - tex.error("No room for a new attribute") - else - tex.setcount("global", "_attributealloc", cnt) - texio.write_nl("log", '"'..name..'"=\\attribute'..tostring(cnt)) - attributes[name] = cnt - return cnt - end -end --- --- `provides_module` is needed by older version of luaotfload -provides_module = function() end --- --- CALLBACKS -callback = callback or {} --- --- Save `callback.register` function for internal use. -local callback_register = callback.register -function callback.register(name, fn) - err("direct registering of callbacks is forbidden, use 'callback.add_to_callback'") -end --- --- Table with lists of functions for different callbacks. -local callback_functions = {} --- Table that maps callback name to a list of descriptions of its added --- functions. The order corresponds with `callback_functions`. -local callback_description = {} --- --- Table used to differentiate user callbacks from standard callbacks. Contains --- user callbacks as keys. -local user_callbacks = {} --- Table containing default functions for callbacks, which are called if either --- a user created callback is defined, but doesn't have added functions or for --- standard callbacks that are \"extended" (see `mlist_to_hlist` and its pre/post --- filters below). -local default_functions = {} --- --- Table that maps standard (and later user) callback names to their types. -local callback_types = { - -- file discovery - find_read_file = "exclusive", - find_write_file = "exclusive", - find_font_file = "data", - find_output_file = "data", - find_format_file = "data", - find_vf_file = "data", - find_map_file = "data", - find_enc_file = "data", - find_pk_file = "data", - find_data_file = "data", - find_opentype_file = "data", - find_truetype_file = "data", - find_type1_file = "data", - find_image_file = "data", - - open_read_file = "exclusive", - read_font_file = "exclusive", - read_vf_file = "exclusive", - read_map_file = "exclusive", - read_enc_file = "exclusive", - read_pk_file = "exclusive", - read_data_file = "exclusive", - read_truetype_file = "exclusive", - read_type1_file = "exclusive", - read_opentype_file = "exclusive", - - -- data processing - process_input_buffer = "data", - process_output_buffer = "data", - process_jobname = "data", - input_level_string = "data", - - -- node list processing - contribute_filter = "simple", - buildpage_filter = "simple", - build_page_insert = "exclusive", - pre_linebreak_filter = "list", - linebreak_filter = "exclusive", - append_to_vlist_filter = "exclusive", - post_linebreak_filter = "reverselist", - hpack_filter = "list", - vpack_filter = "list", - hpack_quality = "list", - vpack_quality = "list", - process_rule = "exclusive", - pre_output_filter = "list", - hyphenate = "simple", - ligaturing = "simple", - kerning = "simple", - insert_local_par = "simple", - mlist_to_hlist = "exclusive", - - -- information reporting - pre_dump = "simple", - start_run = "simple", - stop_run = "simple", - start_page_number = "simple", - stop_page_number = "simple", - show_error_hook = "simple", - show_error_message = "simple", - show_lua_error_hook = "simple", - start_file = "simple", - stop_file = "simple", - call_edit = "simple", - finish_synctex = "simple", - wrapup_run = "simple", - - -- pdf related - finish_pdffile = "data", - finish_pdfpage = "data", - page_order_index = "data", - process_pdf_image_content = "data", - - -- font related - define_font = "exclusive", - glyph_not_found = "exclusive", - glyph_info = "exclusive", - - -- undocumented - glyph_stream_provider = "exclusive", - provide_charproc_data = "exclusive", -} --- --- Return a list containing descriptions of added callback functions for --- specific callback. -function callback.callback_descriptions(name) - return callback_description[name] or {} -end - -local valid_callback_types = { - exclusive = true, - simple = true, - data = true, - list = true, - reverselist = true, -} --- --- Create a user callback that can only be called manually using --- `call_callback`. A default function is only needed by "exclusive" callbacks. -function callback.create_callback(name, cbtype, default) - if callback_types[name] then - err("cannot create callback '"..name.."' - it already exists") - elseif not valid_callback_types[cbtype] then - err("cannot create callback '"..name.. "' with invalid callback type '"..cbtype.."'") - elseif ctype == "exclusive" and not default then - err("unable to create exclusive callback '"..name.."', default function is required") - end - - callback_types[name] = cbtype - default_functions[name] = default or nil - user_callbacks[name] = true -end --- --- Add a function to the list of functions executed when callback is called. --- For standard luatex callback a proxy function that calls our machinery is --- registered as the real callback function. This doesn't happen for user --- callbacks, that are called manually by user using `call_callback` or for --- standard callbacks that have default functions -- like `mlist_to_hlist` (see --- below). -function callback.add_to_callback(name, fn, description) - if user_callbacks[name] or callback_functions[name] or default_functions[name] then - -- either: - -- a) user callback - no need to register anything - -- b) standard callback that has already been registered - -- c) standard callback with default function registered separately - -- (mlist_to_hlist) - elseif callback_types[name] then - -- This is a standard luatex callback with first function being added, - -- register a proxy function as a real callback. Assert, so we know - -- when things break, like when callbacks get redefined by future - -- luatex. - assert(callback_register(name, function(...) - return callback.call_callback(name, ...) - end)) - else - err("cannot add to callback '"..name.."' - no such callback exists") - end - - -- add function to callback list for this callback - callback_functions[name] = callback_functions[name] or {} - table.insert(callback_functions[name], fn) - - -- add description to description list - callback_description[name] = callback_description[name] or {} - table.insert(callback_description[name], description) -end --- --- Remove a function from the list of functions executed when callback is --- called. If last function in the list is removed delete the list entirely. -function callback.remove_from_callback(name, description) - local descriptions = callback_description[name] - local index - for i, desc in ipairs(descriptions) do - if desc == description then - index = i - break - end - end - - table.remove(descriptions, index) - local fn = table.remove(callback_functions[name], index) - - if #descriptions == 0 then - -- Delete the list entirely to allow easy checking of "truthiness". - callback_functions[name] = nil - - if not user_callbacks[name] and not default_functions[name] then - -- this is a standard callback with no added functions and no - -- default function (i.e. not mlist_to_hlist), restore standard - -- behaviour by unregistering. - callback_register(name, nil) - end - end - - return fn, description -end --- --- helper iterator generator for iterating over reverselist callback functions -local function reverse_ipairs(t) - local i, n = #t + 1, 1 - return function() - i = i - 1 - if i >= n then - return i, t[i] - end - end -end --- --- Call all functions added to callback. This function handles standard --- callbacks as well as user created callbacks. It can happen that this --- function is called when no functions were added to callback -- like for user --- created callbacks or `mlist_to_hlist` (see below), these are handled either --- by a default function (like for `mlist_to_hlist` and those user created --- callbacks that set a default function) or by doing nothing for empty --- function list. -function callback.call_callback(name, ...) - local cbtype = callback_types[name] - -- either take added functions or the default function if there is one - local functions = callback_functions[name] or {default_functions[name]} - - if cbtype == nil then - err("cannot call callback '"..name.."' - no such callback exists") - elseif cbtype == "exclusive" then - -- only one function, atleast default function is guaranteed by - -- create_callback - return functions[1](...) - elseif cbtype == "simple" then - -- call all functions one after another, no passing of data - for _, fn in ipairs(functions) do - fn(...) - end - return - elseif cbtype == "data" then - -- pass data (first argument) from one function to other, while keeping - -- other arguments - local data = (...) - for _, fn in ipairs(functions) do - data = fn(data, select(2, ...)) - end - return data - end - - -- list and reverselist are like data, but "true" keeps data (head node) - -- unchanged and "false" ends the chain immediately - local iter - if cbtype == "list" then - iter = ipairs - elseif cbtype == "reverselist" then - iter = reverse_ipairs - end - - local head = (...) - local new_head - local changed = false - for _, fn in iter(functions) do - new_head = fn(head, select(2, ...)) - if new_head == false then - return false - elseif new_head ~= true then - head = new_head - changed = true - end - end - return not changed or head -end --- --- Create \"virtual" callbacks `pre/post_mlist_to_hlist_filter` by setting --- `mlist_to_hlist` callback. The default behaviour of `mlist_to_hlist` is kept by --- using a default function, but it can still be overriden by using --- `add_to_callback`. -default_functions["mlist_to_hlist"] = node.mlist_to_hlist -callback.create_callback("pre_mlist_to_hlist_filter", "list") -callback.create_callback("post_mlist_to_hlist_filter", "reverselist") -callback_register("mlist_to_hlist", function(head, ...) - -- pre_mlist_to_hlist_filter - local new_head = callback.call_callback("pre_mlist_to_hlist_filter", head, ...) - if new_head == false then - node.flush_list(head) - return nil - elseif new_head ~= true then - head = new_head - end - - -- mlist_to_hlist means either added functions or standard luatex behavior - -- of node.mlist_to_hlist (handled by default function) - head = callback.call_callback("mlist_to_hlist", head, ...) - - -- post_mlist_to_hlist_filter - new_head = callback.call_callback("post_mlist_to_hlist_filter", head, ...) - if new_head == false then - node.flush_list(head) - return nil - elseif new_head ~= true then - head = new_head - end - return head -end) --- --- Compatibility with \LaTeX/ through luatexbase namespace. Needed for --- luaotfload. -luatexbase = { - registernumber = registernumber, - attributes = attributes, - provides_module = provides_module, - new_attribute = alloc.new_attribute, - callback_descriptions = callback.callback_descriptions, - create_callback = callback.create_callback, - add_to_callback = callback.add_to_callback, - remove_from_callback = callback.remove_from_callback, - call_callback = callback.call_callback, - callbacktypes = {} -} diff --git a/Master/texmf-dist/tex/luatex/optex/base/others.opm b/Master/texmf-dist/tex/luatex/optex/base/others.opm deleted file mode 100644 index 6ff15d4332f..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/others.opm +++ /dev/null @@ -1,106 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \uv {Miscenaleous <2020-05-22>} % preloaded in format - - \_doc ---------------------------- - \`\useOpTeX` and \`\useoptex` are declared as `\relax`. - \_cod ---------------------------- - -\_let \useOpTeX = \_relax \_let \useoptex = \_relax - - \_doc ---------------------------- - The \`\lastpage` and \`\totalpages` get the information from the - \^`\_currpage`. The \^`\_Xpage` from `.ref` file sets the \^`\_currpage`. - \_cod ---------------------------- - -\_def\_totalpages {\_openref\_ea\_ignoresecond\_currpage} -\_def\_lastpage {\_openref\_ea\_usesecond\_currpage} -\_def\_currpage {{0}{?}} -\_public \lastpage \totalpages ; - - \_doc ---------------------------- - We need \`\uv`, \`\clqq`, \`\crqq`, \`\flqq`, \`\frqq`, \`\uslang`, \`\ehyph` - \`\chyph`, \`\shyph`, for backward compatibility with \csplain. - Codes are set according to Unicode because we are using Czech only in Unicode - when \LuaTeX/ is used. - \_cod ---------------------------- - - -% for compatibility with csplain: - -\_chardef\clqq=8222 \_chardef\crqq=8220 -\_chardef\flqq=171 \_chardef\frqq=187 -\_chardef\promile=8240 - -\_def\uv#1{\clqq#1\crqq} - -\_let\uslang=\enlang \_let\ehyph=\enlang -\_let\chyph=\cslang \_let\shyph=\sklang -\_let\csUnicode=\csPatt \_let\czUnicode=\csPatt \_let\skUnicode=\skPatt - - \_doc ---------------------------- - The \`\letfont` was used in \csplain/ instead of `\fontlet`. - \_cod ---------------------------- - -\_let \letfont = \_fontlet - - \_doc ---------------------------- - Non-breaking space in Unicode. - \_cod ---------------------------- - -\let ^^a0=~ - - \_doc ---------------------------- - TikZ needs these funny control sequences. - \_cod ---------------------------- - -\_ea\_toksdef \_csname toks@\_endcsname=0 -\_ea\_let \_csname voidb@x\_endcsname=\_voidbox - - \_doc ---------------------------- - We don't want to read `opmac.tex` unless `\input opmac` is specified. - \_cod ---------------------------- - -\_def\OPmacversion{OpTeX} - - \_doc ---------------------------- - We allow empty lines in math formulae. It is more comfortable. - \_cod ---------------------------- - -\_suppressmathparerror = 1 - - \_doc ---------------------------- - Lorem ipsum can be printed by \`\lipsum``[<range>]` or \`\lorem``[<range>]`, - for example `\lipsum[3]` or `\lipsum[112-121]`, max=150. - - First usage of `\lipsum` reads the \LaTeX/ file `lipsum.ltd.tex` - by \`\_lipsumload` - and prints the selected paragraph(s). Next usages of `\lipsum` - prints the selected paragraph(s) from memory. This second and more - usages of `\lipsum` are fully expandable. If you want to have all - printings of `\lipsum` expandable, use dummy `\lipsum[0]` first. - - `\lipsum` adds `\par` after each printed paragraph. If you don't need - such `\par` here, use \`\lipsumtext``[<number>]`. - This macro prints only one selected paragraph <number> and does not add `\par`. - \_cod ---------------------------- - -\_def\_lipsumtext[#1]{\_lipsumload\_cs{_lip:#1}} -\_def\_lipsum[#1]{\_lipsumA #1\_empty-\_empty\_end} -\_def\_lipsumA #1-#2\_empty#3\_end{% - \_fornum #1..\_ifx^#2^#1\_else#2\_fi \_do {\_lipsumtext[##1]\par}} -\_def\_lipsumload{{% - \_setbox0=\_vbox{\_tmpnum=0 % vertical mode during \input lipsum.ltd.tex - \_def\ProvidesFile##1[##2]{}% - \_def\NewLipsumPar{\_incr\_tmpnum \_sxdef{_lip:\_the\_tmpnum}}% - \_opinput {lipsum.ltd.tex}% - \_global\_let\_lipsumload=\_empty - }}} -\_public \lipsum \lipsumtext ; -\_let \lorem=\lipsum - -\_endcode - -2021-01-04 \lipsumtext introduced -2020-05-22 \lipsum uses \fornum (expandable after first usage) -2020-04-02 released diff --git a/Master/texmf-dist/tex/luatex/optex/base/outlines.opm b/Master/texmf-dist/tex/luatex/optex/base/outlines.opm deleted file mode 100644 index 6230d8988b8..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/outlines.opm +++ /dev/null @@ -1,108 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \outlines {PDF outlines <2021-02-09>} % preloaded in format - -\_def\_outlines#1{\_pdfcatalog{/PageMode/UseOutlines}\_openref - \_ifx\_toclist\_empty - \_opwarning{\_noexpand\outlines -- data unavailable. TeX me again}% - \_incr\_unresolvedrefs - \_else - \_ifx\_dest\_destactive \_else - \_opwarning{\_noexpand\outlines doesn't work when \_noexpand\hyperlinks isn't declared}\_fi - {\_let\_tocline=\_outlinesA - \_count0=0 \_count1=0 \_count2=0 \_count3=0 \_toclist % calculate numbers o childs - \_def\_outlinelevel{#1}\_let\_tocline=\_outlinesB - \_tocrefnum=0 \_count0=0 \_count1=0 \_count2=0 \_count3=0 - \_toclist}% create outlines - \_fi -} -\_def\_outlinesA#1#2#3#4#5#6#7{% - \_isequal{\relax}{#4}\_iffalse - \_advance\_count#1 by1 - \_ifcase#1\_or - \_addoneol{_ol:\_the\_count0}\_or - \_addoneol{_ol:\_the\_count0:\_the\_count1}\_or - \_addoneol{_ol:\_the\_count0:\_the\_count1:\_the\_count2}\_or - \_addoneol{_ol:\_the\_count0:\_the\_count1:\_the\_count2:\_the\_count3}\_fi - \_fi -} -\_def\_addoneol#1{% - \_ifcsname #1\_endcsname - \_tmpnum=\_csname#1\_endcsname\_relax - \_advance\_tmpnum by1 \_sxdef{#1}{\_the\_tmpnum}% - \_else \_sxdef{#1}{1}% - \_fi -} -\_def\_outlinesB#1#2#3#4#5#6#7{% - \_advance\_tocrefnum by1 - \_isequal{\relax}{#4}\_iffalse - \_advance\_count#1 by1 - \_ifcase#1% - \_tmpnum=\_trycs{_ol:\_the\_count0}{0}\_or - \_tmpnum=\_trycs{_ol:\_the\_count0:\_the\_count1}{0}\_relax\_or - \_tmpnum=\_trycs{_ol:\_the\_count0:\_the\_count1:\_the\_count2}{0}\_relax\_or - \_tmpnum=\_trycs{_ol:\_the\_count0:\_the\_count1:\_the\_count2:\_the\_count3}{0}\_relax\_or - \_tmpnum = 0\_relax\_fi - \_isempty{#4}\_iftrue \_pdfunidef\_tmp{#5}\_else \_pdfunidef\_tmp{#4}\_fi - \_outlinesC{toc:\_the\_tocrefnum}{\_ifnum#1<\_outlinelevel\_space\_else-\_fi}{\_tmpnum}{\_tmp}% - \_fi -} -\_def\_outlinesC#1#2#3#4{\_pdfoutline goto name{#1} count #2#3{#4}\_relax} - -\_newcount\_oulnum -\_def\_insertoutline#1{\_incr\_oulnum - \_pdfdest name{oul:\_the\_oulnum} xyz\_relax - \_pdfunidef\_tmp{#1}% - \_pdfoutline goto name{oul:\_the\_oulnum} count0 {\_tmp}\_relax -} -\_public \outlines \insertoutline ; - -\_endcode % ---------------------------- - -The problem is that PDF format needs to know the number of direct -descendants of each outline if we need to create the tree of structured -outlines. But we know only the level of each outline. The required data -should be calculated from TOC data. We use two steps over TOC data saved in -the `\_toclist` where each record is represented by one `\_tocline`. - -The first step, the \`\outlines` macro sets `\_tocline` to \`\_outlinesA` and -calculates the number of direct descendants of each record. The second step, -the `\outlines` macro sets `\_tocline` to \`\_outlinesB` and it uses prepared -data and creates outlines. - -Each outline is mapped to the control sequence of the type -`\_ol:<num>` or `\_ol:<num>:<num>` or `\_ol:<num>:<num>:<num>` or etc. -The first one is reserved for level 0, the second one for level 1 (chapters), the third -one for level 2 (sections) etc. The number of direct descendants will be stored -in these macros after the first step is finished. Each new outline of a given level -increases the `<num>` at the given level. When the first step is processed then -(above that) the `\_ol:..` sequence of the parent increases its value too. The -`_ol:...` sequences are implemented by `\_ol:\_count0:\_count1:\count2` etc. -For example, when section (level 2) is processed in the first step then we do: - -\begtt - \advance \count2 by 1 - % increases the mapping pointer of the type - % \_ol:\_count0:\_count1:\_count2 of this section - \advance \_ol:\_count0:\_count1 by 1 - % increases the number of descendants connected - % to the parent of this section. -\endtt - -When the second step is processed, then we only read the stored data about the -number of descendants. And we use it in `count` parameter of `\_pdfoutline` -primitive. - -For linking, we use the same links as in TOC, i.e. the `toc:\_the\_tocrefnum` -labels are used. - -\`\insertoutline` `{<text>}` inserts one outline with zero direct descendants. -It creates a link destination of the type `oul:<num>` into the document -(where \^`\insertoutline` is used) and the link itself is created too in the -outline. - -\endinput - -2021-02-15 \_advance -> \_incr -2021-02-09 \thisoutline implemented -2020-03-12 released diff --git a/Master/texmf-dist/tex/luatex/optex/base/output.opm b/Master/texmf-dist/tex/luatex/optex/base/output.opm deleted file mode 100644 index 5bb93c24773..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/output.opm +++ /dev/null @@ -1,267 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \nopagenumbers {Output routine <2021-02-25>} % preloaded in format - - \_doc ----------------------------- - \`\_optexoutput` is the default output routine. You can create another... - \_cod ----------------------------- - -\_output={\_optexoutput} -\_def \_optexoutput{\_begoutput \_shipout\_completepage \_endoutput} - - \_doc ----------------------------- - Default \`\_begoutput` and \`\_endoutput` is defined. - If you need another functionality implemented in the output routine, you can - \^`\addto``\_begoutput{...}` or \^`\addto``\_endoutput{...}`. The settings - here are local in the `\output` group. - - The \`\_prepoffsets` can set `\hoffset` differently for the left or right - page. It is re-defined by the \^`\margins` macro.. - - The \^`\_regmark` tokens list includes accumulated `#2` from the \^`\regmacro`. - Logos and other macros are re-defined here (locally) for their usage - in headlines or footlines. - \_cod ----------------------------- - -\_def \_begoutput{\_incr\_gpageno - \_immediate\_wref\_Xpage{{\_the\_gpageno}{\_folio}}% - \_setxhsize \_prepoffsets \_the\_regmark} -\_def \_endoutput{\_advancepageno - {\_globaldefs=1 \_the\_nextpages \_nextpages={}}% - \_ifnum\_outputpenalty>-20000 \_else\_dosupereject\_fi -} -\_def \_prepoffsets {} - - \_doc ----------------------------- - The `\hsize` value can be changed at various places in the document but - we need to have a constant value \`\_xhsize` in the output routine - (for headlines and footlines, for instance). This value is set - from the current value of `\hsize` when \`\_setxhsize` macro is called. - This macro destroys itself, so the value is set only once. Typically it is - done in \^`\margins` macro or - when first \^`\_optexoutput` routine is called (see \^`\_begoutput`). - Or it is called at the begining of the \^`\begtt`...`\endtt` environment before - `\hsize` value is eventually changed by the user in this environment. - \_cod ----------------------------- - -\_newdimen \_xhsize -\_def\_setxhsize {\_global\_xhsize=\_hsize \_global\_let\_setxhsize=\_relax} - - \_doc ----------------------------- - \`\gpageno` counts pages from one in the whole document - \_cod ----------------------------- - -\_newcount\_gpageno -\_public \gpageno ; - - \_doc ----------------------------- - The \`\_completepage` is similar to what plain \TeX/ does in its output routine. - New is only \`\_backgroundbox`. It is `\vbox` with zero height with its - contents (from \^`\pgbackground`) extended down. It is shifted directly to the - left-upper corner of the paper. - - The \`\_ensureblack` sets the typesetting of its parameter locally to `\Black` - color. We needn't do this if colors are never used in the document. So, - the default value of the `\_ensureblack` macro is empty. But the first usage of - color macros in the document re-defines `\_ensureblack`. - See the section~\ref[colors] for more details. - \_cod ----------------------------- - -\_def\_completepage{\_vbox{% - \_istoksempty \_pgbackground - \_iffalse \_ensureblack{\_backgroundbox{\_the\_pgbackground}}\_nointerlineskip \_fi - \_ensureblack{\_makeheadline}% - \_vbox to\_vsize {\_boxmaxdepth=\_maxdepth \_pagecontents}% \pagebody in plainTeX - \_ensureblack{\_makefootline}}% -} -\_def \_ensureblack #1{#1} % will be re-defined by color macros -\_let \_openfnotestack = \_relax % will be re-defined by color macros -\_def \_backgroundbox #1{\_moveleft\_hoffset\_vbox to\_zo{\_kern-\_voffset #1\_vss}} - - \_doc ----------------------------- - \`\_makeheadline` creates `\vbox to0pt` with its contents (the \^`\headline`) - shifted by \^`\headlinedist` up. - \_cod ----------------------------- - -\_def\_makeheadline {\_istoksempty \_headline \_iffalse - \_vbox to\_zo{\_vss - \_baselineskip=\_headlinedist \_lineskiplimit=-\_maxdimen - \_hbox to\_xhsize{\_the\_headline}\_hbox{}}\_nointerlineskip - \_fi -} - - \_doc ----------------------------- - The \`\_makefootline` appends the \^`\footline` to the page-body box. - \_cod ----------------------------- - -\_def\_makefootline{\_istoksempty \_footline \_iffalse - \_baselineskip=\_footlinedist - \_lineskiplimit=-\_maxdimen \_hbox to\_xhsize{\_the\_footline} - \_fi -} - - \_doc ----------------------------- - The \`\_pagecontents` is similar as in plain \TeX/. The only differnece is - that the \`\_pagedest` is inserted at the top of `\_pagecontents` and - \^`\_ensureblack` is applied to the \^`\topins` and \^`\footins` material.\nl - The \`\_footnoterule` is defined here. - \_cod ----------------------------- - -\_def\_pagecontents{\_pagedest % destination of the page - \_ifvoid\_topins \_else \_ensureblack{\_unvbox\_topins}\_fi - \_dimen0=\_dp255 \_unvbox255 % open up \box255 - \_ifvoid\_footins \_else % footnote info is present - \_vskip\_skip\_footins - \_ensureblack{\_footnoterule \_openfnotestack \_unvbox\_footins}\_fi - \_kern-\_dimen0 \_vskip \_pgbottomskip -} -\_def \_pagedest {{\_def\_destheight{25pt}\_dest[pg:\_the\_gpageno]}} -\_def \_footnoterule {\_kern-3pt \_hrule width 2truein \_kern 2.6pt } - - \_doc ----------------------------- - \`\pageno`, \`\folio`, \`\nopagenumbers`, \`\advancepageno` - and \`\normalbottom` - used in the context of the output routine - from plain \TeX/ is defined here. - Only the \`\raggedbottom` macro is defined differently. We use the - \^`\pgbottomskip` register here which is set to 0\,pt by default. - \_cod ----------------------------- - -\_countdef\_pageno=0 \_pageno=1 % first page is number 1 -\_def \_folio {\_ifnum\_pageno<0 \_romannumeral-\_pageno \_else \_number\_pageno \_fi} -\_def \_nopagenumbers {\_footline={}} -\_def \_advancepageno {% - \_ifnum\_pageno<0 \_decr\_pageno \_else \_incr\_pageno \_fi -} % increase |pageno| -\_def \_raggedbottom {\_topskip=\_dimexpr\_topskip plus60pt \_pgbottomskip=0pt plus1fil\_relax} -\_def \_normalbottom {\_topskip=\_dimexpr\_topskip \_pgbottomskip=0pt\_relax} - -\_public \pageno \folio \nopagenumbers \advancepageno \raggedbottom \normalbottom ; - - \_doc ----------------------------- - Macros for footnotes are the same as in plain \TeX. There is only one - difference: \`\vfootnote` is implemented as \`\_opfootnote` with empty - parameter `#1`. This parameter should do local settings inside - the \`\footins` group and it does it when `\fnote` macro is used.\nl - The `\_opfootnote` nor `\vfootnote` don't take the footnote text - as a parameter. This is due to a user can do catcode settings (like inline - verbatim) in the footnote text. This idea is adapted from plain \TeX.\nl - The \`\footnote` and \`\footstrut` is defined as in plain \TeX/. - \_cod ----------------------------- - -\_newinsert\_footins -\_def \_footnote #1{\_let\_osf=\_empty % parameter #2 (the text) is read later - \_ifhmode \_edef\_osf{\_spacefactor\_the\_spacefactor}\/\_fi - #1\_osf\_vfootnote{#1}} -\_def\_vfootnote{\_opfootnote{}} -\_def \_opfootnote #1#2{\_insert\_footins\_bgroup - \_interlinepenalty=\_interfootnotelinepenalty - \_leftskip=\_zo \_rightskip=\_zo \_spaceskip=\_zo \_xspaceskip=\_zo \_relax - \_let\_colorstackcnt=\_fnotestack % special color stack for footnotes - #1\_relax % local settings used by \fnote macro - \_splittopskip=\_ht\_strutbox % top baseline for broken footnotes - \_splitmaxdepth=\_dp\_strutbox \_floatingpenalty=20000 - \_textindent{#2}\_footstrut - \_isnextchar \_bgroup - {\_bgroup \_aftergroup\_vfootA \_afterassignment\_ignorespaces \_let\_next=}{\_vfootB}% -} -\_def\_vfootA{\_unskip\_strut\_isnextchar\_colorstackpop\_closefncolor\_vfootF} -\_def\_vfootB #1{#1\_unskip\_strut\_vfootF} -\_def\_vfootF{\_egroup} % close \_insert\_footins\_bgroup -\_def\_closefncolor#1{#1\_isnextchar\_colorstackpop\_closefncolor\_vfootF} -\_def \_footstrut {\_vbox to\_splittopskip{}} -\_skip\_footins=\_bigskipamount % space added when footnote is present -\_count\_footins=1000 % footnote magnification factor (1 to 1) -\_dimen\_footins=8in % maximum footnotes per page -\_public - \footins \footnote \vfootnote \footstrut ; - - \_doc ----------------------------- - The \`\topins` macros - \`\topinsert`, \`\midinsert`, \`\pageinsert`, \`\endinsert` - are the same as in plain \TeX/. - \_cod ----------------------------- - -\_newinsert\_topins -\_newifi\_ifupage \_newifi\_ifumid -\_def \_topinsert {\_umidfalse \_upagefalse \_oins} -\_def \_midinsert {\_umidtrue \_oins} -\_def \_pageinsert {\_umidfalse \_upagetrue \_oins} -\_skip\_topins=\_zoskip % no space added when a topinsert is present -\_count\_topins=1000 % magnification factor (1 to 1) -\_dimen\_topins=\_maxdimen % no limit per page -\_def \_oins {\_par \_begingroup\_setbox0=\_vbox\_bgroup} % start a \_vbox -\_def \_endinsert {\_par\_egroup % finish the \_vbox - \_ifumid \_dimen0=\_ht0 \_advance\_dimen0 by\_dp0 \_advance\_dimen0 by\_baselineskip - \_advance\_dimen0 by\_pagetotal \_advance\_dimen0 by-\_pageshrink - \_ifdim\_dimen0>\_pagegoal \_umidfalse \_upagefalse \_fi \_fi - \_ifumid \_bigskip \_box0 \_bigbreak - \_else \_insert \_topins {\_penalty100 % floating insertion - \_splittopskip=0pt - \_splitmaxdepth=\_maxdimen \_floatingpenalty=0 - \_ifupage \_dimen0=\_dp0 - \_vbox to\_vsize {\_unvbox0 \_kern-\_dimen0}% depth is zero - \_else \_box0 \_nobreak \_bigskip \_fi}\_fi\_endgroup} - -\_public \topins \topinsert \midinsert \pageinsert \endinsert ; - - \_doc ----------------------------- - The \`\draft` macro is an example of usage `\_pgbackground` to create - watercolor marks. - \_cod ----------------------------- - -\_def \_draft {\_pgbackground={\_draftbox{\_draftfont DRAFT}}% - \_fontdef\_draftfont{\_setfontsize{at10pt}\_bf}% - \_global\_let\_draftfont=\_draftfont -} -\_def \_draftbox #1{\_setbox0=\_hbox{#1}% - \_kern.5\_vsize \_kern\_voffset \_kern4.5\_wd0 - \_hbox to0pt{\_kern.5\_xhsize \_kern\_hoffset \_kern-2\_wd0 - \_pdfsave \_pdfrotate{55}\_pdfscale{10}{10}% - \_hbox to0pt{\_localcolor\_setgreycolor{.8}\_box0\_hss}% - \_pdfrestore - \_hss}% -} -\_public \draft ; - -\_endcode % ------------------------------------- - - -The output routine \^`\_optexoutput` is similar as in plain \TeX. It does: - -\begitems -* \^`\_begoutput` which does: - \begitems - * increments \^`\gpageno`, - * prints `\_Xpage{<gpageno>}{<pageno>}` to the `.ref` file - (if \^`\openref` is active), - * calculates `\hoffset`, - * sets local meaning of macros used in headlines/footlines (see \^`\regmacro`). - \enditems -* `\shipout`\^`\_completepage`, which is `\vbox` of -- - \begitems - * backrground box, if \^`\pgbackground` is non-empty, - * headline box by \^`\_makeheadline`, if the \^`\headline` is nonempty, - * `\vbox to\vsize` of \^`\_pagecontents` which cosnists of -- - \begitems - * \^`\_pagedest`, the page destination `pg:<gpageno>` for hyperlinks is created here, - * \^`\topins` box if non-empty (from \^`\topinsert`s), - * `\box255` with completed vertical material from main vertical mode, - * \^`\_footnoterule` and \^`\footins` box if nonempty (from \^`\fnote`, \^`\footnote`), - * \^`\pgbottomskip` (default is 0\,pt). - \enditems - * footline box by `\_makefootline`, if the \^`\footline` is nonempty - \enditems -* \^`\_endoutput` which does: - \begitems - * increments \^`\pageno` using \^`\advancepageno` - * runs output routine repeatedly if \^`\dosupereject` is activated. - \enditems -\enditems - -\_endinput - -2021-02-25 \_draftbox improved -2021-02-15 \_advance -> \_decr -2020-05-12 \vfootB: \uskip -> \unskip bug fixed -2020-03-28 Released diff --git a/Master/texmf-dist/tex/luatex/optex/base/parameters.opm b/Master/texmf-dist/tex/luatex/optex/base/parameters.opm deleted file mode 100644 index c8df6eec491..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/parameters.opm +++ /dev/null @@ -1,588 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \normalbaselineskip {Parameter settings <2020-03-17>} % preloaded in format - - \_doc ----------------------------- - \secc Primitive registers - The primitive registers with the same default value as in plain \TeX/ follow: - \_cod ----------------------------- - -\_parindent=20pt % indentation of paragraphs -\_pretolerance=100 % parameters used in paragraph breaking algorithm -\_tolerance=200 -\_hbadness=1000 -\_vbadness=1000 -\_doublehyphendemerits=10000 -\_finalhyphendemerits=5000 -\_adjdemerits=10000 -\_uchyph=1 -\_defaulthyphenchar=`\- -\_defaultskewchar=-1 -\_hfuzz=0.1pt -\_vfuzz=0.1pt -\_overfullrule=5pt -\_linepenalty=10 % penalty between lines inside the paragraph -\_hyphenpenalty=50 % when a word is bro-ken -\_exhyphenpenalty=50 % when the hyphenmark is used explicitly -\_binoppenalty=700 % between binary operators in math -\_relpenalty=500 % between relations in math -\_brokenpenalty=100 % after lines if they end by a broken word. -\_displaywidowpenalty=50 % before last line of paragraph if display math follows -\_predisplaypenalty=10000 % above display math -\_postdisplaypenalty=0 % below display math -\_delimiterfactor=901 % parameter for scaling delimiters -\_delimitershortfall=5pt -\_nulldelimiterspace=1.2pt -\_scriptspace=0.5pt -\_maxdepth=4pt -\_splitmaxdepth=\_maxdimen -\_boxmaxdepth=\_maxdimen -\_parskip=0pt plus 1pt -\_abovedisplayskip=12pt plus 3pt minus 9pt -\_abovedisplayshortskip=0pt plus 3pt -\_belowdisplayskip=12pt plus 3pt minus 9pt -\_belowdisplayshortskip=7pt plus 3pt minus 4pt -\_parfillskip=0pt plus 1fil -\_thinmuskip=3mu -\_medmuskip=4mu plus 2mu minus 4mu -\_thickmuskip=5mu plus 5mu - - \_doc ----------------------------- - Note that `\topskip` and `\splittopskip` are changed when first - `\typosize` sets the main values (default font size and default - `\baselineskip`). - \_cod ----------------------------- - -\_topskip=10pt % top edge of page-box to first baseline distance -\_splittopskip=10pt - - \_doc ----------------------------- - \secc Plain \TeX/ registers - Declared registers used in plain \TeX/ - \_cod ----------------------------- - -% We also define special registers that function like parameters: -\_newskip\_smallskipamount \_smallskipamount=3pt plus 1pt minus 1pt -\_newskip\_medskipamount \_medskipamount=6pt plus 2pt minus 2pt -\_newskip\_bigskipamount \_bigskipamount=12pt plus 4pt minus 4pt -\_newskip\_normalbaselineskip \_normalbaselineskip=12pt -\_newskip\_normallineskip \_normallineskip=1pt -\_newdimen\_normallineskiplimit \_normallineskiplimit=0pt -\_newdimen\_jot \_jot=3pt -\_newcount\_interdisplaylinepenalty \_interdisplaylinepenalty=100 -\_newcount\_interfootnotelinepenalty \_interfootnotelinepenalty=100 - -\_def\_normalbaselines{\_lineskip=\_normallineskip - \_baselineskip=\_normalbaselineskip \_lineskiplimit=\_normallineskiplimit} - -\_def\_frenchspacing{\_sfcode`\.=1000 \_sfcode`\?=1000 \_sfcode`\!=1000 - \_sfcode`\:=1000 \_sfcode`\;=1000 \_sfcode`\,=1000 } -\_def\_nonfrenchspacing{\_sfcode`\.=3000 \_sfcode`\?=3000 \_sfcode`\!=3000 - \_sfcode`\:=2000 \_sfcode`\;=1500 \_sfcode`\,=1250 } - -\_public \normalbaselines \frenchspacing \nonfrenchspacing - \smallskipamount \medskipamount \bigskipamount - \normalbaselineskip \normallineskip \normallineskiplimit - \jot \interdisplaylinepenalty \interfootnotelinepenalty ; - - \_doc ----------------------------- - \secc Different settings than in plain \TeX/ - - Default \"baseline setting" is for 10\,pt fonts (like in plain \TeX/). - But `\typosize` and `\typoscale` macros re-declare it if another font size is used. - - The \`\nonfrenchspacing` is not set by default because - the author of \OpTeX/ is living in Europe. - If you set `\enlang` hyphenation patterns then `\nonfrenchspacing` - is set. - \_cod ----------------------------- - -\_normalbaselines % baseline setting, 10 pt font size - - \_doc ----------------------------- - Different values than in plain \TeX/ have the following primitive registers. - We prohibit orphans, set more information for tracing boxes, set page origin - to the upper left corner of the paper (no at 1\,in, 1\,in coordinates) - and set default page dimensions as A4, no letter. - \_cod ----------------------------- - -\_emergencystretch=20pt % we want to use third pass of paragraph building algoritmh - % we need not keep the compatibility with old documents - -\_clubpenalty=10000 % after first line of paragraph -\_widowpenalty=10000 % before last line of paragraph - -\_showboxbreadth=150 % for tracing boxes -\_showboxdepth=7 -\_errorcontextlines=15 -\_tracinglostchars=2 % missing chracter warnings on terminal too - -\_outputmode=1 % PDF ouput -\_pdfvorigin=0pt % orgin is exatly at left upper corner -\_pdfhorigin=0pt -\_hoffset=25mm % margins are 2.5cm, no 1in -\_voffset=25mm -\_hsize=160mm % 210mm (from A4 size) - 2*25mm (default margins) -\_vsize=244mm % 297mm (from A4 size) - 2*25mm (default margins) -3mm baseline correction -\_pagewidth=210 true mm -\_pageheight=297 true mm - - \_doc ----------------------------- - If you insist on plain \TeX/ values of these parameters then you can - call the `\plaintexsetting` macro. - \_cod ----------------------------- - -\_def\_plaintexsetting{% - \_emergencystretch=0pt - \_clubpenalty=150 - \_widowpenalty=150 - \_pdfvorigin=1in - \_pdfhorigin=1in - \_hoffset=0pt - \_voffset=0pt - \_hsize=6.5in - \_vsize=8.9in - \_pagewidth=8.5 true in - \_pageheight=11 true in - \_nonfrenchspacing -} -\_public \plaintexsetting ; - - \_doc ----------------------------- - \secc[oparams] \OpTeX/ parameters - - The main principle of how to configure \OpTeX/ is not to use only parameters. - A designer can copy macros from \OpTeX/ and re-define them as required. - This is a reason why we don't implement dozens of parameters, - but we keep \OpTeX/ macros relatively simple. Example: do you want - another design of section titles? Copy macros `\_printsec` and - `\_printsecc` from `sections.opm` file to your macro file and re-define them. - - Notice for OPmac users: there is an important difference: all "string-like" - parameters are token lists in \OpTeX/ (OPmac uses macros for them). The reason of - this difference: if a user sets parameter by unprefixed (public) control sequence, - an \OpTeX/ macro can read {\em the same data} using a prefixed (private) control sequence. - - The \`\picdir` tokens list can include a directory where image files - (loaded by `\inspic`) are saved. Empty `\picdir` (default value) means - that image files are in the current directory (or somewhere in the \TeX/ - system where \LuaTeX/ can find them). If you set a non-empty value to - the `\picdir`, then it must end by `/` character, for example - `\picdir={img/}` means that there exists a directory `img` in your - current directory and the image files are stored here. - \_cod ----------------------------- - -\_newtoks\_picdir -\_public \picdir ; - - \_doc ----------------------------- - You can control the dimensions of included images by - the parameters \`\picwidth` (which is equivalent to \`\picw`) and - \`\picheight`. By default these parameters are set to zero: the native - dimension of the image is used. If only `\picwidth` has a nonzero value, - then this is the width of the image (height is calculated automatically in - order to respect the aspect of the image). If only `\picheight` has - a nonzero value then the height is given, the width is calculated. If both - parameters are non-zero, the height and width are given and the aspect - ratio of the image is (probably) broken. We recommend setting these - parameters locally in the group where \^`\inspic` is used in order to not - influence the dimensions of other images. But there exist many - situations you need to put the same dimensions to more images, - so you can set this parameter only once before more \^`\inspic` macros. - \_cod ----------------------------- - -\_newdimen\_picwidth \_picwidth=0pt \_let\picw=\_picwidth -\_newdimen\_picheight \_picheight=0pt -\_public \picwidth \picheight ; - - \_doc ----------------------------- - The \`\everytt` is the token list used in - \^`\begtt`...\^`\endtt` environment and - in the verbatim group opened by \^`\verbinput` macro. You can include a - code which is processed inside the group after basic settings were done - On the other hand, it is processed before the scanner of verbatim text is started. - Your macros should influence scanner (catcode settings) or printing - process of the verbatim code or both. - - The code from the line immediately after \^`\begtt` is processed after - the \^`\everytt`. This code should overwrite \^`\everytt` settings. Use - \^`\everytt` for all verbatim environments in your document and use a code - after \^`\begtt` locally only for this environment. - - The \`\everyintt` token list does similar work - but acts in the in-line verbatim - text processed by a pair of \^`\verbchar` characters or by \^`\code``{<text>}`. - You can set `\everyintt={\Red}` for example if you want in-line verbatim - in red color. - \_cod ----------------------------- - -\_newtoks\_everytt -\_newtoks\_everyintt -\_public \everytt \everyintt ; - - \_doc ----------------------------- - The \`\ttline` is used - in \^`\begtt`...\^`\endtt` environment or in the code - printed by \^`\verbinput`. If `\ttline` is positive or zero, then the - verbatim code has numbered lines from `\ttline+1`. The `\ttline` - register is re-set to a new value after a code piece is printed, so next - code pieces have numbered lines continuously. If `\ttline=-1`, then - \^`\begtt`...\^`\endtt` lines are without numbers and \^`\verbinput` lines - show the line numbers of inputted file. If `\ttline`\code{<-1} - then no line numbers are printed. - \_cod ----------------------------- - -\_newcount\_ttline \_ttline=-1 % last line number in \begtt...\endtt -\_public \ttline ; - - \_doc ----------------------------- - The \`\ttindent` gives default indentation - of verbatim lines printed by \^`\begtt`...\^`\endtt` pair or by - \^`\verbinput`. - \nl - The \`\ttshift` gives the amount of shift of all verbatim lines to the right. - Despite the \^`\ttindent`, it does not shift the line numbers, only - the text. - \nl - The \`\iindent` gives default indentations used in the table of contents, - captions, lists, bib references, - \nl - It is strongly recommended to re-set this value if you set `\parindent` - to another value than plain \TeX/ default 20pt. A well-typeset - document should have the same dimension for all indentations, so - you should say `\ttindent=\parindent` and `\iindent=\parindent`. - \_cod ----------------------------- - -\_newdimen\_ttindent \_ttindent=\_parindent % indentation in verbatim -\_newdimen\_ttshift -\_newdimen\_iindent \_iindent=\_parindent -\_public \ttindent \ttshift \iindent ; - - \_doc ----------------------------- - The tabulator `^^I` has its category code like space: it behaves as a - space in normal text. This is a common plain \TeX/ setting. - But in the multiline verbatim environment it - is active and expands to the `\hskip<dimen>` where `<dimen>` - is the width of \`\tabspaces` spaces. - Default `\tabspaces=3` means - that tabulator behaves like three spaces in multiline verbatim. - \_cod ----------------------------- - -\_newcount \_tabspaces \_tabspaces=3 -\_public \tabspaces ; - - \_doc ----------------------------- - If \`\hicolors` is non-empty then its contents is used instead - `\_hicolors<name>` declared in the file `hisyntax-<name>.opm`. - The user can give his/her preferences about colors for - syntax highlighting by this tokens list. - The full color set must be declared here. - \_cod ----------------------------- - -\_newtoks\_hicolors -\_public \hicolors ; - - \_doc ----------------------------- - The default item mark used between \^`\begitems` and \^`\enditems` is the bullet. - The \`\defaultitem` tokens list declares this default item mark. - \nl - The \`\everyitem` tokens list is applied in vertical mode - at the start of each item. - \nl - The \`\everylist` tokens list is applied after the group is opened by \^`\begitems` - \nl - The \`\ilevel` keeps the value of the current nesting level of the items list. - \nl - The \`\listskipamount` gives vertical skip above and below the items list - if `\ilevel=1`. - \_cod ----------------------------- - -\_newtoks\_defaultitem \_defaultitem={$\_bullet$\_enspace} -\_newtoks\_everyitem -\_newtoks\_everylist -\_newskip \_listskipamount \_listskipamount=\_medskipamount -\_newcount \_ilevel -\_public \defaultitem \everyitem \everylist \listskipamount \ilevel ; - - \_doc ----------------------------- - The \^`\tit` macro includes `\vglue`\`\titskip` above the title of the document. - \_cod ----------------------------- - -\_newskip\_titskip \_titskip=40pt \_relax % \vglue above title printed by \tit -\_public \titskip ; - - \_doc ---------------------------- - The \^`\begmulti` and \^`\endmulti` pair creates more columns. The parameter - \`\colsep` declares the space between columns. If $n$ columns are specified - then we have $n-1$ `\colseps` and $n$ columns in total `\hsize`. This - gives the definite result of the width of the columns. - \_cod ---------------------------- - -\_newdimen\_colsep \_colsep=20pt % space between columns -\_public \colsep ; - - \_doc ----------------------------- - Each line in the Table of contents is printed in a group. - The \`\everytocline` tokens list is processed here before - the internal `\_tocl:<num>` macro which starts printing the line. - \_cod ----------------------------- - -\_newtoks \_everytocline -\_public \everytocline ; - - \_doc ----------------------------- - The \`\bibtexhook` tokens list is used inside the group when `\usebib` command is - processed after style file is loaded and before printing bib-entries. - You can re-define a behavior of the style file here or you can modify the - more declaration for printing (fonts, baselineskip, etc.) or you can - define specific macros used in your `.bib` file. - \_cod ----------------------------- - -\_newtoks\_bibtexhook -\_public \bibtexhook ; - - \_doc ----------------------------- - \`\everycapitonf` is used before printing caption in figures and - \`\everycapitont` is used before printing caption in tables. - \_cod ----------------------------- - -\_newtoks\_everycaptiont \_newtoks\_everycaptionf -\_public \everycaptiont \everycaptionf ; - - \_doc ----------------------------- - The \`\everyii` tokens list is used before `\noindent` for each - Index item when printing the Index. - \_cod ----------------------------- - -\_newtoks\_everyii -\_public \everyii ; - - \_doc ----------------------------- - The \`\everymnote` is used in the \^`\mnote` group before `\noindent` which - immediately precedes marginal note text. - \nl - The \`\mnotesize` is the horizontal size of the marginal notes. - \nl - The \`\mnoteindent` is horizontal space between body-text and marginal note. - \_cod ----------------------------- - -\_newtoks\_everymnote -\_newdimen\_mnotesize \_mnotesize=20mm % the width of the mnote paragraph -\_newdimen\_mnoteindent \_mnoteindent=10pt % ditance between mnote and text -\_public \everymnote \mnotesize \mnoteindent ; - - \_doc ----------------------------- - The \^`\table` parameters follow. The \`\thistable` tokens list - register should be used for giving an exception for only one `\table` - which follows. It should change locally other parameters of the `\table`. - It is reset to an empty list after the table is printed. - \nl - The \`\everytable` tokens list register is applied in every table. - There is another difference between these two registers. - The `\thistable` is used first, then strut and baselineskip settings are - done, then `\everytable` is applied and then the table is printed. - \nl - \`\tabstrut` configures the height and depth of lines in the table. - You can declare `\tabstrut={}`, then normal baselineskip is used in the - table. This can be used when you don't use horizontal nor vertical - lines in tables. - \nl - \`\tabiteml` is applied before each item, - \`\tabitemr` is applied after each item of the table. - \nl - \`\tablinespace` is additional vertical space between horizontal rules - and the lines of the table. - \nl - \`\hhkern` gives the space between horizontal lines if they are doubled and - \`\vvkern` gives the space between such vertical lines. - \nl - \`\tabskipl` is `\tabskip` used before first column, - \`\tabskipr` is `\tabskip` used after the last column. - \nl - \`\tsize` is virtual unit of the width of paragraph-like table items when - `\table pxto<size>` is used. - \_cod ----------------------------- - -\_newtoks\_everytable \_newtoks\_thistable -\_newtoks\_tabiteml \_newtoks\_tabitemr \_newtoks\_tabstrut -\_newdimen\_tablinespace \_newdimen\_vvkern \_newdimen\_hhkern \_newdimen\_tsize -\_newskip\_tabskipl \_newskip\_tabskipr -\_everytable={} % code used after settings in \vbox before table processing -\_thistable={} % code used when \vbox starts, is is removed after using it -\_tabstrut={\_strut} -\_tabiteml={\_enspace} % left material in each column -\_tabitemr={\_enspace} % right material in each column -\_tablinespace=2pt % additional vertical space before/after horizontal rules -\_vvkern=1pt % space between double vertical line and used in \frame -\_hhkern=1pt % space between double horizontal line and used in \frame -\_tabskipl=0pt\_relax % \tabskip used before first column -\_tabskipr=0pt\_relax % \tabskip used after the last column -\_public \everytable \thistable \tabiteml \tabitemr \tabstrut \tablinespace - \vvkern \hhkern \tsize \tabskipl \tabskipr ; - - \_doc ----------------------------- - The \^`\eqalign` macro can be configured by \`\eqlines` and \`\eqstyle` - tokens lists. The default values are set in order these macro beahaves - as in Plain \TeX. The \`\eqspace` is horizontal space put - between equation systems if more columns in \^`\eqalign` are used. - \_cod ----------------------------- - -\_newtoks \_eqlines \_eqlines={\_openup\_jot} -\_newtoks \_eqstyle \_eqstyle={\_strut\_displaystyle} -\_newdimen \_eqspace \_eqspace=20pt -\_public \eqlines \eqstyle \eqspace ; - - \_doc ----------------------------- - \`\lmfil` is \"left matrix filler" (for `\matrix` columns). The default - value does centering because the right matrix filler is directly set to `\hfil`. - \_cod ----------------------------- - -\_newtoks \_lmfil \_lmfil={\_hfil} -\_public \lmfil ; - - \_doc ----------------------------- - The output routine uses token list \`\headline` and \`\footline` in the - same sense as in plain \TeX/. If they are non-empty then `\hfil` or `\hss` - must be here because they are used inside `\hbox to\hsize`. - - Assume that page-body text can be typeset in different sizes and - different fonts and we don't know in what font context the output routine - is invoked. So, it is strongly recommended to declare fixed variants of - fonts at the beginning of your document. For example `\fontdef\rmfixed{\rm}`, - `\fontdef\itfixed{\it}`. Then use them in headline and footline: - \begtt - \headline={\itfixed Text of headline, section: \fistmark \hss} - \footline={\rmfixed \ifodd\pageno \hfill\fi \folio \hfil} - \endtt - \_cod ----------------------------- - -\_newtoks\_headline \_headline={} -\_newtoks\_footline \_footline={\_hss\_rmfixed \_folio \_hss} -\_public \headline \footline ; - - \_doc ----------------------------- - The distance between the `\headline` and the top of the page text - is controlled by the \`\headlinedist` register. - The distance between the bottom of - page-text and `\footline` is \`\footlinedist`. - More precisely: baseline of - headline and baseline of the first line in page-text have distance - `\headlinedist+\topskip`. The baseline of the last line in page-text and - the baseline of the footline have distance `\footlinedist`. - Default values are inspired by plain \TeX/. - \_cod ----------------------------- - -\_newdimen \_headlinedist \_headlinedist=14pt -\_newdimen \_footlinedist \_footlinedist=24pt -\_public \headlinedist \footlinedist ; - - \_doc ----------------------------- - The \`\pgbottomskip` is inserted to the page bottom - in the output routine. You can set less tolerance here than - `\raggedbotom` does. By default, no tolerance is given. - \_cod ----------------------------- - -\_newskip \_pgbottomskip \_pgbottomskip=0pt \_relax -\_public \pgbottomskip ; - - \_doc ----------------------------- - The \`\nextpages` tokens list can include settings which will be used at - next pages. It is processed at the end of output routine with - `\globaldefs=1` prefix. The `\nextpages` is reset to empty after - processing. Example of usage: - \begtt - \headline={} \nexptages={\headline={\rmfixed \firstmark \hfil}} - \endtt - This example sets current page with empty headline, but next pages have - non-empty headlines. - \_cod ----------------------------- - -\_newtoks \_nextpages -\_public \nextpages ; - - \_doc ----------------------------- - The \`\pgbackground` token list can include macros which generate a - vertical list. It is used as page background. The top-left corner of such - `\vbox` is at the top-left corner of the paper. Example creates the - background of all pages yellow: - \begtt - \pgbackground={\Yellow \hrule height 0pt depth\pdfpageheight width\pdfpagewidth} - \endtt - \_cod ----------------------------- - -\_newtoks \_pgbackground \_pgbackground={} % for page background -\_public \pgbackground ; - - \_doc ----------------------------- - The parameters used in \^`\inoval` and \^`\incircle` macros - can be re-set by \`\ovalparams`, \`\circleparams` tokens lists. - The default values (documented in the user manual) are set in the macros. - \_cod ----------------------------- - -\_newtoks \_ovalparams -\_newtoks \_circleparams -%\_ovalparams={\_roundness=2pt \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp -% \_shadow=N \_overlapmargins=N \_hhkern=0pt \_vvkern=0pt } -%\_circleparams={\_ratio=1 \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp -% \_shadow=N \_overlapmargins=N \_hhkern=3pt \_vvkern=3pt} - -\_newdimen \_roundness \_roundness=5mm % used in \clippingoval macro - -\_public \ovalparams \circleparams \roundness ; - - \_doc ----------------------------- - \OpTeX/ defines \"Standard \OpTeX/ markup language"% - \fnote{Will be developed in 2021.} - which lists selected commands from chapter~1 and gives their behavior when a - converter from \OpTeX/ document to HTML or Markdown or \LaTeX/ is used. - The structure-oriented commands are selected here, but the commands which - declare typographical appearance (page layout, dimensions, selected font - family) are omitted. More information for such a converter should be - given in \`\cnvinfo``{<data>}`. - \OpTeX/ simply ignores this but the converter can read its configuration - from here. For example, a user can write: - \begtt \catcode`\<=13 - \cnvinfo {type=html, <cnv-to-html-data>} - \cnvinfo {type=markdown, <cnv-to-markdown-data>} - \endtt - and the document can be processed by \OpTeX/ to create PDF, or by a - converter to create HTML, or by another converter to create Markdown. - \_cod ----------------------------- - -\_let\cnvinfo=\_ignoreit - - -\_endcode %---------------------------------------------------- - -The behavior of document processing by \OpTeX/ is -controlled by {\em parameters}. The parameters are -\begitems -* primitive registers used in build-in algorithms of \TeX/, -* registers declared and used by \OpTeX/ macros. -\enditems -Both groups of registers have their type: number, dimension, skip, token -list. - -The registers are represented by their names (control sequences). If the user -re-defines this control sequence then the appropriate register exists -steadily and build-in algorithms are using it without change. But user -cannot access its value in this case. \OpTeX/ declares two control sequences -for each register: prefixed (private) and unprefixed (public). \OpTeX/ macros use only -prefixed variants of control sequences. The user should use the unprefixed variant -with the same meaning and set or read the values of registers using the -unprefixed variant. If the user re-defines the unprefixed control sequence of -a register then \OpTeX/ macros still work without change. - -%There are only a few parameters declared by \OpTeX/ macros. All of them -%are listed in this section. This is the desired feature of the \OpTeX/. -%If you want to do more -%changes which cannot be controlled by parameters listed here then you -%can copy the appropriate \OpTeX/ macro to your macro file and you -%can completely re-define it. The typical examples are `\_printsomething` -%macros which declare the design of the document. - -\_endinput - -History: -2020-04-04 ... \tabspaces added -2020-04-03 ... \hicolors added diff --git a/Master/texmf-dist/tex/luatex/optex/base/pdfuni-string.opm b/Master/texmf-dist/tex/luatex/optex/base/pdfuni-string.opm deleted file mode 100644 index 25781ddfb4f..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/pdfuni-string.opm +++ /dev/null @@ -1,127 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \pdfunidef {PDFunicode strings for outlines <2021-02-08>} % preloaded in format - - \_doc ----------------------------- - \`\_hexprint` is a command defined in Lua, that scans a number and expands - to its UTF-16 Big Endian encoded form for use in PDF hexadecimal strings. - \_cod ----------------------------- - -\bgroup -\_catcode`\%=12 -\_gdef\_hexprint{\_directlua{ - local num = token.scan_int() - if num < 0x10000 then - tex.print(string.format("%04X", num)) - else - num = num - 0x10000 - local high = bit32.rshift(num, 10) + 0xD800 - local low = bit32.band(num, 0x3FF) + 0xDC00 - tex.print(string.format("%04X%04X", high, low)) - end -}} -\egroup - - \_doc ----------------------------- - \`\pdfunidef``\macro{<text>}` does more things than only converting to hexadecimal PDF string. - The <text> can be scanned in verbatim mode (it is true becuase \^`\_Xtoc` - reads the <text> in verbatim mode). First `\edef` do - `\_scantextokens\unexpanded` and second `\edef` expands the parameter - according to current values on selected macros from `\_regoul`. Then - \`\_removeoutmath` converts `..$x^2$..` to `..x^2..`, i.e removes dollars. - Then \`\_removeoutbraces` converts `..{x}..` to `..x..`. - Finally, the <text> is detokenized, spaces are preprocessed using \^`\replstring` - and then the \`\_pdfunidefB` is repeated on each character. It calls the - `\directlua` chunk to print hexadecimal numbers in the macro \^`\_hexprint`.\nl - Characters for quotes (and separators for quotes) are activated by first - `\_scatextokens` and they are defined as the same non-active characters. - But `\_regoul` can change this definition. - \_cod ----------------------------- - -\_def\_pdfunidef#1#2{% - \_begingroup - \_catcodetable\_optexcatcodes \_adef"{"}\_adef'{'}% - \_the\_regoul \_relax % \_regmacro alternatives of logos etc. - \_ifx\_savedttchar\_undefined \_def#1{\_scantextokens{\_unexpanded{#2}}}% - \_else \_lccode`\;=\_savedttchar \_lowercase{\_prepinverb#1;}{#2}\fi - \_edef#1{#1}% - \_escapechar=-1 - \_edef#1{#1\_empty}% - \_escapechar=`\\ - \_ea\_edef \_ea#1\_ea{\_ea\_removeoutmath #1$\_end$}% $x$ -> x - \_ea\_edef \_ea#1\_ea{\_ea\_removeoutbraces #1{\_end}}% {x} -> x - \_edef#1{\_detokenize\_ea{#1}}% - \_replstring#1{ }{{ }}% text text -> text{ }text - \_catcode`\\=12 \_let\\=\_bslash - \_edef\_out{<FEFF} - \_ea\_pdfunidefB#1^% text -> \_out in octal - \_ea - \_endgroup - \_ea\_def\_ea#1\_ea{\_out>} -} -\_def\_pdfunidefB#1{% - \_ifx^#1\_else - \_edef\_out{\_out \_hexprint `#1} - \_ea\_pdfunidefB \_fi -} - -\_def\_removeoutbraces #1#{#1\_removeoutbracesA} -\_def\_removeoutbracesA #1{\_ifx\_end#1\_else #1\_ea\_removeoutbraces\_fi} -\_def\_removeoutmath #1$#2${#1\_ifx\_end#2\_else #2\_ea\_removeoutmath\_fi} - - \_doc ----------------------------- - The \`\_prepinverb``<macro><separator>{<text>}`, - e.g.\ `\_prepinverb\tmpb|{aaa |bbb| cccc |dd| ee}` - does `\def\tmpb{<su>{aaa }bbb<su>{ cccc }dd<su>{ ee}}` where - <su> is `\scantextokens\unexpanded`. It means that in-line verbatim - are not argument of `\scantextoken`. First `\edef\tmpb` tokenizes again - the <text> but not the parts which were in the the in-line verbatim. - \_cod ----------------------------- - -\_def\_prepinverb#1#2#3{\_def#1{}% - \_def\_dotmpb ##1#2##2{\_addto#1{\_scantextokens{\_unexpanded{##1}}}% - \_ifx\_end##2\_else\_ea\_dotmpbA\_ea##2\_fi}% - \_def\_dotmpbA ##1#2{\_addto#1{##1}\_dotmpb}% - \_dotmpb#3#2\_end -} - - \_doc ----------------------------- - The \^`\regmacro` is used in order to sed the values of macros - `\em`, `\rm`, `\bf`, `\it`, `\bi`, `\tt`, `\/` and `~` to values usable in - PDF outlines. - \_cod ----------------------------- - -\_regmacro {}{}{\_let\em=\_empty \_let\rm=\_empty \_let\bf=\_empty - \_let\it=\_empty \_let\bi=\_empty \_let\tt=\_empty \_let\/=\_empty - \_let~=\_space -} -\public \pdfunidef ; - -\_endcode % -------------------------------- - -There are only two encodings for PDF strings (used in PDFoutlines, PDFinfo, -etc.). The first one is PDFDocEncoding which is single-byte encoding, but it -misses most international characters. - -The second encoding is Big Endian UTF-16 which is implemented in this file. It -encodes a single character in either two or four bytes. -This encoding is \TeX/-discomfortable because it looks like - -\begtt -<FEFF 0043 0076 0069 010D 0065 006E 00ED 0020 006A 0065 0020 007A 00E1 0074 -011B 017E 0020 0061 0020 0078 2208 D835DD44> -\endtt - -This example shows a hexadecimal PDF string (enclosed in \code{<>} as opposed -to the literal PDF string enclosed in `()`). In these strings each byte is -represented by two hexadecimal characters (`0-9`, `A-F`). You can tell the -encoding is UTF-16BE, becuase it starts with \"Byte order mark" `FEFF`. Each -unicode character is then encoded in one or two byte pairs. The example string -corresponds to the text \"Cvičení je zátěž a ${\rm x} ∈ 𝕄$". Notice the 4 bytes -for the last character, $𝕄$. (Even the whitespace would be OK in a PDF file, -because it should be ignored by PDF viewers, but \LuaTeX\ doesn't allow it.) - -\_endinput - -2021-02-08 \_octalprint -> \_hexprint -2020-03-12 Released diff --git a/Master/texmf-dist/tex/luatex/optex/base/plain-macros.opm b/Master/texmf-dist/tex/luatex/optex/base/plain-macros.opm deleted file mode 100644 index b4569ee9691..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/plain-macros.opm +++ /dev/null @@ -1,346 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \magstep {Macros from plain TeX <2020-02-14>} % preloaded in format - - \_doc ----------------------------- - The \`\dospecials` works like in plain TeX but does nothing with `_`. - If you need to do the same with this character, you can re-define: - \begtt - \addto \dospecials{\do\_} - \endtt - \_cod ----------------------------- - -\_def\_dospecials {\do\ \do\\\do\{\do\}\do\$\do\&% - \do\#\do\^\do\^^K\do\^^A\do\%\do\~} -\_chardef\_active = 13 - -\_public \dospecials \active ; - - \_doc ----------------------------- - The shortcuts `\chardef\@one` is not defined in \OpTeX/. Use normal - numbers instead of such obscurities. - \nl - The \`\magstep` and \`\magstephalf` are - defined with `\space`, (no `\relax`), in order to be expandable. - \_cod ----------------------------- - -\_def \_magstephalf{1095 } -\_def \_magstep#1{\_ifcase#1 1000\_or 1200\_or 1440\_or 1728\_or 2074\_or 2488\_fi\_space} -\_public \magstephalf \magstep ; - - \_doc ----------------------------- - Plain \TeX/ basic macros and control sequences. - \`\endgraf`, \`\endline`. - The `^^L` is not defined in \OpTeX/ because it is obsolete. - \_cod ----------------------------- - -\_def\^^M{\ } % control <return> = control <space> -\_def\^^I{\ } % same for <tab> - -\_def\lq{`} \def\rq{'} -\_def\lbrack{[} \_def\rbrack{]} % They are only public versions. -% \catcode`\^^L=\active \outer\def^^L{\par} % ascii form-feed is "\outer\par" % obsolete - -\_let\_endgraf=\_par \_let\_endline=\_cr -\_public \endgraf \endline ; - - \_doc ----------------------------- - Plain \TeX/ classical \`\obeylines` and \`\obeyspaces`. - \_cod ----------------------------- - -% In \obeylines, we say `\let^^M=\par' instead of `\def^^M{\par}' -% since this allows, for example, `\let\par=\cr \obeylines \halign{...' -{\_catcode`\^^M=13 % these lines must end with % - \_gdef\_obeylines{\_catcode`\^^M=13\_let^^M\_par}% - \_global\_let^^M=\par} % this is in case ^^M appears in a \write -\_def\_obeyspaces{\_catcode`\ =13 } -{\_obeyspaces\_global\_let =\_space} -\_public \obeylines \obeyspaces ; - - \_doc ----------------------------- - Spaces. - \`\thinspace`, \`\negthinspace`, \`\enspace`, \`\enskip`, - \`\quad`, \`\qquad`, \`\smallskip`, - \`\medskip`, \`\bigskip`, \`\nointerlineskip`, \`\offinterlineskip`, - \`\topglue`, \`\vglue`, \`\hglue`, \`\slash`. - \_cod ----------------------------- - -\_protected\_def\_thinspace {\_kern .16667em } -\_protected\_def\_negthinspace {\_kern-.16667em } -\_protected\_def\_enspace {\_kern.5em } -\_protected\_def\_enskip {\_hskip.5em\_relax} -\_protected\_def\_quad {\_hskip1em\_relax} -\_protected\_def\_qquad {\_hskip2em\_relax} -\_protected\_def\_smallskip {\_vskip\_smallskipamount} -\_protected\_def\_medskip {\_vskip\_medskipamount} -\_protected\_def\_bigskip {\_vskip\_bigskipamount} -\_def\_nointerlineskip {\_prevdepth=-1000pt } -\_def\_offinterlineskip {\_baselineskip=-1000pt \_lineskip=0pt \_lineskiplimit=\_maxdimen} - -\_public \thinspace \negthinspace \enspace \enskip \quad \qquad \smallskip - \medskip \bigskip \nointerlineskip \offinterlineskip ; - -\_def\_topglue {\_nointerlineskip\_vglue-\_topskip\_vglue} % for top of page -\_def\_vglue {\_afterassignment\_vglA \_skip0=} -\_def\_vglA {\_par \_dimen0=\_prevdepth \_hrule height0pt - \_nobreak\_vskip\_skip0 \_prevdepth=\_dimen0 } -\_def\_hglue {\_afterassignment\_hglA \_skip0=} -\_def\_hglA {\_leavevmode \_count255=\_spacefactor \_vrule width0pt - \_nobreak\_hskip\_skip0 \_spacefactor=\_count255 } -\_protected\_def~{\_penalty10000 \ } % tie -\_protected\_def\_slash {/\_penalty\_exhyphenpenalty} % a `/' that acts like a `-' - -\_public \topglue \vglue \hglue \slash ; - - \_doc ----------------------------- - Penalties macros: - \`\break`, \`\nobreak`, \`\allowbreak`, \`\filbreak`, \`\goodbreak`, - \`\eject`, \`\supereject`, \`\dosupereject`, - \`\removelastskip`, \`\smallbreak`, \`\medbreak`, \`\bigbreak`. - \_cod ----------------------------- - -\_protected\_def \_break {\_penalty-10000 } -\_protected\_def \_nobreak {\_penalty10000 } -\_protected\_def \_allowbreak {\_penalty0 } -\_protected\_def \_filbreak {\_par\_vfil\_penalty-200\_vfilneg} -\_protected\_def \_goodbreak {\_par\_penalty-500 } -\_protected\_def \_eject {\_par\_break} -\_protected\_def \_supereject {\_par\_penalty-20000 } -\_protected\_def \_dosupereject {\_ifnum \_insertpenalties>0 % something is being held over - \_line{}\_kern-\_topskip \_nobreak \_vfill \_supereject \_fi} -\_def \_removelastskip {\_ifdim\_lastskip=\_zo \_else \_vskip-\_lastskip \_fi} -\_def \_smallbreak {\_par\_ifdim\_lastskip<\_smallskipamount - \_removelastskip \_penalty-50 \_smallskip \_fi} -\_def \_medbreak {\_par\_ifdim\_lastskip<\_medskipamount - \_removelastskip \_penalty-100 \_medskip \_fi} -\_def \_bigbreak {\_par\_ifdim\_lastskip<\_bigskipamount - \_removelastskip \_penalty-200 \_bigskip \_fi} - -\_public \break \nobreak \allowbreak \filbreak \goodbreak \eject \supereject \dosupereject - \removelastskip \smallbreak \medbreak \bigbreak ; - - \_doc ----------------------------- - Boxes. - \`\line`, \`\leftline`, \`\rightline`, \`\centerline`, \`\rlap`, \`\llap`, - \`\underbar`. - \_cod ----------------------------- - -\_def \_line {\_hbox to\_hsize} -\_def \_leftline #1{\_line{#1\_hss}} -\_def \_rightline #1{\_line{\_hss#1}} -\_def \_centerline #1{\_line{\_hss#1\_hss}} -\_def \_rlap #1{\_hbox to\_zo{#1\_hss}} -\_def \_llap #1{\_hbox to\_zo{\_hss#1}} -\_def\_underbar #1{$\_setbox0=\_hbox{#1}\_dp0=\_zo \_math \_underline{\_box0}$} - -\_public \line \leftline \rightline \centerline \rlap \llap \underbar ; - - \_doc ----------------------------- - The \`\strutbox` is declared as 10pt size dependent (like in plain \TeX), but - the macro `\_setbaselineskip` (from `fonts-opmac.opm`) redefines it. - \_cod ----------------------------- - -\_newbox\_strutbox -\_setbox\_strutbox=\_hbox{\_vrule height8.5pt depth3.5pt width0pt} -\_def \_strut {\_relax\_ifmmode\_copy\_strutbox\_else\_unhcopy\_strutbox\_fi} - -\_public \strutbox \strut ; - - \_doc ----------------------------- - Alignment. \`\hidewidth` \`\ialign` \`\multispan`. - \_cod ----------------------------- - -\_def \_hidewidth {\_hskip\_hideskip} % for alignment entries that can stick out -\_def \_ialign{\_everycr={}\_tabskip=\_zoskip \_halign} % initialized \halign -\_newcount\_mscount -\_def \_multispan #1{\_omit \_mscount=#1\_relax - \_loop \_ifnum\_mscount>1 \_spanA \_repeat} -\_def \_spanA {\_span\_omit \_advance\_mscount by-1 } - -\_public \hidewidth \ialign \multispan ; - - \_doc ----------------------------- - Tabbing macros are omitted because they are obsolete. - \nl - Indentation and others. \`\textindent`, \`\item`, \`\itemitem`, - \`\narrower`, \`\raggedright`, \`\ttraggedright`, \`\leavevmode`. - \_cod ----------------------------- - -\_def \_hang {\_hangindent\_parindent} -\_def \_textindent #1{\_indent\_llap{#1\_enspace}\_ignorespaces} -\_def \_item {\_par\_hang\_textindent} -\_def \_itemitem {\_par\_indent \_hangindent2\_parindent \_textindent} -\_def \_narrower {\_advance\_leftskip\_parindent - \_advance\_rightskip\_parindent} -\_def \_raggedright {\_rightskip=0pt plus2em - \_spaceskip=.3333em \_xspaceskip=.5em\_relax} -\_def \_ttraggedright {\_tt \_rightskip=0pt plus2em\_relax} % for use with \tt only -\_def \_leavevmode {\_unhbox\_voidbox} % begins a paragraph, if necessary - -\_public \hang \textindent \item \itemitem \narrower \raggedright \ttraggedright \leavevmode ; - - \_doc ----------------------------- - Few character codes are set for backward compatibility. But old obscurities - (from plain TeX) based on \`\mathhexbox` - are not supported -- an error message and recommendation - to directly using the desired character is implemented by the - \`\_usedirectly` macro). - The user can re-define these control sequences of course. - \_cod ----------------------------- - -%\chardef\%=`\% -\_let\% = \_pcent % more natural, can be used in lua codes. -\_chardef\&=`\& -\_chardef\#=`\# -\_chardef\$=`\$ -\_chardef\ss="FF -\_chardef\ae="E6 -\_chardef\oe="F7 -\_chardef\o="F8 -\_chardef\AE="C6 -\_chardef\OE="D7 -\_chardef\O="D8 -\_chardef\i="11 \chardef\j="12 % dotless letters -\_chardef\aa="E5 -\_chardef\AA="C5 -\_chardef\S="9F -\_def\l{\_errmessage{\_usedirectly ł}} -\_def\L{\_errmessage{\_usedirectly Ł}} -%\def\_{\_ifmmode \kern.06em \vbox{\hrule width.3em}\else _\fi} % obsolete -\_def\_{\_hbox{_}} -\_def\dag{\_errmessage{\_usedirectly †}} -\_def\ddag{\_errmessage{\_usedirectly ‡}} -%\_def\copyright{\_errmessage{\_usedirectly ©}} -\_def\copyright{©} % << example, what to do -%\_def\Orb{\_mathhexbox20D} % obsolete (part of Copyright) -%\_def\P{\_mathhexbox27B} % obsolete - -\_def \_usedirectly #1{Load Unicoded font by \string\fontfam\space and use directly #1} -\_def \_mathhexbox #1#2#3{\_leavevmode \_hbox{$\_math \_mathchar"#1#2#3$}} -\_public \mathhexbox ; - - \_doc ----------------------------- - Accents. - The macros \`\ooalign`, \`\d`, \`\b`, \`\c`, \`\dots`, - are defined for backward compatibility. - \_cod ----------------------------- - -\_def \_oalign #1{\_leavevmode\_vtop{\_baselineskip=\_zo \_lineskip=.25ex - \_ialign{##\_crcr#1\_crcr}}} -\_def \_oalignA {\_lineskiplimit=\_zo \_oalign} -\_def \_ooalign {\_lineskiplimit=-\_maxdimen \_oalign} % chars over each other -\_def \_shiftx #1{\_dimen0=#1\_kern\_ea\_ignorept \_the\_fontdimen1\_font - \_dimen0 } % kern by #1 times the current slant -\_def \_d #1{{\_oalignA{\_relax#1\_crcr\_hidewidth\_shiftx{-1ex}.\_hidewidth}}} -\_def \_b #1{{\_oalignA{\_relax#1\_crcr\_hidewidth\_shiftx{-3ex}% - \_vbox to.2ex{\_hbox{\_char\_macron}\_vss}\_hidewidth}}} -\_def \_c #1{{\_setbox0=\_hbox{#1}\_ifdim\_ht0=1ex\_accent\_cedilla #1% - \_else\_ooalign{\_unhbox0\_crcr\_hidewidth\_cedilla\_hidewidth}\_fi}} -\_def\_dots{\_relax\_ifmmode\_ldots\_else$\_math\_ldots\_thinsk$\_fi} -\_public \oalign \ooalign \d \b \c \dots ; - - \_doc ----------------------------- - The accent commands like `\v`, `\.`, `\H`, etc. are not defined. Use the - accented characters directly -- it is the best solution. But you can use the - macro \`\oldaccents` which defines accented macros. - \nl - Much more usable is to define these control sequences for other purposes. - \_cod ----------------------------- - -\_def \_oldaccents {% - \_def\`##1{{\_accent\_tgrave ##1}}% - \_def\'##1{{\_accent\_tacute ##1}}% - \_def\v##1{{\_accent\_caron ##1}}% - \_def\u##1{{\_accent\_tbreve ##1}}% - \_def\=##1{{\_accent\_macron ##1}}% - \_def\^##1{{\_accent\_circumflex ##1}}% - \_def\.##1{{\_accent\_dotaccent ##1}}% - \_def\H##1{{\_accent\_hungarumlaut ##1}}% - \_def\~##1{{\_accent\_ttilde ##1}}% - \_def\"##1{{\_accent\_dieresis ##1}}% - \_def\r##1{{\_accent\_ring ##1}}% -} -\_public \oldaccents ; - -% ec-lmr encoding (will be changed after \fontfam macro): -\_chardef\_tgrave=0 -\_chardef\_tacute=1 -\_chardef\_circumflex=2 -\_chardef\_ttilde=3 -\_chardef\_dieresis=4 -\_chardef\_hungarumlaut=5 -\_chardef\_ring=6 -\_chardef\_caron=7 -\_chardef\_tbreve=8 -\_chardef\_macron=9 -\_chardef\_dotaccent=10 -\_chardef\_cedilla=11 - -\_def \_uniaccents {% accents with Unicode - \_chardef\_tgrave="0060 - \_chardef\_tacute="00B4 - \_chardef\_circumflex="005E - \_chardef\_ttilde="02DC - \_chardef\_dieresis="00A8 - \_chardef\_hungarumlaut="02DD - \_chardef\_ring="02DA - \_chardef\_caron="02C7 - \_chardef\_tbreve="02D8 - \_chardef\_macron="00AF - \_chardef\_dotaccent="02D9 - \_chardef\_cedilla="00B8 - \_chardef\_ogonek="02DB - \_let \_uniaccents=\_relax -} - - \_doc ----------------------------- - The plain \TeX/ macros - \`\hrulefill`, \`\dotfill`, \`\rightarrowfill`, \`\leftarrowfill`, - \`\downbracefill`, \`\upbracefill`. - The last four are used in non-Unicode variants of `\overrightarrow`, - `\overleftarrow`, `\overbrace` and `\underbrace` macros, see - section~\ref[math-macros]. - \_cod ----------------------------- - -\_def \_hrulefill {\_leaders\_hrule\_hfill} -\_def \_dotfill {\_cleaders\_hbox{$\_math \_mkern1.5mu.\_mkern1.5mu$}\_hfill} -\_def \_rightarrowfill {$\_math\_smash-\_mkern-7mu% - \_cleaders\_hbox{$\_mkern-2mu\_smash-\_mkern-2mu$}\_hfill - \_mkern-7mu\_mathord\_rightarrow$} -\_def \_leftarrowfill {$\_math\_mathord\_leftarrow\_mkern-7mu% - \_cleaders\_hbox{$\_mkern-2mu\_smash-\_mkern-2mu$}\_hfill - \_mkern-7mu\_smash-$} - -\_mathchardef \_braceld="37A \_mathchardef \_bracerd="37B -\_mathchardef \_bracelu="37C \_mathchardef \_braceru="37D -\_def \_downbracefill {$\_math \_setbox0=\_hbox{$\_braceld$}% - \_braceld \_leaders\_vrule height\_ht0 depth\_zo \_hfill \_braceru - \_bracelu \_leaders\_vrule height\_ht0 depth\_zo \_hfill \_bracerd$} -\_def \_upbracefill {$\_math \_setbox0=\_hbox{$\_braceld$}% - \_bracelu \_leaders\_vrule height\_ht0 depth\_zo \_hfill \_bracerd - \_braceld \_leaders\_vrule height\_ht0 depth\_zo \_hfill \_braceru$} - -\_public \hrulefill \dotfill - \rightarrowfill \leftarrowfill \downbracefill \upbracefill ; - - \_doc ----------------------------- - The last part of plain \TeX/ macros: \`\magnification`, \`\bye`. - Note that math macros are defined in the `math-macros.opm` file - (section~\ref[math-macros]). - \_cod ----------------------------- - -\_def \_magnification {\_afterassignment \_magA \_count255 } -\_def \_magA {\_mag=\_count255 \_truedimen\_hsize \_truedimen\_vsize - \_dimen\_footins=8truein -} -% only for backward compatibility, but \margins macro is preferred. -\_public \magnification ; - -\_def \_showhyphens #1{\_setbox0=\_vbox{\_parfillskip=0pt \_hsize=\_maxdimen \_tenrm - \_pretolerance=-1 \tolerance=-1 \hbadness=0 \showboxdepth=0 \ #1}} - -\_def \_bye {\_par \_vfill \_supereject \_byehook \_end} -\_public \bye ; - -\_endcode % ------------------------------------- - diff --git a/Master/texmf-dist/tex/luatex/optex/base/prefixed.opm b/Master/texmf-dist/tex/luatex/optex/base/prefixed.opm deleted file mode 100644 index 61df791ddb0..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/prefixed.opm +++ /dev/null @@ -1,298 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \public {Prefixing and code syntax <2020-02-14>} % preloaded in format - - \_doc --------- - All \TeX/ primitives have alternative control sequence `\_hbox` `\_string`, ... - \_cod --------- - -\let\_directlua = \directlua -\_directlua { - % enable all TeX primitives with _ prefix - tex.enableprimitives('_', tex.extraprimitives('tex')) - % enable all primitives without prefixing - tex.enableprimitives('', tex.extraprimitives()) - % enable all primitives with _ prefix - tex.enableprimitives('_', tex.extraprimitives()) -} - - \_doc ------------------ - \`\ea` is useful shortcut for `\expandafter`. We recommend to use always the - private form of \`\_ea` - because there is high probability that `\ea` will be redefined by the user. - \nl - \`\public` `<sequence> <sequence> ... ;` does - `\let \<sequence> = \_<sequence>` for all sequences. - \nl - \`\private` `<sequence> <sequence> ...;` does - `\let \_<sequence> = \<sequence>` for all sequences. - \nl - \`\xargs` `<what> <sequence> <sequence> ... ;` - does `<what><sequence>` for each sequences. - \_cod ----------------- - -\_let\_ea =\_expandafter % usefull shortcut - -\_long\_def \_xargs #1#2{\_ifx #2;\_else \_ea#1\_ea#2\_ea\_xargs \_ea #1\_fi} - -\_def \_pkglabel{} -\_def \_public {\_xargs \_publicA} -\_def \_publicA #1{\_ea\_let \_ea#1\_csname _\_csstring #1\_endcsname} - -\_def \_private {\_xargs \_privateA} -\_def \_privateA #1{\_ea\_let \_csname _\_csstring #1\_endcsname =#1} - -\_public \public \private \xargs \ea ; - - \_doc ----------------------- - Each macro file should begin with \`\_codedecl` `\macro {<info>}`. - If the `\macro` is defined already then the `\endpinput` protects to read - such file more than once. Else the <info> is printed to the terminal - and the file is read.\nl - The {\`\_endcode`} is defined as `\endinput` in the `optex.ini` file. - \`\wterm` `{<text>}` prints `<text>` - to the terminal and to the `.log` file (as in plain \TeX/). - \_cod ----------------------- - -\_def \_codedecl #1#2{% - \_ifx #1\_undefined \_wterm{#2}% - \_else \_ea \_endinput \_fi -} -\_def \_wterm {\_immediate \_write16 } - -\_public \wterm ; - - \_doc ------------------------ - The `\optexversion` and `\fmtname` are defined in the `optex.ini` file. - Maybe, somebody will need a private version of these macros. - \_cod ------------------------ - -\_private \optexversion \fmtname ; - - \_doc ----------------------------- - The `\_mathsbon` and `\_mathsboff` are defined in `math-macros.opm` file. - Now, we define the macros - \`\_namespace` `{<pkg label>}`, \`\_resetnamespace` `{<pkg label>}`, \`\_endnamespace`, - \`\_nspublic` and \`\_nsprivate` - for package writers, see section~\ref[pkg-namespace].{\hbadness=2200\par} - \_cod ----------------------------- - -\_def \_pkglabel{} -\_def\_namespace #1{% - \_ifcsname namesp:#1\_endcsname \_errmessage - {The name space "#1" is used already, it cannot be used twice}% - \_endinput - \_else \_resetnamespace{#1}\_fi -} -\_def\_resetnamespace #1{% - \_ea \_gdef \_csname namesp:#1\_endcsname {}% - \_gdef \_pkglabel{_#1}% - \_directlua{ - callback.add_to_callback("process_input_buffer", - function (str) - return string.gsub(str, "\_nbb[.]([a-zA-Z])", "\_nbb _#1_\_pcent 1") - end, "_namespace") - }% -} -\_def\_endnamespace {% - \_directlua{ callback.remove_from_callback("process_input_buffer", "_namespace") }% - \_gdef \_pkglabel{}% -} - -\_def \_nspublic {\_xargs \_nspublicA} -\_def \_nspublicA #1{% - \_unless\_ifx #1\_undefined - \_opwarning{\_ea\_ignoreit\_pkglabel\_space redefines the meaning of \_string#1}\_fi - \_ea\_let \_ea#1\_csname \_pkglabel _\_csstring #1\_endcsname} - -\_def \_nsprivate {\_xargs \_nsprivateA} -\_def \_nsprivateA #1{\_ea\_let \_csname \_pkglabel _\_csstring #1\_endcsname =#1} - - -\_endcode %---------------------------------------------------- - - -\sec[prefixed] Concept of namespaces of control sequences - -\secc Prefixing internal control sequences - -All control sequences used in \OpTeX/ are used and defined with `_` prefix. -The user can be sure that when he/she does `\def\foo` then internal macros of -\OpTeX/ nor \TeX/ primitives will be not damaged. For example -`\def\if{...}` will not damage macros because \OpTeX/'s macros -are using `\_if` instead of `\if`. - -All \TeX/ primitives are initialized with two representative control -sequences: `\word` and `\_word`, for example `\hbox` and `\_hbox`. -The first alternative is reserved for users or such control sequences -can be re-defined by a user. - -\OpTeX/ sets the character `_` as the letter, so it can be used in -control sequences. When a control sequence begins with this character -then it means that it is a primitive or it is used in \OpTeX/ macros as -internal. User can redefine such prefixed control sequence only -if he/she explicitly know what happens. - -We never change catcode of `_`, so internal macros can be -redefined by user without problems if it is desired. We need not -something like `\makealetter` from \LaTeX/. - -\OpTeX/ defines all new macros as prefixed. For public usage of such macros, -we need to set non-prefixed version. This is done by - -\begtt \catcode`\<=13 -\public <list of control sequences> ; -\endtt - -For example \^`\public`` \foo \bar ;` does `\let\foo=\_foo`, `\let\bar=\_bar`. - -At the end of each code segment in \OpTeX/, the `\_public` macro is used. You -can see, what macros are defined for public usage in this code segment. - -The macro \^`\private` does a reverse job to `\public` with the same syntax. -For example `\private \foo \bar ;` does `\let\_foo=\foo`, `\let\_bar=\bar`. -This should be used when an unprefixed variant of a control sequence is declared -already but we need the prefixed variant too. - -In this documentation: if both variants of a control sequence are declared -(prefixed and unprefixed), then the accompanying text mentions only -the unprefixed variant. The code typically defines the prefixed variant -and then the \^`\public` (or `\_public`) macro is used. - -\secc Namespace of control sequences for users - -Users can define or declare any control sequence with a name without any `_`. -This does not make any problem. Only one exception is the reserved control -sequence `\par`. It is generated by tokenizer (at empty lines) -and used as internal in \TeX/. - -User can define or declare control sequences with `_` character, for -example `\my_control_sequence`, but with the following exceptions: - -\begitems -* Control sequences which begin with `_` are reserved for \TeX/ primitives, - \OpTeX/ internal macros and packages internal macros. -* Control sequences (terminated by non-letter) in the form - `\<word>_` or `\<word>_<one-letter>`, where - <word> is a sequence of letters, are inaccessible, because they - are interpreted as `\<word>` followed by `_` or as `\<word>` followed by - `_<one-letter>`. This is important for writing math, for example: -\begtt \adef-{_} - \int-a^b ... is interpreted as \int _a^b - \max-M ... is interpreted as \max _M - \alpha-{ij} ... is interpreted as \alpha _{ij} -\endtt - This feature is implemented using lua code at input processor level, see - the section~\ref[math-macros] for more details. You can deactivate this feature by - \^`\mathsboff`. After this, you can still write - `$`$\int$`_a^b$` (Unicode) or `$\int _a^b$` % $∫_a^b$ (Unicode) or $\int _a^b$ - without problems but `\int``_a^b` yields to undefined control sequence - `\int``_a`. You can activate this feature again by \^`\mathsbon`. The - effect will take shape from next line read from input file. -* Control sequences in the form `\_<pkg>_<word>` is intended for package - writers as internal macros for a package with `<pkg>` identifier, - see section~\ref[pkg-namespace]. -\enditems - -The single-letter control sequences like `\%`, `\$`, `\^` etc. are not used -in internal macros. Users can redefine them, but (of course) some classical -features can be lost (printing percent character by `\%` for example). - -\secc Macro files syntax - -Each segment of \OpTeX/ macros is stored in one file with `.opm` extension -(means OPtex Macros). Your local macros should be in a normal `*.tex` file. - -The code in macro files starts by \^`\_codedecl` and ends by \^`\_endcode`. -The \^`\_endcode` is equivalent for `\endinput`, so documentation can follow. -The \^`\_codedecl` has syntax: - -\begtt -\_codedecl \sequence {Name <version>} -\endtt - -If the mentioned `\sequence` is defined, then \^`\_codedecl` does the same as -`\endinput`: this protects from reading the file twice. We suppose, that -`\sequence` is defined in the macro file. - -It is possible to use the \^`\_doc` ... \^`\_cod` pair between the macro lines. -The documentation text should be here. It is ignored when macros are read -but it can be printed using `doc.opm` macros like in this documentation. - - -\secc[pkg-namespace] Name spaces for package writers - -Package writer should use internal names in the form `\_<pgk>_<sequence>`, -where `<pkg>` is a package label. For example: -`\_qr_utfstring` from `qrcode.opm` package. - -The package writer needs not to write repeatedly `\_pkg_foo` `\_pkg_bar` -etc.\ again and again in the macro file.\fnote -{We have not adopted the idea from expl3 language:)} -When the \^`\_namespace` `{<pkg>}` -is declared at the beginning of the macro file then all occurrences of -`\.foo` will be replaced by `\_<pkg>_foo` at the input processor level. -The macro writer can write (and backward can read his/her code) simply with -`\.foo`, `\.bar` control sequences and `\_<pkg>_foo`, `\_<pkg>_bar` -control sequences are processed internally. -The scope of the \^`\_namespace` command ends at the \^`\_endnamespace` command -or when another \^`\_namespace` is used. This command checks -if the same package label is not declared by the \^`\_namespace` twice. - -The \^`\_nspublic` macro does `\let\foo = \_<pkg>_foo` when -\^`\_namespace{<pkg>}` is declared. Moreover, it prints a warning if `\foo` is -defined already. The \^`\_nsprivate` macro does reverse -operation to it without warnings. Example: you can define `\def\.macro{...}` and then -set it to the user name space by `\_nspublic \macro;`. - -Don't load other packages (which are using their own namespace) inside your -namespace. Do load them before your \^`\_namespace`~`{<pkg>}` is -initialized. Or close your namespace by \^`\_endnamespace` and open it again -(after other packages are loaded) by \^`\_resetnamespace`~`{<pkg>}`. - -If the package writer needs to declare a control -sequence by \^`\newif`, then there is an exception of the rule described above. Use -\^`\_newifi\_if<pkg>_bar`, for example `\_newifi\_ifqr_incorner`. -Then the control sequences `\_qr_incornertrue` and -`\_qr_incornerfalse` can be used (or the sequences `\.incornertrue` -and `\.incornerfalse` when `\_namespace{qr}` is used). - - -\secc Summary about rules for external macro files published for \OpTeX/ - -If you are writing a macro file that is intended to be published for -\OpTeX/, then you are greatly welcome. You should follow these rules: - -\begitems -* Don't use control sequences from the user namespace in the macro - bodies if there is not explicit and documented reason to do this. -* Don't declare control sequences in the user namespace if there are not - explicit and documented reasons to do this. -* Use control sequences from \OpTeX/ and primitive namespace - in read-only mode, if there is not an explicit and documented reason to - redefine them. -* Use `\_<pkg>_<name>` for your internal macros or `\.<name>` if the - \^`\_namespace{<pkg>}` is declared. See section~\ref[pkg-namespace]. -* Use \^`\load` (or better: `\_load`) for loading more external macros - if you need them. Don't use `\_input` explicitly in such cases. - The reason is: the external macro file is not loaded - twice if another macro or the user needs it explicitly too. -* Use \^`\_codedecl` as your first command in the macro file and - \^`\_endcode` to close the text of macros. -* Use \^`\_doc` ... \^`\_cod` pairs for documenting the code pieces and/or write - more documentation after the \^`\_endcode` command. -\enditems - -If the macro file accepts these recommendations then it should be -named by `<filename>.opm` where `<filename>` differs from file names -used directly in \OpTeX/ and from other published macros. -This extension `opm` has precedence before `.tex` when -the \^`\load` macro is used. - -The `qrcode.opm` is the first example of how an external macro file for \OpTeX/ -can look like. - -\endinput - -2021-02-15 \_expandafter -> \_ea in \_codedecl -2020-02-14 released diff --git a/Master/texmf-dist/tex/luatex/optex/base/print-unimath.opm b/Master/texmf-dist/tex/luatex/optex/base/print-unimath.opm deleted file mode 100644 index 2b1a07f30ab..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/print-unimath.opm +++ /dev/null @@ -1,56 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \_undefined {Printing Unicode-math table \string<2020-06-08>} - -\_begingroup - \_def\UnicodeMathSymbol#1#2#3#4{% - \_ifnum#1>"10000 \_endinput \_else \_printmathsymbol{#1}{#2}{#3}{#4}\_fi - } - \_def\UnicodeMathSymbolA#1#2#3#4{% - \_ifnum#1>"10000 \_printmathsymbol{#1}{#2}{#3}{#4}\_fi - } - \_def\_printmathsymbol#1#2#3#4{% - \_hbox{\_hbox to2em{$#2{}$\_hss}\_hbox to3em - {\small\_printop#3\_hss}{\_tt\_string#2\_trycs{_eq:\_string#2}{}}} - } - \_def\_eq#1#2{\_sdef{_eq:\_string#2}{=\_string#1}} - \_eq \diamond\smwhtdiamond \_eq \bullet\smblkcircle \_eq \circ\vysmwhtcircle - \_eq \bigcirc\mdlgwhtcircle \_eq \to\rightarrow \_eq \le\leq - \_eq \ge\geq \_eq \neq\ne \_eq \emptyset\varnothing \_eq \hbar\hslash - \_eq \land\wedge \_eq \lor\vee \_eq \owns\ni \_eq \gets\leftarrow - \_eq \mathring\ocirc \_eq \lnot\neg \_eq \backepsilon\upbackepsilon - \_eq \eth\matheth \_eq \dbkarow\dbkarrow \_eq \drbkarow\drbkarrow - \_eq \hksearow\hksearrow \_eq \hkswarow\hkswarrow - - \_tracinglostchars=0 - \_fontdef\small{\_setfontsize{at5pt}\_rm} - \_def\_printop{\_def\mathop{Op}} - \_def\mathalpha{Alph}\_def\mathord{Ord}\_def\mathbin{Bin}\_def\mathrel{Rel} - \_def\mathopen{Open}\_def\mathclose{Close}\_def\mathpunct{Punct}\_def\mathfence{Fence} - \_def\mathaccent{Acc}\_def\mathaccentwide{Accw}\_def\mathbotaccentwide{AccBw} - \_def\mathbotaccent{AccB}\_def\mathaccentoverlay{AccO} - \_def\mathover{Over}\_def\mathunder{Under} - \_typosize[7.5/9]\_normalmath \_everymath={} - - Codes U+00000 \_dots\ U+10000 - \_begmulti 3 - \_input unimath-table.opm - \_endmulti - - \_medskip\_goodbreak - Codes U+10001 \_dots\ U+1EEF1 \_let\UnicodeMathSymbol=\UnicodeMathSymbolA - \_begmulti 4 - \_input unimath-table.opm - \_endmulti -\_endgroup - -\_endcode - -This file can be used for testing your Unicode-math font -and/or for printing \TeX/ sequences which can be used in math. - -Load Unicode math font first (for example by `\fontfam[termes]` or by -`\loadmath{<math-font>}`) and then you -can do `\input print-unimath.opm`. The big table with all math symbols is printed. - -\_endinput diff --git a/Master/texmf-dist/tex/luatex/optex/base/ref-file.opm b/Master/texmf-dist/tex/luatex/optex/base/ref-file.opm deleted file mode 100644 index d594bf88c04..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/ref-file.opm +++ /dev/null @@ -1,141 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \openref {File for references <2021-02-05>} % preloaded in format - - \_doc -------------------------- - The \`\_inputref` macro is used in `\everyjob`. It reads `\jobname.ref` file - if it exists. After the file is read then it is removed and opened to write - a new contents to this file. - \_cod -------------------------- - -\_newwrite\_reffile - -\_def\_inputref {% - \_isfile{\_jobname.ref}\_iftrue - \_input {\_jobname.ref} - \_gfnotenum=0 \_lfnotenum=0 \_mnotenum=0 - \_openrefA{\_string\_inputref}% - \_fi -} - - \_doc -------------------------- - If the file does not exist then it is not created by default. It means that if you - process a document without any forward references then no `\jobname.ref` - file is created because it is unusable. The \^`\_wref` macro is a dummy in - this case. - \_cod -------------------------- - -\_def\_wrefrelax#1#2{} -\_let\_wref=\_wrefrelax - - \_doc --------------------- - If a macro needs to create and to use `.ref` file then such macro must use - \`\openref`. When the file is created (using internal \`\_openrefA`) then - the \`\_wref` `\<macro>{<data>}` is redefined in order to - save the line `\<macro><data>` to the `.ref` file using asynchronous - `\write` primitive. Finally, the `\_openref` destroys itself, because we - need not open the file again.\nl - The `\_wref``<csname>{<params>}` does exactly `\write\_reffile{\string<csname><params>}` - in this case and \`\_ewref``<csname>{<params>}` does - `\write\_reffile{\string<csname><expanded-params>}`. - \_cod --------------------- - -\_def\_openref {% - \_ifx \_wref\_wrefrelax \_openrefA{\_string\openref}\_fi - \_gdef\_openref{}% -} -\_def\_openrefA #1{% - \_immediate\_openout\_reffile="\_jobname.ref"\_relax - \_gdef\_wref ##1##2{\_write\_reffile{\_bslash\_csstring##1##2}}% - \_immediate\_write\_reffile {\_pcent\_pcent\_space OPTeX <\_optexversion> - REF file (#1)}% - \_immediate\_wref \Xrefversion{{\_REFversion}}% -} -\_def\_ewref #1#2{\_edef\_ewrefA{#2}\_ea\_wref\_ea#1\_ea{\_ewrefA}} -\_def\openref{\_openref} - - \_doc ---------------------- - We are using the convention that the macros used in `.ref` file are named - `\_X<foo>`. If there is a new version of \OpTeX/ with a different collection - of such macros then we don't want to read the `.ref` files produced by an - old version of \OpTeX/ or by OPmac. So the first line of `.ref` file is in - the form - \begtt \catcode`\<=13 - \Xrefversion{<version>} - \endtt - We can check the version compatibility by this macro. - Because OPmac does not understand `\_Xrefversion` we use - \`\Xrefversion` (with a different number of `<version>` form OPmac) here. - The result: OPmac skips the `.ref` files produced by \OpTeX/ and vice - versa. - \_cod ---------------------- - -\_def\_REFversion{5} % actual version of .ref files in OpTeX -\_def\_Xrefversion#1{\_ifnum #1=\_REFversion\_relax \_else \_endinput \_fi} -\_public \Xrefversion ; % we want to ignore .ref files generated by OPmac - - \_doc ----------------------- - You cannot define your special `.ref` macros before `.ref` file is read - because it is read in `\everyjob`. But you can define such macros using - \`\refdecl``{<definitions of your ref macros>}`. - This command sends to `.ref` file your `<definitions of your ref macros>` - immediately. Next lines in `.ref` file should include our macros. Example - from CTUstyle2: - \begtt - \refdecl{% - \def\totlist{} \def\toflist{}^^J - \def\Xtab#1#2#3{\addto\totlist{\totline{#1}{#2}{#3}}}^^J - \def\Xfig#1#2#3{\addto\toflist{\tofline{#1}{#2}{#3}}} - } - \endtt - We must read `<definition of your ref macros>` when the catcode of `#` is 12 - because we needn't duplicate each `#` in the `.ref` file. - \_cod \_fin ----------------- - -\_def\_refdecl{\_bgroup \_catcode`\#=12 \_refdeclA} -\_def\_refdeclA #1{\egroup\_openref - \_immediate\_write\_reffile {\_pcent\_space \_string \refdecl:}% - \_immediate\_write\_reffile {\_detokenize{#1}}% -} -\_public \refdecl ; - -\_endcode % ================================================ - - -The `.ref` file has the name `\jobname.ref` and -it saves information about references, TOC lines, etc. -All data needed in next \TeX/ run are saved here. -\OpTeX/ reads this file at the beginning of the document -(using `\everyjob`) if such file exists. -The `.ref` file looks like: - -\begtt \catcode`\<=13 -\Xrefversion{<ref-version>} -\_Xpage{<gpageno>}{<pageno>} -\_Xtoc{<level>}{<type>}{<text>}{}<title> -\_Xlabel{<label>}{<text>} -\_Xlabel{<label>}{<text>} -... -\_Xpage{<gpageno>}{<pageno>} -\_Xlabel{<label>}{<text>} -... -\endtt -% -where <gpageno> is internal page number globally numbered from one and -`<pageno>` is a page number (`\the\pageno`) used in pagination (they may differ). -Each page begins with \^`\_Xpage`. -The `<label>` is a label used by user in `\label[<label>]` and `<text>` is a -text which should be referenced (the number of section or table, for -example `2.3.14`). The `<title>` is the title of the chapter (`<level>`=1, -`<type>`=`chap`), section (`<level>`=2, `<type>`=`sec`), subsection -(`<level>`=3, `<type>`=`secc`). The \^`\_Xpage` is written at the beginning of each -page, the `\_Xtoc` is written when chapter or section or subsection title -exists on the page and `\_Xlabel` when labeled object prefixed by -`\label[<label>]` exists on the page. - -The `.ref` file is read when the processing of the document starts using -`\everyjob`. It is read, removed, and opened to writing immediately. -But the `.ref` file should be missing. If none forward references are needed -in the document then `.ref` file is not created. For example, you only want -to test a simple plain \TeX/ macro, you create `test.tex` file, you do -`optex test` and you don't need to see an empty `test.ref` file in your directory. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/references.opm b/Master/texmf-dist/tex/luatex/optex/base/references.opm deleted file mode 100644 index 03c8f6955ca..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/references.opm +++ /dev/null @@ -1,94 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \ref {References <2020-03-03>} % preloaded in format - - \_doc ---------------------------- - \`\_Xpage` `{<gpageno>}{<pageno>}` saves the parameter pair into \`\_currpage`. - Resets `\_lfnotenum`; it is used if footnotes are numbered from one at each page. - \_cod ---------------------------- - -\_def\_Xpage#1#2{\_def\_currpage{{#1}{#2}}\_lfnotenum=0 } - - \_doc ---------------------------- - Counter for the number of unresolved references \`\_unresolvedrefs`. - \_cod ---------------------------- - -\_newcount\_unresolvedrefs -\_unresolvedrefs=0 - - \_doc ---------------------------- - \`\_Xlabel` `{<label>}{<text>}` saves the <text> to `\_lab:<label>` and saves - `[pg:<gpageno>]{<pageno>}` to `\_pgref:<label>`. - \_cod ---------------------------- - -\_def\_Xlabel#1#2{\_sdef{_lab:#1}{#2}\_sxdef{_pgref:#1}{\_ea\_bracketspg\_currpage}} -\_def\_bracketspg#1#2{[pg:#1]{#2}} - - \_doc ---------------------------- - \`\label``[<label>]` saves the decalred label to `\_lastlabel` and - \`\wlabel``{<text>}` uses the `\_lastlabel` and activates - `\_wref\_Xlabel{<label>}{<text>}`. - \_cod ---------------------------- - -\_def\_label[#1]{\_isempty{#1}\_iftrue \_global\_let \_lastlabel=\_undefined - \_else \_isdefined{l0:#1}% - \_iftrue \_opwarning{duplicated label [#1], ignored}\_else \_xdef\_lastlabel{#1}\_fi - \_fi \_ignorespaces -} -\_def\_wlabel#1{% - \_ifx\_lastlabel\_undefined \_else - \_dest[ref:\_lastlabel]% - \_printlabel\_lastlabel - \_ewref \_Xlabel {{\_lastlabel}{#1}}% - \_sxdef{_lab:\_lastlabel}{#1}\_sxdef{l0:\_lastlabel}{}% - \_global\_let\_lastlabel=\_undefined - \_fi -} -\_public \label \wlabel ; - - \_doc ---------------------------- - \`\ref``[<label>]` uses saved `\_lab:<label>` and prints (linked) `<text>`. - If the reference is backward then we know `\lab:<label>` without any need - to read REF file. On the other hand, if the reference is forwarded, then we - doesn't know `\_lab:<label>` in the first run of \TeX/ and we print a warning and - do `\_openref`. - \nl - \`\pgref``[<label>]` uses `{<gpageno>}{<pageno>}` from `\_pgref:<label>` and - prints (linked) `<pageno>` using `\_ilink` macro. - \_cod ---------------------------- - -\_def\_ref[#1]{\_isdefined{_lab:#1}% - \_iftrue \_ilink[ref:#1]{\_csname _lab:#1\_endcsname}% - \_else ??\_opwarning{label [#1] unknown. Try to TeX me again}% - \_incr\_unresolvedrefs \_openref - \_fi -} -\_def\_pgref[#1]{\_isdefined{_pgref:#1}% - \_iftrue \_ea\_ea\_ea\_ilink \_csname _pgref:#1\_endcsname - \_else ??\_opwarning{pg-label [#1] unknown. Try to TeX me again}% - \_incr\_unresolvedrefs \_openref - \_fi -} -\_public \ref \pgref ; - - \_doc ----------------------------- - Default \`\_printlabel` is empty macro (labels are not printed). - The \`\showlabels` redefines it as box with zero dimensions and - with left lapped `[<label>]` in blue 10pt `\tt` font shifted up by 1.7ex. - \_cod ----------------------------- - -\_def\_printlabel#1{} -\_def\_showlabels {% - \_def\_printlabel##1{\_vbox to\_zo{\_vss\_llap{\_labelfont[##1]}\_kern1.7ex}}% - \_fontdef\_labelfont{\_setfontsize{at10pt}\setfontcolor{blue}\_tt} -} -\_public \showlabels ; - -\_endcode %------------------------------------------ - - -If the references are \"forward" (i.~e. the `\ref` is used first, the destination -is created later) or if the reference text is page number then we must read -`.ref` file first in order to get appropriate information. -See section \ref[ref-file] for more information about `.ref` file concept. - diff --git a/Master/texmf-dist/tex/luatex/optex/base/sections.opm b/Master/texmf-dist/tex/luatex/optex/base/sections.opm deleted file mode 100644 index 39759962bf8..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/sections.opm +++ /dev/null @@ -1,469 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \chap {Titles, chapters, sections, subsections <2021-03-03>} % preloaded in format - - \_doc --------------------------- - We are using scaled fonts for titles - \`\_titfont`, \`\_chapfont`, \`\_secfont` and \`\_seccfont`. - They are scaled from main fonts size - of the document, which is declared by first `\typosize[<fo-size>/<b-size>]` - command. - \_cod --------------------------- - -\_def \_titfont {\_scalemain\_typoscale[\_magstep4/\_magstep5]\_boldify} -\_def \_chapfont {\_scalemain\_typoscale[\_magstep3/\_magstep3]\_boldify} -\_def \_secfont {\_scalemain\_typoscale[\_magstep2/\_magstep2]\_boldify} -\_def \_seccfont {\_scalemain\_typoscale[\_magstep1/\_magstep1]\_boldify} - - \_doc --------------------------- - The \`\tit` macro is defined using \^`\scantoeol` and \`\_printtit`. - It means that the parameter is - separated by end of line and inline verbatim is allowed. The same - principle is used in the \^`\chap`, \^`\sec`, and \^`\secc` macros. - \_cod --------------------------- - -\_def\_printtit #1{\_vglue\_titskip - {\_leftskip=0pt plus1fill \_rightskip=\_leftskip % centering - \_titfont \_noindent \_scantextokens{#1}\_par}% - \_nobreak\_bigskip -} -\_def\_tit{\_scantoeol\_printtit} - -\_public \tit ; - - \_doc --------------------------- - You can re-define \`\_printchap`, \`\_printsec` or \`\_printsecc` macros if - another design of section titles is needed. These macros get the - `<title>` text in its parameter. The common recommendations for these macros are: - \begitems - * Use \^`\_abovetitle``{<penaltyA>}{<skipA>}` and \^`\_belowtitle``{<skipB>}` - for inserting vertical material above and below the section title. - The arguments of these macros are normally used, i.\,e.\ \^`\_abovetitle` - inserts `<penaltyA><skipA>` and \^`\_belowtitle` inserts `<skipB>`. - But there is an - exception: if \^`\_belowtitle``{<skipB>}` is immediately followed by - \^`\_abovetitle``{<penaltyA>}{<skipA>}` (for example section title is - immediately followed by subsection title), then only `<skipA>` is generated, - i.\,e.\ `<skipB><penaltyA><skipA>` is reduced only to `<skipA>`. - The reason for such behavior: we don't want to duplicate vertical skip - and we don't want to use the negative penalty in such cases. - Moreover, \^`\_abovetitle``{<penaltyA>}{<skipA>}` takes previous whatever - vertical skip (other than from `\_belowtitle`) and generates only - greater from this pair of skips. It means that `<whatever-skip><penaltyA><skipA>` - is transformed to `<penaltyA>`max(`<whatever-skip><skipA>`). - The reason for such behavior: we don't want to - duplicate vertical skips (from `\_belowlistskip`, for example) above the title. - * Use \^`\_printrefnum``[<pre>@<post>]` in horizontal mode. It prints - `<pre><ref-num><post>`. The `<ref-num>` is \^`\_thechapnum` or \^`\_thesecnum` - or \^`\_theseccnum` depending on what type o title is processed. - If \^`\nonum` prefix is used then \^`\_printrefnum` prints nothing. - The macro \^`\_printrefnum` does more work: it creates destination of hyperlinks - (if \^`\hyperlinks``{}{}` is used) and saves references from the label (if - \^`\label``[<label>]` precedes) and saves references for the table of contents - (if \^`\maketoc` is used). - * Use \^`\nbpar` for closing the paragraph for printing title. This - command inserts `\_nobreak` between each line of such paragraph, so - the title cannot be broken into more pages. - * You can use \^`\_firstnoindent` in order to the first paragraph after - the title is not indented. - \enditems - \_cod --------------------------- - -\_def\_printchap #1{\_vfill\_supereject - \_vglue\_medskipamount % shifted by topkip+\medskipamount - {\_chapfont \_noindent \_mtext{chap} \_printrefnum[@]\_par - \_nobreak\_smallskip - \_noindent \_raggedright #1\_nbpar}\_mark{}% - \_nobreak \_belowtitle{\_bigskip}% - \_firstnoindent -} -\_def\_printsec#1{\_par - \_abovetitle{\_penalty-400}\_bigskip - {\_secfont \_noindent \_raggedright \_printrefnum[@\_quad]#1\_nbpar}\_insertmark{#1}% - \_nobreak \_belowtitle{\_medskip}% - \_firstnoindent -} -\_def\_printsecc#1{\_par - \_abovetitle{\_penalty-200}{\_medskip\_smallskip} - {\_seccfont \_noindent \_raggedright \_printrefnum[@\_quad]#1\_nbpar}% - \_nobreak \_belowtitle{\_medskip}% - \_firstnoindent -} - - \_doc -------------------------- - The \`\_sectionlevel` is the level of the printed section: - \begitems - * `\_sectionlevel=0` -- reserved for parts of the book (unused by default) - * `\_sectionlevel=1` -- chapters (used in `\chap`) - * `\_sectionlevel=2` -- sections (used in `\sec`) - * `\_sectionlevel=3` -- subsections (used in `\secc`) - * `\_sectionlevel=4` -- subsubsections (unused by default, see the - \ulink[http://petr.olsak.net/optex/optex-tricks.html\#seccc]{\OpTeX/ trick 0033}) - \enditems - \_cod -------------------------- - -\_newcount\_sectionlevel -\_def \_secinfo {\_ifcase \_sectionlevel - part\_or chap\_or sec\_or secc\_or seccc\_fi -} - - \_doc -------------------------- - The \`\_chapx` initializes counters used in chapters, - the \`\_secx` initializes counters in sections - and \`\_seccx` initializes counters in subsections. - If you have more types of numbered objects in your document then you can - declare appropriate counters and do `\addto\_chapx{\yourcounter=0 }` - for example. If you have another concept of numbering objects used in your - document, you can re-define these macros. All settings here are global - because it is used by `{\_globaldefs=1 \_chapx}`. - - Default concept: Tables, figures, and display maths are numbered - from one in each section -- subsections don't reset these counters. - Footnotes declared by \^`\fnotenumchapters` are numbered in each chapter - from one. - - The `\_the*` macros - \`\_thechapnum`, \`\_thesecnum`, \`\_theseccnum`, - \`\_thetnum`, \`\_thefnum` and \`\_thednum` - include the format of numbers used when the object - is printing. If chapter is never used in the document then `\_chapnum=0` - and \`\_othe``\_chapnum.` expands to empty. Sections have numbers <num> and - subsections <num>.<num>. On the other hand, if chapter is used in the - document then `\_chapnum>0` and sections have numbers` <num>.<num>` - and subsections have numbers `<num>.<num>.<num>`. - \_cod -------------------------- - -\_newcount \_chapnum % chapters -\_newcount \_secnum % sections -\_newcount \_seccnum % subsections -\_newcount \_tnum % table numbers -\_newcount \_fnum % figure numbers -\_newcount \_dnum % numbered display maths - -\_def \_chapx {\_secx \_secnum=0 \_lfnotenum=0 } -\_def \_secx {\_seccx \_seccnum=0 \_tnum=0 \_fnum=0 \_dnum=0 \_resetABCDE } -\_def \_seccx {} - -\_def \_thechapnum {\_the\_chapnum} -\_def \_thesecnum {\_othe\_chapnum.\_the\_secnum} -\_def \_theseccnum {\_othe\_chapnum.\_the\_secnum.\_the\_seccnum} -\_def \_thetnum {\_othe\_chapnum.\_othe\_secnum.\_the\_tnum} -\_def \_thefnum {\_othe\_chapnum.\_othe\_secnum.\_the\_fnum} -\_def \_thednum {(\_the\_dnum)} - -\_def\_othe #1.{\_ifnum#1>0 \_the#1.\_fi} - - \_doc ---------------------------- - The \`\notoc` and \`\nonum` prefixes are implemented by - internal `\_ifnotoc` and `\_ifnonum`. They are reset - after each chapter/section/subsection by the \`\_resetnonumnotoc` macro. - \_cod ---------------------------- - -\_newifi \_ifnotoc \_notocfalse \_def\_notoc {\_global\_notoctrue} -\_newifi \_ifnonum \_nonumfalse \_def\_nonum {\_global\_nonumtrue} -\_def \_resetnonumnotoc{\_global\_notocfalse \_global\_nonumfalse} -\_public \notoc \nonum ; - - \_doc ---------------------------- - The \`\chap`, \`\sec`, and \`\secc` macros are implemented here. - The \`\_inchap`, \`\_insec` and \`\_insecc` macros do the real work, - First, we read the optional parameter `[<label>]`, if it exists. - The `\chap`, `\sec` and `\secc` macro reads its parameter using - \^`\scantoeol`. This causes that they cannot be used inside other macros. - Use \`\_inchap`, \`\_insec`, and \`\_insecc` macros directly in such case. - \_cod ---------------------------- - -\_optdef\_chap[]{\_trylabel \_scantoeol\_inchap} -\_optdef\_sec []{\_trylabel \_scantoeol\_insec} -\_optdef\_secc[]{\_trylabel \_scantoeol\_insecc} -\_def\_trylabel{\_istoksempty\_opt\_iffalse \_label[\_the\_opt]\_fi} - -\_def\_inchap #1{\_par \_sectionlevel=1 - \_def \_savedtitle {#1}% saved to .ref file - \_ifnonum \_else {\_globaldefs=1 \_incr\_chapnum \_chapx}\_fi - \_edef \_therefnum {\_ifnonum \_space \_else \_thechapnum \_fi}% - \_printchap{\_scantextokens{#1}}% - \_resetnonumnotoc -} -\_def\_insec #1{\_par \_sectionlevel=2 - \_def \_savedtitle {#1}% saved to .ref file - \_ifnonum \_else {\_globaldefs=1 \_incr\_secnum \_secx}\_fi - \_edef \_therefnum {\_ifnonum \_space \_else \_thesecnum \_fi}% - \_printsec{\_scantextokens{#1}}% - \_resetnonumnotoc -} -\_def\_insecc #1{\_par \_sectionlevel=3 - \_def \_savedtitle {#1}% saved to .ref file - \_ifnonum \_else {\_globaldefs=1 \_incr\_seccnum \_seccx}\_fi - \_edef \_therefnum {\_ifnonum \_space \_else \_theseccnum \_fi}% - \_printsecc{\_scantextokens{#1}}% - \_resetnonumnotoc -} -\_public \chap \sec \secc ; - - \_doc ---------------------------- - The \`\_printrefnum``[<pre>@<post>]` macro is used in `\_print*` macros. - - Note that the `<tite-text>` is `\detokenize`d before `\_wref`, so the - problem of \"fragile macros" from old \LaTeX/ never occurs. - This fourth parameter is not delimited by `{...}` but by end of line. - This gives possibility to have unbalanced braces in inline verbatim in titles. - \_cod ---------------------------- - -\_def \_printrefnum [#1@#2]{\_leavevmode % we must be in horizontal mode - \_ifnonum \_else #1\_therefnum #2\_fi - \_wlabel \_therefnum % references, if `\label[<label>]` is declared - \_ifnotoc \_else \_incr \_tocrefnum - \_dest[toc:\_the\_tocrefnum]% - \_ewref\_Xtoc{{\_the\_sectionlevel}{\_secinfo}% - {\_therefnum}{\_theoutline}\_detokenize\_ea{\_savedtitle}}% - \_fi - \_gdef\_theoutline{}% -} - - \_doc ----------------------------- - \`\thisoutline``{<text>}` saves text to the \`\_theoutline` macro. - \^`\_printrefnum` uses it and removes it. - \_cod ----------------------------- - -\_def\_theoutline{} -\_def\_thisoutline#1{\_gdef\_theoutline{#1}} -\_public \thisoutline ; - - \_doc ----------------------------- - The \`\_abovetitle``{<penaltyA>}{<skipA>}` and \`\_belowtitle``{<skipB>}` pair - communicates using a special penalty 11333 in vertical mode. - The `\_belowtitle` puts the vertical skip (its value is saved in - `\_savedtitleskip`) followed by this special penalty. - The `\_abovetitle` reads `\lastpenalty` and if it has this special value - then it removes the skip used before and doesn't use the parameter. - The `\abovetitle` creates `<skipA>` only if whatever previous skip is less - or equal than `<skipA>`. We must save `<whatever-skip>`, remove it, - create `<penaltyA>` (if `\_belowtitle` does not precede) and create - <whatever-skip> or `<skipA>` depending on what is greater. - The amount of `<skipA>` is measured using `\setbox0=\vbox`. - \_cod ----------------------------- - -\_newskip \_savedtitleskip -\_newskip \_savedlastskip -\_def\_abovetitle #1#2{\_savedlastskip=\_lastskip % <whatever-skip> - \_ifdim\_lastskip>\_zo \_vskip-\_lastskip \_fi - \_ifnum\_lastpenalty=11333 \_vskip-\_savedtitleskip \_else #1\_fi - \_ifdim\_savedlastskip>\_zo \_setbox0=\_vbox{#2\_global\_tmpdim=\_lastskip}% - \_else \_tmpdim=\_maxdimen \_fi - \_ifdim\_savedlastskip>\_tmpdim \vskip\_savedlastskip \_else #2\_fi -} -\_def\_belowtitle #1{#1\_global\_savedtitleskip=\_lastskip \_penalty11333 } - - \_doc ----------------------------- - \`\nbpar` sets `\interlinepenaty` value. - \`\nl` is \"new line" in the text (or titles), but space in toc or headlines or outlines. - \_cod ----------------------------- - -\_def\_nbpar{{\_interlinepenalty=10000\_endgraf}} - -\_protected\_def\_nl{\_unskip\_hfil\_break} -\_regmacro {\_def\_nl{\_unskip\_space}} {\_def\_nl{\_unskip\_space}} {\_def\_nl{ }} -\_regmacro {\_def\nl{\_unskip\_space}} {\_def\nl{\_unskip\_space}} {\_def\nl{ }} - -\_public \nbpar \nl ; - - \_doc ----------------------------- - \`\_firstnoindent` puts a material to `\everypar` in order to next - paragraph will be without indentation. It is useful after titles. - If you dislike this feature then you can say `\let\_firtnoindent=\relax`. - The \`\_wipeepar` removes the material from `\everypar`. - \_cod ----------------------------- - -\_def \_firstnoindent {\_global\_everypar={\_wipeepar \_setbox7=\_lastbox}} -\_def \_wipeepar {\_global\_everypar={}} - - \_doc ----------------------------- - The `\mark` (for running heads) is used in `\_printsection` only. We - suppose that chapters will be printed after `\vfil\break`, so users can - implement chapter titles for running headers directly by macros, no - `\mark` mechanism is needed. But sections need `\mark`s. And they can be - mixed with chapter's running heads, of course. - - The \`\_insertmark``{<title text>}` saves `\mark` in the format - `{<title-num>} {<title-text>}`, so it can be printed \"as is" in - `\headline` (see the space between them), or you can define a formating - macro with two parameters for processing these data, if you need it. - \_cod ----------------------------- - -\_def\_insertmark#1{\_mark{{\_ifnonum\_else\_therefnum\_fi} {\_unexpanded{#1}}}} - - \_doc ----------------------------- - \OpTeX/ sets `\headline={}` by default, so no running headings are printed. - You can activate the running headings by following code, for example: - \begtt - \addto\_chapx {\_edef\_runningchap {\_thechapnum: \_unexpanded\_ea{\_savedtitle}}} - \def \formathead #1#2{\isempty{#1}\iffalse #1: #2\fi} - \headline = {% - \ifodd \pageno - \hfil \ea\formathead\firstmark{}{}% - \else - Chapter: \runningchap \hfil - \fi - } - \endtt - - The \`\secl``<number> <title-text><eol>` - should be used for various levels of sections (for example, when - converting from Markdown to \OpTeX/). `\secl1` is `\chap`, `\secl2` is `\sec`, - `\secl3` is `\secc` and all more levels (for <number>$>3$) - are printed by the common \`\_seclp` macro. It declares only a simple design. - If there is a requirement to use such more levels then the book designer can - define something different here. - \_cod ----------------------------- - -\_def\_secl{\_afterassignment\_secla \_sectionlevel=} -\_def\_secla{\_ifcase\_sectionlevel - \_or\_ea\_chap\_or\_ea\_sec\_or\_ea\_secc\_else\_ea\_seclp\_fi} -\_eoldef\_seclp#1{\_par \_ifnum\_lastpenalty=0 \_removelastskip\_medskip\_fi - \_noindent{\_bf #1}\_vadjust{\_nobreak}\_nl\_ignorepars} -\_def\_ignorepars{\_isnextchar\_par{\_ignoresecond\_ignorepars}{}} - -\_public \secl ; - - \_doc ----------------------------- - The \`\caption``/<letter>` increases `\_<letter>num` counter, - edefines \`\_thecapnum` as `\_the<letter>num` and - defines \`\_thecaptitle` as language-dependent word using \^`\_mtext`, - runs the `\_everycaption<letter>` tokens register. - The group opened by `\caption` is finalized by first `\par` from - an empty line or from `\vskip` or from `\endinsert`. - The `\_printcaption<letter>` is called, it starts with - printing of the caption.\nl - The \`\cskip` macro inserts nonbreakable vertical space between the caption and - the object. - \_cod ----------------------------- - -\_def\_caption/#1{\_def\_tmpa{#1}\_nospaceafter \_capA} -\_optdef\_capA []{\_trylabel \_incaption} -\_def\_incaption {\_bgroup - \_ifcsname _\_tmpa num\_endcsname \_ea\_incr \_csname _\_tmpa num\_endcsname - \_else \_opwarning{Unknown caption /\_tmpa}\_fi - \_edef\_thecapnum {\_csname _the\_tmpa num\_endcsname}% - \_edef\_thecaptitle{\_mtext{\_tmpa}}% - \_ea\_the \_csname _everycaption\_tmpa\_endcsname - \_def\_par{\_nbpar\_egroup}\_let\par=\_par - \_cs{_printcaption\_tmpa}% -} -\_def \_cskip {\_par\_nobreak\_medskip} % space between caption and the object - -\_public \caption \cskip ; - - \_doc ----------------------------- - The \`\_printcaptiont` and \`\_printcaptionf` macros start in vertical mode. - They switch to horizontal mode and use `\_wlabel\_thecapnum` (in order to - make reference and hyperlink destination) a they can use: - \begitems - * \^`\_thecaptitle` ... expands to the word Table or Figure (depending on - the current language). - * \^`\_thecapnum` ... expands to `\the<letter>num` (caption number). - \enditems - The \`\_captionsep` inserts a separator between auto-generated - caption number and the following caption text. Default separator - is `\_enspace` but if the caption text starts with dot or colon, then - the space is not inserted. A user can wite `\caption/t: My table` - and \"{\bf Table 1.1:} My table" is printed. You can re-define - the \^`\_captionsep` macro if you want to use another separator. - \_cod ----------------------------- - -\_def \_printcaptiont {% - \_noindent \_wlabel\_thecapnum {\_bf\_thecaptitle~\_thecapnum}% - \_narrowlastlinecentered\_iindent \_futurelet\_next\_captionsep -} -\_def\_captionsep{\_ifx\_next.\_ea\_bfnext \_else\_ifx\_next:\_ea\_ea\_ea\_bfnext - \_else \_enspace \_fi\_fi} -\_def\_bfnext#1{{\_bf#1}} -\_let \_printcaptionf = \_printcaptiont % caption of figures = caption of tables - - \_doc ----------------------------- - If you want to declare a new type of `\caption` with independent counter, - you can use following lines, where `\caption/a` for Algorithms are - declared: - \begtt - \let\_printcaptiona = \_printcaptionf \let\_everycaptiona = \_everycaptionf - \newcount\_anum \addto\_secx {\_anum=0 } - \def\_theanum {\_othe\_chapnum.\_the\_secnum.\_the\_anum} - \sdef{_mt:a:en}{Algorithm} \sdef{_mt:a:cs}{Algoritmus} % + your language... - \endtt - The default format of `\caption` text is a paragraph in block narrower by - `\_iindent` and with the last line is centered. This setting is done by - the \`\_narrowlastlinecentered` macro. - \_cod ----------------------------- - -\_def\_narrowlastlinecentered#1{% - \_leftskip=#1plus1fil - \_rightskip=#1plus-1fil - \_parfillskip=0pt plus2fil\_relax -} - - \_doc ----------------------------- - \`\eqmark` is processed in display mode (we add `\eqno` primitive) - or in internal mode when `\eqaligno` is used (we don't add `\eqno`). - \_cod ----------------------------- - -\_optdef\_eqmark []{\_trylabel \_ineqmark} -\_def\_ineqmark{\_incr\_dnum - \_ifinner\_else\_eqno \_fi - \_wlabel\_thednum \_hbox{\_thednum}% -} -\_public \eqmark ; - - \_doc ----------------------------- - The \`\numberedpar` `<letter>{<name>}` is implemented here. - \_cod ----------------------------- - -\_newcount\_counterA \_newcount\_counterB \_newcount\_counterC -\_newcount\_counterD \_newcount\_counterE - -\_def\_resetABCDE {\_counterA=0 \_counterB=0 \_counterC=0 \_counterD=0 \_counterE=0 } - -\_def \_theAnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterA} -\_def \_theBnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterB} -\_def \_theCnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterC} -\_def \_theDnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterD} -\_def \_theEnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterE} - -\_def\_numberedpar#1#2{\_ea \_incr \_csname _counter#1\_endcsname - \_def\_tmpa{#1}\_def\_tmpb{#2}\_numberedparparam} -\_optdef\_numberedparparam[]{% - \_ea \_printnumberedpar \_csname _the\_tmpa num\_ea\_endcsname\_ea{\_tmpb}} - -\_public \numberedpar ; - - \_doc ----------------------------- - The \`\_printnumberedpar` `\theXnum {<name>}` opens numbered paragraph and - prints it. The optional parameter is in `\_the\_opt`. You can re-define - it if you need another design. - - `\_printnumberedpar` needs not to be re-defined if you only want to print - Theorems in italic and to insert vertical skips (for example). You can do this - by the following code: - \begtt - \def\theorem {\medskip\bgroup\it \numberedpar A{Theorem}} - \def\endtheorem {\par\egroup\medskip} - - \theorem Let $M$ be... \endtheorem - \endtt - \_cod ----------------------------- - -\_def \_printnumberedpar #1#2{\_par - \_noindent\_wlabel #1% - {\_bf #2 #1\_istoksempty\_opt\_iffalse \_space \_the\_opt \_fi.}\_space - \_ignorespaces -} - -\_endcode % ------------------------------------- - -2021-03-03 \_captionsep introduced, \_othe used in \_thetnum, \_thefnum. -2021-02-09 \thisoutline implemented -2021-01-26 \_nl: \unskip added -2021-01-11 \secl introduced -2021-01-05 \_thednum printed in text mode in its both occurences. -2020-04-28 \_secfonts etc: \_boldify is last. -2020-04-22 \_chapx, \_secx, \_seccx rewritten -2020-03-14 introduced diff --git a/Master/texmf-dist/tex/luatex/optex/base/slides.opm b/Master/texmf-dist/tex/luatex/optex/base/slides.opm deleted file mode 100644 index 94fa3afac83..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/slides.opm +++ /dev/null @@ -1,247 +0,0 @@ -% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \slideshow {Slides style for OpTeX <2021-03-10>} % loaded on demand by \slides - - \_doc ----------------------------- - Default margins and design is declared here. - The `\_ttfont` is scaled by `mag1.15` in order to balance the - ex height of Helvetica (Heros) and LM fonts Typewriter. - The `\begtt`...`\endtt` verbatim is printed by smaller text. - \_cod ----------------------------- - -\_margins/1 a5l (14,14,10,3)mm % landscape A5 format -\_def\_wideformat{\_margins/1 (263,148) (16,16,10,3)mm } % 16:9 format - -\_ifx\_fontnamegen\_undefined \_fontfam[Heros] - \_let\_ttfont=\_undefined \_famvardef\_ttfont{\_setfontsize{mag1.15}\_tt} -\_fi -\_typosize[16/19] -\_def\_urlfont{} -\_everytt={\_typosize[13/16] \_advance\_hsize by10mm} -\_fontdef\_fixbf{\_bf} - -\_nopagenumbers -\_parindent=0pt -\_ttindent=5mm -\_parskip=5pt plus 4pt minus2pt -\_rightskip=0pt plus 1fil -\_ttindent=10pt -\_def\_ttskip{\_smallskip} - -\_onlyrgb % RGB color space is better for presentations - - \_doc ----------------------------- - The bottom margin is set to 3\,mm. If we use 1\,mm, then the baseline of - `\footline` is 2\,mm from the bottom page. This is the depth of the `\Grey` - rectangle used for page numbers. It is r-lapped to `\hoffset` width because left - margin = `\hoffset` = right margin. It is 14\,mm for narrow pages or - 16\,mm for wide pages. - \_cod ----------------------------- - -\_footlinedist=1mm -\_footline={\_hss \_rlap{% - \_rlap{\Grey\_kern.2\_hoffset\_vrule height6mm depth2mm width.8\_hoffset}% - \_hbox to\_hoffset{\White\_hss\_folio\_kern3mm}}} - - \_doc ----------------------------- - The \`\subtit` is defined analogically like `\tit`. - \_cod ----------------------------- - -\_eoldef\_subtit#1{\_vskip20pt {\_leftskip=0pt plus1fill \_rightskip=\_leftskip - \_subtitfont #1\_nbpar}} - - \_doc ----------------------------- - The \`\pshow``<num>` prints the text in invisible - (transparent) font when \^`\layernum`\code{<}`<num>`. - The transparency is set by `\pdfpageresoyrces` primitive. - \_cod ----------------------------- - -\pdfpageresources{/ExtGState << /Invisible << /Type /ExtGState /ca 0 /CA 0 >> - /Visible << /Type /ExtGState /ca 1 /CA 1 >> >>} -\addto\_morepgresources{/Invisible << /Type /ExtGState /ca 0 /CA 0 >> - /Visible << /Type /ExtGState /ca 1 /CA 1 >>} -\def\Invisible {\_pdfliteral{/Invisible gs}} -\def\Visible {\_pdfliteral{/Visible gs}} -\def\Transparent {\Invisible \_aftergroup \Visible} - -\_def\_use#1#2{\_ifnum\_layernum#1\_relax#2\_fi} -\_def\_pshow#1{\_use{=#1}\Red \_use{<#1}\Transparent \_ignorespaces} - - \_doc ----------------------------- - The main level list of items is activated here. The `\_item:X` and - `\_item:x` are used and are re-defined here. - If we are in a nested level of items and `\pg+` is used then - `\egroups` macro expands to the right number of `\egroup`s - to close the page correctly. The level of nested item lists - is saved to the `\_ilevel` register and used when we start again - the next text after `\pg+`. - \_cod ----------------------------- - -\_newcount\_gilevel -\_def\*{*} -\_adef*{\_relax\_ifmmode*\_else\_ea\_startitem\_fi} -\_sdef{_item:X}{\Blue\_raise.2ex\_fullrectangle{.8ex}\_kern.5em} -\_sdef{_item:x}{\Blue\_raise.3ex\_fullrectangle{.6ex}\_kern.4em} -\_style X -\_def\_egroups{\_par\_global\_gilevel=\_ilevel \_egroup} -\_everylist={\_novspaces \_ifcase\_ilevel \_or \_style x \_else \_style - \_fi - \_addto\_egroups{\_egroup}} - - \_doc ----------------------------- - The default values of \`\pg`, i.\,e.\ `\pg;`, `\pg+` and `\pg.` are very simple. - They are used when `\showslides` is not specified. - \_cod ----------------------------- - -\_def\_pg#1{\_cs{_spg:#1}} -\_sdef{_spg:;}{\_vfil\_break \_lfnotenumreset} -\_sdef{_spg:.}{\_endslides} -\_sdef{_spg:+}{\_par} - - \_doc ----------------------------- - The \`\_endslides` is defined as `\_end` primitive, but - slide-designer can redefine it. For example, - \ulink[http://petr.olsak.net/optex/optex-tricks.html\#slider]{OpTeX trick 0029} - shows how to define clickable navigation to the pages and how to check - the data integrity at the end of the document using `\_endslides`. - - The `\bye` macro is redefined here as an alternative to `\pg.`. - \_cod ----------------------------- - -\_def\_endslides{\_end} -\_def\bye{\_pg.} - - \_doc ----------------------------- - We need no numbers and no table of contents when using slides. - The \^`\_printsec` macro is redefined in order the title is centered - and typeset in `\Blue`. - \_cod ----------------------------- - -\_def\_titfont{\_typosize[42/60]\_bf \Blue} -\_def\_subtitfont{\_typosize[20/30]\_bf} -\_def\_secfont{\_typosize[25/30]\_bf \Blue} - -\_nonum \_notoc \_let\_resetnonumnotoc=\_relax -\_def\_printsec#1{\_par - \_abovetitle{\_penalty-400}\_bigskip - {\_secfont \_noindent \_leftskip=0pt plus1fill \_rightskip=\_leftskip - \_printrefnum[@\_quad]#1\_nbpar}\_insertmark{#1}% - \_nobreak \_belowtitle{\_medskip}% -} - - \_doc ----------------------------- - When \`\slideshow` is active then each page is opened - by `\setbox\_slidepage=\vbox\bgroup` (roughly speaking) - and closed by `\egroup`. The material is - `\unvbox`ed and saved for the usage in the next usage if `\pg+` is in process. - The \`\_slidelayer` is incremented instead `\pageno` if `\pg+`. - This counter is equal to `\count1`, so it is printed to the terminal and - log file next to `\pageno`. - - The code is somewhat more complicated when \^`\layers` is used. Then - `<layered-text>` is saved to the \`\_layertext` macro, the material before - it is in \`\_slidepage` box and the material after it is in `\_slidepageB` - box. The pages are completed in the `\loop` which increments the - \`\layernum` register. - \_cod ----------------------------- - -\_newbox\_slidepage \_newbox\_slidepageB -\_countdef\_slidelayer=1 - -\_def\_slideshow{\_slidelayer=1 \_slideshowactive - \_let\slideopen=\_relax % first wins - \_setbox\_slidepage=\_vbox\_bgroup\_bgroup} - -\_def\_slideshowactive{% - \_sdef{_spg:;}{\_closepage \_global\_slidelayer=1 \_resetpage \_openslide} - \_sdef{_spg:.}{\_closepage \_endslides} - \_sdef{_spg:+}{\_closepage \_incr\_slidelayer \_decr\_pageno \_openslide} - \_let\_layers=\_layersactive - \_destboxslide % to prevent hyperlink-dests duplication -} -\_def\_destboxslide{\_def\_destbox[##1:##2]{\_isequal{##1}{ref}\_iffalse \_destboxori[##1:##2]\_fi}} - -\_def\_openslide{\_setbox\_slidepage=\_vbox\_bgroup\_bgroup \_setilevel - \_ifvoid\_slidepage \_else \_unvbox\_slidepage \_nointerlineskip\_lastbox \_fi} -\_def\_setilevel{\_loop \_decr\_gilevel \_ifnum\_gilevel<0 \_else \_begitems \_repeat} - -\_def\_closepage{\_egroups \_egroup - \_ifnum \_maxlayers=0 \_unvcopy\_slidepage \_vfil\_break - \_else \_begingroup \_setwarnslides \_layernum=0 - \_loop - \_ifnum\_layernum<\_maxlayers \_advance\_layernum by1 - \_printlayers \_vfil\_break - \_ifnum\_layernum<\_maxlayers \_incr\_slidelayer \_decr\_pageno \_fi - \_repeat - \_global\_maxlayers=0 - \_incr\_layernum \_global\_setbox\_slidepage=\_vbox{\_printlayers}% - \_endgroup - \_fi} -\_def\_resetpage{% - \_global\_setbox\_slidepage=\_box\_voidbox \_global\_setbox\_slidepageB=\_box\_voidbox - \_lfnotenumreset -} -\_def\_setwarnslides{% - \_def\pg##1{\_opwarning{\_string\pg##1 \_layersenv}\_def\pg####1{}}% - \_def\layers##1 {\_opwarning{\_string\layers\_space \_layersenv}\_def\layers####1{}}% -} -\_def\_layersenv{cannot be inside \_string\layers...\_string\endlayers, ignored} - -\_def\_printlayers{\_unvcopy\_slidepage \_nointerlineskip\_lastbox - \_layertext \_endgraf - \_ifdim\_prevdepth>-1000pt \_kern-\_prevdepth \_kern\_dp\_strutbox \_fi - \_vskip\_parskip - \_unvcopy\_slidepageB -} -\_let\_destboxori=\_destbox - -\_newcount\_layernum \_newcount\_maxlayers -\_maxlayers=0 - -\_long\_def\_layersactive #1 #2\endlayers{% - \_par\_penalty0\_egroup - \_gdef\_layertext{#2}% - \_global\_maxlayers=#1 - \_setbox\_slidepageB=\_vbox\_bgroup -} -\_def\_slideopen{\_let\slideshow=\_relax % first wins - \_sdef{_spg:;}{\_egroups\_vfil\_break \_lfnotenumreset\_bgroup \_setilevel} - \_sdef{_spg:.}{\_egroups\_endslides} - \_sdef{_spg:+}{\_egroups\_bgroup \_setilevel} - \_bgroup -} - -\_public \subtit \slideshow \slideopen \pg \wideformat \use \pshow \layernum ; - - \_doc ----------------------------- - Default \`\layers` `<num>` macro (when \^`\slideshow` is not activated) is simple. - It prints the `<layered-text>` with `\layernum=<num>+1` because we need the - result after last layer is processed. - \_cod ----------------------------- - -\_def\_layers #1 {\_par\_layernum=\_numexpr#1+1\_relax} -\_let\endlayers=\_relax - -\_def\layers{\_layers} - - \_doc ----------------------------- - We must to redefine \`\fnotenumpages` because the data from `.ref` file - are less usable for implementing such a feature: the - footnote should be in more layers repeatedly. But we can suppose that - each page starts by `\pg;` macro, so we can reset the footnote counter by - this macro. - \_cod ----------------------------- - -\_def \_fnotenumpages {\_def\_fnotenum{\_the\_lfnotenum}\_pgfnotefalse - \_def\_lfnotenumreset{\_global\_lfnotenum=0 }} -\_let \_lfnotenumreset=\_relax -\_public \fnotenumpages ; - -\_endcode % ---------------------------------------------- - -The user manual of \OpTeX/ slides are in `op-slides.tex` file. - -2021-03-10 \slideopen introduced, bug with colors in \setbox fixed -2021-03-10 \ifmmode* added to \adef* -2021-02-15 \_def\_decr removed -2021-01-16 \layers at empty page raises error: problem fixed -2020-03-19 slides introduced diff --git a/Master/texmf-dist/tex/luatex/optex/base/styles.opm b/Master/texmf-dist/tex/luatex/optex/base/styles.opm deleted file mode 100644 index 534eb13663c..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/styles.opm +++ /dev/null @@ -1,120 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \report {Basic styles of OpTeX <2021-03-10>} % preloaded in format - - \_doc ----------------------------- - We define auxiliary macro first (used by the \^`\address` macro) - \nl - The `{`\`\boxlines` `<line-1><eol><line-2><eol>...<line-n><eol>}` - returns to the outer vertical mode a box with `<line-1>`, next box with - `<line-2>` etc. Each box has its natural width. This is reason why we cannot - use paragraph mode where each resulting box has the width `\hsize`. - The `<eol>` is set active and `\everypar` starts `\hbox{` and acive <eol> - closes this `\hbox` by `}`. - \_cod ----------------------------- - -\_def\_boxlines{% - \_def\_boxlinesE{\_ifhmode\_egroup\_empty\_fi}% - \_def\_nl{\_boxlinesE}% - \_bgroup \_lccode`\~=`\^^M\_lowercase{\_egroup\_let~}\_boxlinesE - \_everypar{\_setbox0=\_lastbox\_endgraf - \_hbox\_bgroup \_catcode`\^^M=13 \_let\par=\_nl \_aftergroup\_boxlinesC}% -} -\_def\_boxlinesC{\_futurelet\_next\_boxlinesD} -\_def\_boxlinesD{\_ifx\_next\_empty\_else\_ea\_egroup\_fi} - -\_public \boxlines ; - - \_doc ----------------------------- - The \`\report` and \`\letter` style initialization macros are defined here. - \nl - The `\letter` defines \`\address` and \`\subject` macros. - \_cod ----------------------------- - -\_def\_report{ - \_typosize[11/13.2] - \_vsize=\_dimexpr \_topskip + 52\_baselineskip \_relax % added 2020-03-28 - \_let\_titfont=\_chapfont - \_titskip=3ex - \_eoldef\_author##1{\_removelastskip\_bigskip - {\_leftskip=0pt plus1fill \_rightskip=\_leftskip \_it \_noindent ##1\_par}\_nobreak\_bigskip - } - \_public \author ; - \_parindent=1.2em \_iindent=\_parindent \_ttindent=\_parindent - \_footline={\_global\_footline={\_hss\_rmfixed\_folio\_hss}} -} -\_def\_letter{ - \_def\_address{\_vtop\_bgroup\_boxlines \_parskip=0pt \_let\par=\_egroup} - \_def\_subject{{\_bf \_mtext{subj}: }} - \_public \address \subject ; - \_typosize[11/14] - \_vsize=\_dimexpr \_topskip + 49\_baselineskip \_relax % added 2020-03-28 - \_parindent=0pt - \_parskip=\_medskipamount - \_nopagenumbers -} -\_public \letter \report ; - - \_doc ----------------------------- - The \`\slides` macro reads macro file `slides.opm`, see the section~\ref[slides]. - \_cod ----------------------------- - -\_def\_slides{\_par - \_opinput{slides.opm} - \_adef*{\_relax\_ifmmode*\_else\_ea\_startitem\_fi} -} -\_public \slides ; - - -\_endcode % ------------------------------------- - -The example of `\letter` style document follows: - -\begtt %----------------------------------------------------------------- - -\letter -\fontfam[bonum] -\chyph - -\address - Vážený pan - Mgr. Bořek Byrokrat - ředitel Ústavu pro další možnosti - Úřední 789 - 123 45 Praha 1 - -\hfill V Praze dne \today - -\subject Žádost o možnost další možnosti - -Vážený pane řediteli - -na základě Vašeho dopisu č.j.~123456/78-dat a elektronické výzvy si dovoluji -Vás požádat o prozkoumání mé možnosti další možnosti. -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do -eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim -veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea -commodo consequat. - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do -eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim -veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea -commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit -esse cillum dolore eu fugiat nulla pariatur. - -S úctou - -\hfill \address - {\it Petr Olšák} - specialista na \TeX{} - Ulice 12345 - Praha 13 - -\bye - -\endtt %--------------------------------------------------------------------- - -\endinput - -2021-03-10 \ifmmode* added to \adef* -2020-03-28 released diff --git a/Master/texmf-dist/tex/luatex/optex/base/table.opm b/Master/texmf-dist/tex/luatex/optex/base/table.opm deleted file mode 100644 index a4a6511958e..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/table.opm +++ /dev/null @@ -1,526 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \table {Basic macros for OpTeX <2021-03-09>} % preloaded in format - - \_doc ----------------------------- - The result of the \`\table``{<declaration>}{<data>}` macro is inserted into - \`\_tablebox`. You can change default value if you want by - `\let\_tablebox=\vtop` or `\let\_tablebox=\relax`. - \_cod ----------------------------- - -\_let\_tablebox=\_vbox - - \_doc ----------------------------- - We save the `to<size>` or `pxto<size>` to `#1` and \`\_tableW` sets the - `to<size>` to the \`\_tablew` macro. - If `pxto<size>` is used then `\_tablew` is empty and `\_tmpdim` includes - given <size>. The `\_ifpxto` returns true in this case. - - The `\table` continues by reading `{<declaration>}` in the \^`\_tableA` macro. - Catcodes (for example the `|` character) have to be normal when reading - `\table` parameters. This is the reason why we use `\catcodetable` here. - \_cod ----------------------------- - -\_newifi \_ifpxto -\_def\_table#1#{\_tablebox\_bgroup \_tableW#1\_empty\_end - \_bgroup \_catcodetable\_optexcatcodes \_tableA} -\_def\_tableW#1#2\_end{\_pxtofalse - \_ifx#1\_empty \_def\_tablew{}\_else - \_ifx#1p \_def\_tablew{}\_tableWx#2\_end \_else \_def\_tablew{#1#2}\_fi\_fi} -\_def\_tableWx xto#1\_end{\_tmpdim=#1\_relax \_pxtotrue} -\_public \table ; - - \_doc ----------------------------- - The \^`\tablinespace` is implemented by enlarging given \^`\tabstrut` - by desired dimension (height and depth too) and by setting - `\_lineskip=-2\_tablinespace`. Normal table rows (where no `\hrule` is - between them) have normal baseline distance.\nl - The \`\_tableA``{<declaration>}` macro scans the `<declaration>` by - `\_scantabdata#1\_relax` and continues by processing `{<data>}` by \^`\_tableB`. - The trick `\_tmptoks={<data>}\_edef\_tmpb{\_the\_tmptoks}` - is used here in order to keep the hash marks in the <data> unchanged. - \_cod ----------------------------- - -\_def\_tableA#1{\_egroup - \_the\_thistable \_global\_thistable={}% - \_ea\_ifx\_ea^\_the\_tabstrut^\_setbox\_tstrutbox=\_null - \_else \_setbox\_tstrutbox=\_hbox{\_the\_tabstrut}% - \_setbox\_tstrutbox=\_hbox{\_vrule width\_zo - height\_dimexpr\_ht\_tstrutbox+\_tablinespace - depth\_dimexpr\_dp\_tstrutbox+\_tablinespace}% - \_offinterlineskip - \_lineskip=-2\_tablinespace - \_fi - \_colnum=0 \_let\_addtabitem=\_addtabitemx - \_def\_tmpa{}\_tabdata={\_colnum1\_relax}\_scantabdata#1\_relax - \_the\_everytable \_bgroup \_catcode`\#=12 \_tableB -} - - \_doc ----------------------------- - The \`\_tableB` saves `<data>` to `\_tmpb` - and does four \^`\replstring`s to prefix each macro \^`\crl` (etc.) - by `\_crcr`. The reason is: we want to use macros that scan its parameter - to the delimiter written in the right part of the table item declaration. - See \^`\fS` for example. The `\crcr` cannot be hidden in another macro in this case. - - The `\tabskip` value is saved for places between columns - into the \`\_tabskipmid` macro. Then it runs - \begtt \catcode`\<=13 - \tabskip=\tabskipl \halign{<converted declaration>\tabskip=\tabskipr \cr <data>\crcr} - \endtt - This sets the desired boundary values of `\tabskip`. The - \"between-columns" values are set as `\tabskip=`\^`\_tabskipmid` in the - `<converted declaration>` immediately after each column declarator. - - If `pxto` keyword was used, then we set the virtual unit \^`\tsize` to - `\hsize` first. Then the first attempt of the table is created in box 0. - Then the \^`\tsize` is re-calculated using `\wd0` and the real table is - printed by `\halign` in the second pass. - - If no `pxto` keyword was used, then we print the table using `\halign` - directly. The \^`\_tablew` macro is nonempty if the `to` keyword was used. - - Because the color selector with `\aftergroup` can be used inside the - table item, we must create the second real group for each table item. - This is reason why we start `<converted declaration>` by `\bgroup` and we - end it by `\egroup` in the \`\_tableC` macro. Each `&` character - is stored as `\egroup&\bgroup` in `<converted declaration>`. The - `\halign\_tablew\_tableC` really does: - \begtt \catcode`\<=13 - \halign\_tablew{\bgroup<converted declaration>\egroup\tabskip=\tabskipr \cr<data>\crcr} - \endtt - \relax - The <data> are re-tokenized by `\_scantextokens` in order to be more - robust to catcode changing inside the <data>. But inline verbatim cannot - work in special cases here like \code{`\{`} for example. - \_cod ----------------------------- - -\_long\_def\_tableB #1{\_egroup \_def\_tmpb{#1}% - \_replstring\_tmpb{\crl}{\_crcr\crl}\_replstring\_tmpb{\crll}{\_crcr\crll}% - \_replstring\_tmpb{\crli}{\_crcr\crli}\_replstring\_tmpb{\crlli}{\_crcr\crlli}% - \_replstring\_tmpb{\crlp}{\_crcr\crlp}% - \_edef\_tabskipmid{\_the\_tabskip}\_tabskip=\_tabskipl - \_ifpxto - \_tsize=\_hsize \_setbox0 = \_vbox{\_tablepxpreset \_halign \_tableC}% - \_tsize=\_dimexpr\_hsize-(\_wd0-\_tmpdim)\_relax - \_setbox0=\_null \_halign \_tableC - \_else - \_halign\_tablew \_tableC - \_fi \_egroup -} -\_def\_tableC{\_ea{\_ea\_bgroup\_the\_tabdata\_egroup\_tabskip=\_tabskipr\_cr - \_scantextokens\_ea{\_tmpb\_crcr}}} - -\_def\_tablepxpreset{} % can be used to de-activate references to .ref file -\_newbox\_tstrutbox % strut used in table rows -\_newtoks\_tabdata % the \halign declaration line - - \_doc ----------------------------- - The \`\_scantabdata` macro converts `\table`'s `<declaration>` to - `\halign` `<converted declaration>`. - The result is stored into \`\_tabdata` tokens list. - For example, the - following result is generated when `<declaration>=|cr||cl|`. - \begtt - tabdata: \_vrule\_the\_tabiteml\_hfil#\_unsskip\_hfil\_the\_tabitemr\_tabstrutA - &\_the\_tabiteml\_hfil#\_unsskip\_the\_tabitemr - \_vrule\_kern\_vvkern\_vrule\_tabstrutA - &\_the\_tabiteml\_hfil#\_unsskip\_hfil\_the\_tabitemr\_tabstrutA - &\_the\_tabiteml#\_unsskip\_hfil\_the\_tabitemr\_vrule\_tabstrutA - ddlinedata: &\_dditem &\_dditem\_vvitem &\_dditem &\_dditem - \endtt - The second result in the \`\_ddlinedata` macro is a template of one row of the table - used by \^`\crli` macro. - \_cod ----------------------------- - -\_def\_scantabdata#1{\_let\_next=\_scantabdata - \_ifx\_relax#1\_let\_next=\_relax - \_else\_ifx|#1\_addtabvrule - \_else\_ifx(#1\_def\_next{\_scantabdataE}% - \_else\_ifx:#1\_def\_next{\_scantabdataF}% - \_else\_isinlist{123456789}#1\_iftrue \_def\_next{\_scantabdataC#1}% - \_else \_ea\_ifx\_csname _tabdeclare#1\_endcsname \_relax - \_ea\_ifx\_csname _paramtabdeclare#1\_endcsname \_relax - \_opwarning{tab-declarator "#1" unknown, ignored}% - \_else - \_def\_next{\_ea\_scantabdataB\_csname _paramtabdeclare#1\_endcsname}\_fi - \_else \_def\_next{\_ea\_scantabdataA\_csname _tabdeclare#1\_endcsname}% - \_fi\_fi\_fi\_fi\_fi\_fi \_next -} -\_def\_scantabdataA#1{\_addtabitem - \_ea\_addtabdata\_ea{#1\_tabstrutA \_tabskip\_tabskipmid\_relax}\_scantabdata} -\_def\_scantabdataB#1#2{\_addtabitem - \_ea\_addtabdata\_ea{#1{#2}\_tabstrutA \_tabskip\_tabskipmid\_relax}\_scantabdata} -\_def\_scantabdataC {\_def\_tmpb{}\_afterassignment\_scantabdataD \_tmpnum=} -\_def\_scantabdataD#1{\_loop \_ifnum\_tmpnum>0 \_advance\_tmpnum by-1 \_addto\_tmpb{#1}\_repeat - \_ea\_scantabdata\_tmpb} -\_def\_scantabdataE#1){\_addtabdata{#1}\_scantabdata} -\_def\_scantabdataF {\_addtabitem\_def\_addtabitem{\_let\_addtabitem=\_addtabitemx}\_scantabdata} - - \_doc ----------------------------- - The \`\_addtabitemx` adds the boundary code (used between columns) - to the <converted declaration>. This code is - `\egroup &\bgroup \colnum=<value>\relax`. You can get the current number of - column from the \`\colnum` register, but you cannot write - `\the\colnum` as the first object in a <data> item because `\halign` - first expands the front of the item and the left part of the declaration - is processed after this. Use `\relax\the\colnum` instead. Or you can - write: - \begtt - \def\showcolnum{\ea\def\ea\totcolnum\ea{\the\colnum}\the\colnum/\totcolnum} - \table{ccc}{\showcolnum & \showcolnum & \showcolnum} - \endtt - This example prints 1/3 \ 2/3 \ 3/3, because the value of the `\colnum` is - equal to the total number of columns before left part of the column declaration - is processed. - \_cod ----------------------------- - -\_newcount\_colnum % number of current column in the table -\_public \colnum ; - -\_def\_addtabitemx{\_ifnum\_colnum>0 - \_addtabdata{\_egroup &\_bgroup}\_addto\_ddlinedata{&\_dditem}\_fi - \_advance\_colnum by1 \_let\_tmpa=\_relax - \_ifnum\_colnum>1 \_ea\_addtabdata\_ea{\_ea\_colnum\_the\_colnum\_relax}\_fi} -\_def\_addtabdata#1{\_tabdata\_ea{\_the\_tabdata#1}} - - \_doc ----------------------------- - This code converts `||` or `|` from `\table` <declaration> to the <converted declaration>. - \_cod ----------------------------- - -\_def\_addtabvrule{% - \_ifx\_tmpa\_vrule \_addtabdata{\_kern\_vvkern}% - \_ifnum\_colnum=0 \_addto\_vvleft{\_vvitem}\_else\_addto\_ddlinedata{\_vvitem}\_fi - \_else \_ifnum\_colnum=0 \_addto\_vvleft{\_vvitemA}\_else\_addto\_ddlinedata{\_vvitemA}\_fi\_fi - \_let\_tmpa=\_vrule \_addtabdata{\_vrule}% -} -\_def\_tabstrutA{\_copy\_tstrutbox} -\_def\_vvleft{} -\_def\_ddlinedata{} - - \_doc ----------------------------- - The default \"declaration letters" `c`, `l`, `r` and `p` are declared - by setting \`\_tabdeclarec`, \`\_tabdeclarel`, \`\_tabdeclarer` and - \`\_paramtabdeclarep` macros. In general, define - `\def\_tabdeclare<letter>{...}` for a non-parametric - letter and `\def\_paramtabdeclare<letter>{...}` for a letter with a parameter. - The double hash `##` must be in the definition, it is replaced by a real table item data. - You can declare more such \"declaration letters" if you want. - \_cod ----------------------------- - -\_def\_tabdeclarec{\_the\_tabiteml\_hfil##\_unsskip\_hfil\_the\_tabitemr} -\_def\_tabdeclarel{\_the\_tabiteml\_relax##\_unsskip\_hfil\_the\_tabitemr} -\_def\_tabdeclarer{\_the\_tabiteml\_hfil##\_unsskip\_the\_tabitemr} -\_def\_paramtabdeclarep#1{\_the\_tabiteml - \_vtop{\_hsize=#1\_relax \_baselineskip=\_normalbaselineskip - \_lineskiplimit=\_zo \_noindent##\_unsskip - \_ifvmode\_vskip\_dp\_tstrutbox \_else\_lower\_dp\_tstrutbox\_hbox{}\_fi}\_the\_tabitemr} - - \_doc ----------------------------- - Users put optional spaces around the table item typically, i.e.\ they write - `& text &` instead `&text&`. The left space is ignored by the internal \TeX/ algorithm but - the right space must be removed by macros. This is a reason why we recommend to - use \`\_unsskip` after each `##` in your definition of \"declaration letters". - This macro isn't only the primitive `\unskip` because we allow usage of plain \TeX/ - `\hideskip` macro: `&\hideskip text\hideskip&`. - \_cod ----------------------------- - -\_def\_unsskip{\_ifmmode\_else\_ifdim\_lastskip>\_zo \_unskip\_fi\_fi} - - \_doc ----------------------------- - The \`\fL`, \`\fR`, \`\fC` and \`\fX` macros only do special parameters settings - for paragraph building algorithm. The \`\fS` prints the paragraph into - box 0 first, measures the number of lines by the `\prevgraf` primitive - and use (or don't use) `\hfil` (for centering) before the first line. - \_cod ----------------------------- - -\_let\_fL=\_raggedright -\_def\_fR{\_leftskip=0pt plus 1fill \_relax} -\_def\_fC{\_leftskip=0pt plus1fill \_rightskip=0pt plus 1fill \_relax} -\_def\_fX{\_leftskip=0pt plus1fil \_rightskip=0pt plus-1fil \_parfillskip=0pt plus2fil \_relax} -\_long\_def\_fS #1\_unsskip{\_noindent \_setbox0 =\_vbox{\_noindent #1\_endgraf \_ea}% - \_ifnum\_prevgraf=1 \_hfil \_fi #1\_unsskip -} -\_public \fL \fR \fC \fX \fS ; - - \_doc ----------------------------- - The family of `\_cr*` macros - \`\crl`, \`\crll`, \`\crli`, \`\crlli`, \`\crlp` and - \`\tskip` `<dimen>` is implemented here. - The \`\_zerotabrule` is used to suppress the negative `\lineskip` - declared by \^`\tablinespace`. - \_cod ----------------------------- - -\_def\_crl{\_crcr\_noalign{\_hrule}} -\_def\_crll{\_crcr\_noalign{\_hrule\_kern\_hhkern\_hrule}} -\_def\_zerotabrule {\_noalign{\_hrule height\_zo width\_zo depth\_zo}} - -\_def\_crli{\_crcr \_zerotabrule \_omit - \_gdef\_dditem{\_omit\_tablinefil}\_gdef\_vvitem{\_kern\_vvkern\_vrule}\_gdef\_vvitemA{\_vrule}% - \_vvleft\_tablinefil\_ddlinedata\_crcr \_zerotabrule} -\_def\_crlli{\_crli\_noalign{\_kern\_hhkern}\_crli} -\_def\_tablinefil{\_leaders\_hrule\_hfil} - -\_def\_crlp#1{\_crcr \_zerotabrule \_noalign{\_kern-\_drulewidth}% - \_omit \_xdef\_crlplist{#1}\_xdef\_crlplist{,\_ea}\_ea\_crlpA\_crlplist,\_end,% - \_global\_tmpnum=0 \_gdef\_dditem{\_omit\_crlpD}% - \_gdef\_vvitem{\_kern\_vvkern\_kern\_drulewidth}\_gdef\_vvitemA{\_kern\_drulewidth}% - \_vvleft\_crlpD\_ddlinedata \_global\_tmpnum=0 \_crcr \_zerotabrule} -\_def\_crlpA#1,{\_ifx\_end#1\_else \_crlpB#1-\_end,\_ea\_crlpA\_fi} -\_def\_crlpB#1#2-#3,{\_ifx\_end#3\_xdef\_crlplist{\_crlplist#1#2,}\_else\_crlpC#1#2-#3,\_fi} -\_def\_crlpC#1-#2-#3,{\_tmpnum=#1\_relax - \_loop \_xdef\_crlplist{\_crlplist\_the\_tmpnum,}\_ifnum\_tmpnum<#2\_advance\_tmpnum by1 \_repeat} -\_def\_crlpD{\_incr\_tmpnum \_edef\_tmpa{\_noexpand\_isinlist\_noexpand\_crlplist{,\_the\_tmpnum,}}% - \_tmpa\_iftrue \_kern-\_drulewidth \_tablinefil \_kern-\_drulewidth\_else\_hfil \_fi} - -\_def\_tskip{\_afterassignment\_tskipA \_tmpdim} -\_def\_tskipA{\_gdef\_dditem{}\_gdef\_vvitem{}\_gdef\_vvitemA{}\_gdef\_tabstrutA{}% - \_vbox to\_tmpdim{}\_ddlinedata \_crcr - \_zerotabrule \_noalign{\_gdef\_tabstrutA{\_copy\_tstrutbox}}} - -\_public \crl \crll \crli \crlli \crlp \tskip ; - - \_doc ----------------------------- - The \`\mspan``{<number>}[<declaration>]{<text>}` macro generates similar `\omit\span\omit\span` - sequence as plain \TeX/ macro `\multispan`. Moreover, it uses \^`\_scantabdata` to - convert `<declaration>` from `\table` syntax to `\halign` syntax. - \_cod ----------------------------- - -\_def\_mspan{\_omit \_afterassignment\_mspanA \_mscount=} -\_def\_mspanA[#1]#2{\_loop \_ifnum\_mscount>1 \_cs{_span}\_omit \_advance\_mscount-1 \_repeat - \_count1=\_colnum \_colnum=0 \_def\_tmpa{}\_tabdata={}\_scantabdata#1\_relax - \_colnum=\_count1 \_setbox0=\_vbox{\_halign\_ea{\_ea\_bgroup\_the\_tabdata\_egroup\_cr#2\_cr}% - \_global\_setbox8=\_lastbox}% - \_setbox0=\_hbox{\_unhbox8 \_unskip \_global\_setbox8=\_lastbox}% - \_unhbox8 \_ignorespaces} -\_public \mspan ; - - \_doc ----------------------------- - The \`\vspan``<number>{<text>}` implementation is here. - We need to lower the box by - \begtt \catcode`\<=13 - (<number>-1)*(\ht+\dp of \tabstrut) / 2. - \endtt - The `#1` parameter must be a one-digit number. If you want to set more digits - then use braces. - \_cod ----------------------------- - -\_def\_vspan#1#2#{\_vspanA{#1#2}} -\_def\_vspanA#1#2{\_vtop to\_zo{\_hbox{\_lower \_dimexpr - #1\_dimexpr(\_ht\_tstrutbox+\_dp\_tstrutbox)/2\_relax - -\_dimexpr(\_ht\_tstrutbox+\_dp\_tstrutbox)/2\_relax \_hbox{#2}}\_vss}} -\_public \vspan ; - - \_doc ----------------------------- - The parameters of primitive `\vrule` and `\hrule` keeps the rule \"last wins". - If we re-define `\hrule` to `\_orihrule height1pt` then each usage - of redefined `\hrule` uses `1pt` height if this parameter isn't - overwritten by another following `height` parameter. This principle is used for - settings another default rule thickness than 0.4\,pt by the macro - \`\rulewidth`. - \_cod ----------------------------- - -\_newdimen\_drulewidth \_drulewidth=0.4pt -\_let\_orihrule=\_hrule \_let\_orivrule=\_vrule -\_def\_rulewidth{\_afterassignment\_rulewidthA \_drulewidth} -\_def\_rulewidthA{\_edef\_hrule{\_orihrule height\_drulewidth}% - \_edef\_vrule{\_orivrule width\_drulewidth}% - \_let\_rulewidth=\_drulewidth - \_public \vrule \hrule \rulewidth;} -\_public \rulewidth ; - - \_doc ----------------------------- - The \`\frame``{<text>}` uses \"\code{\\vbox} in \code{\\vtop}" trick in order to keep the - baseline of the internal text at the same level as outer baseline. - User can write `\frame{abcxyz}` in normal paragraph line, for example - and gets the expected result: \frame{abcxyz}. - The internal margins are set by `\vvkern` and `\hhkern` parameters. - \_cod ----------------------------- - -\_long\_def\_frame#1{% - \_hbox{\_vrule\_vtop{\_vbox{\_hrule\_kern\_vvkern - \_hbox{\_kern\_hhkern\_relax#1\_kern\_hhkern}% - }\_kern\_vvkern\_hrule}\_vrule}} -\_public \frame ; - - \_doc ----------------------------- - \`\eqbox` and \`\eqboxsize` are implemented here. The widths of - all `\eqbox`es are saved to the `.ref` file in the format - \`\_Xeqbox``{<label>}{<size>}`. The `.ref` file is read again and maximum - box width for each <label> is saved to `\_eqb:<label>`. - \_cod ----------------------------- - -\_def\_Xeqbox#1#2{% - \_ifcsname _eqb:#1\_endcsname - \_ifdim #2>\_cs{_eqb:#1}\_relax \_sdef{_eqb:#1}{#2}\_fi - \_else \_sdef{_eqb:#1}{#2}\_fi -} -\_def\_eqbox #1[#2]#3{\_setbox0=\_hbox{{#3}}% - \_openref \_immediate\_wref \_Xeqbox{{#2}{\_the\_wd0}}% - \_ifcsname _eqb:#2\_endcsname - \_hbox to\_cs{_eqb:#2}{\_ifx r#1\_hfill\_fi\_hss\_unhbox0\_hss\_ifx l#1\_hfill\_fi}% - \_else \_box0 \_fi -} -\_def\_eqboxsize [#1]#2{\_trycs{_eqb:#1}{#2}} - -\public \eqbox \eqboxsize ; - -\_endcode % ------------------------------------- - -\secc[table.bound] The boundary declarator \code{:} - -The `<declaration>` part of `\table{<declaration>}{<data>}` includes -column declarators (letters) and other material: the `|` or `(<cmd>)`. -If the boundary declarator `:` is not used then -the boundaries of columns are just before each column declarator -with exception of the first one. -For example, the declaration `{|c||c(xx)(yy)c}` -should be written more exactly using the boundary declarator `:` -by `{|c||:c(xx)(yy):c}`. But you can set these boundaries to -other places using the boundary declarator~`:` explicitly, -for example `{|c:||c(xx):(yy)c}`. The boundary declarator `:` -can be used only once between each pair of column declarators. - -Each table item has its group. The `(<cmd>)` are parts of the given -table item (depending on the boundary declarator position). -If you want to apply a special setting for a given column, you can do this by -`(<setting>)` followed by column declarator. But if the column is not -first, you must use `:(<setting>)`. Example. We have three centered columns, -the second one have to be in bold font and the third one have to be in red: -`\table{c:(\bf)c:(\Red)c}{<data>}` - -\secc Usage of the \code{\\tabskip} primitive - -The value of `\tabskip` primitive is used between all columns of the table. -It is glue-type, so it can be stretchable or shrinkable, see next -section~\ref[table.w]. - -By default, `\tabskip` is 0\,pt. It means that only \^`\tabiteml`, -\^`\tabitemr` and `(<cmds>)` can generate visual spaces between columns. But they -are not real spaces between columns because they are in fact the part of -the total column width. - -The `\tabskip` value declared before the \^`\table` macro (or in -\^`\everytable` or in \^`\thistable`) is used between all columns in the table. -This value is equal to all spaces between columns. But you can set each such space -individually if you use `(\tabskip=<value>)` in the <declaration> immediately -before boundary character. The boundary character represents the column pair for -which the `\tabskip` has individual value. For example -`c(\tabskip=5pt):r` gives `\tabskip` value between `c` and `r` columns. -You need not use boundary character explicitly, so `c(\tabskip=5pt)r` gives -the same result. - -Space before the first column is given by the \^`\tabskipl` -and space after the last column is equal to \^`\tabskipr`. -Default values are 0\,pt. - -Use nonzero `\tabskip` only in special applications. If `\tabskip` is -nonzero then horizontal lines generated by \^`\crli`, \^`\crlli` and \^`\crlp` -have another behavior than you probably expected: they are interrupted in -each `\tabskip` space. - -\secc[table.w] Tables to given width - -There are two possibilities how to create tables to given width: - -\begitems -* `\table to<size>{<declaration>}{<data>}` uses stretchability or - shrinkability of all spaces between columns generated by `\tabskip` value and - eventually by \^`\tabskipl`, \^`\tabskipr` values. See example below. -* `\table pxto<size>{<declaration>}{<data>}` expands the columns declared - by `p{<size>}`, if the `<size>` is given by a virtual \^`\tsize` unit. - See the example below. -\enditems - -Example of `\table to<size>`: - -\begtt \catcode`\<=13 -\thistable{\tabskip=0pt plus1fil minus1fil} -\table to\hsize {lr}{<data>} -\endtt -% -This table has its width `\hsize`. The first column starts at the left boundary of -this table and it is justified left (to the boundary). The second column ends at -the right boundary of the table and it is justified right (to the boundary). -The space between them is stretchable and shrinkable to reach -the given width `\hsize`. - -\medskip -Example of `\table pxto<size>` (means \"{\bf p}aragraphs e{\bf x}panded {\bf to}"): - -\begtt -\table pxto\hsize {|c|p{\tsize}|}{\crl - aaa & Ddkas jd dsjds ds cgha sfgs dd fddzf dfhz xxz - dras ffg hksd kds d sdjds h sd jd dsjds ds cgha - sfgs dd fddzf dfhz xxz. \crl - bb ddd ggg & Dsjds ds cgha sfgs dd fddzf dfhz xxz - ddkas jd dsjds ds cgha sfgs dd fddzf. \crl } -\endtt - -\noindent\table pxto\hsize {|c|p{\tsize}|}{\crl - aaa & Ddkas jd dsjds ds cgha sfgs dd fddzf dfhz xxz - dras ffg hksd kds d sdjds h sd jd dsjds ds cgha - sfgs dd fddzf dfhz xxz. \crl - bb ddd ggg & Dsjds ds cgha sfgs dd fddzf dfhz xxz - ddkas jd dsjds ds cgha sfgs dd fddzf. \crl } -\medskip - -The first `c` column is variable width (it gets the width of the most wide item) -and the resting space to given `\hsize` is filled by the `p` column. - -You can declare more than one `p{<coefficient>\tsize}` columns in the table -when `pxto` keyword is used. The total sum of <coefficinets> must be exactly one. -For example, - -\begtt \catcode`\<=13 -\table pxto13cm {r p{.3\tsize} p{.5\tsize} p{.2\tsize} l}{<data>} -\endtt -% -This gives the ratio of widths of individual paragraphs in the table. - -\secc `\eqbox`: boxes with equal width across the whole document - -The \^`\eqbox` `[<label>]{<text>}` behaves like `\hbox{<text>}` in the first -run of \TeX. But the widths of all boxes with the same label are saved to -`.ref` file and the maximum box width for each label is calculated at the -beginning of the next \TeX/ run. Then \^`\eqbox`~`[<label>]{<text>}` behaves -like `\hbox to <dim:label> {\hss <text>\hss}`, where <dim:label> is -the maximum width of all boxes -labeled by the same `[<label>]`. The documentation of the \LaTeX/ package -`eqparbox` includes more information and tips. - -The \^`\eqboxsize` `[<label>]{<dimen>}` expands to <dim:label> if this value is known, -else it expands to the given <dimen>. - -The optional parameter `r` or `l` can be written before `[<label>]` (for example -`\eqbox r[label]{text}`) if you want to put the text to the right or to the -left side of the box width. - -Try the following example and watch what happens after first \TeX/ run and -after the second one. - -\begtt -\def\leftitem#1{\par - \noindent \hangindent=\eqboxsize[items]{2em}\hangafter=1 - \eqbox r[items]{#1 }\ignorespaces} - -\leftitem {\bf first} \lorem[1] -\leftitem {\bf second one} \lorem[2] -\leftitem {\bf final} \lorem[3] -\endtt - - -\_endinput - -2021-03-09 \_tablepxpreset introduced -2021-02-15 \_expandafter -> \_ea -2021-01-27 \_tableB: \long\def added, \vspan syntax improved -2020-05-26 \eqbox implemented -2020-05-20 \colnum implemented. - \vspan implemented. -2020-05-19 \fL, \fR ets defined. - \table to, \table pxto implemented. -2020-05-10 \bgroup &\egroup added to tabdata (in order to \aftergroup from colors) - boundary declarator : introduced - \_unsskip: \ifmmode added. -2020-04-10 second group for items in order to \localcolors diff --git a/Master/texmf-dist/tex/luatex/optex/base/uni-lcuc.opm b/Master/texmf-dist/tex/luatex/optex/base/uni-lcuc.opm deleted file mode 100644 index 2a99f52d66a..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/uni-lcuc.opm +++ /dev/null @@ -1,15944 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% Preloaded in format. A copy o uni-lcuc.tex fom csplain is here: - -% uni-lcuc.tex -- sets \lccodes and \uccodes for Unicode chars, nothing more -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Petr Olsak, Jul. 2014 - -\_wterm{Setting lccodes and uccodes for Unicode characters} - -\_def\_tmp #1 #2 {\_ifx^#1^\_else - \_lccode"#1="#1 - \_ifx.#2% - \_uccode"#1="#1 - \_else - \_uccode"#2="#2 - \_lccode"#2="#1 - \_uccode"#1="#2 - \_fi - \_ea \_tmp \_fi -} -\_tmp -00AA . -00B5 039C -00BA . -00E0 00C0 -00E1 00C1 -00E2 00C2 -00E3 00C3 -00E4 00C4 -00E5 00C5 -00E6 00C6 -00E7 00C7 -00E8 00C8 -00E9 00C9 -00EA 00CA -00EB 00CB -00EC 00CC -00ED 00CD -00EE 00CE -00EF 00CF -00F0 00D0 -00F1 00D1 -00F2 00D2 -00F3 00D3 -00F4 00D4 -00F5 00D5 -00F6 00D6 -00F8 00D8 -00F9 00D9 -00FA 00DA -00FB 00DB -00FC 00DC -00FD 00DD -00FE 00DE -00DF . -00FF 0178 -0101 0100 -0103 0102 -0105 0104 -0107 0106 -0109 0108 -010B 010A -010D 010C -010F 010E -0111 0110 -0113 0112 -0115 0114 -0117 0116 -0119 0118 -011B 011A -011D 011C -011F 011E -0121 0120 -0123 0122 -0125 0124 -0127 0126 -0129 0128 -012B 012A -012D 012C -012F 012E -0133 0132 -0135 0134 -0137 0136 -0138 . -013A 0139 -013C 013B -013E 013D -0140 013F -0142 0141 -0144 0143 -0146 0145 -0148 0147 -0149 . -014B 014A -014D 014C -014F 014E -0151 0150 -0153 0152 -0155 0154 -0157 0156 -0159 0158 -015B 015A -015D 015C -015F 015E -0161 0160 -0163 0162 -0165 0164 -0167 0166 -0169 0168 -016B 016A -016D 016C -016F 016E -0171 0170 -0173 0172 -0175 0174 -0177 0176 -017A 0179 -017C 017B -017E 017D -0180 0243 -0253 0181 -0183 0182 -0185 0184 -0254 0186 -0188 0187 -0256 0189 -0257 018A -018C 018B -018D . -01DD 018E -0259 018F -025B 0190 -0192 0191 -0260 0193 -0263 0194 -0195 01F6 -0269 0196 -0268 0197 -0199 0198 -019A 023D -019B . -026F 019C -0272 019D -019E 0220 -0275 019F -01A1 01A0 -01A3 01A2 -01A5 01A4 -0280 01A6 -01A8 01A7 -0283 01A9 -01AA . -01AB . -01AD 01AC -0288 01AE -01B0 01AF -028A 01B1 -028B 01B2 -01B4 01B3 -01B6 01B5 -0292 01B7 -01B9 01B8 -01BA . -01BB . -01BD 01BC -01BE . -01BF 01F7 -01C0 . -01C1 . -01C2 . -01C3 . -01C6 01C4 -01C9 01C7 -01CC 01CA -01CE 01CD -01D0 01CF -01D2 01D1 -01D4 01D3 -01D6 01D5 -01D8 01D7 -01DA 01D9 -01DC 01DB -01DF 01DE -01E1 01E0 -01E3 01E2 -01E5 01E4 -01E7 01E6 -01E9 01E8 -01EB 01EA -01ED 01EC -01EF 01EE -01F0 . -01F3 01F1 -01F5 01F4 -01F9 01F8 -01FB 01FA -01FD 01FC -01FF 01FE -0201 0200 -0203 0202 -0205 0204 -0207 0206 -0209 0208 -020B 020A -020D 020C -020F 020E -0211 0210 -0213 0212 -0215 0214 -0217 0216 -0219 0218 -021B 021A -021D 021C -021F 021E -0221 . -0223 0222 -0225 0224 -0227 0226 -0229 0228 -022B 022A -022D 022C -022F 022E -0231 0230 -0233 0232 -0234 . -0235 . -0236 . -0237 . -0238 . -0239 . -2C65 023A -023C 023B -2C66 023E -023F 2C7E -0240 2C7F -0242 0241 -0289 0244 -028C 0245 -0247 0246 -0249 0248 -024B 024A -024D 024C -024F 024E -0250 2C6F -0251 2C6D -0252 2C70 -0255 . -0258 . -025A . -025C . -025D . -025E . -025F . -0261 . -0262 . -0264 . -0265 A78D -0266 A7AA -0267 . -026A . -026B 2C62 -026C . -026D . -026E . -0270 . -0271 2C6E -0273 . -0274 . -0276 . -0277 . -0278 . -0279 . -027A . -027B . -027C . -027D 2C64 -027E . -027F . -0281 . -0282 . -0284 . -0285 . -0286 . -0287 . -028D . -028E . -028F . -0290 . -0291 . -0293 . -0294 . -0295 . -0296 . -0297 . -0298 . -0299 . -029A . -029B . -029C . -029D . -029E . -029F . -02A0 . -02A1 . -02A2 . -02A3 . -02A4 . -02A5 . -02A6 . -02A7 . -02A8 . -02A9 . -02AA . -02AB . -02AC . -02AD . -02AE . -02AF . -02B0 . -02B1 . -02B2 . -02B3 . -02B4 . -02B5 . -02B6 . -02B7 . -02B8 . -02B9 . -02BA . -02BB . -02BC . -02BD . -02BE . -02BF . -02C0 . -02C1 . -02C6 . -02C7 . -02C8 . -02C9 . -02CA . -02CB . -02CC . -02CD . -02CE . -02CF . -02D0 . -02D1 . -02E0 . -02E1 . -02E2 . -02E3 . -02E4 . -02EC . -02EE . -0371 0370 -0373 0372 -0374 . -0377 0376 -037A . -037B 03FD -037C 03FE -037D 03FF -03AC 0386 -03AD 0388 -03AE 0389 -03AF 038A -03CC 038C -03CD 038E -03CE 038F -0390 . -03B1 0391 -03B2 0392 -03B3 0393 -03B4 0394 -03B5 0395 -03B6 0396 -03B7 0397 -03B8 0398 -03B9 0399 -03BA 039A -03BB 039B -03BD 039D -03BE 039E -03BF 039F -03C0 03A0 -03C1 03A1 -03C3 03A3 -03C4 03A4 -03C5 03A5 -03C6 03A6 -03C7 03A7 -03C8 03A8 -03C9 03A9 -03CA 03AA -03CB 03AB -03B0 . -03D7 03CF -03D2 . -03D3 . -03D4 . -03D9 03D8 -03DB 03DA -03DD 03DC -03DF 03DE -03E1 03E0 -03E3 03E2 -03E5 03E4 -03E7 03E6 -03E9 03E8 -03EB 03EA -03ED 03EC -03EF 03EE -03F2 03F9 -03F3 . -03F8 03F7 -03FB 03FA -03FC . -0450 0400 -0451 0401 -0452 0402 -0453 0403 -0454 0404 -0455 0405 -0456 0406 -0457 0407 -0458 0408 -0459 0409 -045A 040A -045B 040B -045C 040C -045D 040D -045E 040E -045F 040F -0430 0410 -0431 0411 -0432 0412 -0433 0413 -0434 0414 -0435 0415 -0436 0416 -0437 0417 -0438 0418 -0439 0419 -043A 041A -043B 041B -043C 041C -043D 041D -043E 041E -043F 041F -0440 0420 -0441 0421 -0442 0422 -0443 0423 -0444 0424 -0445 0425 -0446 0426 -0447 0427 -0448 0428 -0449 0429 -044A 042A -044B 042B -044C 042C -044D 042D -044E 042E -044F 042F -0461 0460 -0463 0462 -0465 0464 -0467 0466 -0469 0468 -046B 046A -046D 046C -046F 046E -0471 0470 -0473 0472 -0475 0474 -0477 0476 -0479 0478 -047B 047A -047D 047C -047F 047E -0481 0480 -048B 048A -048D 048C -048F 048E -0491 0490 -0493 0492 -0495 0494 -0497 0496 -0499 0498 -049B 049A -049D 049C -049F 049E -04A1 04A0 -04A3 04A2 -04A5 04A4 -04A7 04A6 -04A9 04A8 -04AB 04AA -04AD 04AC -04AF 04AE -04B1 04B0 -04B3 04B2 -04B5 04B4 -04B7 04B6 -04B9 04B8 -04BB 04BA -04BD 04BC -04BF 04BE -04CF 04C0 -04C2 04C1 -04C4 04C3 -04C6 04C5 -04C8 04C7 -04CA 04C9 -04CC 04CB -04CE 04CD -04D1 04D0 -04D3 04D2 -04D5 04D4 -04D7 04D6 -04D9 04D8 -04DB 04DA -04DD 04DC -04DF 04DE -04E1 04E0 -04E3 04E2 -04E5 04E4 -04E7 04E6 -04E9 04E8 -04EB 04EA -04ED 04EC -04EF 04EE -04F1 04F0 -04F3 04F2 -04F5 04F4 -04F7 04F6 -04F9 04F8 -04FB 04FA -04FD 04FC -04FF 04FE -0501 0500 -0503 0502 -0505 0504 -0507 0506 -0509 0508 -050B 050A -050D 050C -050F 050E -0511 0510 -0513 0512 -0515 0514 -0517 0516 -0519 0518 -051B 051A -051D 051C -051F 051E -0521 0520 -0523 0522 -0525 0524 -0527 0526 -0561 0531 -0562 0532 -0563 0533 -0564 0534 -0565 0535 -0566 0536 -0567 0537 -0568 0538 -0569 0539 -056A 053A -056B 053B -056C 053C -056D 053D -056E 053E -056F 053F -0570 0540 -0571 0541 -0572 0542 -0573 0543 -0574 0544 -0575 0545 -0576 0546 -0577 0547 -0578 0548 -0579 0549 -057A 054A -057B 054B -057C 054C -057D 054D -057E 054E -057F 054F -0580 0550 -0581 0551 -0582 0552 -0583 0553 -0584 0554 -0585 0555 -0586 0556 -0559 . -0587 . -05D0 . -05D1 . -05D2 . -05D3 . -05D4 . -05D5 . -05D6 . -05D7 . -05D8 . -05D9 . -05DA . -05DB . -05DC . -05DD . -05DE . -05DF . -05E0 . -05E1 . -05E2 . -05E3 . -05E4 . -05E5 . -05E6 . -05E7 . -05E8 . -05E9 . -05EA . -05F0 . -05F1 . -05F2 . -0620 . -0621 . -0622 . -0623 . -0624 . -0625 . -0626 . -0627 . -0628 . -0629 . -062A . -062B . -062C . -062D . -062E . -062F . -0630 . -0631 . -0632 . -0633 . -0634 . -0635 . -0636 . -0637 . -0638 . -0639 . -063A . -063B . -063C . -063D . -063E . -063F . -0640 . -0641 . -0642 . -0643 . -0644 . -0645 . -0646 . -0647 . -0648 . -0649 . -064A . -066E . -066F . -0671 . -0672 . -0673 . -0674 . -0675 . -0676 . -0677 . -0678 . -0679 . -067A . -067B . -067C . -067D . -067E . -067F . -0680 . -0681 . -0682 . -0683 . -0684 . -0685 . -0686 . -0687 . -0688 . -0689 . -068A . -068B . -068C . -068D . -068E . -068F . -0690 . -0691 . -0692 . -0693 . -0694 . -0695 . -0696 . -0697 . -0698 . -0699 . -069A . -069B . -069C . -069D . -069E . -069F . -06A0 . -06A1 . -06A2 . -06A3 . -06A4 . -06A5 . -06A6 . -06A7 . -06A8 . -06A9 . -06AA . -06AB . -06AC . -06AD . -06AE . -06AF . -06B0 . -06B1 . -06B2 . -06B3 . -06B4 . -06B5 . -06B6 . -06B7 . -06B8 . -06B9 . -06BA . -06BB . -06BC . -06BD . -06BE . -06BF . -06C0 . -06C1 . -06C2 . -06C3 . -06C4 . -06C5 . -06C6 . -06C7 . -06C8 . -06C9 . -06CA . -06CB . -06CC . -06CD . -06CE . -06CF . -06D0 . -06D1 . -06D2 . -06D3 . -06D5 . -06E5 . -06E6 . -06EE . -06EF . -06FA . -06FB . -06FC . -06FF . -0710 . -0712 . -0713 . -0714 . -0715 . -0716 . -0717 . -0718 . -0719 . -071A . -071B . -071C . -071D . -071E . -071F . -0720 . -0721 . -0722 . -0723 . -0724 . -0725 . -0726 . -0727 . -0728 . -0729 . -072A . -072B . -072C . -072D . -072E . -072F . -074D . -074E . -074F . -0750 . -0751 . -0752 . -0753 . -0754 . -0755 . -0756 . -0757 . -0758 . -0759 . -075A . -075B . -075C . -075D . -075E . -075F . -0760 . -0761 . -0762 . -0763 . -0764 . -0765 . -0766 . -0767 . -0768 . -0769 . -076A . -076B . -076C . -076D . -076E . -076F . -0770 . -0771 . -0772 . -0773 . -0774 . -0775 . -0776 . -0777 . -0778 . -0779 . -077A . -077B . -077C . -077D . -077E . -077F . -0780 . -0781 . -0782 . -0783 . -0784 . -0785 . -0786 . -0787 . -0788 . -0789 . -078A . -078B . -078C . -078D . -078E . -078F . -0790 . -0791 . -0792 . -0793 . -0794 . -0795 . -0796 . -0797 . -0798 . -0799 . -079A . -079B . -079C . -079D . -079E . -079F . -07A0 . -07A1 . -07A2 . -07A3 . -07A4 . -07A5 . -07B1 . -07CA . -07CB . -07CC . -07CD . -07CE . -07CF . -07D0 . -07D1 . -07D2 . -07D3 . -07D4 . -07D5 . -07D6 . -07D7 . -07D8 . -07D9 . -07DA . -07DB . -07DC . -07DD . -07DE . -07DF . -07E0 . -07E1 . -07E2 . -07E3 . -07E4 . -07E5 . -07E6 . -07E7 . -07E8 . -07E9 . -07EA . -07F4 . -07F5 . -07FA . -0800 . -0801 . -0802 . -0803 . -0804 . -0805 . -0806 . -0807 . -0808 . -0809 . -080A . -080B . -080C . -080D . -080E . -080F . -0810 . -0811 . -0812 . -0813 . -0814 . -0815 . -081A . -0824 . -0828 . -0840 . -0841 . -0842 . -0843 . -0844 . -0845 . -0846 . -0847 . -0848 . -0849 . -084A . -084B . -084C . -084D . -084E . -084F . -0850 . -0851 . -0852 . -0853 . -0854 . -0855 . -0856 . -0857 . -0858 . -08A0 . -08A2 . -08A3 . -08A4 . -08A5 . -08A6 . -08A7 . -08A8 . -08A9 . -08AA . -08AB . -08AC . -0904 . -0905 . -0906 . -0907 . -0908 . -0909 . -090A . -090B . -090C . -090D . -090E . -090F . -0910 . -0911 . -0912 . -0913 . -0914 . -0915 . -0916 . -0917 . -0918 . -0919 . -091A . -091B . -091C . -091D . -091E . -091F . -0920 . -0921 . -0922 . -0923 . -0924 . -0925 . -0926 . -0927 . -0928 . -0929 . -092A . -092B . -092C . -092D . -092E . -092F . -0930 . -0931 . -0932 . -0933 . -0934 . -0935 . -0936 . -0937 . -0938 . -0939 . -093D . -0950 . -0958 . -0959 . -095A . -095B . -095C . -095D . -095E . -095F . -0960 . -0961 . -0971 . -0972 . -0973 . -0974 . -0975 . -0976 . -0977 . -0979 . -097A . -097B . -097C . -097D . -097E . -097F . -0985 . -0986 . -0987 . -0988 . -0989 . -098A . -098B . -098C . -098F . -0990 . -0993 . -0994 . -0995 . -0996 . -0997 . -0998 . -0999 . -099A . -099B . -099C . -099D . -099E . -099F . -09A0 . -09A1 . -09A2 . -09A3 . -09A4 . -09A5 . -09A6 . -09A7 . -09A8 . -09AA . -09AB . -09AC . -09AD . -09AE . -09AF . -09B0 . -09B2 . -09B6 . -09B7 . -09B8 . -09B9 . -09BD . -09CE . -09DC . -09DD . -09DF . -09E0 . -09E1 . -09F0 . -09F1 . -0A05 . -0A06 . -0A07 . -0A08 . -0A09 . -0A0A . -0A0F . -0A10 . -0A13 . -0A14 . -0A15 . -0A16 . -0A17 . -0A18 . -0A19 . -0A1A . -0A1B . -0A1C . -0A1D . -0A1E . -0A1F . -0A20 . -0A21 . -0A22 . -0A23 . -0A24 . -0A25 . -0A26 . -0A27 . -0A28 . -0A2A . -0A2B . -0A2C . -0A2D . -0A2E . -0A2F . -0A30 . -0A32 . -0A33 . -0A35 . -0A36 . -0A38 . -0A39 . -0A59 . -0A5A . -0A5B . -0A5C . -0A5E . -0A72 . -0A73 . -0A74 . -0A85 . -0A86 . -0A87 . -0A88 . -0A89 . -0A8A . -0A8B . -0A8C . -0A8D . -0A8F . -0A90 . -0A91 . -0A93 . -0A94 . -0A95 . -0A96 . -0A97 . -0A98 . -0A99 . -0A9A . -0A9B . -0A9C . -0A9D . -0A9E . -0A9F . -0AA0 . -0AA1 . -0AA2 . -0AA3 . -0AA4 . -0AA5 . -0AA6 . -0AA7 . -0AA8 . -0AAA . -0AAB . -0AAC . -0AAD . -0AAE . -0AAF . -0AB0 . -0AB2 . -0AB3 . -0AB5 . -0AB6 . -0AB7 . -0AB8 . -0AB9 . -0ABD . -0AD0 . -0AE0 . -0AE1 . -0B05 . -0B06 . -0B07 . -0B08 . -0B09 . -0B0A . -0B0B . -0B0C . -0B0F . -0B10 . -0B13 . -0B14 . -0B15 . -0B16 . -0B17 . -0B18 . -0B19 . -0B1A . -0B1B . -0B1C . -0B1D . -0B1E . -0B1F . -0B20 . -0B21 . -0B22 . -0B23 . -0B24 . -0B25 . -0B26 . -0B27 . -0B28 . -0B2A . -0B2B . -0B2C . -0B2D . -0B2E . -0B2F . -0B30 . -0B32 . -0B33 . -0B35 . -0B36 . -0B37 . -0B38 . -0B39 . -0B3D . -0B5C . -0B5D . -0B5F . -0B60 . -0B61 . -0B71 . -0B83 . -0B85 . -0B86 . -0B87 . -0B88 . -0B89 . -0B8A . -0B8E . -0B8F . -0B90 . -0B92 . -0B93 . -0B94 . -0B95 . -0B99 . -0B9A . -0B9C . -0B9E . -0B9F . -0BA3 . -0BA4 . -0BA8 . -0BA9 . -0BAA . -0BAE . -0BAF . -0BB0 . -0BB1 . -0BB2 . -0BB3 . -0BB4 . -0BB5 . -0BB6 . -0BB7 . -0BB8 . -0BB9 . -0BD0 . -0C05 . -0C06 . -0C07 . -0C08 . -0C09 . -0C0A . -0C0B . -0C0C . -0C0E . -0C0F . -0C10 . -0C12 . -0C13 . -0C14 . -0C15 . -0C16 . -0C17 . -0C18 . -0C19 . -0C1A . -0C1B . -0C1C . -0C1D . -0C1E . -0C1F . -0C20 . -0C21 . -0C22 . -0C23 . -0C24 . -0C25 . -0C26 . -0C27 . -0C28 . -0C2A . -0C2B . -0C2C . -0C2D . -0C2E . -0C2F . -0C30 . -0C31 . -0C32 . -0C33 . -0C35 . -0C36 . -0C37 . -0C38 . -0C39 . -0C3D . -0C58 . -0C59 . -0C60 . -0C61 . -0C85 . -0C86 . -0C87 . -0C88 . -0C89 . -0C8A . -0C8B . -0C8C . -0C8E . -0C8F . -0C90 . -0C92 . -0C93 . -0C94 . -0C95 . -0C96 . -0C97 . -0C98 . -0C99 . -0C9A . -0C9B . -0C9C . -0C9D . -0C9E . -0C9F . -0CA0 . -0CA1 . -0CA2 . -0CA3 . -0CA4 . -0CA5 . -0CA6 . -0CA7 . -0CA8 . -0CAA . -0CAB . -0CAC . -0CAD . -0CAE . -0CAF . -0CB0 . -0CB1 . -0CB2 . -0CB3 . -0CB5 . -0CB6 . -0CB7 . -0CB8 . -0CB9 . -0CBD . -0CDE . -0CE0 . -0CE1 . -0CF1 . -0CF2 . -0D05 . -0D06 . -0D07 . -0D08 . -0D09 . -0D0A . -0D0B . -0D0C . -0D0E . -0D0F . -0D10 . -0D12 . -0D13 . -0D14 . -0D15 . -0D16 . -0D17 . -0D18 . -0D19 . -0D1A . -0D1B . -0D1C . -0D1D . -0D1E . -0D1F . -0D20 . -0D21 . -0D22 . -0D23 . -0D24 . -0D25 . -0D26 . -0D27 . -0D28 . -0D29 . -0D2A . -0D2B . -0D2C . -0D2D . -0D2E . -0D2F . -0D30 . -0D31 . -0D32 . -0D33 . -0D34 . -0D35 . -0D36 . -0D37 . -0D38 . -0D39 . -0D3A . -0D3D . -0D4E . -0D60 . -0D61 . -0D7A . -0D7B . -0D7C . -0D7D . -0D7E . -0D7F . -0D85 . -0D86 . -0D87 . -0D88 . -0D89 . -0D8A . -0D8B . -0D8C . -0D8D . -0D8E . -0D8F . -0D90 . -0D91 . -0D92 . -0D93 . -0D94 . -0D95 . -0D96 . -0D9A . -0D9B . -0D9C . -0D9D . -0D9E . -0D9F . -0DA0 . -0DA1 . -0DA2 . -0DA3 . -0DA4 . -0DA5 . -0DA6 . -0DA7 . -0DA8 . -0DA9 . -0DAA . -0DAB . -0DAC . -0DAD . -0DAE . -0DAF . -0DB0 . -0DB1 . -0DB3 . -0DB4 . -0DB5 . -0DB6 . -0DB7 . -0DB8 . -0DB9 . -0DBA . -0DBB . -0DBD . -0DC0 . -0DC1 . -0DC2 . -0DC3 . -0DC4 . -0DC5 . -0DC6 . -0E01 . -0E02 . -0E03 . -0E04 . -0E05 . -0E06 . -0E07 . -0E08 . -0E09 . -0E0A . -0E0B . -0E0C . -0E0D . -0E0E . -0E0F . -0E10 . -0E11 . -0E12 . -0E13 . -0E14 . -0E15 . -0E16 . -0E17 . -0E18 . -0E19 . -0E1A . -0E1B . -0E1C . -0E1D . -0E1E . -0E1F . -0E20 . -0E21 . -0E22 . -0E23 . -0E24 . -0E25 . -0E26 . -0E27 . -0E28 . -0E29 . -0E2A . -0E2B . -0E2C . -0E2D . -0E2E . -0E2F . -0E30 . -0E32 . -0E33 . -0E40 . -0E41 . -0E42 . -0E43 . -0E44 . -0E45 . -0E46 . -0E81 . -0E82 . -0E84 . -0E87 . -0E88 . -0E8A . -0E8D . -0E94 . -0E95 . -0E96 . -0E97 . -0E99 . -0E9A . -0E9B . -0E9C . -0E9D . -0E9E . -0E9F . -0EA1 . -0EA2 . -0EA3 . -0EA5 . -0EA7 . -0EAA . -0EAB . -0EAD . -0EAE . -0EAF . -0EB0 . -0EB2 . -0EB3 . -0EBD . -0EC0 . -0EC1 . -0EC2 . -0EC3 . -0EC4 . -0EC6 . -0EDC . -0EDD . -0EDE . -0EDF . -0F00 . -0F40 . -0F41 . -0F42 . -0F43 . -0F44 . -0F45 . -0F46 . -0F47 . -0F49 . -0F4A . -0F4B . -0F4C . -0F4D . -0F4E . -0F4F . -0F50 . -0F51 . -0F52 . -0F53 . -0F54 . -0F55 . -0F56 . -0F57 . -0F58 . -0F59 . -0F5A . -0F5B . -0F5C . -0F5D . -0F5E . -0F5F . -0F60 . -0F61 . -0F62 . -0F63 . -0F64 . -0F65 . -0F66 . -0F67 . -0F68 . -0F69 . -0F6A . -0F6B . -0F6C . -0F88 . -0F89 . -0F8A . -0F8B . -0F8C . -1000 . -1001 . -1002 . -1003 . -1004 . -1005 . -1006 . -1007 . -1008 . -1009 . -100A . -100B . -100C . -100D . -100E . -100F . -1010 . -1011 . -1012 . -1013 . -1014 . -1015 . -1016 . -1017 . -1018 . -1019 . -101A . -101B . -101C . -101D . -101E . -101F . -1020 . -1021 . -1022 . -1023 . -1024 . -1025 . -1026 . -1027 . -1028 . -1029 . -102A . -103F . -1050 . -1051 . -1052 . -1053 . -1054 . -1055 . -105A . -105B . -105C . -105D . -1061 . -1065 . -1066 . -106E . -106F . -1070 . -1075 . -1076 . -1077 . -1078 . -1079 . -107A . -107B . -107C . -107D . -107E . -107F . -1080 . -1081 . -108E . -2D00 10A0 -2D01 10A1 -2D02 10A2 -2D03 10A3 -2D04 10A4 -2D05 10A5 -2D06 10A6 -2D07 10A7 -2D08 10A8 -2D09 10A9 -2D0A 10AA -2D0B 10AB -2D0C 10AC -2D0D 10AD -2D0E 10AE -2D0F 10AF -2D10 10B0 -2D11 10B1 -2D12 10B2 -2D13 10B3 -2D14 10B4 -2D15 10B5 -2D16 10B6 -2D17 10B7 -2D18 10B8 -2D19 10B9 -2D1A 10BA -2D1B 10BB -2D1C 10BC -2D1D 10BD -2D1E 10BE -2D1F 10BF -2D20 10C0 -2D21 10C1 -2D22 10C2 -2D23 10C3 -2D24 10C4 -2D25 10C5 -2D27 10C7 -2D2D 10CD -10D0 . -10D1 . -10D2 . -10D3 . -10D4 . -10D5 . -10D6 . -10D7 . -10D8 . -10D9 . -10DA . -10DB . -10DC . -10DD . -10DE . -10DF . -10E0 . -10E1 . -10E2 . -10E3 . -10E4 . -10E5 . -10E6 . -10E7 . -10E8 . -10E9 . -10EA . -10EB . -10EC . -10ED . -10EE . -10EF . -10F0 . -10F1 . -10F2 . -10F3 . -10F4 . -10F5 . -10F6 . -10F7 . -10F8 . -10F9 . -10FA . -10FC . -10FD . -10FE . -10FF . -1100 . -1101 . -1102 . -1103 . -1104 . -1105 . -1106 . -1107 . -1108 . -1109 . -110A . -110B . -110C . -110D . -110E . -110F . -1110 . -1111 . -1112 . -1113 . -1114 . -1115 . -1116 . -1117 . -1118 . -1119 . -111A . -111B . -111C . -111D . -111E . -111F . -1120 . -1121 . -1122 . -1123 . -1124 . -1125 . -1126 . -1127 . -1128 . -1129 . -112A . -112B . -112C . -112D . -112E . -112F . -1130 . -1131 . -1132 . -1133 . -1134 . -1135 . -1136 . -1137 . -1138 . -1139 . -113A . -113B . -113C . -113D . -113E . -113F . -1140 . -1141 . -1142 . -1143 . -1144 . -1145 . -1146 . -1147 . -1148 . -1149 . -114A . -114B . -114C . -114D . -114E . -114F . -1150 . -1151 . -1152 . -1153 . -1154 . -1155 . -1156 . -1157 . -1158 . -1159 . -115A . -115B . -115C . -115D . -115E . -115F . -1160 . -1161 . -1162 . -1163 . -1164 . -1165 . -1166 . -1167 . -1168 . -1169 . -116A . -116B . -116C . -116D . -116E . -116F . -1170 . -1171 . -1172 . -1173 . -1174 . -1175 . -1176 . -1177 . -1178 . -1179 . -117A . -117B . -117C . -117D . -117E . -117F . -1180 . -1181 . -1182 . -1183 . -1184 . -1185 . -1186 . -1187 . -1188 . -1189 . -118A . -118B . -118C . -118D . -118E . -118F . -1190 . -1191 . -1192 . -1193 . -1194 . -1195 . -1196 . -1197 . -1198 . -1199 . -119A . -119B . -119C . -119D . -119E . -119F . -11A0 . -11A1 . -11A2 . -11A3 . -11A4 . -11A5 . -11A6 . -11A7 . -11A8 . -11A9 . -11AA . -11AB . -11AC . -11AD . -11AE . -11AF . -11B0 . -11B1 . -11B2 . -11B3 . -11B4 . -11B5 . -11B6 . -11B7 . -11B8 . -11B9 . -11BA . -11BB . -11BC . -11BD . -11BE . -11BF . -11C0 . -11C1 . -11C2 . -11C3 . -11C4 . -11C5 . -11C6 . -11C7 . -11C8 . -11C9 . -11CA . -11CB . -11CC . -11CD . -11CE . -11CF . -11D0 . -11D1 . -11D2 . -11D3 . -11D4 . -11D5 . -11D6 . -11D7 . -11D8 . -11D9 . -11DA . -11DB . -11DC . -11DD . -11DE . -11DF . -11E0 . -11E1 . -11E2 . -11E3 . -11E4 . -11E5 . -11E6 . -11E7 . -11E8 . -11E9 . -11EA . -11EB . -11EC . -11ED . -11EE . -11EF . -11F0 . -11F1 . -11F2 . -11F3 . -11F4 . -11F5 . -11F6 . -11F7 . -11F8 . -11F9 . -11FA . -11FB . -11FC . -11FD . -11FE . -11FF . -1200 . -1201 . -1202 . -1203 . -1204 . -1205 . -1206 . -1207 . -1208 . -1209 . -120A . -120B . -120C . -120D . -120E . -120F . -1210 . -1211 . -1212 . -1213 . -1214 . -1215 . -1216 . -1217 . -1218 . -1219 . -121A . -121B . -121C . -121D . -121E . -121F . -1220 . -1221 . -1222 . -1223 . -1224 . -1225 . -1226 . -1227 . -1228 . -1229 . -122A . -122B . -122C . -122D . -122E . -122F . -1230 . -1231 . -1232 . -1233 . -1234 . -1235 . -1236 . -1237 . -1238 . -1239 . -123A . -123B . -123C . -123D . -123E . -123F . -1240 . -1241 . -1242 . -1243 . -1244 . -1245 . -1246 . -1247 . -1248 . -124A . -124B . -124C . -124D . -1250 . -1251 . -1252 . -1253 . -1254 . -1255 . -1256 . -1258 . -125A . -125B . -125C . -125D . -1260 . -1261 . -1262 . -1263 . -1264 . -1265 . -1266 . -1267 . -1268 . -1269 . -126A . -126B . -126C . -126D . -126E . -126F . -1270 . -1271 . -1272 . -1273 . -1274 . -1275 . -1276 . -1277 . -1278 . -1279 . -127A . -127B . -127C . -127D . -127E . -127F . -1280 . -1281 . -1282 . -1283 . -1284 . -1285 . -1286 . -1287 . -1288 . -128A . -128B . -128C . -128D . -1290 . -1291 . -1292 . -1293 . -1294 . -1295 . -1296 . -1297 . -1298 . -1299 . -129A . -129B . -129C . -129D . -129E . -129F . -12A0 . -12A1 . -12A2 . -12A3 . -12A4 . -12A5 . -12A6 . -12A7 . -12A8 . -12A9 . -12AA . -12AB . -12AC . -12AD . -12AE . -12AF . -12B0 . -12B2 . -12B3 . -12B4 . -12B5 . -12B8 . -12B9 . -12BA . -12BB . -12BC . -12BD . -12BE . -12C0 . -12C2 . -12C3 . -12C4 . -12C5 . -12C8 . -12C9 . -12CA . -12CB . -12CC . -12CD . -12CE . -12CF . -12D0 . -12D1 . -12D2 . -12D3 . -12D4 . -12D5 . -12D6 . -12D8 . -12D9 . -12DA . -12DB . -12DC . -12DD . -12DE . -12DF . -12E0 . -12E1 . -12E2 . -12E3 . -12E4 . -12E5 . -12E6 . -12E7 . -12E8 . -12E9 . -12EA . -12EB . -12EC . -12ED . -12EE . -12EF . -12F0 . -12F1 . -12F2 . -12F3 . -12F4 . -12F5 . -12F6 . -12F7 . -12F8 . -12F9 . -12FA . -12FB . -12FC . -12FD . -12FE . -12FF . -1300 . -1301 . -1302 . -1303 . -1304 . -1305 . -1306 . -1307 . -1308 . -1309 . -130A . -130B . -130C . -130D . -130E . -130F . -1310 . -1312 . -1313 . -1314 . -1315 . -1318 . -1319 . -131A . -131B . -131C . -131D . -131E . -131F . -1320 . -1321 . -1322 . -1323 . -1324 . -1325 . -1326 . -1327 . -1328 . -1329 . -132A . -132B . -132C . -132D . -132E . -132F . -1330 . -1331 . -1332 . -1333 . -1334 . -1335 . -1336 . -1337 . -1338 . -1339 . -133A . -133B . -133C . -133D . -133E . -133F . -1340 . -1341 . -1342 . -1343 . -1344 . -1345 . -1346 . -1347 . -1348 . -1349 . -134A . -134B . -134C . -134D . -134E . -134F . -1350 . -1351 . -1352 . -1353 . -1354 . -1355 . -1356 . -1357 . -1358 . -1359 . -135A . -1380 . -1381 . -1382 . -1383 . -1384 . -1385 . -1386 . -1387 . -1388 . -1389 . -138A . -138B . -138C . -138D . -138E . -138F . -13A0 . -13A1 . -13A2 . -13A3 . -13A4 . -13A5 . -13A6 . -13A7 . -13A8 . -13A9 . -13AA . -13AB . -13AC . -13AD . -13AE . -13AF . -13B0 . -13B1 . -13B2 . -13B3 . -13B4 . -13B5 . -13B6 . -13B7 . -13B8 . -13B9 . -13BA . -13BB . -13BC . -13BD . -13BE . -13BF . -13C0 . -13C1 . -13C2 . -13C3 . -13C4 . -13C5 . -13C6 . -13C7 . -13C8 . -13C9 . -13CA . -13CB . -13CC . -13CD . -13CE . -13CF . -13D0 . -13D1 . -13D2 . -13D3 . -13D4 . -13D5 . -13D6 . -13D7 . -13D8 . -13D9 . -13DA . -13DB . -13DC . -13DD . -13DE . -13DF . -13E0 . -13E1 . -13E2 . -13E3 . -13E4 . -13E5 . -13E6 . -13E7 . -13E8 . -13E9 . -13EA . -13EB . -13EC . -13ED . -13EE . -13EF . -13F0 . -13F1 . -13F2 . -13F3 . -13F4 . -1401 . -1402 . -1403 . -1404 . -1405 . -1406 . -1407 . -1408 . -1409 . -140A . -140B . -140C . -140D . -140E . -140F . -1410 . -1411 . -1412 . -1413 . -1414 . -1415 . -1416 . -1417 . -1418 . -1419 . -141A . -141B . -141C . -141D . -141E . -141F . -1420 . -1421 . -1422 . -1423 . -1424 . -1425 . -1426 . -1427 . -1428 . -1429 . -142A . -142B . -142C . -142D . -142E . -142F . -1430 . -1431 . -1432 . -1433 . -1434 . -1435 . -1436 . -1437 . -1438 . -1439 . -143A . -143B . -143C . -143D . -143E . -143F . -1440 . -1441 . -1442 . -1443 . -1444 . -1445 . -1446 . -1447 . -1448 . -1449 . -144A . -144B . -144C . -144D . -144E . -144F . -1450 . -1451 . -1452 . -1453 . -1454 . -1455 . -1456 . -1457 . -1458 . -1459 . -145A . -145B . -145C . -145D . -145E . -145F . -1460 . -1461 . -1462 . -1463 . -1464 . -1465 . -1466 . -1467 . -1468 . -1469 . -146A . -146B . -146C . -146D . -146E . -146F . -1470 . -1471 . -1472 . -1473 . -1474 . -1475 . -1476 . -1477 . -1478 . -1479 . -147A . -147B . -147C . -147D . -147E . -147F . -1480 . -1481 . -1482 . -1483 . -1484 . -1485 . -1486 . -1487 . -1488 . -1489 . -148A . -148B . -148C . -148D . -148E . -148F . -1490 . -1491 . -1492 . -1493 . -1494 . -1495 . -1496 . -1497 . -1498 . -1499 . -149A . -149B . -149C . -149D . -149E . -149F . -14A0 . -14A1 . -14A2 . -14A3 . -14A4 . -14A5 . -14A6 . -14A7 . -14A8 . -14A9 . -14AA . -14AB . -14AC . -14AD . -14AE . -14AF . -14B0 . -14B1 . -14B2 . -14B3 . -14B4 . -14B5 . -14B6 . -14B7 . -14B8 . -14B9 . -14BA . -14BB . -14BC . -14BD . -14BE . -14BF . -14C0 . -14C1 . -14C2 . -14C3 . -14C4 . -14C5 . -14C6 . -14C7 . -14C8 . -14C9 . -14CA . -14CB . -14CC . -14CD . -14CE . -14CF . -14D0 . -14D1 . -14D2 . -14D3 . -14D4 . -14D5 . -14D6 . -14D7 . -14D8 . -14D9 . -14DA . -14DB . -14DC . -14DD . -14DE . -14DF . -14E0 . -14E1 . -14E2 . -14E3 . -14E4 . -14E5 . -14E6 . -14E7 . -14E8 . -14E9 . -14EA . -14EB . -14EC . -14ED . -14EE . -14EF . -14F0 . -14F1 . -14F2 . -14F3 . -14F4 . -14F5 . -14F6 . -14F7 . -14F8 . -14F9 . -14FA . -14FB . -14FC . -14FD . -14FE . -14FF . -1500 . -1501 . -1502 . -1503 . -1504 . -1505 . -1506 . -1507 . -1508 . -1509 . -150A . -150B . -150C . -150D . -150E . -150F . -1510 . -1511 . -1512 . -1513 . -1514 . -1515 . -1516 . -1517 . -1518 . -1519 . -151A . -151B . -151C . -151D . -151E . -151F . -1520 . -1521 . -1522 . -1523 . -1524 . -1525 . -1526 . -1527 . -1528 . -1529 . -152A . -152B . -152C . -152D . -152E . -152F . -1530 . -1531 . -1532 . -1533 . -1534 . -1535 . -1536 . -1537 . -1538 . -1539 . -153A . -153B . -153C . -153D . -153E . -153F . -1540 . -1541 . -1542 . -1543 . -1544 . -1545 . -1546 . -1547 . -1548 . -1549 . -154A . -154B . -154C . -154D . -154E . -154F . -1550 . -1551 . -1552 . -1553 . -1554 . -1555 . -1556 . -1557 . -1558 . -1559 . -155A . -155B . -155C . -155D . -155E . -155F . -1560 . -1561 . -1562 . -1563 . -1564 . -1565 . -1566 . -1567 . -1568 . -1569 . -156A . -156B . -156C . -156D . -156E . -156F . -1570 . -1571 . -1572 . -1573 . -1574 . -1575 . -1576 . -1577 . -1578 . -1579 . -157A . -157B . -157C . -157D . -157E . -157F . -1580 . -1581 . -1582 . -1583 . -1584 . -1585 . -1586 . -1587 . -1588 . -1589 . -158A . -158B . -158C . -158D . -158E . -158F . -1590 . -1591 . -1592 . -1593 . -1594 . -1595 . -1596 . -1597 . -1598 . -1599 . -159A . -159B . -159C . -159D . -159E . -159F . -15A0 . -15A1 . -15A2 . -15A3 . -15A4 . -15A5 . -15A6 . -15A7 . -15A8 . -15A9 . -15AA . -15AB . -15AC . -15AD . -15AE . -15AF . -15B0 . -15B1 . -15B2 . -15B3 . -15B4 . -15B5 . -15B6 . -15B7 . -15B8 . -15B9 . -15BA . -15BB . -15BC . -15BD . -15BE . -15BF . -15C0 . -15C1 . -15C2 . -15C3 . -15C4 . -15C5 . -15C6 . -15C7 . -15C8 . -15C9 . -15CA . -15CB . -15CC . -15CD . -15CE . -15CF . -15D0 . -15D1 . -15D2 . -15D3 . -15D4 . -15D5 . -15D6 . -15D7 . -15D8 . -15D9 . -15DA . -15DB . -15DC . -15DD . -15DE . -15DF . -15E0 . -15E1 . -15E2 . -15E3 . -15E4 . -15E5 . -15E6 . -15E7 . -15E8 . -15E9 . -15EA . -15EB . -15EC . -15ED . -15EE . -15EF . -15F0 . -15F1 . -15F2 . -15F3 . -15F4 . -15F5 . -15F6 . -15F7 . -15F8 . -15F9 . -15FA . -15FB . -15FC . -15FD . -15FE . -15FF . -1600 . -1601 . -1602 . -1603 . -1604 . -1605 . -1606 . -1607 . -1608 . -1609 . -160A . -160B . -160C . -160D . -160E . -160F . -1610 . -1611 . -1612 . -1613 . -1614 . -1615 . -1616 . -1617 . -1618 . -1619 . -161A . -161B . -161C . -161D . -161E . -161F . -1620 . -1621 . -1622 . -1623 . -1624 . -1625 . -1626 . -1627 . -1628 . -1629 . -162A . -162B . -162C . -162D . -162E . -162F . -1630 . -1631 . -1632 . -1633 . -1634 . -1635 . -1636 . -1637 . -1638 . -1639 . -163A . -163B . -163C . -163D . -163E . -163F . -1640 . -1641 . -1642 . -1643 . -1644 . -1645 . -1646 . -1647 . -1648 . -1649 . -164A . -164B . -164C . -164D . -164E . -164F . -1650 . -1651 . -1652 . -1653 . -1654 . -1655 . -1656 . -1657 . -1658 . -1659 . -165A . -165B . -165C . -165D . -165E . -165F . -1660 . -1661 . -1662 . -1663 . -1664 . -1665 . -1666 . -1667 . -1668 . -1669 . -166A . -166B . -166C . -166F . -1670 . -1671 . -1672 . -1673 . -1674 . -1675 . -1676 . -1677 . -1678 . -1679 . -167A . -167B . -167C . -167D . -167E . -167F . -1681 . -1682 . -1683 . -1684 . -1685 . -1686 . -1687 . -1688 . -1689 . -168A . -168B . -168C . -168D . -168E . -168F . -1690 . -1691 . -1692 . -1693 . -1694 . -1695 . -1696 . -1697 . -1698 . -1699 . -169A . -16A0 . -16A1 . -16A2 . -16A3 . -16A4 . -16A5 . -16A6 . -16A7 . -16A8 . -16A9 . -16AA . -16AB . -16AC . -16AD . -16AE . -16AF . -16B0 . -16B1 . -16B2 . -16B3 . -16B4 . -16B5 . -16B6 . -16B7 . -16B8 . -16B9 . -16BA . -16BB . -16BC . -16BD . -16BE . -16BF . -16C0 . -16C1 . -16C2 . -16C3 . -16C4 . -16C5 . -16C6 . -16C7 . -16C8 . -16C9 . -16CA . -16CB . -16CC . -16CD . -16CE . -16CF . -16D0 . -16D1 . -16D2 . -16D3 . -16D4 . -16D5 . -16D6 . -16D7 . -16D8 . -16D9 . -16DA . -16DB . -16DC . -16DD . -16DE . -16DF . -16E0 . -16E1 . -16E2 . -16E3 . -16E4 . -16E5 . -16E6 . -16E7 . -16E8 . -16E9 . -16EA . -1700 . -1701 . -1702 . -1703 . -1704 . -1705 . -1706 . -1707 . -1708 . -1709 . -170A . -170B . -170C . -170E . -170F . -1710 . -1711 . -1720 . -1721 . -1722 . -1723 . -1724 . -1725 . -1726 . -1727 . -1728 . -1729 . -172A . -172B . -172C . -172D . -172E . -172F . -1730 . -1731 . -1740 . -1741 . -1742 . -1743 . -1744 . -1745 . -1746 . -1747 . -1748 . -1749 . -174A . -174B . -174C . -174D . -174E . -174F . -1750 . -1751 . -1760 . -1761 . -1762 . -1763 . -1764 . -1765 . -1766 . -1767 . -1768 . -1769 . -176A . -176B . -176C . -176E . -176F . -1770 . -1780 . -1781 . -1782 . -1783 . -1784 . -1785 . -1786 . -1787 . -1788 . -1789 . -178A . -178B . -178C . -178D . -178E . -178F . -1790 . -1791 . -1792 . -1793 . -1794 . -1795 . -1796 . -1797 . -1798 . -1799 . -179A . -179B . -179C . -179D . -179E . -179F . -17A0 . -17A1 . -17A2 . -17A3 . -17A4 . -17A5 . -17A6 . -17A7 . -17A8 . -17A9 . -17AA . -17AB . -17AC . -17AD . -17AE . -17AF . -17B0 . -17B1 . -17B2 . -17B3 . -17D7 . -17DC . -1820 . -1821 . -1822 . -1823 . -1824 . -1825 . -1826 . -1827 . -1828 . -1829 . -182A . -182B . -182C . -182D . -182E . -182F . -1830 . -1831 . -1832 . -1833 . -1834 . -1835 . -1836 . -1837 . -1838 . -1839 . -183A . -183B . -183C . -183D . -183E . -183F . -1840 . -1841 . -1842 . -1843 . -1844 . -1845 . -1846 . -1847 . -1848 . -1849 . -184A . -184B . -184C . -184D . -184E . -184F . -1850 . -1851 . -1852 . -1853 . -1854 . -1855 . -1856 . -1857 . -1858 . -1859 . -185A . -185B . -185C . -185D . -185E . -185F . -1860 . -1861 . -1862 . -1863 . -1864 . -1865 . -1866 . -1867 . -1868 . -1869 . -186A . -186B . -186C . -186D . -186E . -186F . -1870 . -1871 . -1872 . -1873 . -1874 . -1875 . -1876 . -1877 . -1880 . -1881 . -1882 . -1883 . -1884 . -1885 . -1886 . -1887 . -1888 . -1889 . -188A . -188B . -188C . -188D . -188E . -188F . -1890 . -1891 . -1892 . -1893 . -1894 . -1895 . -1896 . -1897 . -1898 . -1899 . -189A . -189B . -189C . -189D . -189E . -189F . -18A0 . -18A1 . -18A2 . -18A3 . -18A4 . -18A5 . -18A6 . -18A7 . -18A8 . -18AA . -18B0 . -18B1 . -18B2 . -18B3 . -18B4 . -18B5 . -18B6 . -18B7 . -18B8 . -18B9 . -18BA . -18BB . -18BC . -18BD . -18BE . -18BF . -18C0 . -18C1 . -18C2 . -18C3 . -18C4 . -18C5 . -18C6 . -18C7 . -18C8 . -18C9 . -18CA . -18CB . -18CC . -18CD . -18CE . -18CF . -18D0 . -18D1 . -18D2 . -18D3 . -18D4 . -18D5 . -18D6 . -18D7 . -18D8 . -18D9 . -18DA . -18DB . -18DC . -18DD . -18DE . -18DF . -18E0 . -18E1 . -18E2 . -18E3 . -18E4 . -18E5 . -18E6 . -18E7 . -18E8 . -18E9 . -18EA . -18EB . -18EC . -18ED . -18EE . -18EF . -18F0 . -18F1 . -18F2 . -18F3 . -18F4 . -18F5 . -1900 . -1901 . -1902 . -1903 . -1904 . -1905 . -1906 . -1907 . -1908 . -1909 . -190A . -190B . -190C . -190D . -190E . -190F . -1910 . -1911 . -1912 . -1913 . -1914 . -1915 . -1916 . -1917 . -1918 . -1919 . -191A . -191B . -191C . -1950 . -1951 . -1952 . -1953 . -1954 . -1955 . -1956 . -1957 . -1958 . -1959 . -195A . -195B . -195C . -195D . -195E . -195F . -1960 . -1961 . -1962 . -1963 . -1964 . -1965 . -1966 . -1967 . -1968 . -1969 . -196A . -196B . -196C . -196D . -1970 . -1971 . -1972 . -1973 . -1974 . -1980 . -1981 . -1982 . -1983 . -1984 . -1985 . -1986 . -1987 . -1988 . -1989 . -198A . -198B . -198C . -198D . -198E . -198F . -1990 . -1991 . -1992 . -1993 . -1994 . -1995 . -1996 . -1997 . -1998 . -1999 . -199A . -199B . -199C . -199D . -199E . -199F . -19A0 . -19A1 . -19A2 . -19A3 . -19A4 . -19A5 . -19A6 . -19A7 . -19A8 . -19A9 . -19AA . -19AB . -19C1 . -19C2 . -19C3 . -19C4 . -19C5 . -19C6 . -19C7 . -1A00 . -1A01 . -1A02 . -1A03 . -1A04 . -1A05 . -1A06 . -1A07 . -1A08 . -1A09 . -1A0A . -1A0B . -1A0C . -1A0D . -1A0E . -1A0F . -1A10 . -1A11 . -1A12 . -1A13 . -1A14 . -1A15 . -1A16 . -1A20 . -1A21 . -1A22 . -1A23 . -1A24 . -1A25 . -1A26 . -1A27 . -1A28 . -1A29 . -1A2A . -1A2B . -1A2C . -1A2D . -1A2E . -1A2F . -1A30 . -1A31 . -1A32 . -1A33 . -1A34 . -1A35 . -1A36 . -1A37 . -1A38 . -1A39 . -1A3A . -1A3B . -1A3C . -1A3D . -1A3E . -1A3F . -1A40 . -1A41 . -1A42 . -1A43 . -1A44 . -1A45 . -1A46 . -1A47 . -1A48 . -1A49 . -1A4A . -1A4B . -1A4C . -1A4D . -1A4E . -1A4F . -1A50 . -1A51 . -1A52 . -1A53 . -1A54 . -1AA7 . -1B05 . -1B06 . -1B07 . -1B08 . -1B09 . -1B0A . -1B0B . -1B0C . -1B0D . -1B0E . -1B0F . -1B10 . -1B11 . -1B12 . -1B13 . -1B14 . -1B15 . -1B16 . -1B17 . -1B18 . -1B19 . -1B1A . -1B1B . -1B1C . -1B1D . -1B1E . -1B1F . -1B20 . -1B21 . -1B22 . -1B23 . -1B24 . -1B25 . -1B26 . -1B27 . -1B28 . -1B29 . -1B2A . -1B2B . -1B2C . -1B2D . -1B2E . -1B2F . -1B30 . -1B31 . -1B32 . -1B33 . -1B45 . -1B46 . -1B47 . -1B48 . -1B49 . -1B4A . -1B4B . -1B83 . -1B84 . -1B85 . -1B86 . -1B87 . -1B88 . -1B89 . -1B8A . -1B8B . -1B8C . -1B8D . -1B8E . -1B8F . -1B90 . -1B91 . -1B92 . -1B93 . -1B94 . -1B95 . -1B96 . -1B97 . -1B98 . -1B99 . -1B9A . -1B9B . -1B9C . -1B9D . -1B9E . -1B9F . -1BA0 . -1BAE . -1BAF . -1BBA . -1BBB . -1BBC . -1BBD . -1BBE . -1BBF . -1BC0 . -1BC1 . -1BC2 . -1BC3 . -1BC4 . -1BC5 . -1BC6 . -1BC7 . -1BC8 . -1BC9 . -1BCA . -1BCB . -1BCC . -1BCD . -1BCE . -1BCF . -1BD0 . -1BD1 . -1BD2 . -1BD3 . -1BD4 . -1BD5 . -1BD6 . -1BD7 . -1BD8 . -1BD9 . -1BDA . -1BDB . -1BDC . -1BDD . -1BDE . -1BDF . -1BE0 . -1BE1 . -1BE2 . -1BE3 . -1BE4 . -1BE5 . -1C00 . -1C01 . -1C02 . -1C03 . -1C04 . -1C05 . -1C06 . -1C07 . -1C08 . -1C09 . -1C0A . -1C0B . -1C0C . -1C0D . -1C0E . -1C0F . -1C10 . -1C11 . -1C12 . -1C13 . -1C14 . -1C15 . -1C16 . -1C17 . -1C18 . -1C19 . -1C1A . -1C1B . -1C1C . -1C1D . -1C1E . -1C1F . -1C20 . -1C21 . -1C22 . -1C23 . -1C4D . -1C4E . -1C4F . -1C5A . -1C5B . -1C5C . -1C5D . -1C5E . -1C5F . -1C60 . -1C61 . -1C62 . -1C63 . -1C64 . -1C65 . -1C66 . -1C67 . -1C68 . -1C69 . -1C6A . -1C6B . -1C6C . -1C6D . -1C6E . -1C6F . -1C70 . -1C71 . -1C72 . -1C73 . -1C74 . -1C75 . -1C76 . -1C77 . -1C78 . -1C79 . -1C7A . -1C7B . -1C7C . -1C7D . -1CE9 . -1CEA . -1CEB . -1CEC . -1CEE . -1CEF . -1CF0 . -1CF1 . -1CF5 . -1CF6 . -1D00 . -1D01 . -1D02 . -1D03 . -1D04 . -1D05 . -1D06 . -1D07 . -1D08 . -1D09 . -1D0A . -1D0B . -1D0C . -1D0D . -1D0E . -1D0F . -1D10 . -1D11 . -1D12 . -1D13 . -1D14 . -1D15 . -1D16 . -1D17 . -1D18 . -1D19 . -1D1A . -1D1B . -1D1C . -1D1D . -1D1E . -1D1F . -1D20 . -1D21 . -1D22 . -1D23 . -1D24 . -1D25 . -1D26 . -1D27 . -1D28 . -1D29 . -1D2A . -1D2B . -1D2C . -1D2D . -1D2E . -1D2F . -1D30 . -1D31 . -1D32 . -1D33 . -1D34 . -1D35 . -1D36 . -1D37 . -1D38 . -1D39 . -1D3A . -1D3B . -1D3C . -1D3D . -1D3E . -1D3F . -1D40 . -1D41 . -1D42 . -1D43 . -1D44 . -1D45 . -1D46 . -1D47 . -1D48 . -1D49 . -1D4A . -1D4B . -1D4C . -1D4D . -1D4E . -1D4F . -1D50 . -1D51 . -1D52 . -1D53 . -1D54 . -1D55 . -1D56 . -1D57 . -1D58 . -1D59 . -1D5A . -1D5B . -1D5C . -1D5D . -1D5E . -1D5F . -1D60 . -1D61 . -1D62 . -1D63 . -1D64 . -1D65 . -1D66 . -1D67 . -1D68 . -1D69 . -1D6A . -1D6B . -1D6C . -1D6D . -1D6E . -1D6F . -1D70 . -1D71 . -1D72 . -1D73 . -1D74 . -1D75 . -1D76 . -1D77 . -1D78 . -1D79 A77D -1D7A . -1D7B . -1D7C . -1D7D 2C63 -1D7E . -1D7F . -1D80 . -1D81 . -1D82 . -1D83 . -1D84 . -1D85 . -1D86 . -1D87 . -1D88 . -1D89 . -1D8A . -1D8B . -1D8C . -1D8D . -1D8E . -1D8F . -1D90 . -1D91 . -1D92 . -1D93 . -1D94 . -1D95 . -1D96 . -1D97 . -1D98 . -1D99 . -1D9A . -1D9B . -1D9C . -1D9D . -1D9E . -1D9F . -1DA0 . -1DA1 . -1DA2 . -1DA3 . -1DA4 . -1DA5 . -1DA6 . -1DA7 . -1DA8 . -1DA9 . -1DAA . -1DAB . -1DAC . -1DAD . -1DAE . -1DAF . -1DB0 . -1DB1 . -1DB2 . -1DB3 . -1DB4 . -1DB5 . -1DB6 . -1DB7 . -1DB8 . -1DB9 . -1DBA . -1DBB . -1DBC . -1DBD . -1DBE . -1DBF . -1E01 1E00 -1E03 1E02 -1E05 1E04 -1E07 1E06 -1E09 1E08 -1E0B 1E0A -1E0D 1E0C -1E0F 1E0E -1E11 1E10 -1E13 1E12 -1E15 1E14 -1E17 1E16 -1E19 1E18 -1E1B 1E1A -1E1D 1E1C -1E1F 1E1E -1E21 1E20 -1E23 1E22 -1E25 1E24 -1E27 1E26 -1E29 1E28 -1E2B 1E2A -1E2D 1E2C -1E2F 1E2E -1E31 1E30 -1E33 1E32 -1E35 1E34 -1E37 1E36 -1E39 1E38 -1E3B 1E3A -1E3D 1E3C -1E3F 1E3E -1E41 1E40 -1E43 1E42 -1E45 1E44 -1E47 1E46 -1E49 1E48 -1E4B 1E4A -1E4D 1E4C -1E4F 1E4E -1E51 1E50 -1E53 1E52 -1E55 1E54 -1E57 1E56 -1E59 1E58 -1E5B 1E5A -1E5D 1E5C -1E5F 1E5E -1E61 1E60 -1E63 1E62 -1E65 1E64 -1E67 1E66 -1E69 1E68 -1E6B 1E6A -1E6D 1E6C -1E6F 1E6E -1E71 1E70 -1E73 1E72 -1E75 1E74 -1E77 1E76 -1E79 1E78 -1E7B 1E7A -1E7D 1E7C -1E7F 1E7E -1E81 1E80 -1E83 1E82 -1E85 1E84 -1E87 1E86 -1E89 1E88 -1E8B 1E8A -1E8D 1E8C -1E8F 1E8E -1E91 1E90 -1E93 1E92 -1E95 1E94 -1E96 . -1E97 . -1E98 . -1E99 . -1E9A . -1E9C . -1E9D . -1E9F . -1EA1 1EA0 -1EA3 1EA2 -1EA5 1EA4 -1EA7 1EA6 -1EA9 1EA8 -1EAB 1EAA -1EAD 1EAC -1EAF 1EAE -1EB1 1EB0 -1EB3 1EB2 -1EB5 1EB4 -1EB7 1EB6 -1EB9 1EB8 -1EBB 1EBA -1EBD 1EBC -1EBF 1EBE -1EC1 1EC0 -1EC3 1EC2 -1EC5 1EC4 -1EC7 1EC6 -1EC9 1EC8 -1ECB 1ECA -1ECD 1ECC -1ECF 1ECE -1ED1 1ED0 -1ED3 1ED2 -1ED5 1ED4 -1ED7 1ED6 -1ED9 1ED8 -1EDB 1EDA -1EDD 1EDC -1EDF 1EDE -1EE1 1EE0 -1EE3 1EE2 -1EE5 1EE4 -1EE7 1EE6 -1EE9 1EE8 -1EEB 1EEA -1EED 1EEC -1EEF 1EEE -1EF1 1EF0 -1EF3 1EF2 -1EF5 1EF4 -1EF7 1EF6 -1EF9 1EF8 -1EFB 1EFA -1EFD 1EFC -1EFF 1EFE -1F00 1F08 -1F01 1F09 -1F02 1F0A -1F03 1F0B -1F04 1F0C -1F05 1F0D -1F06 1F0E -1F07 1F0F -1F10 1F18 -1F11 1F19 -1F12 1F1A -1F13 1F1B -1F14 1F1C -1F15 1F1D -1F20 1F28 -1F21 1F29 -1F22 1F2A -1F23 1F2B -1F24 1F2C -1F25 1F2D -1F26 1F2E -1F27 1F2F -1F30 1F38 -1F31 1F39 -1F32 1F3A -1F33 1F3B -1F34 1F3C -1F35 1F3D -1F36 1F3E -1F37 1F3F -1F40 1F48 -1F41 1F49 -1F42 1F4A -1F43 1F4B -1F44 1F4C -1F45 1F4D -1F50 . -1F51 1F59 -1F52 . -1F53 1F5B -1F54 . -1F55 1F5D -1F56 . -1F57 1F5F -1F60 1F68 -1F61 1F69 -1F62 1F6A -1F63 1F6B -1F64 1F6C -1F65 1F6D -1F66 1F6E -1F67 1F6F -1F70 1FBA -1F71 1FBB -1F72 1FC8 -1F73 1FC9 -1F74 1FCA -1F75 1FCB -1F76 1FDA -1F77 1FDB -1F78 1FF8 -1F79 1FF9 -1F7A 1FEA -1F7B 1FEB -1F7C 1FFA -1F7D 1FFB -1F80 1F88 -1F81 1F89 -1F82 1F8A -1F83 1F8B -1F84 1F8C -1F85 1F8D -1F86 1F8E -1F87 1F8F -1F90 1F98 -1F91 1F99 -1F92 1F9A -1F93 1F9B -1F94 1F9C -1F95 1F9D -1F96 1F9E -1F97 1F9F -1FA0 1FA8 -1FA1 1FA9 -1FA2 1FAA -1FA3 1FAB -1FA4 1FAC -1FA5 1FAD -1FA6 1FAE -1FA7 1FAF -1FB0 1FB8 -1FB1 1FB9 -1FB2 . -1FB3 1FBC -1FB4 . -1FB6 . -1FB7 . -1FC2 . -1FC3 1FCC -1FC4 . -1FC6 . -1FC7 . -1FD0 1FD8 -1FD1 1FD9 -1FD2 . -1FD3 . -1FD6 . -1FD7 . -1FE0 1FE8 -1FE1 1FE9 -1FE2 . -1FE3 . -1FE4 . -1FE5 1FEC -1FE6 . -1FE7 . -1FF2 . -1FF3 1FFC -1FF4 . -1FF6 . -1FF7 . -2071 . -207F . -2090 . -2091 . -2092 . -2093 . -2094 . -2095 . -2096 . -2097 . -2098 . -2099 . -209A . -209B . -209C . -2102 . -2107 . -210A . -210B . -210C . -210D . -210E . -210F . -2110 . -2111 . -2112 . -2113 . -2115 . -2119 . -211A . -211B . -211C . -211D . -2124 . -2128 . -212C . -212D . -212F . -2130 . -2131 . -214E 2132 -2133 . -2134 . -2135 . -2136 . -2137 . -2138 . -2139 . -213C . -213D . -213E . -213F . -2145 . -2146 . -2147 . -2148 . -2149 . -2184 2183 -2C30 2C00 -2C31 2C01 -2C32 2C02 -2C33 2C03 -2C34 2C04 -2C35 2C05 -2C36 2C06 -2C37 2C07 -2C38 2C08 -2C39 2C09 -2C3A 2C0A -2C3B 2C0B -2C3C 2C0C -2C3D 2C0D -2C3E 2C0E -2C3F 2C0F -2C40 2C10 -2C41 2C11 -2C42 2C12 -2C43 2C13 -2C44 2C14 -2C45 2C15 -2C46 2C16 -2C47 2C17 -2C48 2C18 -2C49 2C19 -2C4A 2C1A -2C4B 2C1B -2C4C 2C1C -2C4D 2C1D -2C4E 2C1E -2C4F 2C1F -2C50 2C20 -2C51 2C21 -2C52 2C22 -2C53 2C23 -2C54 2C24 -2C55 2C25 -2C56 2C26 -2C57 2C27 -2C58 2C28 -2C59 2C29 -2C5A 2C2A -2C5B 2C2B -2C5C 2C2C -2C5D 2C2D -2C5E 2C2E -2C61 2C60 -2C68 2C67 -2C6A 2C69 -2C6C 2C6B -2C71 . -2C73 2C72 -2C74 . -2C76 2C75 -2C77 . -2C78 . -2C79 . -2C7A . -2C7B . -2C7C . -2C7D . -2C81 2C80 -2C83 2C82 -2C85 2C84 -2C87 2C86 -2C89 2C88 -2C8B 2C8A -2C8D 2C8C -2C8F 2C8E -2C91 2C90 -2C93 2C92 -2C95 2C94 -2C97 2C96 -2C99 2C98 -2C9B 2C9A -2C9D 2C9C -2C9F 2C9E -2CA1 2CA0 -2CA3 2CA2 -2CA5 2CA4 -2CA7 2CA6 -2CA9 2CA8 -2CAB 2CAA -2CAD 2CAC -2CAF 2CAE -2CB1 2CB0 -2CB3 2CB2 -2CB5 2CB4 -2CB7 2CB6 -2CB9 2CB8 -2CBB 2CBA -2CBD 2CBC -2CBF 2CBE -2CC1 2CC0 -2CC3 2CC2 -2CC5 2CC4 -2CC7 2CC6 -2CC9 2CC8 -2CCB 2CCA -2CCD 2CCC -2CCF 2CCE -2CD1 2CD0 -2CD3 2CD2 -2CD5 2CD4 -2CD7 2CD6 -2CD9 2CD8 -2CDB 2CDA -2CDD 2CDC -2CDF 2CDE -2CE1 2CE0 -2CE3 2CE2 -2CE4 . -2CEC 2CEB -2CEE 2CED -2CF3 2CF2 -2D30 . -2D31 . -2D32 . -2D33 . -2D34 . -2D35 . -2D36 . -2D37 . -2D38 . -2D39 . -2D3A . -2D3B . -2D3C . -2D3D . -2D3E . -2D3F . -2D40 . -2D41 . -2D42 . -2D43 . -2D44 . -2D45 . -2D46 . -2D47 . -2D48 . -2D49 . -2D4A . -2D4B . -2D4C . -2D4D . -2D4E . -2D4F . -2D50 . -2D51 . -2D52 . -2D53 . -2D54 . -2D55 . -2D56 . -2D57 . -2D58 . -2D59 . -2D5A . -2D5B . -2D5C . -2D5D . -2D5E . -2D5F . -2D60 . -2D61 . -2D62 . -2D63 . -2D64 . -2D65 . -2D66 . -2D67 . -2D6F . -2D80 . -2D81 . -2D82 . -2D83 . -2D84 . -2D85 . -2D86 . -2D87 . -2D88 . -2D89 . -2D8A . -2D8B . -2D8C . -2D8D . -2D8E . -2D8F . -2D90 . -2D91 . -2D92 . -2D93 . -2D94 . -2D95 . -2D96 . -2DA0 . -2DA1 . -2DA2 . -2DA3 . -2DA4 . -2DA5 . -2DA6 . -2DA8 . -2DA9 . -2DAA . -2DAB . -2DAC . -2DAD . -2DAE . -2DB0 . -2DB1 . -2DB2 . -2DB3 . -2DB4 . -2DB5 . -2DB6 . -2DB8 . -2DB9 . -2DBA . -2DBB . -2DBC . -2DBD . -2DBE . -2DC0 . -2DC1 . -2DC2 . -2DC3 . -2DC4 . -2DC5 . -2DC6 . -2DC8 . -2DC9 . -2DCA . -2DCB . -2DCC . -2DCD . -2DCE . -2DD0 . -2DD1 . -2DD2 . -2DD3 . -2DD4 . -2DD5 . -2DD6 . -2DD8 . -2DD9 . -2DDA . -2DDB . -2DDC . -2DDD . -2DDE . -2E2F . -3005 . -3006 . -3031 . -3032 . -3033 . -3034 . -3035 . -303B . -303C . -3041 . -3042 . -3043 . -3044 . -3045 . -3046 . -3047 . -3048 . -3049 . -304A . -304B . -304C . -304D . -304E . -304F . -3050 . -3051 . -3052 . -3053 . -3054 . -3055 . -3056 . -3057 . -3058 . -3059 . -305A . -305B . -305C . -305D . -305E . -305F . -3060 . -3061 . -3062 . -3063 . -3064 . -3065 . -3066 . -3067 . -3068 . -3069 . -306A . -306B . -306C . -306D . -306E . -306F . -3070 . -3071 . -3072 . -3073 . -3074 . -3075 . -3076 . -3077 . -3078 . -3079 . -307A . -307B . -307C . -307D . -307E . -307F . -3080 . -3081 . -3082 . -3083 . -3084 . -3085 . -3086 . -3087 . -3088 . -3089 . -308A . -308B . -308C . -308D . -308E . -308F . -3090 . -3091 . -3092 . -3093 . -3094 . -3095 . -3096 . -309D . -309E . -309F . -30A1 . -30A2 . -30A3 . -30A4 . -30A5 . -30A6 . -30A7 . -30A8 . -30A9 . -30AA . -30AB . -30AC . -30AD . -30AE . -30AF . -30B0 . -30B1 . -30B2 . -30B3 . -30B4 . -30B5 . -30B6 . -30B7 . -30B8 . -30B9 . -30BA . -30BB . -30BC . -30BD . -30BE . -30BF . -30C0 . -30C1 . -30C2 . -30C3 . -30C4 . -30C5 . -30C6 . -30C7 . -30C8 . -30C9 . -30CA . -30CB . -30CC . -30CD . -30CE . -30CF . -30D0 . -30D1 . -30D2 . -30D3 . -30D4 . -30D5 . -30D6 . -30D7 . -30D8 . -30D9 . -30DA . -30DB . -30DC . -30DD . -30DE . -30DF . -30E0 . -30E1 . -30E2 . -30E3 . -30E4 . -30E5 . -30E6 . -30E7 . -30E8 . -30E9 . -30EA . -30EB . -30EC . -30ED . -30EE . -30EF . -30F0 . -30F1 . -30F2 . -30F3 . -30F4 . -30F5 . -30F6 . -30F7 . -30F8 . -30F9 . -30FA . -30FC . -30FD . -30FE . -30FF . -3105 . -3106 . -3107 . -3108 . -3109 . -310A . -310B . -310C . -310D . -310E . -310F . -3110 . -3111 . -3112 . -3113 . -3114 . -3115 . -3116 . -3117 . -3118 . -3119 . -311A . -311B . -311C . -311D . -311E . -311F . -3120 . -3121 . -3122 . -3123 . -3124 . -3125 . -3126 . -3127 . -3128 . -3129 . -312A . -312B . -312C . -312D . -3131 . -3132 . -3133 . -3134 . -3135 . -3136 . -3137 . -3138 . -3139 . -313A . -313B . -313C . -313D . -313E . -313F . -3140 . -3141 . -3142 . -3143 . -3144 . -3145 . -3146 . -3147 . -3148 . -3149 . -314A . -314B . -314C . -314D . -314E . -314F . -3150 . -3151 . -3152 . -3153 . -3154 . -3155 . -3156 . -3157 . -3158 . -3159 . -315A . -315B . -315C . -315D . -315E . -315F . -3160 . -3161 . -3162 . -3163 . -3164 . -3165 . -3166 . -3167 . -3168 . -3169 . -316A . -316B . -316C . -316D . -316E . -316F . -3170 . -3171 . -3172 . -3173 . -3174 . -3175 . -3176 . -3177 . -3178 . -3179 . -317A . -317B . -317C . -317D . -317E . -317F . -3180 . -3181 . -3182 . -3183 . -3184 . -3185 . -3186 . -3187 . -3188 . -3189 . -318A . -318B . -318C . -318D . -318E . -31A0 . -31A1 . -31A2 . -31A3 . -31A4 . -31A5 . -31A6 . -31A7 . -31A8 . -31A9 . -31AA . -31AB . -31AC . -31AD . -31AE . -31AF . -31B0 . -31B1 . -31B2 . -31B3 . -31B4 . -31B5 . -31B6 . -31B7 . -31B8 . -31B9 . -31BA . -31F0 . -31F1 . -31F2 . -31F3 . -31F4 . -31F5 . -31F6 . -31F7 . -31F8 . -31F9 . -31FA . -31FB . -31FC . -31FD . -31FE . -31FF . -A000 . -A001 . -A002 . -A003 . -A004 . -A005 . -A006 . -A007 . -A008 . -A009 . -A00A . -A00B . -A00C . -A00D . -A00E . -A00F . -A010 . -A011 . -A012 . -A013 . -A014 . -A015 . -A016 . -A017 . -A018 . -A019 . -A01A . -A01B . -A01C . -A01D . -A01E . -A01F . -A020 . -A021 . -A022 . -A023 . -A024 . -A025 . -A026 . -A027 . -A028 . -A029 . -A02A . -A02B . -A02C . -A02D . -A02E . -A02F . -A030 . -A031 . -A032 . -A033 . -A034 . -A035 . -A036 . -A037 . -A038 . -A039 . -A03A . -A03B . -A03C . -A03D . -A03E . -A03F . -A040 . -A041 . -A042 . -A043 . -A044 . -A045 . -A046 . -A047 . -A048 . -A049 . -A04A . -A04B . -A04C . -A04D . -A04E . -A04F . -A050 . -A051 . -A052 . -A053 . -A054 . -A055 . -A056 . -A057 . -A058 . -A059 . -A05A . -A05B . -A05C . -A05D . -A05E . -A05F . -A060 . -A061 . -A062 . -A063 . -A064 . -A065 . -A066 . -A067 . -A068 . -A069 . -A06A . -A06B . -A06C . -A06D . -A06E . -A06F . -A070 . -A071 . -A072 . -A073 . -A074 . -A075 . -A076 . -A077 . -A078 . -A079 . -A07A . -A07B . -A07C . -A07D . -A07E . -A07F . -A080 . -A081 . -A082 . -A083 . -A084 . -A085 . -A086 . -A087 . -A088 . -A089 . -A08A . -A08B . -A08C . -A08D . -A08E . -A08F . -A090 . -A091 . -A092 . -A093 . -A094 . -A095 . -A096 . -A097 . -A098 . -A099 . -A09A . -A09B . -A09C . -A09D . -A09E . -A09F . -A0A0 . -A0A1 . -A0A2 . -A0A3 . -A0A4 . -A0A5 . -A0A6 . -A0A7 . -A0A8 . -A0A9 . -A0AA . -A0AB . -A0AC . -A0AD . -A0AE . -A0AF . -A0B0 . -A0B1 . -A0B2 . -A0B3 . -A0B4 . -A0B5 . -A0B6 . -A0B7 . -A0B8 . -A0B9 . -A0BA . -A0BB . -A0BC . -A0BD . -A0BE . -A0BF . -A0C0 . -A0C1 . -A0C2 . -A0C3 . -A0C4 . -A0C5 . -A0C6 . -A0C7 . -A0C8 . -A0C9 . -A0CA . -A0CB . -A0CC . -A0CD . -A0CE . -A0CF . -A0D0 . -A0D1 . -A0D2 . -A0D3 . -A0D4 . -A0D5 . -A0D6 . -A0D7 . -A0D8 . -A0D9 . -A0DA . -A0DB . -A0DC . -A0DD . -A0DE . -A0DF . -A0E0 . -A0E1 . -A0E2 . -A0E3 . -A0E4 . -A0E5 . -A0E6 . -A0E7 . -A0E8 . -A0E9 . -A0EA . -A0EB . -A0EC . -A0ED . -A0EE . -A0EF . -A0F0 . -A0F1 . -A0F2 . -A0F3 . -A0F4 . -A0F5 . -A0F6 . -A0F7 . -A0F8 . -A0F9 . -A0FA . -A0FB . -A0FC . -A0FD . -A0FE . -A0FF . -A100 . -A101 . -A102 . -A103 . -A104 . -A105 . -A106 . -A107 . -A108 . -A109 . -A10A . -A10B . -A10C . -A10D . -A10E . -A10F . -A110 . -A111 . -A112 . -A113 . -A114 . -A115 . -A116 . -A117 . -A118 . -A119 . -A11A . -A11B . -A11C . -A11D . -A11E . -A11F . -A120 . -A121 . -A122 . -A123 . -A124 . -A125 . -A126 . -A127 . -A128 . -A129 . -A12A . -A12B . -A12C . -A12D . -A12E . -A12F . -A130 . -A131 . -A132 . -A133 . -A134 . -A135 . -A136 . -A137 . -A138 . -A139 . -A13A . -A13B . -A13C . -A13D . -A13E . -A13F . -A140 . -A141 . -A142 . -A143 . -A144 . -A145 . -A146 . -A147 . -A148 . -A149 . -A14A . -A14B . -A14C . -A14D . -A14E . -A14F . -A150 . -A151 . -A152 . -A153 . -A154 . -A155 . -A156 . -A157 . -A158 . -A159 . -A15A . -A15B . -A15C . -A15D . -A15E . -A15F . -A160 . -A161 . -A162 . -A163 . -A164 . -A165 . -A166 . -A167 . -A168 . -A169 . -A16A . -A16B . -A16C . -A16D . -A16E . -A16F . -A170 . -A171 . -A172 . -A173 . -A174 . -A175 . -A176 . -A177 . -A178 . -A179 . -A17A . -A17B . -A17C . -A17D . -A17E . -A17F . -A180 . -A181 . -A182 . -A183 . -A184 . -A185 . -A186 . -A187 . -A188 . -A189 . -A18A . -A18B . -A18C . -A18D . -A18E . -A18F . -A190 . -A191 . -A192 . -A193 . -A194 . -A195 . -A196 . -A197 . -A198 . -A199 . -A19A . -A19B . -A19C . -A19D . -A19E . -A19F . -A1A0 . -A1A1 . -A1A2 . -A1A3 . -A1A4 . -A1A5 . -A1A6 . -A1A7 . -A1A8 . -A1A9 . -A1AA . -A1AB . -A1AC . -A1AD . -A1AE . -A1AF . -A1B0 . -A1B1 . -A1B2 . -A1B3 . -A1B4 . -A1B5 . -A1B6 . -A1B7 . -A1B8 . -A1B9 . -A1BA . -A1BB . -A1BC . -A1BD . -A1BE . -A1BF . -A1C0 . -A1C1 . -A1C2 . -A1C3 . -A1C4 . -A1C5 . -A1C6 . -A1C7 . -A1C8 . -A1C9 . -A1CA . -A1CB . -A1CC . -A1CD . -A1CE . -A1CF . -A1D0 . -A1D1 . -A1D2 . -A1D3 . -A1D4 . -A1D5 . -A1D6 . -A1D7 . -A1D8 . -A1D9 . -A1DA . -A1DB . -A1DC . -A1DD . -A1DE . -A1DF . -A1E0 . -A1E1 . -A1E2 . -A1E3 . -A1E4 . -A1E5 . -A1E6 . -A1E7 . -A1E8 . -A1E9 . -A1EA . -A1EB . -A1EC . -A1ED . -A1EE . -A1EF . -A1F0 . -A1F1 . -A1F2 . -A1F3 . -A1F4 . -A1F5 . -A1F6 . -A1F7 . -A1F8 . -A1F9 . -A1FA . -A1FB . -A1FC . -A1FD . -A1FE . -A1FF . -A200 . -A201 . -A202 . -A203 . -A204 . -A205 . -A206 . -A207 . -A208 . -A209 . -A20A . -A20B . -A20C . -A20D . -A20E . -A20F . -A210 . -A211 . -A212 . -A213 . -A214 . -A215 . -A216 . -A217 . -A218 . -A219 . -A21A . -A21B . -A21C . -A21D . -A21E . -A21F . -A220 . -A221 . -A222 . -A223 . -A224 . -A225 . -A226 . -A227 . -A228 . -A229 . -A22A . -A22B . -A22C . -A22D . -A22E . -A22F . -A230 . -A231 . -A232 . -A233 . -A234 . -A235 . -A236 . -A237 . -A238 . -A239 . -A23A . -A23B . -A23C . -A23D . -A23E . -A23F . -A240 . -A241 . -A242 . -A243 . -A244 . -A245 . -A246 . -A247 . -A248 . -A249 . -A24A . -A24B . -A24C . -A24D . -A24E . -A24F . -A250 . -A251 . -A252 . -A253 . -A254 . -A255 . -A256 . -A257 . -A258 . -A259 . -A25A . -A25B . -A25C . -A25D . -A25E . -A25F . -A260 . -A261 . -A262 . -A263 . -A264 . -A265 . -A266 . -A267 . -A268 . -A269 . -A26A . -A26B . -A26C . -A26D . -A26E . -A26F . -A270 . -A271 . -A272 . -A273 . -A274 . -A275 . -A276 . -A277 . -A278 . -A279 . -A27A . -A27B . -A27C . -A27D . -A27E . -A27F . -A280 . -A281 . -A282 . -A283 . -A284 . -A285 . -A286 . -A287 . -A288 . -A289 . -A28A . -A28B . -A28C . -A28D . -A28E . -A28F . -A290 . -A291 . -A292 . -A293 . -A294 . -A295 . -A296 . -A297 . -A298 . -A299 . -A29A . -A29B . -A29C . -A29D . -A29E . -A29F . -A2A0 . -A2A1 . -A2A2 . -A2A3 . -A2A4 . -A2A5 . -A2A6 . -A2A7 . -A2A8 . -A2A9 . -A2AA . -A2AB . -A2AC . -A2AD . -A2AE . -A2AF . -A2B0 . -A2B1 . -A2B2 . -A2B3 . -A2B4 . -A2B5 . -A2B6 . -A2B7 . -A2B8 . -A2B9 . -A2BA . -A2BB . -A2BC . -A2BD . -A2BE . -A2BF . -A2C0 . -A2C1 . -A2C2 . -A2C3 . -A2C4 . -A2C5 . -A2C6 . -A2C7 . -A2C8 . -A2C9 . -A2CA . -A2CB . -A2CC . -A2CD . -A2CE . -A2CF . -A2D0 . -A2D1 . -A2D2 . -A2D3 . -A2D4 . -A2D5 . -A2D6 . -A2D7 . -A2D8 . -A2D9 . -A2DA . -A2DB . -A2DC . -A2DD . -A2DE . -A2DF . -A2E0 . -A2E1 . -A2E2 . -A2E3 . -A2E4 . -A2E5 . -A2E6 . -A2E7 . -A2E8 . -A2E9 . -A2EA . -A2EB . -A2EC . -A2ED . -A2EE . -A2EF . -A2F0 . -A2F1 . -A2F2 . -A2F3 . -A2F4 . -A2F5 . -A2F6 . -A2F7 . -A2F8 . -A2F9 . -A2FA . -A2FB . -A2FC . -A2FD . -A2FE . -A2FF . -A300 . -A301 . -A302 . -A303 . -A304 . -A305 . -A306 . -A307 . -A308 . -A309 . -A30A . -A30B . -A30C . -A30D . -A30E . -A30F . -A310 . -A311 . -A312 . -A313 . -A314 . -A315 . -A316 . -A317 . -A318 . -A319 . -A31A . -A31B . -A31C . -A31D . -A31E . -A31F . -A320 . -A321 . -A322 . -A323 . -A324 . -A325 . -A326 . -A327 . -A328 . -A329 . -A32A . -A32B . -A32C . -A32D . -A32E . -A32F . -A330 . -A331 . -A332 . -A333 . -A334 . -A335 . -A336 . -A337 . -A338 . -A339 . -A33A . -A33B . -A33C . -A33D . -A33E . -A33F . -A340 . -A341 . -A342 . -A343 . -A344 . -A345 . -A346 . -A347 . -A348 . -A349 . -A34A . -A34B . -A34C . -A34D . -A34E . -A34F . -A350 . -A351 . -A352 . -A353 . -A354 . -A355 . -A356 . -A357 . -A358 . -A359 . -A35A . -A35B . -A35C . -A35D . -A35E . -A35F . -A360 . -A361 . -A362 . -A363 . -A364 . -A365 . -A366 . -A367 . -A368 . -A369 . -A36A . -A36B . -A36C . -A36D . -A36E . -A36F . -A370 . -A371 . -A372 . -A373 . -A374 . -A375 . -A376 . -A377 . -A378 . -A379 . -A37A . -A37B . -A37C . -A37D . -A37E . -A37F . -A380 . -A381 . -A382 . -A383 . -A384 . -A385 . -A386 . -A387 . -A388 . -A389 . -A38A . -A38B . -A38C . -A38D . -A38E . -A38F . -A390 . -A391 . -A392 . -A393 . -A394 . -A395 . -A396 . -A397 . -A398 . -A399 . -A39A . -A39B . -A39C . -A39D . -A39E . -A39F . -A3A0 . -A3A1 . -A3A2 . -A3A3 . -A3A4 . -A3A5 . -A3A6 . -A3A7 . -A3A8 . -A3A9 . -A3AA . -A3AB . -A3AC . -A3AD . -A3AE . -A3AF . -A3B0 . -A3B1 . -A3B2 . -A3B3 . -A3B4 . -A3B5 . -A3B6 . -A3B7 . -A3B8 . -A3B9 . -A3BA . -A3BB . -A3BC . -A3BD . -A3BE . -A3BF . -A3C0 . -A3C1 . -A3C2 . -A3C3 . -A3C4 . -A3C5 . -A3C6 . -A3C7 . -A3C8 . -A3C9 . -A3CA . -A3CB . -A3CC . -A3CD . -A3CE . -A3CF . -A3D0 . -A3D1 . -A3D2 . -A3D3 . -A3D4 . -A3D5 . -A3D6 . -A3D7 . -A3D8 . -A3D9 . -A3DA . -A3DB . -A3DC . -A3DD . -A3DE . -A3DF . -A3E0 . -A3E1 . -A3E2 . -A3E3 . -A3E4 . -A3E5 . -A3E6 . -A3E7 . -A3E8 . -A3E9 . -A3EA . -A3EB . -A3EC . -A3ED . -A3EE . -A3EF . -A3F0 . -A3F1 . -A3F2 . -A3F3 . -A3F4 . -A3F5 . -A3F6 . -A3F7 . -A3F8 . -A3F9 . -A3FA . -A3FB . -A3FC . -A3FD . -A3FE . -A3FF . -A400 . -A401 . -A402 . -A403 . -A404 . -A405 . -A406 . -A407 . -A408 . -A409 . -A40A . -A40B . -A40C . -A40D . -A40E . -A40F . -A410 . -A411 . -A412 . -A413 . -A414 . -A415 . -A416 . -A417 . -A418 . -A419 . -A41A . -A41B . -A41C . -A41D . -A41E . -A41F . -A420 . -A421 . -A422 . -A423 . -A424 . -A425 . -A426 . -A427 . -A428 . -A429 . -A42A . -A42B . -A42C . -A42D . -A42E . -A42F . -A430 . -A431 . -A432 . -A433 . -A434 . -A435 . -A436 . -A437 . -A438 . -A439 . -A43A . -A43B . -A43C . -A43D . -A43E . -A43F . -A440 . -A441 . -A442 . -A443 . -A444 . -A445 . -A446 . -A447 . -A448 . -A449 . -A44A . -A44B . -A44C . -A44D . -A44E . -A44F . -A450 . -A451 . -A452 . -A453 . -A454 . -A455 . -A456 . -A457 . -A458 . -A459 . -A45A . -A45B . -A45C . -A45D . -A45E . -A45F . -A460 . -A461 . -A462 . -A463 . -A464 . -A465 . -A466 . -A467 . -A468 . -A469 . -A46A . -A46B . -A46C . -A46D . -A46E . -A46F . -A470 . -A471 . -A472 . -A473 . -A474 . -A475 . -A476 . -A477 . -A478 . -A479 . -A47A . -A47B . -A47C . -A47D . -A47E . -A47F . -A480 . -A481 . -A482 . -A483 . -A484 . -A485 . -A486 . -A487 . -A488 . -A489 . -A48A . -A48B . -A48C . -A4D0 . -A4D1 . -A4D2 . -A4D3 . -A4D4 . -A4D5 . -A4D6 . -A4D7 . -A4D8 . -A4D9 . -A4DA . -A4DB . -A4DC . -A4DD . -A4DE . -A4DF . -A4E0 . -A4E1 . -A4E2 . -A4E3 . -A4E4 . -A4E5 . -A4E6 . -A4E7 . -A4E8 . -A4E9 . -A4EA . -A4EB . -A4EC . -A4ED . -A4EE . -A4EF . -A4F0 . -A4F1 . -A4F2 . -A4F3 . -A4F4 . -A4F5 . -A4F6 . -A4F7 . -A4F8 . -A4F9 . -A4FA . -A4FB . -A4FC . -A4FD . -A500 . -A501 . -A502 . -A503 . -A504 . -A505 . -A506 . -A507 . -A508 . -A509 . -A50A . -A50B . -A50C . -A50D . -A50E . -A50F . -A510 . -A511 . -A512 . -A513 . -A514 . -A515 . -A516 . -A517 . -A518 . -A519 . -A51A . -A51B . -A51C . -A51D . -A51E . -A51F . -A520 . -A521 . -A522 . -A523 . -A524 . -A525 . -A526 . -A527 . -A528 . -A529 . -A52A . -A52B . -A52C . -A52D . -A52E . -A52F . -A530 . -A531 . -A532 . -A533 . -A534 . -A535 . -A536 . -A537 . -A538 . -A539 . -A53A . -A53B . -A53C . -A53D . -A53E . -A53F . -A540 . -A541 . -A542 . -A543 . -A544 . -A545 . -A546 . -A547 . -A548 . -A549 . -A54A . -A54B . -A54C . -A54D . -A54E . -A54F . -A550 . -A551 . -A552 . -A553 . -A554 . -A555 . -A556 . -A557 . -A558 . -A559 . -A55A . -A55B . -A55C . -A55D . -A55E . -A55F . -A560 . -A561 . -A562 . -A563 . -A564 . -A565 . -A566 . -A567 . -A568 . -A569 . -A56A . -A56B . -A56C . -A56D . -A56E . -A56F . -A570 . -A571 . -A572 . -A573 . -A574 . -A575 . -A576 . -A577 . -A578 . -A579 . -A57A . -A57B . -A57C . -A57D . -A57E . -A57F . -A580 . -A581 . -A582 . -A583 . -A584 . -A585 . -A586 . -A587 . -A588 . -A589 . -A58A . -A58B . -A58C . -A58D . -A58E . -A58F . -A590 . -A591 . -A592 . -A593 . -A594 . -A595 . -A596 . -A597 . -A598 . -A599 . -A59A . -A59B . -A59C . -A59D . -A59E . -A59F . -A5A0 . -A5A1 . -A5A2 . -A5A3 . -A5A4 . -A5A5 . -A5A6 . -A5A7 . -A5A8 . -A5A9 . -A5AA . -A5AB . -A5AC . -A5AD . -A5AE . -A5AF . -A5B0 . -A5B1 . -A5B2 . -A5B3 . -A5B4 . -A5B5 . -A5B6 . -A5B7 . -A5B8 . -A5B9 . -A5BA . -A5BB . -A5BC . -A5BD . -A5BE . -A5BF . -A5C0 . -A5C1 . -A5C2 . -A5C3 . -A5C4 . -A5C5 . -A5C6 . -A5C7 . -A5C8 . -A5C9 . -A5CA . -A5CB . -A5CC . -A5CD . -A5CE . -A5CF . -A5D0 . -A5D1 . -A5D2 . -A5D3 . -A5D4 . -A5D5 . -A5D6 . -A5D7 . -A5D8 . -A5D9 . -A5DA . -A5DB . -A5DC . -A5DD . -A5DE . -A5DF . -A5E0 . -A5E1 . -A5E2 . -A5E3 . -A5E4 . -A5E5 . -A5E6 . -A5E7 . -A5E8 . -A5E9 . -A5EA . -A5EB . -A5EC . -A5ED . -A5EE . -A5EF . -A5F0 . -A5F1 . -A5F2 . -A5F3 . -A5F4 . -A5F5 . -A5F6 . -A5F7 . -A5F8 . -A5F9 . -A5FA . -A5FB . -A5FC . -A5FD . -A5FE . -A5FF . -A600 . -A601 . -A602 . -A603 . -A604 . -A605 . -A606 . -A607 . -A608 . -A609 . -A60A . -A60B . -A60C . -A610 . -A611 . -A612 . -A613 . -A614 . -A615 . -A616 . -A617 . -A618 . -A619 . -A61A . -A61B . -A61C . -A61D . -A61E . -A61F . -A62A . -A62B . -A641 A640 -A643 A642 -A645 A644 -A647 A646 -A649 A648 -A64B A64A -A64D A64C -A64F A64E -A651 A650 -A653 A652 -A655 A654 -A657 A656 -A659 A658 -A65B A65A -A65D A65C -A65F A65E -A661 A660 -A663 A662 -A665 A664 -A667 A666 -A669 A668 -A66B A66A -A66D A66C -A66E . -A67F . -A681 A680 -A683 A682 -A685 A684 -A687 A686 -A689 A688 -A68B A68A -A68D A68C -A68F A68E -A691 A690 -A693 A692 -A695 A694 -A697 A696 -A6A0 . -A6A1 . -A6A2 . -A6A3 . -A6A4 . -A6A5 . -A6A6 . -A6A7 . -A6A8 . -A6A9 . -A6AA . -A6AB . -A6AC . -A6AD . -A6AE . -A6AF . -A6B0 . -A6B1 . -A6B2 . -A6B3 . -A6B4 . -A6B5 . -A6B6 . -A6B7 . -A6B8 . -A6B9 . -A6BA . -A6BB . -A6BC . -A6BD . -A6BE . -A6BF . -A6C0 . -A6C1 . -A6C2 . -A6C3 . -A6C4 . -A6C5 . -A6C6 . -A6C7 . -A6C8 . -A6C9 . -A6CA . -A6CB . -A6CC . -A6CD . -A6CE . -A6CF . -A6D0 . -A6D1 . -A6D2 . -A6D3 . -A6D4 . -A6D5 . -A6D6 . -A6D7 . -A6D8 . -A6D9 . -A6DA . -A6DB . -A6DC . -A6DD . -A6DE . -A6DF . -A6E0 . -A6E1 . -A6E2 . -A6E3 . -A6E4 . -A6E5 . -A717 . -A718 . -A719 . -A71A . -A71B . -A71C . -A71D . -A71E . -A71F . -A723 A722 -A725 A724 -A727 A726 -A729 A728 -A72B A72A -A72D A72C -A72F A72E -A730 . -A731 . -A733 A732 -A735 A734 -A737 A736 -A739 A738 -A73B A73A -A73D A73C -A73F A73E -A741 A740 -A743 A742 -A745 A744 -A747 A746 -A749 A748 -A74B A74A -A74D A74C -A74F A74E -A751 A750 -A753 A752 -A755 A754 -A757 A756 -A759 A758 -A75B A75A -A75D A75C -A75F A75E -A761 A760 -A763 A762 -A765 A764 -A767 A766 -A769 A768 -A76B A76A -A76D A76C -A76F A76E -A770 . -A771 . -A772 . -A773 . -A774 . -A775 . -A776 . -A777 . -A778 . -A77A A779 -A77C A77B -A77F A77E -A781 A780 -A783 A782 -A785 A784 -A787 A786 -A788 . -A78C A78B -A78E . -A791 A790 -A793 A792 -A7A1 A7A0 -A7A3 A7A2 -A7A5 A7A4 -A7A7 A7A6 -A7A9 A7A8 -A7F8 . -A7F9 . -A7FA . -A7FB . -A7FC . -A7FD . -A7FE . -A7FF . -A800 . -A801 . -A803 . -A804 . -A805 . -A807 . -A808 . -A809 . -A80A . -A80C . -A80D . -A80E . -A80F . -A810 . -A811 . -A812 . -A813 . -A814 . -A815 . -A816 . -A817 . -A818 . -A819 . -A81A . -A81B . -A81C . -A81D . -A81E . -A81F . -A820 . -A821 . -A822 . -A840 . -A841 . -A842 . -A843 . -A844 . -A845 . -A846 . -A847 . -A848 . -A849 . -A84A . -A84B . -A84C . -A84D . -A84E . -A84F . -A850 . -A851 . -A852 . -A853 . -A854 . -A855 . -A856 . -A857 . -A858 . -A859 . -A85A . -A85B . -A85C . -A85D . -A85E . -A85F . -A860 . -A861 . -A862 . -A863 . -A864 . -A865 . -A866 . -A867 . -A868 . -A869 . -A86A . -A86B . -A86C . -A86D . -A86E . -A86F . -A870 . -A871 . -A872 . -A873 . -A882 . -A883 . -A884 . -A885 . -A886 . -A887 . -A888 . -A889 . -A88A . -A88B . -A88C . -A88D . -A88E . -A88F . -A890 . -A891 . -A892 . -A893 . -A894 . -A895 . -A896 . -A897 . -A898 . -A899 . -A89A . -A89B . -A89C . -A89D . -A89E . -A89F . -A8A0 . -A8A1 . -A8A2 . -A8A3 . -A8A4 . -A8A5 . -A8A6 . -A8A7 . -A8A8 . -A8A9 . -A8AA . -A8AB . -A8AC . -A8AD . -A8AE . -A8AF . -A8B0 . -A8B1 . -A8B2 . -A8B3 . -A8F2 . -A8F3 . -A8F4 . -A8F5 . -A8F6 . -A8F7 . -A8FB . -A90A . -A90B . -A90C . -A90D . -A90E . -A90F . -A910 . -A911 . -A912 . -A913 . -A914 . -A915 . -A916 . -A917 . -A918 . -A919 . -A91A . -A91B . -A91C . -A91D . -A91E . -A91F . -A920 . -A921 . -A922 . -A923 . -A924 . -A925 . -A930 . -A931 . -A932 . -A933 . -A934 . -A935 . -A936 . -A937 . -A938 . -A939 . -A93A . -A93B . -A93C . -A93D . -A93E . -A93F . -A940 . -A941 . -A942 . -A943 . -A944 . -A945 . -A946 . -A960 . -A961 . -A962 . -A963 . -A964 . -A965 . -A966 . -A967 . -A968 . -A969 . -A96A . -A96B . -A96C . -A96D . -A96E . -A96F . -A970 . -A971 . -A972 . -A973 . -A974 . -A975 . -A976 . -A977 . -A978 . -A979 . -A97A . -A97B . -A97C . -A984 . -A985 . -A986 . -A987 . -A988 . -A989 . -A98A . -A98B . -A98C . -A98D . -A98E . -A98F . -A990 . -A991 . -A992 . -A993 . -A994 . -A995 . -A996 . -A997 . -A998 . -A999 . -A99A . -A99B . -A99C . -A99D . -A99E . -A99F . -A9A0 . -A9A1 . -A9A2 . -A9A3 . -A9A4 . -A9A5 . -A9A6 . -A9A7 . -A9A8 . -A9A9 . -A9AA . -A9AB . -A9AC . -A9AD . -A9AE . -A9AF . -A9B0 . -A9B1 . -A9B2 . -A9CF . -AA00 . -AA01 . -AA02 . -AA03 . -AA04 . -AA05 . -AA06 . -AA07 . -AA08 . -AA09 . -AA0A . -AA0B . -AA0C . -AA0D . -AA0E . -AA0F . -AA10 . -AA11 . -AA12 . -AA13 . -AA14 . -AA15 . -AA16 . -AA17 . -AA18 . -AA19 . -AA1A . -AA1B . -AA1C . -AA1D . -AA1E . -AA1F . -AA20 . -AA21 . -AA22 . -AA23 . -AA24 . -AA25 . -AA26 . -AA27 . -AA28 . -AA40 . -AA41 . -AA42 . -AA44 . -AA45 . -AA46 . -AA47 . -AA48 . -AA49 . -AA4A . -AA4B . -AA60 . -AA61 . -AA62 . -AA63 . -AA64 . -AA65 . -AA66 . -AA67 . -AA68 . -AA69 . -AA6A . -AA6B . -AA6C . -AA6D . -AA6E . -AA6F . -AA70 . -AA71 . -AA72 . -AA73 . -AA74 . -AA75 . -AA76 . -AA7A . -AA80 . -AA81 . -AA82 . -AA83 . -AA84 . -AA85 . -AA86 . -AA87 . -AA88 . -AA89 . -AA8A . -AA8B . -AA8C . -AA8D . -AA8E . -AA8F . -AA90 . -AA91 . -AA92 . -AA93 . -AA94 . -AA95 . -AA96 . -AA97 . -AA98 . -AA99 . -AA9A . -AA9B . -AA9C . -AA9D . -AA9E . -AA9F . -AAA0 . -AAA1 . -AAA2 . -AAA3 . -AAA4 . -AAA5 . -AAA6 . -AAA7 . -AAA8 . -AAA9 . -AAAA . -AAAB . -AAAC . -AAAD . -AAAE . -AAAF . -AAB1 . -AAB5 . -AAB6 . -AAB9 . -AABA . -AABB . -AABC . -AABD . -AAC0 . -AAC2 . -AADB . -AADC . -AADD . -AAE0 . -AAE1 . -AAE2 . -AAE3 . -AAE4 . -AAE5 . -AAE6 . -AAE7 . -AAE8 . -AAE9 . -AAEA . -AAF2 . -AAF3 . -AAF4 . -AB01 . -AB02 . -AB03 . -AB04 . -AB05 . -AB06 . -AB09 . -AB0A . -AB0B . -AB0C . -AB0D . -AB0E . -AB11 . -AB12 . -AB13 . -AB14 . -AB15 . -AB16 . -AB20 . -AB21 . -AB22 . -AB23 . -AB24 . -AB25 . -AB26 . -AB28 . -AB29 . -AB2A . -AB2B . -AB2C . -AB2D . -AB2E . -ABC0 . -ABC1 . -ABC2 . -ABC3 . -ABC4 . -ABC5 . -ABC6 . -ABC7 . -ABC8 . -ABC9 . -ABCA . -ABCB . -ABCC . -ABCD . -ABCE . -ABCF . -ABD0 . -ABD1 . -ABD2 . -ABD3 . -ABD4 . -ABD5 . -ABD6 . -ABD7 . -ABD8 . -ABD9 . -ABDA . -ABDB . -ABDC . -ABDD . -ABDE . -ABDF . -ABE0 . -ABE1 . -ABE2 . -D7B0 . -D7B1 . -D7B2 . -D7B3 . -D7B4 . -D7B5 . -D7B6 . -D7B7 . -D7B8 . -D7B9 . -D7BA . -D7BB . -D7BC . -D7BD . -D7BE . -D7BF . -D7C0 . -D7C1 . -D7C2 . -D7C3 . -D7C4 . -D7C5 . -D7C6 . -D7CB . -D7CC . -D7CD . -D7CE . -D7CF . -D7D0 . -D7D1 . -D7D2 . -D7D3 . -D7D4 . -D7D5 . -D7D6 . -D7D7 . -D7D8 . -D7D9 . -D7DA . -D7DB . -D7DC . -D7DD . -D7DE . -D7DF . -D7E0 . -D7E1 . -D7E2 . -D7E3 . -D7E4 . -D7E5 . -D7E6 . -D7E7 . -D7E8 . -D7E9 . -D7EA . -D7EB . -D7EC . -D7ED . -D7EE . -D7EF . -D7F0 . -D7F1 . -D7F2 . -D7F3 . -D7F4 . -D7F5 . -D7F6 . -D7F7 . -D7F8 . -D7F9 . -D7FA . -D7FB . -F900 . -F901 . -F902 . -F903 . -F904 . -F905 . -F906 . -F907 . -F908 . -F909 . -F90A . -F90B . -F90C . -F90D . -F90E . -F90F . -F910 . -F911 . -F912 . -F913 . -F914 . -F915 . -F916 . -F917 . -F918 . -F919 . -F91A . -F91B . -F91C . -F91D . -F91E . -F91F . -F920 . -F921 . -F922 . -F923 . -F924 . -F925 . -F926 . -F927 . -F928 . -F929 . -F92A . -F92B . -F92C . -F92D . -F92E . -F92F . -F930 . -F931 . -F932 . -F933 . -F934 . -F935 . -F936 . -F937 . -F938 . -F939 . -F93A . -F93B . -F93C . -F93D . -F93E . -F93F . -F940 . -F941 . -F942 . -F943 . -F944 . -F945 . -F946 . -F947 . -F948 . -F949 . -F94A . -F94B . -F94C . -F94D . -F94E . -F94F . -F950 . -F951 . -F952 . -F953 . -F954 . -F955 . -F956 . -F957 . -F958 . -F959 . -F95A . -F95B . -F95C . -F95D . -F95E . -F95F . -F960 . -F961 . -F962 . -F963 . -F964 . -F965 . -F966 . -F967 . -F968 . -F969 . -F96A . -F96B . -F96C . -F96D . -F96E . -F96F . -F970 . -F971 . -F972 . -F973 . -F974 . -F975 . -F976 . -F977 . -F978 . -F979 . -F97A . -F97B . -F97C . -F97D . -F97E . -F97F . -F980 . -F981 . -F982 . -F983 . -F984 . -F985 . -F986 . -F987 . -F988 . -F989 . -F98A . -F98B . -F98C . -F98D . -F98E . -F98F . -F990 . -F991 . -F992 . -F993 . -F994 . -F995 . -F996 . -F997 . -F998 . -F999 . -F99A . -F99B . -F99C . -F99D . -F99E . -F99F . -F9A0 . -F9A1 . -F9A2 . -F9A3 . -F9A4 . -F9A5 . -F9A6 . -F9A7 . -F9A8 . -F9A9 . -F9AA . -F9AB . -F9AC . -F9AD . -F9AE . -F9AF . -F9B0 . -F9B1 . -F9B2 . -F9B3 . -F9B4 . -F9B5 . -F9B6 . -F9B7 . -F9B8 . -F9B9 . -F9BA . -F9BB . -F9BC . -F9BD . -F9BE . -F9BF . -F9C0 . -F9C1 . -F9C2 . -F9C3 . -F9C4 . -F9C5 . -F9C6 . -F9C7 . -F9C8 . -F9C9 . -F9CA . -F9CB . -F9CC . -F9CD . -F9CE . -F9CF . -F9D0 . -F9D1 . -F9D2 . -F9D3 . -F9D4 . -F9D5 . -F9D6 . -F9D7 . -F9D8 . -F9D9 . -F9DA . -F9DB . -F9DC . -F9DD . -F9DE . -F9DF . -F9E0 . -F9E1 . -F9E2 . -F9E3 . -F9E4 . -F9E5 . -F9E6 . -F9E7 . -F9E8 . -F9E9 . -F9EA . -F9EB . -F9EC . -F9ED . -F9EE . -F9EF . -F9F0 . -F9F1 . -F9F2 . -F9F3 . -F9F4 . -F9F5 . -F9F6 . -F9F7 . -F9F8 . -F9F9 . -F9FA . -F9FB . -F9FC . -F9FD . -F9FE . -F9FF . -FA00 . -FA01 . -FA02 . -FA03 . -FA04 . -FA05 . -FA06 . -FA07 . -FA08 . -FA09 . -FA0A . -FA0B . -FA0C . -FA0D . -FA0E . -FA0F . -FA10 . -FA11 . -FA12 . -FA13 . -FA14 . -FA15 . -FA16 . -FA17 . -FA18 . -FA19 . -FA1A . -FA1B . -FA1C . -FA1D . -FA1E . -FA1F . -FA20 . -FA21 . -FA22 . -FA23 . -FA24 . -FA25 . -FA26 . -FA27 . -FA28 . -FA29 . -FA2A . -FA2B . -FA2C . -FA2D . -FA2E . -FA2F . -FA30 . -FA31 . -FA32 . -FA33 . -FA34 . -FA35 . -FA36 . -FA37 . -FA38 . -FA39 . -FA3A . -FA3B . -FA3C . -FA3D . -FA3E . -FA3F . -FA40 . -FA41 . -FA42 . -FA43 . -FA44 . -FA45 . -FA46 . -FA47 . -FA48 . -FA49 . -FA4A . -FA4B . -FA4C . -FA4D . -FA4E . -FA4F . -FA50 . -FA51 . -FA52 . -FA53 . -FA54 . -FA55 . -FA56 . -FA57 . -FA58 . -FA59 . -FA5A . -FA5B . -FA5C . -FA5D . -FA5E . -FA5F . -FA60 . -FA61 . -FA62 . -FA63 . -FA64 . -FA65 . -FA66 . -FA67 . -FA68 . -FA69 . -FA6A . -FA6B . -FA6C . -FA6D . -FA70 . -FA71 . -FA72 . -FA73 . -FA74 . -FA75 . -FA76 . -FA77 . -FA78 . -FA79 . -FA7A . -FA7B . -FA7C . -FA7D . -FA7E . -FA7F . -FA80 . -FA81 . -FA82 . -FA83 . -FA84 . -FA85 . -FA86 . -FA87 . -FA88 . -FA89 . -FA8A . -FA8B . -FA8C . -FA8D . -FA8E . -FA8F . -FA90 . -FA91 . -FA92 . -FA93 . -FA94 . -FA95 . -FA96 . -FA97 . -FA98 . -FA99 . -FA9A . -FA9B . -FA9C . -FA9D . -FA9E . -FA9F . -FAA0 . -FAA1 . -FAA2 . -FAA3 . -FAA4 . -FAA5 . -FAA6 . -FAA7 . -FAA8 . -FAA9 . -FAAA . -FAAB . -FAAC . -FAAD . -FAAE . -FAAF . -FAB0 . -FAB1 . -FAB2 . -FAB3 . -FAB4 . -FAB5 . -FAB6 . -FAB7 . -FAB8 . -FAB9 . -FABA . -FABB . -FABC . -FABD . -FABE . -FABF . -FAC0 . -FAC1 . -FAC2 . -FAC3 . -FAC4 . -FAC5 . -FAC6 . -FAC7 . -FAC8 . -FAC9 . -FACA . -FACB . -FACC . -FACD . -FACE . -FACF . -FAD0 . -FAD1 . -FAD2 . -FAD3 . -FAD4 . -FAD5 . -FAD6 . -FAD7 . -FAD8 . -FAD9 . -FB00 . -FB01 . -FB02 . -FB03 . -FB04 . -FB05 . -FB06 . -FB13 . -FB14 . -FB15 . -FB16 . -FB17 . -FB1D . -FB1F . -FB20 . -FB21 . -FB22 . -FB23 . -FB24 . -FB25 . -FB26 . -FB27 . -FB28 . -FB2A . -FB2B . -FB2C . -FB2D . -FB2E . -FB2F . -FB30 . -FB31 . -FB32 . -FB33 . -FB34 . -FB35 . -FB36 . -FB38 . -FB39 . -FB3A . -FB3B . -FB3C . -FB3E . -FB40 . -FB41 . -FB43 . -FB44 . -FB46 . -FB47 . -FB48 . -FB49 . -FB4A . -FB4B . -FB4C . -FB4D . -FB4E . -FB4F . -FB50 . -FB51 . -FB52 . -FB53 . -FB54 . -FB55 . -FB56 . -FB57 . -FB58 . -FB59 . -FB5A . -FB5B . -FB5C . -FB5D . -FB5E . -FB5F . -FB60 . -FB61 . -FB62 . -FB63 . -FB64 . -FB65 . -FB66 . -FB67 . -FB68 . -FB69 . -FB6A . -FB6B . -FB6C . -FB6D . -FB6E . -FB6F . -FB70 . -FB71 . -FB72 . -FB73 . -FB74 . -FB75 . -FB76 . -FB77 . -FB78 . -FB79 . -FB7A . -FB7B . -FB7C . -FB7D . -FB7E . -FB7F . -FB80 . -FB81 . -FB82 . -FB83 . -FB84 . -FB85 . -FB86 . -FB87 . -FB88 . -FB89 . -FB8A . -FB8B . -FB8C . -FB8D . -FB8E . -FB8F . -FB90 . -FB91 . -FB92 . -FB93 . -FB94 . -FB95 . -FB96 . -FB97 . -FB98 . -FB99 . -FB9A . -FB9B . -FB9C . -FB9D . -FB9E . -FB9F . -FBA0 . -FBA1 . -FBA2 . -FBA3 . -FBA4 . -FBA5 . -FBA6 . -FBA7 . -FBA8 . -FBA9 . -FBAA . -FBAB . -FBAC . -FBAD . -FBAE . -FBAF . -FBB0 . -FBB1 . -FBD3 . -FBD4 . -FBD5 . -FBD6 . -FBD7 . -FBD8 . -FBD9 . -FBDA . -FBDB . -FBDC . -FBDD . -FBDE . -FBDF . -FBE0 . -FBE1 . -FBE2 . -FBE3 . -FBE4 . -FBE5 . -FBE6 . -FBE7 . -FBE8 . -FBE9 . -FBEA . -FBEB . -FBEC . -FBED . -FBEE . -FBEF . -FBF0 . -FBF1 . -FBF2 . -FBF3 . -FBF4 . -FBF5 . -FBF6 . -FBF7 . -FBF8 . -FBF9 . -FBFA . -FBFB . -FBFC . -FBFD . -FBFE . -FBFF . -FC00 . -FC01 . -FC02 . -FC03 . -FC04 . -FC05 . -FC06 . -FC07 . -FC08 . -FC09 . -FC0A . -FC0B . -FC0C . -FC0D . -FC0E . -FC0F . -FC10 . -FC11 . -FC12 . -FC13 . -FC14 . -FC15 . -FC16 . -FC17 . -FC18 . -FC19 . -FC1A . -FC1B . -FC1C . -FC1D . -FC1E . -FC1F . -FC20 . -FC21 . -FC22 . -FC23 . -FC24 . -FC25 . -FC26 . -FC27 . -FC28 . -FC29 . -FC2A . -FC2B . -FC2C . -FC2D . -FC2E . -FC2F . -FC30 . -FC31 . -FC32 . -FC33 . -FC34 . -FC35 . -FC36 . -FC37 . -FC38 . -FC39 . -FC3A . -FC3B . -FC3C . -FC3D . -FC3E . -FC3F . -FC40 . -FC41 . -FC42 . -FC43 . -FC44 . -FC45 . -FC46 . -FC47 . -FC48 . -FC49 . -FC4A . -FC4B . -FC4C . -FC4D . -FC4E . -FC4F . -FC50 . -FC51 . -FC52 . -FC53 . -FC54 . -FC55 . -FC56 . -FC57 . -FC58 . -FC59 . -FC5A . -FC5B . -FC5C . -FC5D . -FC5E . -FC5F . -FC60 . -FC61 . -FC62 . -FC63 . -FC64 . -FC65 . -FC66 . -FC67 . -FC68 . -FC69 . -FC6A . -FC6B . -FC6C . -FC6D . -FC6E . -FC6F . -FC70 . -FC71 . -FC72 . -FC73 . -FC74 . -FC75 . -FC76 . -FC77 . -FC78 . -FC79 . -FC7A . -FC7B . -FC7C . -FC7D . -FC7E . -FC7F . -FC80 . -FC81 . -FC82 . -FC83 . -FC84 . -FC85 . -FC86 . -FC87 . -FC88 . -FC89 . -FC8A . -FC8B . -FC8C . -FC8D . -FC8E . -FC8F . -FC90 . -FC91 . -FC92 . -FC93 . -FC94 . -FC95 . -FC96 . -FC97 . -FC98 . -FC99 . -FC9A . -FC9B . -FC9C . -FC9D . -FC9E . -FC9F . -FCA0 . -FCA1 . -FCA2 . -FCA3 . -FCA4 . -FCA5 . -FCA6 . -FCA7 . -FCA8 . -FCA9 . -FCAA . -FCAB . -FCAC . -FCAD . -FCAE . -FCAF . -FCB0 . -FCB1 . -FCB2 . -FCB3 . -FCB4 . -FCB5 . -FCB6 . -FCB7 . -FCB8 . -FCB9 . -FCBA . -FCBB . -FCBC . -FCBD . -FCBE . -FCBF . -FCC0 . -FCC1 . -FCC2 . -FCC3 . -FCC4 . -FCC5 . -FCC6 . -FCC7 . -FCC8 . -FCC9 . -FCCA . -FCCB . -FCCC . -FCCD . -FCCE . -FCCF . -FCD0 . -FCD1 . -FCD2 . -FCD3 . -FCD4 . -FCD5 . -FCD6 . -FCD7 . -FCD8 . -FCD9 . -FCDA . -FCDB . -FCDC . -FCDD . -FCDE . -FCDF . -FCE0 . -FCE1 . -FCE2 . -FCE3 . -FCE4 . -FCE5 . -FCE6 . -FCE7 . -FCE8 . -FCE9 . -FCEA . -FCEB . -FCEC . -FCED . -FCEE . -FCEF . -FCF0 . -FCF1 . -FCF2 . -FCF3 . -FCF4 . -FCF5 . -FCF6 . -FCF7 . -FCF8 . -FCF9 . -FCFA . -FCFB . -FCFC . -FCFD . -FCFE . -FCFF . -FD00 . -FD01 . -FD02 . -FD03 . -FD04 . -FD05 . -FD06 . -FD07 . -FD08 . -FD09 . -FD0A . -FD0B . -FD0C . -FD0D . -FD0E . -FD0F . -FD10 . -FD11 . -FD12 . -FD13 . -FD14 . -FD15 . -FD16 . -FD17 . -FD18 . -FD19 . -FD1A . -FD1B . -FD1C . -FD1D . -FD1E . -FD1F . -FD20 . -FD21 . -FD22 . -FD23 . -FD24 . -FD25 . -FD26 . -FD27 . -FD28 . -FD29 . -FD2A . -FD2B . -FD2C . -FD2D . -FD2E . -FD2F . -FD30 . -FD31 . -FD32 . -FD33 . -FD34 . -FD35 . -FD36 . -FD37 . -FD38 . -FD39 . -FD3A . -FD3B . -FD3C . -FD3D . -FD50 . -FD51 . -FD52 . -FD53 . -FD54 . -FD55 . -FD56 . -FD57 . -FD58 . -FD59 . -FD5A . -FD5B . -FD5C . -FD5D . -FD5E . -FD5F . -FD60 . -FD61 . -FD62 . -FD63 . -FD64 . -FD65 . -FD66 . -FD67 . -FD68 . -FD69 . -FD6A . -FD6B . -FD6C . -FD6D . -FD6E . -FD6F . -FD70 . -FD71 . -FD72 . -FD73 . -FD74 . -FD75 . -FD76 . -FD77 . -FD78 . -FD79 . -FD7A . -FD7B . -FD7C . -FD7D . -FD7E . -FD7F . -FD80 . -FD81 . -FD82 . -FD83 . -FD84 . -FD85 . -FD86 . -FD87 . -FD88 . -FD89 . -FD8A . -FD8B . -FD8C . -FD8D . -FD8E . -FD8F . -FD92 . -FD93 . -FD94 . -FD95 . -FD96 . -FD97 . -FD98 . -FD99 . -FD9A . -FD9B . -FD9C . -FD9D . -FD9E . -FD9F . -FDA0 . -FDA1 . -FDA2 . -FDA3 . -FDA4 . -FDA5 . -FDA6 . -FDA7 . -FDA8 . -FDA9 . -FDAA . -FDAB . -FDAC . -FDAD . -FDAE . -FDAF . -FDB0 . -FDB1 . -FDB2 . -FDB3 . -FDB4 . -FDB5 . -FDB6 . -FDB7 . -FDB8 . -FDB9 . -FDBA . -FDBB . -FDBC . -FDBD . -FDBE . -FDBF . -FDC0 . -FDC1 . -FDC2 . -FDC3 . -FDC4 . -FDC5 . -FDC6 . -FDC7 . -FDF0 . -FDF1 . -FDF2 . -FDF3 . -FDF4 . -FDF5 . -FDF6 . -FDF7 . -FDF8 . -FDF9 . -FDFA . -FDFB . -FE70 . -FE71 . -FE72 . -FE73 . -FE74 . -FE76 . -FE77 . -FE78 . -FE79 . -FE7A . -FE7B . -FE7C . -FE7D . -FE7E . -FE7F . -FE80 . -FE81 . -FE82 . -FE83 . -FE84 . -FE85 . -FE86 . -FE87 . -FE88 . -FE89 . -FE8A . -FE8B . -FE8C . -FE8D . -FE8E . -FE8F . -FE90 . -FE91 . -FE92 . -FE93 . -FE94 . -FE95 . -FE96 . -FE97 . -FE98 . -FE99 . -FE9A . -FE9B . -FE9C . -FE9D . -FE9E . -FE9F . -FEA0 . -FEA1 . -FEA2 . -FEA3 . -FEA4 . -FEA5 . -FEA6 . -FEA7 . -FEA8 . -FEA9 . -FEAA . -FEAB . -FEAC . -FEAD . -FEAE . -FEAF . -FEB0 . -FEB1 . -FEB2 . -FEB3 . -FEB4 . -FEB5 . -FEB6 . -FEB7 . -FEB8 . -FEB9 . -FEBA . -FEBB . -FEBC . -FEBD . -FEBE . -FEBF . -FEC0 . -FEC1 . -FEC2 . -FEC3 . -FEC4 . -FEC5 . -FEC6 . -FEC7 . -FEC8 . -FEC9 . -FECA . -FECB . -FECC . -FECD . -FECE . -FECF . -FED0 . -FED1 . -FED2 . -FED3 . -FED4 . -FED5 . -FED6 . -FED7 . -FED8 . -FED9 . -FEDA . -FEDB . -FEDC . -FEDD . -FEDE . -FEDF . -FEE0 . -FEE1 . -FEE2 . -FEE3 . -FEE4 . -FEE5 . -FEE6 . -FEE7 . -FEE8 . -FEE9 . -FEEA . -FEEB . -FEEC . -FEED . -FEEE . -FEEF . -FEF0 . -FEF1 . -FEF2 . -FEF3 . -FEF4 . -FEF5 . -FEF6 . -FEF7 . -FEF8 . -FEF9 . -FEFA . -FEFB . -FEFC . -FF41 FF21 -FF42 FF22 -FF43 FF23 -FF44 FF24 -FF45 FF25 -FF46 FF26 -FF47 FF27 -FF48 FF28 -FF49 FF29 -FF4A FF2A -FF4B FF2B -FF4C FF2C -FF4D FF2D -FF4E FF2E -FF4F FF2F -FF50 FF30 -FF51 FF31 -FF52 FF32 -FF53 FF33 -FF54 FF34 -FF55 FF35 -FF56 FF36 -FF57 FF37 -FF58 FF38 -FF59 FF39 -FF5A FF3A -FF66 . -FF67 . -FF68 . -FF69 . -FF6A . -FF6B . -FF6C . -FF6D . -FF6E . -FF6F . -FF70 . -FF71 . -FF72 . -FF73 . -FF74 . -FF75 . -FF76 . -FF77 . -FF78 . -FF79 . -FF7A . -FF7B . -FF7C . -FF7D . -FF7E . -FF7F . -FF80 . -FF81 . -FF82 . -FF83 . -FF84 . -FF85 . -FF86 . -FF87 . -FF88 . -FF89 . -FF8A . -FF8B . -FF8C . -FF8D . -FF8E . -FF8F . -FF90 . -FF91 . -FF92 . -FF93 . -FF94 . -FF95 . -FF96 . -FF97 . -FF98 . -FF99 . -FF9A . -FF9B . -FF9C . -FF9D . -FF9E . -FF9F . -FFA0 . -FFA1 . -FFA2 . -FFA3 . -FFA4 . -FFA5 . -FFA6 . -FFA7 . -FFA8 . -FFA9 . -FFAA . -FFAB . -FFAC . -FFAD . -FFAE . -FFAF . -FFB0 . -FFB1 . -FFB2 . -FFB3 . -FFB4 . -FFB5 . -FFB6 . -FFB7 . -FFB8 . -FFB9 . -FFBA . -FFBB . -FFBC . -FFBD . -FFBE . -FFC2 . -FFC3 . -FFC4 . -FFC5 . -FFC6 . -FFC7 . -FFCA . -FFCB . -FFCC . -FFCD . -FFCE . -FFCF . -FFD2 . -FFD3 . -FFD4 . -FFD5 . -FFD6 . -FFD7 . -FFDA . -FFDB . -FFDC . -10000 . -10001 . -10002 . -10003 . -10004 . -10005 . -10006 . -10007 . -10008 . -10009 . -1000A . -1000B . -1000D . -1000E . -1000F . -10010 . -10011 . -10012 . -10013 . -10014 . -10015 . -10016 . -10017 . -10018 . -10019 . -1001A . -1001B . -1001C . -1001D . -1001E . -1001F . -10020 . -10021 . -10022 . -10023 . -10024 . -10025 . -10026 . -10028 . -10029 . -1002A . -1002B . -1002C . -1002D . -1002E . -1002F . -10030 . -10031 . -10032 . -10033 . -10034 . -10035 . -10036 . -10037 . -10038 . -10039 . -1003A . -1003C . -1003D . -1003F . -10040 . -10041 . -10042 . -10043 . -10044 . -10045 . -10046 . -10047 . -10048 . -10049 . -1004A . -1004B . -1004C . -1004D . -10050 . -10051 . -10052 . -10053 . -10054 . -10055 . -10056 . -10057 . -10058 . -10059 . -1005A . -1005B . -1005C . -1005D . -10080 . -10081 . -10082 . -10083 . -10084 . -10085 . -10086 . -10087 . -10088 . -10089 . -1008A . -1008B . -1008C . -1008D . -1008E . -1008F . -10090 . -10091 . -10092 . -10093 . -10094 . -10095 . -10096 . -10097 . -10098 . -10099 . -1009A . -1009B . -1009C . -1009D . -1009E . -1009F . -100A0 . -100A1 . -100A2 . -100A3 . -100A4 . -100A5 . -100A6 . -100A7 . -100A8 . -100A9 . -100AA . -100AB . -100AC . -100AD . -100AE . -100AF . -100B0 . -100B1 . -100B2 . -100B3 . -100B4 . -100B5 . -100B6 . -100B7 . -100B8 . -100B9 . -100BA . -100BB . -100BC . -100BD . -100BE . -100BF . -100C0 . -100C1 . -100C2 . -100C3 . -100C4 . -100C5 . -100C6 . -100C7 . -100C8 . -100C9 . -100CA . -100CB . -100CC . -100CD . -100CE . -100CF . -100D0 . -100D1 . -100D2 . -100D3 . -100D4 . -100D5 . -100D6 . -100D7 . -100D8 . -100D9 . -100DA . -100DB . -100DC . -100DD . -100DE . -100DF . -100E0 . -100E1 . -100E2 . -100E3 . -100E4 . -100E5 . -100E6 . -100E7 . -100E8 . -100E9 . -100EA . -100EB . -100EC . -100ED . -100EE . -100EF . -100F0 . -100F1 . -100F2 . -100F3 . -100F4 . -100F5 . -100F6 . -100F7 . -100F8 . -100F9 . -100FA . -10280 . -10281 . -10282 . -10283 . -10284 . -10285 . -10286 . -10287 . -10288 . -10289 . -1028A . -1028B . -1028C . -1028D . -1028E . -1028F . -10290 . -10291 . -10292 . -10293 . -10294 . -10295 . -10296 . -10297 . -10298 . -10299 . -1029A . -1029B . -1029C . -102A0 . -102A1 . -102A2 . -102A3 . -102A4 . -102A5 . -102A6 . -102A7 . -102A8 . -102A9 . -102AA . -102AB . -102AC . -102AD . -102AE . -102AF . -102B0 . -102B1 . -102B2 . -102B3 . -102B4 . -102B5 . -102B6 . -102B7 . -102B8 . -102B9 . -102BA . -102BB . -102BC . -102BD . -102BE . -102BF . -102C0 . -102C1 . -102C2 . -102C3 . -102C4 . -102C5 . -102C6 . -102C7 . -102C8 . -102C9 . -102CA . -102CB . -102CC . -102CD . -102CE . -102CF . -102D0 . -10300 . -10301 . -10302 . -10303 . -10304 . -10305 . -10306 . -10307 . -10308 . -10309 . -1030A . -1030B . -1030C . -1030D . -1030E . -1030F . -10310 . -10311 . -10312 . -10313 . -10314 . -10315 . -10316 . -10317 . -10318 . -10319 . -1031A . -1031B . -1031C . -1031D . -1031E . -10330 . -10331 . -10332 . -10333 . -10334 . -10335 . -10336 . -10337 . -10338 . -10339 . -1033A . -1033B . -1033C . -1033D . -1033E . -1033F . -10340 . -10342 . -10343 . -10344 . -10345 . -10346 . -10347 . -10348 . -10349 . -10380 . -10381 . -10382 . -10383 . -10384 . -10385 . -10386 . -10387 . -10388 . -10389 . -1038A . -1038B . -1038C . -1038D . -1038E . -1038F . -10390 . -10391 . -10392 . -10393 . -10394 . -10395 . -10396 . -10397 . -10398 . -10399 . -1039A . -1039B . -1039C . -1039D . -103A0 . -103A1 . -103A2 . -103A3 . -103A4 . -103A5 . -103A6 . -103A7 . -103A8 . -103A9 . -103AA . -103AB . -103AC . -103AD . -103AE . -103AF . -103B0 . -103B1 . -103B2 . -103B3 . -103B4 . -103B5 . -103B6 . -103B7 . -103B8 . -103B9 . -103BA . -103BB . -103BC . -103BD . -103BE . -103BF . -103C0 . -103C1 . -103C2 . -103C3 . -103C8 . -103C9 . -103CA . -103CB . -103CC . -103CD . -103CE . -103CF . -10428 10400 -10429 10401 -1042A 10402 -1042B 10403 -1042C 10404 -1042D 10405 -1042E 10406 -1042F 10407 -10430 10408 -10431 10409 -10432 1040A -10433 1040B -10434 1040C -10435 1040D -10436 1040E -10437 1040F -10438 10410 -10439 10411 -1043A 10412 -1043B 10413 -1043C 10414 -1043D 10415 -1043E 10416 -1043F 10417 -10440 10418 -10441 10419 -10442 1041A -10443 1041B -10444 1041C -10445 1041D -10446 1041E -10447 1041F -10448 10420 -10449 10421 -1044A 10422 -1044B 10423 -1044C 10424 -1044D 10425 -1044E 10426 -1044F 10427 -10450 . -10451 . -10452 . -10453 . -10454 . -10455 . -10456 . -10457 . -10458 . -10459 . -1045A . -1045B . -1045C . -1045D . -1045E . -1045F . -10460 . -10461 . -10462 . -10463 . -10464 . -10465 . -10466 . -10467 . -10468 . -10469 . -1046A . -1046B . -1046C . -1046D . -1046E . -1046F . -10470 . -10471 . -10472 . -10473 . -10474 . -10475 . -10476 . -10477 . -10478 . -10479 . -1047A . -1047B . -1047C . -1047D . -1047E . -1047F . -10480 . -10481 . -10482 . -10483 . -10484 . -10485 . -10486 . -10487 . -10488 . -10489 . -1048A . -1048B . -1048C . -1048D . -1048E . -1048F . -10490 . -10491 . -10492 . -10493 . -10494 . -10495 . -10496 . -10497 . -10498 . -10499 . -1049A . -1049B . -1049C . -1049D . -10800 . -10801 . -10802 . -10803 . -10804 . -10805 . -10808 . -1080A . -1080B . -1080C . -1080D . -1080E . -1080F . -10810 . -10811 . -10812 . -10813 . -10814 . -10815 . -10816 . -10817 . -10818 . -10819 . -1081A . -1081B . -1081C . -1081D . -1081E . -1081F . -10820 . -10821 . -10822 . -10823 . -10824 . -10825 . -10826 . -10827 . -10828 . -10829 . -1082A . -1082B . -1082C . -1082D . -1082E . -1082F . -10830 . -10831 . -10832 . -10833 . -10834 . -10835 . -10837 . -10838 . -1083C . -1083F . -10840 . -10841 . -10842 . -10843 . -10844 . -10845 . -10846 . -10847 . -10848 . -10849 . -1084A . -1084B . -1084C . -1084D . -1084E . -1084F . -10850 . -10851 . -10852 . -10853 . -10854 . -10855 . -10900 . -10901 . -10902 . -10903 . -10904 . -10905 . -10906 . -10907 . -10908 . -10909 . -1090A . -1090B . -1090C . -1090D . -1090E . -1090F . -10910 . -10911 . -10912 . -10913 . -10914 . -10915 . -10920 . -10921 . -10922 . -10923 . -10924 . -10925 . -10926 . -10927 . -10928 . -10929 . -1092A . -1092B . -1092C . -1092D . -1092E . -1092F . -10930 . -10931 . -10932 . -10933 . -10934 . -10935 . -10936 . -10937 . -10938 . -10939 . -10980 . -10981 . -10982 . -10983 . -10984 . -10985 . -10986 . -10987 . -10988 . -10989 . -1098A . -1098B . -1098C . -1098D . -1098E . -1098F . -10990 . -10991 . -10992 . -10993 . -10994 . -10995 . -10996 . -10997 . -10998 . -10999 . -1099A . -1099B . -1099C . -1099D . -1099E . -1099F . -109A0 . -109A1 . -109A2 . -109A3 . -109A4 . -109A5 . -109A6 . -109A7 . -109A8 . -109A9 . -109AA . -109AB . -109AC . -109AD . -109AE . -109AF . -109B0 . -109B1 . -109B2 . -109B3 . -109B4 . -109B5 . -109B6 . -109B7 . -109BE . -109BF . -10A00 . -10A10 . -10A11 . -10A12 . -10A13 . -10A15 . -10A16 . -10A17 . -10A19 . -10A1A . -10A1B . -10A1C . -10A1D . -10A1E . -10A1F . -10A20 . -10A21 . -10A22 . -10A23 . -10A24 . -10A25 . -10A26 . -10A27 . -10A28 . -10A29 . -10A2A . -10A2B . -10A2C . -10A2D . -10A2E . -10A2F . -10A30 . -10A31 . -10A32 . -10A33 . -10A60 . -10A61 . -10A62 . -10A63 . -10A64 . -10A65 . -10A66 . -10A67 . -10A68 . -10A69 . -10A6A . -10A6B . -10A6C . -10A6D . -10A6E . -10A6F . -10A70 . -10A71 . -10A72 . -10A73 . -10A74 . -10A75 . -10A76 . -10A77 . -10A78 . -10A79 . -10A7A . -10A7B . -10A7C . -10B00 . -10B01 . -10B02 . -10B03 . -10B04 . -10B05 . -10B06 . -10B07 . -10B08 . -10B09 . -10B0A . -10B0B . -10B0C . -10B0D . -10B0E . -10B0F . -10B10 . -10B11 . -10B12 . -10B13 . -10B14 . -10B15 . -10B16 . -10B17 . -10B18 . -10B19 . -10B1A . -10B1B . -10B1C . -10B1D . -10B1E . -10B1F . -10B20 . -10B21 . -10B22 . -10B23 . -10B24 . -10B25 . -10B26 . -10B27 . -10B28 . -10B29 . -10B2A . -10B2B . -10B2C . -10B2D . -10B2E . -10B2F . -10B30 . -10B31 . -10B32 . -10B33 . -10B34 . -10B35 . -10B40 . -10B41 . -10B42 . -10B43 . -10B44 . -10B45 . -10B46 . -10B47 . -10B48 . -10B49 . -10B4A . -10B4B . -10B4C . -10B4D . -10B4E . -10B4F . -10B50 . -10B51 . -10B52 . -10B53 . -10B54 . -10B55 . -10B60 . -10B61 . -10B62 . -10B63 . -10B64 . -10B65 . -10B66 . -10B67 . -10B68 . -10B69 . -10B6A . -10B6B . -10B6C . -10B6D . -10B6E . -10B6F . -10B70 . -10B71 . -10B72 . -10C00 . -10C01 . -10C02 . -10C03 . -10C04 . -10C05 . -10C06 . -10C07 . -10C08 . -10C09 . -10C0A . -10C0B . -10C0C . -10C0D . -10C0E . -10C0F . -10C10 . -10C11 . -10C12 . -10C13 . -10C14 . -10C15 . -10C16 . -10C17 . -10C18 . -10C19 . -10C1A . -10C1B . -10C1C . -10C1D . -10C1E . -10C1F . -10C20 . -10C21 . -10C22 . -10C23 . -10C24 . -10C25 . -10C26 . -10C27 . -10C28 . -10C29 . -10C2A . -10C2B . -10C2C . -10C2D . -10C2E . -10C2F . -10C30 . -10C31 . -10C32 . -10C33 . -10C34 . -10C35 . -10C36 . -10C37 . -10C38 . -10C39 . -10C3A . -10C3B . -10C3C . -10C3D . -10C3E . -10C3F . -10C40 . -10C41 . -10C42 . -10C43 . -10C44 . -10C45 . -10C46 . -10C47 . -10C48 . -11003 . -11004 . -11005 . -11006 . -11007 . -11008 . -11009 . -1100A . -1100B . -1100C . -1100D . -1100E . -1100F . -11010 . -11011 . -11012 . -11013 . -11014 . -11015 . -11016 . -11017 . -11018 . -11019 . -1101A . -1101B . -1101C . -1101D . -1101E . -1101F . -11020 . -11021 . -11022 . -11023 . -11024 . -11025 . -11026 . -11027 . -11028 . -11029 . -1102A . -1102B . -1102C . -1102D . -1102E . -1102F . -11030 . -11031 . -11032 . -11033 . -11034 . -11035 . -11036 . -11037 . -11083 . -11084 . -11085 . -11086 . -11087 . -11088 . -11089 . -1108A . -1108B . -1108C . -1108D . -1108E . -1108F . -11090 . -11091 . -11092 . -11093 . -11094 . -11095 . -11096 . -11097 . -11098 . -11099 . -1109A . -1109B . -1109C . -1109D . -1109E . -1109F . -110A0 . -110A1 . -110A2 . -110A3 . -110A4 . -110A5 . -110A6 . -110A7 . -110A8 . -110A9 . -110AA . -110AB . -110AC . -110AD . -110AE . -110AF . -110D0 . -110D1 . -110D2 . -110D3 . -110D4 . -110D5 . -110D6 . -110D7 . -110D8 . -110D9 . -110DA . -110DB . -110DC . -110DD . -110DE . -110DF . -110E0 . -110E1 . -110E2 . -110E3 . -110E4 . -110E5 . -110E6 . -110E7 . -110E8 . -11103 . -11104 . -11105 . -11106 . -11107 . -11108 . -11109 . -1110A . -1110B . -1110C . -1110D . -1110E . -1110F . -11110 . -11111 . -11112 . -11113 . -11114 . -11115 . -11116 . -11117 . -11118 . -11119 . -1111A . -1111B . -1111C . -1111D . -1111E . -1111F . -11120 . -11121 . -11122 . -11123 . -11124 . -11125 . -11126 . -11183 . -11184 . -11185 . -11186 . -11187 . -11188 . -11189 . -1118A . -1118B . -1118C . -1118D . -1118E . -1118F . -11190 . -11191 . -11192 . -11193 . -11194 . -11195 . -11196 . -11197 . -11198 . -11199 . -1119A . -1119B . -1119C . -1119D . -1119E . -1119F . -111A0 . -111A1 . -111A2 . -111A3 . -111A4 . -111A5 . -111A6 . -111A7 . -111A8 . -111A9 . -111AA . -111AB . -111AC . -111AD . -111AE . -111AF . -111B0 . -111B1 . -111B2 . -111C1 . -111C2 . -111C3 . -111C4 . -11680 . -11681 . -11682 . -11683 . -11684 . -11685 . -11686 . -11687 . -11688 . -11689 . -1168A . -1168B . -1168C . -1168D . -1168E . -1168F . -11690 . -11691 . -11692 . -11693 . -11694 . -11695 . -11696 . -11697 . -11698 . -11699 . -1169A . -1169B . -1169C . -1169D . -1169E . -1169F . -116A0 . -116A1 . -116A2 . -116A3 . -116A4 . -116A5 . -116A6 . -116A7 . -116A8 . -116A9 . -116AA . -12000 . -12001 . -12002 . -12003 . -12004 . -12005 . -12006 . -12007 . -12008 . -12009 . -1200A . -1200B . -1200C . -1200D . -1200E . -1200F . -12010 . -12011 . -12012 . -12013 . -12014 . -12015 . -12016 . -12017 . -12018 . -12019 . -1201A . -1201B . -1201C . -1201D . -1201E . -1201F . -12020 . -12021 . -12022 . -12023 . -12024 . -12025 . -12026 . -12027 . -12028 . -12029 . -1202A . -1202B . -1202C . -1202D . -1202E . -1202F . -12030 . -12031 . -12032 . -12033 . -12034 . -12035 . -12036 . -12037 . -12038 . -12039 . -1203A . -1203B . -1203C . -1203D . -1203E . -1203F . -12040 . -12041 . -12042 . -12043 . -12044 . -12045 . -12046 . -12047 . -12048 . -12049 . -1204A . -1204B . -1204C . -1204D . -1204E . -1204F . -12050 . -12051 . -12052 . -12053 . -12054 . -12055 . -12056 . -12057 . -12058 . -12059 . -1205A . -1205B . -1205C . -1205D . -1205E . -1205F . -12060 . -12061 . -12062 . -12063 . -12064 . -12065 . -12066 . -12067 . -12068 . -12069 . -1206A . -1206B . -1206C . -1206D . -1206E . -1206F . -12070 . -12071 . -12072 . -12073 . -12074 . -12075 . -12076 . -12077 . -12078 . -12079 . -1207A . -1207B . -1207C . -1207D . -1207E . -1207F . -12080 . -12081 . -12082 . -12083 . -12084 . -12085 . -12086 . -12087 . -12088 . -12089 . -1208A . -1208B . -1208C . -1208D . -1208E . -1208F . -12090 . -12091 . -12092 . -12093 . -12094 . -12095 . -12096 . -12097 . -12098 . -12099 . -1209A . -1209B . -1209C . -1209D . -1209E . -1209F . -120A0 . -120A1 . -120A2 . -120A3 . -120A4 . -120A5 . -120A6 . -120A7 . -120A8 . -120A9 . -120AA . -120AB . -120AC . -120AD . -120AE . -120AF . -120B0 . -120B1 . -120B2 . -120B3 . -120B4 . -120B5 . -120B6 . -120B7 . -120B8 . -120B9 . -120BA . -120BB . -120BC . -120BD . -120BE . -120BF . -120C0 . -120C1 . -120C2 . -120C3 . -120C4 . -120C5 . -120C6 . -120C7 . -120C8 . -120C9 . -120CA . -120CB . -120CC . -120CD . -120CE . -120CF . -120D0 . -120D1 . -120D2 . -120D3 . -120D4 . -120D5 . -120D6 . -120D7 . -120D8 . -120D9 . -120DA . -120DB . -120DC . -120DD . -120DE . -120DF . -120E0 . -120E1 . -120E2 . -120E3 . -120E4 . -120E5 . -120E6 . -120E7 . -120E8 . -120E9 . -120EA . -120EB . -120EC . -120ED . -120EE . -120EF . -120F0 . -120F1 . -120F2 . -120F3 . -120F4 . -120F5 . -120F6 . -120F7 . -120F8 . -120F9 . -120FA . -120FB . -120FC . -120FD . -120FE . -120FF . -12100 . -12101 . -12102 . -12103 . -12104 . -12105 . -12106 . -12107 . -12108 . -12109 . -1210A . -1210B . -1210C . -1210D . -1210E . -1210F . -12110 . -12111 . -12112 . -12113 . -12114 . -12115 . -12116 . -12117 . -12118 . -12119 . -1211A . -1211B . -1211C . -1211D . -1211E . -1211F . -12120 . -12121 . -12122 . -12123 . -12124 . -12125 . -12126 . -12127 . -12128 . -12129 . -1212A . -1212B . -1212C . -1212D . -1212E . -1212F . -12130 . -12131 . -12132 . -12133 . -12134 . -12135 . -12136 . -12137 . -12138 . -12139 . -1213A . -1213B . -1213C . -1213D . -1213E . -1213F . -12140 . -12141 . -12142 . -12143 . -12144 . -12145 . -12146 . -12147 . -12148 . -12149 . -1214A . -1214B . -1214C . -1214D . -1214E . -1214F . -12150 . -12151 . -12152 . -12153 . -12154 . -12155 . -12156 . -12157 . -12158 . -12159 . -1215A . -1215B . -1215C . -1215D . -1215E . -1215F . -12160 . -12161 . -12162 . -12163 . -12164 . -12165 . -12166 . -12167 . -12168 . -12169 . -1216A . -1216B . -1216C . -1216D . -1216E . -1216F . -12170 . -12171 . -12172 . -12173 . -12174 . -12175 . -12176 . -12177 . -12178 . -12179 . -1217A . -1217B . -1217C . -1217D . -1217E . -1217F . -12180 . -12181 . -12182 . -12183 . -12184 . -12185 . -12186 . -12187 . -12188 . -12189 . -1218A . -1218B . -1218C . -1218D . -1218E . -1218F . -12190 . -12191 . -12192 . -12193 . -12194 . -12195 . -12196 . -12197 . -12198 . -12199 . -1219A . -1219B . -1219C . -1219D . -1219E . -1219F . -121A0 . -121A1 . -121A2 . -121A3 . -121A4 . -121A5 . -121A6 . -121A7 . -121A8 . -121A9 . -121AA . -121AB . -121AC . -121AD . -121AE . -121AF . -121B0 . -121B1 . -121B2 . -121B3 . -121B4 . -121B5 . -121B6 . -121B7 . -121B8 . -121B9 . -121BA . -121BB . -121BC . -121BD . -121BE . -121BF . -121C0 . -121C1 . -121C2 . -121C3 . -121C4 . -121C5 . -121C6 . -121C7 . -121C8 . -121C9 . -121CA . -121CB . -121CC . -121CD . -121CE . -121CF . -121D0 . -121D1 . -121D2 . -121D3 . -121D4 . -121D5 . -121D6 . -121D7 . -121D8 . -121D9 . -121DA . -121DB . -121DC . -121DD . -121DE . -121DF . -121E0 . -121E1 . -121E2 . -121E3 . -121E4 . -121E5 . -121E6 . -121E7 . -121E8 . -121E9 . -121EA . -121EB . -121EC . -121ED . -121EE . -121EF . -121F0 . -121F1 . -121F2 . -121F3 . -121F4 . -121F5 . -121F6 . -121F7 . -121F8 . -121F9 . -121FA . -121FB . -121FC . -121FD . -121FE . -121FF . -12200 . -12201 . -12202 . -12203 . -12204 . -12205 . -12206 . -12207 . -12208 . -12209 . -1220A . -1220B . -1220C . -1220D . -1220E . -1220F . -12210 . -12211 . -12212 . -12213 . -12214 . -12215 . -12216 . -12217 . -12218 . -12219 . -1221A . -1221B . -1221C . -1221D . -1221E . -1221F . -12220 . -12221 . -12222 . -12223 . -12224 . -12225 . -12226 . -12227 . -12228 . -12229 . -1222A . -1222B . -1222C . -1222D . -1222E . -1222F . -12230 . -12231 . -12232 . -12233 . -12234 . -12235 . -12236 . -12237 . -12238 . -12239 . -1223A . -1223B . -1223C . -1223D . -1223E . -1223F . -12240 . -12241 . -12242 . -12243 . -12244 . -12245 . -12246 . -12247 . -12248 . -12249 . -1224A . -1224B . -1224C . -1224D . -1224E . -1224F . -12250 . -12251 . -12252 . -12253 . -12254 . -12255 . -12256 . -12257 . -12258 . -12259 . -1225A . -1225B . -1225C . -1225D . -1225E . -1225F . -12260 . -12261 . -12262 . -12263 . -12264 . -12265 . -12266 . -12267 . -12268 . -12269 . -1226A . -1226B . -1226C . -1226D . -1226E . -1226F . -12270 . -12271 . -12272 . -12273 . -12274 . -12275 . -12276 . -12277 . -12278 . -12279 . -1227A . -1227B . -1227C . -1227D . -1227E . -1227F . -12280 . -12281 . -12282 . -12283 . -12284 . -12285 . -12286 . -12287 . -12288 . -12289 . -1228A . -1228B . -1228C . -1228D . -1228E . -1228F . -12290 . -12291 . -12292 . -12293 . -12294 . -12295 . -12296 . -12297 . -12298 . -12299 . -1229A . -1229B . -1229C . -1229D . -1229E . -1229F . -122A0 . -122A1 . -122A2 . -122A3 . -122A4 . -122A5 . -122A6 . -122A7 . -122A8 . -122A9 . -122AA . -122AB . -122AC . -122AD . -122AE . -122AF . -122B0 . -122B1 . -122B2 . -122B3 . -122B4 . -122B5 . -122B6 . -122B7 . -122B8 . -122B9 . -122BA . -122BB . -122BC . -122BD . -122BE . -122BF . -122C0 . -122C1 . -122C2 . -122C3 . -122C4 . -122C5 . -122C6 . -122C7 . -122C8 . -122C9 . -122CA . -122CB . -122CC . -122CD . -122CE . -122CF . -122D0 . -122D1 . -122D2 . -122D3 . -122D4 . -122D5 . -122D6 . -122D7 . -122D8 . -122D9 . -122DA . -122DB . -122DC . -122DD . -122DE . -122DF . -122E0 . -122E1 . -122E2 . -122E3 . -122E4 . -122E5 . -122E6 . -122E7 . -122E8 . -122E9 . -122EA . -122EB . -122EC . -122ED . -122EE . -122EF . -122F0 . -122F1 . -122F2 . -122F3 . -122F4 . -122F5 . -122F6 . -122F7 . -122F8 . -122F9 . -122FA . -122FB . -122FC . -122FD . -122FE . -122FF . -12300 . -12301 . -12302 . -12303 . -12304 . -12305 . -12306 . -12307 . -12308 . -12309 . -1230A . -1230B . -1230C . -1230D . -1230E . -1230F . -12310 . -12311 . -12312 . -12313 . -12314 . -12315 . -12316 . -12317 . -12318 . -12319 . -1231A . -1231B . -1231C . -1231D . -1231E . -1231F . -12320 . -12321 . -12322 . -12323 . -12324 . -12325 . -12326 . -12327 . -12328 . -12329 . -1232A . -1232B . -1232C . -1232D . -1232E . -1232F . -12330 . -12331 . -12332 . -12333 . -12334 . -12335 . -12336 . -12337 . -12338 . -12339 . -1233A . -1233B . -1233C . -1233D . -1233E . -1233F . -12340 . -12341 . -12342 . -12343 . -12344 . -12345 . -12346 . -12347 . -12348 . -12349 . -1234A . -1234B . -1234C . -1234D . -1234E . -1234F . -12350 . -12351 . -12352 . -12353 . -12354 . -12355 . -12356 . -12357 . -12358 . -12359 . -1235A . -1235B . -1235C . -1235D . -1235E . -1235F . -12360 . -12361 . -12362 . -12363 . -12364 . -12365 . -12366 . -12367 . -12368 . -12369 . -1236A . -1236B . -1236C . -1236D . -1236E . -13000 . -13001 . -13002 . -13003 . -13004 . -13005 . -13006 . -13007 . -13008 . -13009 . -1300A . -1300B . -1300C . -1300D . -1300E . -1300F . -13010 . -13011 . -13012 . -13013 . -13014 . -13015 . -13016 . -13017 . -13018 . -13019 . -1301A . -1301B . -1301C . -1301D . -1301E . -1301F . -13020 . -13021 . -13022 . -13023 . -13024 . -13025 . -13026 . -13027 . -13028 . -13029 . -1302A . -1302B . -1302C . -1302D . -1302E . -1302F . -13030 . -13031 . -13032 . -13033 . -13034 . -13035 . -13036 . -13037 . -13038 . -13039 . -1303A . -1303B . -1303C . -1303D . -1303E . -1303F . -13040 . -13041 . -13042 . -13043 . -13044 . -13045 . -13046 . -13047 . -13048 . -13049 . -1304A . -1304B . -1304C . -1304D . -1304E . -1304F . -13050 . -13051 . -13052 . -13053 . -13054 . -13055 . -13056 . -13057 . -13058 . -13059 . -1305A . -1305B . -1305C . -1305D . -1305E . -1305F . -13060 . -13061 . -13062 . -13063 . -13064 . -13065 . -13066 . -13067 . -13068 . -13069 . -1306A . -1306B . -1306C . -1306D . -1306E . -1306F . -13070 . -13071 . -13072 . -13073 . -13074 . -13075 . -13076 . -13077 . -13078 . -13079 . -1307A . -1307B . -1307C . -1307D . -1307E . -1307F . -13080 . -13081 . -13082 . -13083 . -13084 . -13085 . -13086 . -13087 . -13088 . -13089 . -1308A . -1308B . -1308C . -1308D . -1308E . -1308F . -13090 . -13091 . -13092 . -13093 . -13094 . -13095 . -13096 . -13097 . -13098 . -13099 . -1309A . -1309B . -1309C . -1309D . -1309E . -1309F . -130A0 . -130A1 . -130A2 . -130A3 . -130A4 . -130A5 . -130A6 . -130A7 . -130A8 . -130A9 . -130AA . -130AB . -130AC . -130AD . -130AE . -130AF . -130B0 . -130B1 . -130B2 . -130B3 . -130B4 . -130B5 . -130B6 . -130B7 . -130B8 . -130B9 . -130BA . -130BB . -130BC . -130BD . -130BE . -130BF . -130C0 . -130C1 . -130C2 . -130C3 . -130C4 . -130C5 . -130C6 . -130C7 . -130C8 . -130C9 . -130CA . -130CB . -130CC . -130CD . -130CE . -130CF . -130D0 . -130D1 . -130D2 . -130D3 . -130D4 . -130D5 . -130D6 . -130D7 . -130D8 . -130D9 . -130DA . -130DB . -130DC . -130DD . -130DE . -130DF . -130E0 . -130E1 . -130E2 . -130E3 . -130E4 . -130E5 . -130E6 . -130E7 . -130E8 . -130E9 . -130EA . -130EB . -130EC . -130ED . -130EE . -130EF . -130F0 . -130F1 . -130F2 . -130F3 . -130F4 . -130F5 . -130F6 . -130F7 . -130F8 . -130F9 . -130FA . -130FB . -130FC . -130FD . -130FE . -130FF . -13100 . -13101 . -13102 . -13103 . -13104 . -13105 . -13106 . -13107 . -13108 . -13109 . -1310A . -1310B . -1310C . -1310D . -1310E . -1310F . -13110 . -13111 . -13112 . -13113 . -13114 . -13115 . -13116 . -13117 . -13118 . -13119 . -1311A . -1311B . -1311C . -1311D . -1311E . -1311F . -13120 . -13121 . -13122 . -13123 . -13124 . -13125 . -13126 . -13127 . -13128 . -13129 . -1312A . -1312B . -1312C . -1312D . -1312E . -1312F . -13130 . -13131 . -13132 . -13133 . -13134 . -13135 . -13136 . -13137 . -13138 . -13139 . -1313A . -1313B . -1313C . -1313D . -1313E . -1313F . -13140 . -13141 . -13142 . -13143 . -13144 . -13145 . -13146 . -13147 . -13148 . -13149 . -1314A . -1314B . -1314C . -1314D . -1314E . -1314F . -13150 . -13151 . -13152 . -13153 . -13154 . -13155 . -13156 . -13157 . -13158 . -13159 . -1315A . -1315B . -1315C . -1315D . -1315E . -1315F . -13160 . -13161 . -13162 . -13163 . -13164 . -13165 . -13166 . -13167 . -13168 . -13169 . -1316A . -1316B . -1316C . -1316D . -1316E . -1316F . -13170 . -13171 . -13172 . -13173 . -13174 . -13175 . -13176 . -13177 . -13178 . -13179 . -1317A . -1317B . -1317C . -1317D . -1317E . -1317F . -13180 . -13181 . -13182 . -13183 . -13184 . -13185 . -13186 . -13187 . -13188 . -13189 . -1318A . -1318B . -1318C . -1318D . -1318E . -1318F . -13190 . -13191 . -13192 . -13193 . -13194 . -13195 . -13196 . -13197 . -13198 . -13199 . -1319A . -1319B . -1319C . -1319D . -1319E . -1319F . -131A0 . -131A1 . -131A2 . -131A3 . -131A4 . -131A5 . -131A6 . -131A7 . -131A8 . -131A9 . -131AA . -131AB . -131AC . -131AD . -131AE . -131AF . -131B0 . -131B1 . -131B2 . -131B3 . -131B4 . -131B5 . -131B6 . -131B7 . -131B8 . -131B9 . -131BA . -131BB . -131BC . -131BD . -131BE . -131BF . -131C0 . -131C1 . -131C2 . -131C3 . -131C4 . -131C5 . -131C6 . -131C7 . -131C8 . -131C9 . -131CA . -131CB . -131CC . -131CD . -131CE . -131CF . -131D0 . -131D1 . -131D2 . -131D3 . -131D4 . -131D5 . -131D6 . -131D7 . -131D8 . -131D9 . -131DA . -131DB . -131DC . -131DD . -131DE . -131DF . -131E0 . -131E1 . -131E2 . -131E3 . -131E4 . -131E5 . -131E6 . -131E7 . -131E8 . -131E9 . -131EA . -131EB . -131EC . -131ED . -131EE . -131EF . -131F0 . -131F1 . -131F2 . -131F3 . -131F4 . -131F5 . -131F6 . -131F7 . -131F8 . -131F9 . -131FA . -131FB . -131FC . -131FD . -131FE . -131FF . -13200 . -13201 . -13202 . -13203 . -13204 . -13205 . -13206 . -13207 . -13208 . -13209 . -1320A . -1320B . -1320C . -1320D . -1320E . -1320F . -13210 . -13211 . -13212 . -13213 . -13214 . -13215 . -13216 . -13217 . -13218 . -13219 . -1321A . -1321B . -1321C . -1321D . -1321E . -1321F . -13220 . -13221 . -13222 . -13223 . -13224 . -13225 . -13226 . -13227 . -13228 . -13229 . -1322A . -1322B . -1322C . -1322D . -1322E . -1322F . -13230 . -13231 . -13232 . -13233 . -13234 . -13235 . -13236 . -13237 . -13238 . -13239 . -1323A . -1323B . -1323C . -1323D . -1323E . -1323F . -13240 . -13241 . -13242 . -13243 . -13244 . -13245 . -13246 . -13247 . -13248 . -13249 . -1324A . -1324B . -1324C . -1324D . -1324E . -1324F . -13250 . -13251 . -13252 . -13253 . -13254 . -13255 . -13256 . -13257 . -13258 . -13259 . -1325A . -1325B . -1325C . -1325D . -1325E . -1325F . -13260 . -13261 . -13262 . -13263 . -13264 . -13265 . -13266 . -13267 . -13268 . -13269 . -1326A . -1326B . -1326C . -1326D . -1326E . -1326F . -13270 . -13271 . -13272 . -13273 . -13274 . -13275 . -13276 . -13277 . -13278 . -13279 . -1327A . -1327B . -1327C . -1327D . -1327E . -1327F . -13280 . -13281 . -13282 . -13283 . -13284 . -13285 . -13286 . -13287 . -13288 . -13289 . -1328A . -1328B . -1328C . -1328D . -1328E . -1328F . -13290 . -13291 . -13292 . -13293 . -13294 . -13295 . -13296 . -13297 . -13298 . -13299 . -1329A . -1329B . -1329C . -1329D . -1329E . -1329F . -132A0 . -132A1 . -132A2 . -132A3 . -132A4 . -132A5 . -132A6 . -132A7 . -132A8 . -132A9 . -132AA . -132AB . -132AC . -132AD . -132AE . -132AF . -132B0 . -132B1 . -132B2 . -132B3 . -132B4 . -132B5 . -132B6 . -132B7 . -132B8 . -132B9 . -132BA . -132BB . -132BC . -132BD . -132BE . -132BF . -132C0 . -132C1 . -132C2 . -132C3 . -132C4 . -132C5 . -132C6 . -132C7 . -132C8 . -132C9 . -132CA . -132CB . -132CC . -132CD . -132CE . -132CF . -132D0 . -132D1 . -132D2 . -132D3 . -132D4 . -132D5 . -132D6 . -132D7 . -132D8 . -132D9 . -132DA . -132DB . -132DC . -132DD . -132DE . -132DF . -132E0 . -132E1 . -132E2 . -132E3 . -132E4 . -132E5 . -132E6 . -132E7 . -132E8 . -132E9 . -132EA . -132EB . -132EC . -132ED . -132EE . -132EF . -132F0 . -132F1 . -132F2 . -132F3 . -132F4 . -132F5 . -132F6 . -132F7 . -132F8 . -132F9 . -132FA . -132FB . -132FC . -132FD . -132FE . -132FF . -13300 . -13301 . -13302 . -13303 . -13304 . -13305 . -13306 . -13307 . -13308 . -13309 . -1330A . -1330B . -1330C . -1330D . -1330E . -1330F . -13310 . -13311 . -13312 . -13313 . -13314 . -13315 . -13316 . -13317 . -13318 . -13319 . -1331A . -1331B . -1331C . -1331D . -1331E . -1331F . -13320 . -13321 . -13322 . -13323 . -13324 . -13325 . -13326 . -13327 . -13328 . -13329 . -1332A . -1332B . -1332C . -1332D . -1332E . -1332F . -13330 . -13331 . -13332 . -13333 . -13334 . -13335 . -13336 . -13337 . -13338 . -13339 . -1333A . -1333B . -1333C . -1333D . -1333E . -1333F . -13340 . -13341 . -13342 . -13343 . -13344 . -13345 . -13346 . -13347 . -13348 . -13349 . -1334A . -1334B . -1334C . -1334D . -1334E . -1334F . -13350 . -13351 . -13352 . -13353 . -13354 . -13355 . -13356 . -13357 . -13358 . -13359 . -1335A . -1335B . -1335C . -1335D . -1335E . -1335F . -13360 . -13361 . -13362 . -13363 . -13364 . -13365 . -13366 . -13367 . -13368 . -13369 . -1336A . -1336B . -1336C . -1336D . -1336E . -1336F . -13370 . -13371 . -13372 . -13373 . -13374 . -13375 . -13376 . -13377 . -13378 . -13379 . -1337A . -1337B . -1337C . -1337D . -1337E . -1337F . -13380 . -13381 . -13382 . -13383 . -13384 . -13385 . -13386 . -13387 . -13388 . -13389 . -1338A . -1338B . -1338C . -1338D . -1338E . -1338F . -13390 . -13391 . -13392 . -13393 . -13394 . -13395 . -13396 . -13397 . -13398 . -13399 . -1339A . -1339B . -1339C . -1339D . -1339E . -1339F . -133A0 . -133A1 . -133A2 . -133A3 . -133A4 . -133A5 . -133A6 . -133A7 . -133A8 . -133A9 . -133AA . -133AB . -133AC . -133AD . -133AE . -133AF . -133B0 . -133B1 . -133B2 . -133B3 . -133B4 . -133B5 . -133B6 . -133B7 . -133B8 . -133B9 . -133BA . -133BB . -133BC . -133BD . -133BE . -133BF . -133C0 . -133C1 . -133C2 . -133C3 . -133C4 . -133C5 . -133C6 . -133C7 . -133C8 . -133C9 . -133CA . -133CB . -133CC . -133CD . -133CE . -133CF . -133D0 . -133D1 . -133D2 . -133D3 . -133D4 . -133D5 . -133D6 . -133D7 . -133D8 . -133D9 . -133DA . -133DB . -133DC . -133DD . -133DE . -133DF . -133E0 . -133E1 . -133E2 . -133E3 . -133E4 . -133E5 . -133E6 . -133E7 . -133E8 . -133E9 . -133EA . -133EB . -133EC . -133ED . -133EE . -133EF . -133F0 . -133F1 . -133F2 . -133F3 . -133F4 . -133F5 . -133F6 . -133F7 . -133F8 . -133F9 . -133FA . -133FB . -133FC . -133FD . -133FE . -133FF . -13400 . -13401 . -13402 . -13403 . -13404 . -13405 . -13406 . -13407 . -13408 . -13409 . -1340A . -1340B . -1340C . -1340D . -1340E . -1340F . -13410 . -13411 . -13412 . -13413 . -13414 . -13415 . -13416 . -13417 . -13418 . -13419 . -1341A . -1341B . -1341C . -1341D . -1341E . -1341F . -13420 . -13421 . -13422 . -13423 . -13424 . -13425 . -13426 . -13427 . -13428 . -13429 . -1342A . -1342B . -1342C . -1342D . -1342E . -16800 . -16801 . -16802 . -16803 . -16804 . -16805 . -16806 . -16807 . -16808 . -16809 . -1680A . -1680B . -1680C . -1680D . -1680E . -1680F . -16810 . -16811 . -16812 . -16813 . -16814 . -16815 . -16816 . -16817 . -16818 . -16819 . -1681A . -1681B . -1681C . -1681D . -1681E . -1681F . -16820 . -16821 . -16822 . -16823 . -16824 . -16825 . -16826 . -16827 . -16828 . -16829 . -1682A . -1682B . -1682C . -1682D . -1682E . -1682F . -16830 . -16831 . -16832 . -16833 . -16834 . -16835 . -16836 . -16837 . -16838 . -16839 . -1683A . -1683B . -1683C . -1683D . -1683E . -1683F . -16840 . -16841 . -16842 . -16843 . -16844 . -16845 . -16846 . -16847 . -16848 . -16849 . -1684A . -1684B . -1684C . -1684D . -1684E . -1684F . -16850 . -16851 . -16852 . -16853 . -16854 . -16855 . -16856 . -16857 . -16858 . -16859 . -1685A . -1685B . -1685C . -1685D . -1685E . -1685F . -16860 . -16861 . -16862 . -16863 . -16864 . -16865 . -16866 . -16867 . -16868 . -16869 . -1686A . -1686B . -1686C . -1686D . -1686E . -1686F . -16870 . -16871 . -16872 . -16873 . -16874 . -16875 . -16876 . -16877 . -16878 . -16879 . -1687A . -1687B . -1687C . -1687D . -1687E . -1687F . -16880 . -16881 . -16882 . -16883 . -16884 . -16885 . -16886 . -16887 . -16888 . -16889 . -1688A . -1688B . -1688C . -1688D . -1688E . -1688F . -16890 . -16891 . -16892 . -16893 . -16894 . -16895 . -16896 . -16897 . -16898 . -16899 . -1689A . -1689B . -1689C . -1689D . -1689E . -1689F . -168A0 . -168A1 . -168A2 . -168A3 . -168A4 . -168A5 . -168A6 . -168A7 . -168A8 . -168A9 . -168AA . -168AB . -168AC . -168AD . -168AE . -168AF . -168B0 . -168B1 . -168B2 . -168B3 . -168B4 . -168B5 . -168B6 . -168B7 . -168B8 . -168B9 . -168BA . -168BB . -168BC . -168BD . -168BE . -168BF . -168C0 . -168C1 . -168C2 . -168C3 . -168C4 . -168C5 . -168C6 . -168C7 . -168C8 . -168C9 . -168CA . -168CB . -168CC . -168CD . -168CE . -168CF . -168D0 . -168D1 . -168D2 . -168D3 . -168D4 . -168D5 . -168D6 . -168D7 . -168D8 . -168D9 . -168DA . -168DB . -168DC . -168DD . -168DE . -168DF . -168E0 . -168E1 . -168E2 . -168E3 . -168E4 . -168E5 . -168E6 . -168E7 . -168E8 . -168E9 . -168EA . -168EB . -168EC . -168ED . -168EE . -168EF . -168F0 . -168F1 . -168F2 . -168F3 . -168F4 . -168F5 . -168F6 . -168F7 . -168F8 . -168F9 . -168FA . -168FB . -168FC . -168FD . -168FE . -168FF . -16900 . -16901 . -16902 . -16903 . -16904 . -16905 . -16906 . -16907 . -16908 . -16909 . -1690A . -1690B . -1690C . -1690D . -1690E . -1690F . -16910 . -16911 . -16912 . -16913 . -16914 . -16915 . -16916 . -16917 . -16918 . -16919 . -1691A . -1691B . -1691C . -1691D . -1691E . -1691F . -16920 . -16921 . -16922 . -16923 . -16924 . -16925 . -16926 . -16927 . -16928 . -16929 . -1692A . -1692B . -1692C . -1692D . -1692E . -1692F . -16930 . -16931 . -16932 . -16933 . -16934 . -16935 . -16936 . -16937 . -16938 . -16939 . -1693A . -1693B . -1693C . -1693D . -1693E . -1693F . -16940 . -16941 . -16942 . -16943 . -16944 . -16945 . -16946 . -16947 . -16948 . -16949 . -1694A . -1694B . -1694C . -1694D . -1694E . -1694F . -16950 . -16951 . -16952 . -16953 . -16954 . -16955 . -16956 . -16957 . -16958 . -16959 . -1695A . -1695B . -1695C . -1695D . -1695E . -1695F . -16960 . -16961 . -16962 . -16963 . -16964 . -16965 . -16966 . -16967 . -16968 . -16969 . -1696A . -1696B . -1696C . -1696D . -1696E . -1696F . -16970 . -16971 . -16972 . -16973 . -16974 . -16975 . -16976 . -16977 . -16978 . -16979 . -1697A . -1697B . -1697C . -1697D . -1697E . -1697F . -16980 . -16981 . -16982 . -16983 . -16984 . -16985 . -16986 . -16987 . -16988 . -16989 . -1698A . -1698B . -1698C . -1698D . -1698E . -1698F . -16990 . -16991 . -16992 . -16993 . -16994 . -16995 . -16996 . -16997 . -16998 . -16999 . -1699A . -1699B . -1699C . -1699D . -1699E . -1699F . -169A0 . -169A1 . -169A2 . -169A3 . -169A4 . -169A5 . -169A6 . -169A7 . -169A8 . -169A9 . -169AA . -169AB . -169AC . -169AD . -169AE . -169AF . -169B0 . -169B1 . -169B2 . -169B3 . -169B4 . -169B5 . -169B6 . -169B7 . -169B8 . -169B9 . -169BA . -169BB . -169BC . -169BD . -169BE . -169BF . -169C0 . -169C1 . -169C2 . -169C3 . -169C4 . -169C5 . -169C6 . -169C7 . -169C8 . -169C9 . -169CA . -169CB . -169CC . -169CD . -169CE . -169CF . -169D0 . -169D1 . -169D2 . -169D3 . -169D4 . -169D5 . -169D6 . -169D7 . -169D8 . -169D9 . -169DA . -169DB . -169DC . -169DD . -169DE . -169DF . -169E0 . -169E1 . -169E2 . -169E3 . -169E4 . -169E5 . -169E6 . -169E7 . -169E8 . -169E9 . -169EA . -169EB . -169EC . -169ED . -169EE . -169EF . -169F0 . -169F1 . -169F2 . -169F3 . -169F4 . -169F5 . -169F6 . -169F7 . -169F8 . -169F9 . -169FA . -169FB . -169FC . -169FD . -169FE . -169FF . -16A00 . -16A01 . -16A02 . -16A03 . -16A04 . -16A05 . -16A06 . -16A07 . -16A08 . -16A09 . -16A0A . -16A0B . -16A0C . -16A0D . -16A0E . -16A0F . -16A10 . -16A11 . -16A12 . -16A13 . -16A14 . -16A15 . -16A16 . -16A17 . -16A18 . -16A19 . -16A1A . -16A1B . -16A1C . -16A1D . -16A1E . -16A1F . -16A20 . -16A21 . -16A22 . -16A23 . -16A24 . -16A25 . -16A26 . -16A27 . -16A28 . -16A29 . -16A2A . -16A2B . -16A2C . -16A2D . -16A2E . -16A2F . -16A30 . -16A31 . -16A32 . -16A33 . -16A34 . -16A35 . -16A36 . -16A37 . -16A38 . -16F00 . -16F01 . -16F02 . -16F03 . -16F04 . -16F05 . -16F06 . -16F07 . -16F08 . -16F09 . -16F0A . -16F0B . -16F0C . -16F0D . -16F0E . -16F0F . -16F10 . -16F11 . -16F12 . -16F13 . -16F14 . -16F15 . -16F16 . -16F17 . -16F18 . -16F19 . -16F1A . -16F1B . -16F1C . -16F1D . -16F1E . -16F1F . -16F20 . -16F21 . -16F22 . -16F23 . -16F24 . -16F25 . -16F26 . -16F27 . -16F28 . -16F29 . -16F2A . -16F2B . -16F2C . -16F2D . -16F2E . -16F2F . -16F30 . -16F31 . -16F32 . -16F33 . -16F34 . -16F35 . -16F36 . -16F37 . -16F38 . -16F39 . -16F3A . -16F3B . -16F3C . -16F3D . -16F3E . -16F3F . -16F40 . -16F41 . -16F42 . -16F43 . -16F44 . -16F50 . -16F93 . -16F94 . -16F95 . -16F96 . -16F97 . -16F98 . -16F99 . -16F9A . -16F9B . -16F9C . -16F9D . -16F9E . -16F9F . -1B000 . -1B001 . -1D400 . -1D401 . -1D402 . -1D403 . -1D404 . -1D405 . -1D406 . -1D407 . -1D408 . -1D409 . -1D40A . -1D40B . -1D40C . -1D40D . -1D40E . -1D40F . -1D410 . -1D411 . -1D412 . -1D413 . -1D414 . -1D415 . -1D416 . -1D417 . -1D418 . -1D419 . -1D41A . -1D41B . -1D41C . -1D41D . -1D41E . -1D41F . -1D420 . -1D421 . -1D422 . -1D423 . -1D424 . -1D425 . -1D426 . -1D427 . -1D428 . -1D429 . -1D42A . -1D42B . -1D42C . -1D42D . -1D42E . -1D42F . -1D430 . -1D431 . -1D432 . -1D433 . -1D434 . -1D435 . -1D436 . -1D437 . -1D438 . -1D439 . -1D43A . -1D43B . -1D43C . -1D43D . -1D43E . -1D43F . -1D440 . -1D441 . -1D442 . -1D443 . -1D444 . -1D445 . -1D446 . -1D447 . -1D448 . -1D449 . -1D44A . -1D44B . -1D44C . -1D44D . -1D44E . -1D44F . -1D450 . -1D451 . -1D452 . -1D453 . -1D454 . -1D456 . -1D457 . -1D458 . -1D459 . -1D45A . -1D45B . -1D45C . -1D45D . -1D45E . -1D45F . -1D460 . -1D461 . -1D462 . -1D463 . -1D464 . -1D465 . -1D466 . -1D467 . -1D468 . -1D469 . -1D46A . -1D46B . -1D46C . -1D46D . -1D46E . -1D46F . -1D470 . -1D471 . -1D472 . -1D473 . -1D474 . -1D475 . -1D476 . -1D477 . -1D478 . -1D479 . -1D47A . -1D47B . -1D47C . -1D47D . -1D47E . -1D47F . -1D480 . -1D481 . -1D482 . -1D483 . -1D484 . -1D485 . -1D486 . -1D487 . -1D488 . -1D489 . -1D48A . -1D48B . -1D48C . -1D48D . -1D48E . -1D48F . -1D490 . -1D491 . -1D492 . -1D493 . -1D494 . -1D495 . -1D496 . -1D497 . -1D498 . -1D499 . -1D49A . -1D49B . -1D49C . -1D49E . -1D49F . -1D4A2 . -1D4A5 . -1D4A6 . -1D4A9 . -1D4AA . -1D4AB . -1D4AC . -1D4AE . -1D4AF . -1D4B0 . -1D4B1 . -1D4B2 . -1D4B3 . -1D4B4 . -1D4B5 . -1D4B6 . -1D4B7 . -1D4B8 . -1D4B9 . -1D4BB . -1D4BD . -1D4BE . -1D4BF . -1D4C0 . -1D4C1 . -1D4C2 . -1D4C3 . -1D4C5 . -1D4C6 . -1D4C7 . -1D4C8 . -1D4C9 . -1D4CA . -1D4CB . -1D4CC . -1D4CD . -1D4CE . -1D4CF . -1D4D0 . -1D4D1 . -1D4D2 . -1D4D3 . -1D4D4 . -1D4D5 . -1D4D6 . -1D4D7 . -1D4D8 . -1D4D9 . -1D4DA . -1D4DB . -1D4DC . -1D4DD . -1D4DE . -1D4DF . -1D4E0 . -1D4E1 . -1D4E2 . -1D4E3 . -1D4E4 . -1D4E5 . -1D4E6 . -1D4E7 . -1D4E8 . -1D4E9 . -1D4EA . -1D4EB . -1D4EC . -1D4ED . -1D4EE . -1D4EF . -1D4F0 . -1D4F1 . -1D4F2 . -1D4F3 . -1D4F4 . -1D4F5 . -1D4F6 . -1D4F7 . -1D4F8 . -1D4F9 . -1D4FA . -1D4FB . -1D4FC . -1D4FD . -1D4FE . -1D4FF . -1D500 . -1D501 . -1D502 . -1D503 . -1D504 . -1D505 . -1D507 . -1D508 . -1D509 . -1D50A . -1D50D . -1D50E . -1D50F . -1D510 . -1D511 . -1D512 . -1D513 . -1D514 . -1D516 . -1D517 . -1D518 . -1D519 . -1D51A . -1D51B . -1D51C . -1D51E . -1D51F . -1D520 . -1D521 . -1D522 . -1D523 . -1D524 . -1D525 . -1D526 . -1D527 . -1D528 . -1D529 . -1D52A . -1D52B . -1D52C . -1D52D . -1D52E . -1D52F . -1D530 . -1D531 . -1D532 . -1D533 . -1D534 . -1D535 . -1D536 . -1D537 . -1D538 . -1D539 . -1D53B . -1D53C . -1D53D . -1D53E . -1D540 . -1D541 . -1D542 . -1D543 . -1D544 . -1D546 . -1D54A . -1D54B . -1D54C . -1D54D . -1D54E . -1D54F . -1D550 . -1D552 . -1D553 . -1D554 . -1D555 . -1D556 . -1D557 . -1D558 . -1D559 . -1D55A . -1D55B . -1D55C . -1D55D . -1D55E . -1D55F . -1D560 . -1D561 . -1D562 . -1D563 . -1D564 . -1D565 . -1D566 . -1D567 . -1D568 . -1D569 . -1D56A . -1D56B . -1D56C . -1D56D . -1D56E . -1D56F . -1D570 . -1D571 . -1D572 . -1D573 . -1D574 . -1D575 . -1D576 . -1D577 . -1D578 . -1D579 . -1D57A . -1D57B . -1D57C . -1D57D . -1D57E . -1D57F . -1D580 . -1D581 . -1D582 . -1D583 . -1D584 . -1D585 . -1D586 . -1D587 . -1D588 . -1D589 . -1D58A . -1D58B . -1D58C . -1D58D . -1D58E . -1D58F . -1D590 . -1D591 . -1D592 . -1D593 . -1D594 . -1D595 . -1D596 . -1D597 . -1D598 . -1D599 . -1D59A . -1D59B . -1D59C . -1D59D . -1D59E . -1D59F . -1D5A0 . -1D5A1 . -1D5A2 . -1D5A3 . -1D5A4 . -1D5A5 . -1D5A6 . -1D5A7 . -1D5A8 . -1D5A9 . -1D5AA . -1D5AB . -1D5AC . -1D5AD . -1D5AE . -1D5AF . -1D5B0 . -1D5B1 . -1D5B2 . -1D5B3 . -1D5B4 . -1D5B5 . -1D5B6 . -1D5B7 . -1D5B8 . -1D5B9 . -1D5BA . -1D5BB . -1D5BC . -1D5BD . -1D5BE . -1D5BF . -1D5C0 . -1D5C1 . -1D5C2 . -1D5C3 . -1D5C4 . -1D5C5 . -1D5C6 . -1D5C7 . -1D5C8 . -1D5C9 . -1D5CA . -1D5CB . -1D5CC . -1D5CD . -1D5CE . -1D5CF . -1D5D0 . -1D5D1 . -1D5D2 . -1D5D3 . -1D5D4 . -1D5D5 . -1D5D6 . -1D5D7 . -1D5D8 . -1D5D9 . -1D5DA . -1D5DB . -1D5DC . -1D5DD . -1D5DE . -1D5DF . -1D5E0 . -1D5E1 . -1D5E2 . -1D5E3 . -1D5E4 . -1D5E5 . -1D5E6 . -1D5E7 . -1D5E8 . -1D5E9 . -1D5EA . -1D5EB . -1D5EC . -1D5ED . -1D5EE . -1D5EF . -1D5F0 . -1D5F1 . -1D5F2 . -1D5F3 . -1D5F4 . -1D5F5 . -1D5F6 . -1D5F7 . -1D5F8 . -1D5F9 . -1D5FA . -1D5FB . -1D5FC . -1D5FD . -1D5FE . -1D5FF . -1D600 . -1D601 . -1D602 . -1D603 . -1D604 . -1D605 . -1D606 . -1D607 . -1D608 . -1D609 . -1D60A . -1D60B . -1D60C . -1D60D . -1D60E . -1D60F . -1D610 . -1D611 . -1D612 . -1D613 . -1D614 . -1D615 . -1D616 . -1D617 . -1D618 . -1D619 . -1D61A . -1D61B . -1D61C . -1D61D . -1D61E . -1D61F . -1D620 . -1D621 . -1D622 . -1D623 . -1D624 . -1D625 . -1D626 . -1D627 . -1D628 . -1D629 . -1D62A . -1D62B . -1D62C . -1D62D . -1D62E . -1D62F . -1D630 . -1D631 . -1D632 . -1D633 . -1D634 . -1D635 . -1D636 . -1D637 . -1D638 . -1D639 . -1D63A . -1D63B . -1D63C . -1D63D . -1D63E . -1D63F . -1D640 . -1D641 . -1D642 . -1D643 . -1D644 . -1D645 . -1D646 . -1D647 . -1D648 . -1D649 . -1D64A . -1D64B . -1D64C . -1D64D . -1D64E . -1D64F . -1D650 . -1D651 . -1D652 . -1D653 . -1D654 . -1D655 . -1D656 . -1D657 . -1D658 . -1D659 . -1D65A . -1D65B . -1D65C . -1D65D . -1D65E . -1D65F . -1D660 . -1D661 . -1D662 . -1D663 . -1D664 . -1D665 . -1D666 . -1D667 . -1D668 . -1D669 . -1D66A . -1D66B . -1D66C . -1D66D . -1D66E . -1D66F . -1D670 . -1D671 . -1D672 . -1D673 . -1D674 . -1D675 . -1D676 . -1D677 . -1D678 . -1D679 . -1D67A . -1D67B . -1D67C . -1D67D . -1D67E . -1D67F . -1D680 . -1D681 . -1D682 . -1D683 . -1D684 . -1D685 . -1D686 . -1D687 . -1D688 . -1D689 . -1D68A . -1D68B . -1D68C . -1D68D . -1D68E . -1D68F . -1D690 . -1D691 . -1D692 . -1D693 . -1D694 . -1D695 . -1D696 . -1D697 . -1D698 . -1D699 . -1D69A . -1D69B . -1D69C . -1D69D . -1D69E . -1D69F . -1D6A0 . -1D6A1 . -1D6A2 . -1D6A3 . -1D6A4 . -1D6A5 . -1D6A8 . -1D6A9 . -1D6AA . -1D6AB . -1D6AC . -1D6AD . -1D6AE . -1D6AF . -1D6B0 . -1D6B1 . -1D6B2 . -1D6B3 . -1D6B4 . -1D6B5 . -1D6B6 . -1D6B7 . -1D6B8 . -1D6B9 . -1D6BA . -1D6BB . -1D6BC . -1D6BD . -1D6BE . -1D6BF . -1D6C0 . -1D6C2 . -1D6C3 . -1D6C4 . -1D6C5 . -1D6C6 . -1D6C7 . -1D6C8 . -1D6C9 . -1D6CA . -1D6CB . -1D6CC . -1D6CD . -1D6CE . -1D6CF . -1D6D0 . -1D6D1 . -1D6D2 . -1D6D3 . -1D6D4 . -1D6D5 . -1D6D6 . -1D6D7 . -1D6D8 . -1D6D9 . -1D6DA . -1D6DC . -1D6DD . -1D6DE . -1D6DF . -1D6E0 . -1D6E1 . -1D6E2 . -1D6E3 . -1D6E4 . -1D6E5 . -1D6E6 . -1D6E7 . -1D6E8 . -1D6E9 . -1D6EA . -1D6EB . -1D6EC . -1D6ED . -1D6EE . -1D6EF . -1D6F0 . -1D6F1 . -1D6F2 . -1D6F3 . -1D6F4 . -1D6F5 . -1D6F6 . -1D6F7 . -1D6F8 . -1D6F9 . -1D6FA . -1D6FC . -1D6FD . -1D6FE . -1D6FF . -1D700 . -1D701 . -1D702 . -1D703 . -1D704 . -1D705 . -1D706 . -1D707 . -1D708 . -1D709 . -1D70A . -1D70B . -1D70C . -1D70D . -1D70E . -1D70F . -1D710 . -1D711 . -1D712 . -1D713 . -1D714 . -1D716 . -1D717 . -1D718 . -1D719 . -1D71A . -1D71B . -1D71C . -1D71D . -1D71E . -1D71F . -1D720 . -1D721 . -1D722 . -1D723 . -1D724 . -1D725 . -1D726 . -1D727 . -1D728 . -1D729 . -1D72A . -1D72B . -1D72C . -1D72D . -1D72E . -1D72F . -1D730 . -1D731 . -1D732 . -1D733 . -1D734 . -1D736 . -1D737 . -1D738 . -1D739 . -1D73A . -1D73B . -1D73C . -1D73D . -1D73E . -1D73F . -1D740 . -1D741 . -1D742 . -1D743 . -1D744 . -1D745 . -1D746 . -1D747 . -1D748 . -1D749 . -1D74A . -1D74B . -1D74C . -1D74D . -1D74E . -1D750 . -1D751 . -1D752 . -1D753 . -1D754 . -1D755 . -1D756 . -1D757 . -1D758 . -1D759 . -1D75A . -1D75B . -1D75C . -1D75D . -1D75E . -1D75F . -1D760 . -1D761 . -1D762 . -1D763 . -1D764 . -1D765 . -1D766 . -1D767 . -1D768 . -1D769 . -1D76A . -1D76B . -1D76C . -1D76D . -1D76E . -1D770 . -1D771 . -1D772 . -1D773 . -1D774 . -1D775 . -1D776 . -1D777 . -1D778 . -1D779 . -1D77A . -1D77B . -1D77C . -1D77D . -1D77E . -1D77F . -1D780 . -1D781 . -1D782 . -1D783 . -1D784 . -1D785 . -1D786 . -1D787 . -1D788 . -1D78A . -1D78B . -1D78C . -1D78D . -1D78E . -1D78F . -1D790 . -1D791 . -1D792 . -1D793 . -1D794 . -1D795 . -1D796 . -1D797 . -1D798 . -1D799 . -1D79A . -1D79B . -1D79C . -1D79D . -1D79E . -1D79F . -1D7A0 . -1D7A1 . -1D7A2 . -1D7A3 . -1D7A4 . -1D7A5 . -1D7A6 . -1D7A7 . -1D7A8 . -1D7AA . -1D7AB . -1D7AC . -1D7AD . -1D7AE . -1D7AF . -1D7B0 . -1D7B1 . -1D7B2 . -1D7B3 . -1D7B4 . -1D7B5 . -1D7B6 . -1D7B7 . -1D7B8 . -1D7B9 . -1D7BA . -1D7BB . -1D7BC . -1D7BD . -1D7BE . -1D7BF . -1D7C0 . -1D7C1 . -1D7C2 . -1D7C4 . -1D7C5 . -1D7C6 . -1D7C7 . -1D7C8 . -1D7C9 . -1D7CA . -1D7CB . -1EE00 . -1EE01 . -1EE02 . -1EE03 . -1EE05 . -1EE06 . -1EE07 . -1EE08 . -1EE09 . -1EE0A . -1EE0B . -1EE0C . -1EE0D . -1EE0E . -1EE0F . -1EE10 . -1EE11 . -1EE12 . -1EE13 . -1EE14 . -1EE15 . -1EE16 . -1EE17 . -1EE18 . -1EE19 . -1EE1A . -1EE1B . -1EE1C . -1EE1D . -1EE1E . -1EE1F . -1EE21 . -1EE22 . -1EE24 . -1EE27 . -1EE29 . -1EE2A . -1EE2B . -1EE2C . -1EE2D . -1EE2E . -1EE2F . -1EE30 . -1EE31 . -1EE32 . -1EE34 . -1EE35 . -1EE36 . -1EE37 . -1EE39 . -1EE3B . -1EE42 . -1EE47 . -1EE49 . -1EE4B . -1EE4D . -1EE4E . -1EE4F . -1EE51 . -1EE52 . -1EE54 . -1EE57 . -1EE59 . -1EE5B . -1EE5D . -1EE5F . -1EE61 . -1EE62 . -1EE64 . -1EE67 . -1EE68 . -1EE69 . -1EE6A . -1EE6C . -1EE6D . -1EE6E . -1EE6F . -1EE70 . -1EE71 . -1EE72 . -1EE74 . -1EE75 . -1EE76 . -1EE77 . -1EE79 . -1EE7A . -1EE7B . -1EE7C . -1EE7E . -1EE80 . -1EE81 . -1EE82 . -1EE83 . -1EE84 . -1EE85 . -1EE86 . -1EE87 . -1EE88 . -1EE89 . -1EE8B . -1EE8C . -1EE8D . -1EE8E . -1EE8F . -1EE90 . -1EE91 . -1EE92 . -1EE93 . -1EE94 . -1EE95 . -1EE96 . -1EE97 . -1EE98 . -1EE99 . -1EE9A . -1EE9B . -1EEA1 . -1EEA2 . -1EEA3 . -1EEA5 . -1EEA6 . -1EEA7 . -1EEA8 . -1EEA9 . -1EEAB . -1EEAC . -1EEAD . -1EEAE . -1EEAF . -1EEB0 . -1EEB1 . -1EEB2 . -1EEB3 . -1EEB4 . -1EEB5 . -1EEB6 . -1EEB7 . -1EEB8 . -1EEB9 . -1EEBA . -1EEBB . -2F800 . -2F801 . -2F802 . -2F803 . -2F804 . -2F805 . -2F806 . -2F807 . -2F808 . -2F809 . -2F80A . -2F80B . -2F80C . -2F80D . -2F80E . -2F80F . -2F810 . -2F811 . -2F812 . -2F813 . -2F814 . -2F815 . -2F816 . -2F817 . -2F818 . -2F819 . -2F81A . -2F81B . -2F81C . -2F81D . -2F81E . -2F81F . -2F820 . -2F821 . -2F822 . -2F823 . -2F824 . -2F825 . -2F826 . -2F827 . -2F828 . -2F829 . -2F82A . -2F82B . -2F82C . -2F82D . -2F82E . -2F82F . -2F830 . -2F831 . -2F832 . -2F833 . -2F834 . -2F835 . -2F836 . -2F837 . -2F838 . -2F839 . -2F83A . -2F83B . -2F83C . -2F83D . -2F83E . -2F83F . -2F840 . -2F841 . -2F842 . -2F843 . -2F844 . -2F845 . -2F846 . -2F847 . -2F848 . -2F849 . -2F84A . -2F84B . -2F84C . -2F84D . -2F84E . -2F84F . -2F850 . -2F851 . -2F852 . -2F853 . -2F854 . -2F855 . -2F856 . -2F857 . -2F858 . -2F859 . -2F85A . -2F85B . -2F85C . -2F85D . -2F85E . -2F85F . -2F860 . -2F861 . -2F862 . -2F863 . -2F864 . -2F865 . -2F866 . -2F867 . -2F868 . -2F869 . -2F86A . -2F86B . -2F86C . -2F86D . -2F86E . -2F86F . -2F870 . -2F871 . -2F872 . -2F873 . -2F874 . -2F875 . -2F876 . -2F877 . -2F878 . -2F879 . -2F87A . -2F87B . -2F87C . -2F87D . -2F87E . -2F87F . -2F880 . -2F881 . -2F882 . -2F883 . -2F884 . -2F885 . -2F886 . -2F887 . -2F888 . -2F889 . -2F88A . -2F88B . -2F88C . -2F88D . -2F88E . -2F88F . -2F890 . -2F891 . -2F892 . -2F893 . -2F894 . -2F895 . -2F896 . -2F897 . -2F898 . -2F899 . -2F89A . -2F89B . -2F89C . -2F89D . -2F89E . -2F89F . -2F8A0 . -2F8A1 . -2F8A2 . -2F8A3 . -2F8A4 . -2F8A5 . -2F8A6 . -2F8A7 . -2F8A8 . -2F8A9 . -2F8AA . -2F8AB . -2F8AC . -2F8AD . -2F8AE . -2F8AF . -2F8B0 . -2F8B1 . -2F8B2 . -2F8B3 . -2F8B4 . -2F8B5 . -2F8B6 . -2F8B7 . -2F8B8 . -2F8B9 . -2F8BA . -2F8BB . -2F8BC . -2F8BD . -2F8BE . -2F8BF . -2F8C0 . -2F8C1 . -2F8C2 . -2F8C3 . -2F8C4 . -2F8C5 . -2F8C6 . -2F8C7 . -2F8C8 . -2F8C9 . -2F8CA . -2F8CB . -2F8CC . -2F8CD . -2F8CE . -2F8CF . -2F8D0 . -2F8D1 . -2F8D2 . -2F8D3 . -2F8D4 . -2F8D5 . -2F8D6 . -2F8D7 . -2F8D8 . -2F8D9 . -2F8DA . -2F8DB . -2F8DC . -2F8DD . -2F8DE . -2F8DF . -2F8E0 . -2F8E1 . -2F8E2 . -2F8E3 . -2F8E4 . -2F8E5 . -2F8E6 . -2F8E7 . -2F8E8 . -2F8E9 . -2F8EA . -2F8EB . -2F8EC . -2F8ED . -2F8EE . -2F8EF . -2F8F0 . -2F8F1 . -2F8F2 . -2F8F3 . -2F8F4 . -2F8F5 . -2F8F6 . -2F8F7 . -2F8F8 . -2F8F9 . -2F8FA . -2F8FB . -2F8FC . -2F8FD . -2F8FE . -2F8FF . -2F900 . -2F901 . -2F902 . -2F903 . -2F904 . -2F905 . -2F906 . -2F907 . -2F908 . -2F909 . -2F90A . -2F90B . -2F90C . -2F90D . -2F90E . -2F90F . -2F910 . -2F911 . -2F912 . -2F913 . -2F914 . -2F915 . -2F916 . -2F917 . -2F918 . -2F919 . -2F91A . -2F91B . -2F91C . -2F91D . -2F91E . -2F91F . -2F920 . -2F921 . -2F922 . -2F923 . -2F924 . -2F925 . -2F926 . -2F927 . -2F928 . -2F929 . -2F92A . -2F92B . -2F92C . -2F92D . -2F92E . -2F92F . -2F930 . -2F931 . -2F932 . -2F933 . -2F934 . -2F935 . -2F936 . -2F937 . -2F938 . -2F939 . -2F93A . -2F93B . -2F93C . -2F93D . -2F93E . -2F93F . -2F940 . -2F941 . -2F942 . -2F943 . -2F944 . -2F945 . -2F946 . -2F947 . -2F948 . -2F949 . -2F94A . -2F94B . -2F94C . -2F94D . -2F94E . -2F94F . -2F950 . -2F951 . -2F952 . -2F953 . -2F954 . -2F955 . -2F956 . -2F957 . -2F958 . -2F959 . -2F95A . -2F95B . -2F95C . -2F95D . -2F95E . -2F95F . -2F960 . -2F961 . -2F962 . -2F963 . -2F964 . -2F965 . -2F966 . -2F967 . -2F968 . -2F969 . -2F96A . -2F96B . -2F96C . -2F96D . -2F96E . -2F96F . -2F970 . -2F971 . -2F972 . -2F973 . -2F974 . -2F975 . -2F976 . -2F977 . -2F978 . -2F979 . -2F97A . -2F97B . -2F97C . -2F97D . -2F97E . -2F97F . -2F980 . -2F981 . -2F982 . -2F983 . -2F984 . -2F985 . -2F986 . -2F987 . -2F988 . -2F989 . -2F98A . -2F98B . -2F98C . -2F98D . -2F98E . -2F98F . -2F990 . -2F991 . -2F992 . -2F993 . -2F994 . -2F995 . -2F996 . -2F997 . -2F998 . -2F999 . -2F99A . -2F99B . -2F99C . -2F99D . -2F99E . -2F99F . -2F9A0 . -2F9A1 . -2F9A2 . -2F9A3 . -2F9A4 . -2F9A5 . -2F9A6 . -2F9A7 . -2F9A8 . -2F9A9 . -2F9AA . -2F9AB . -2F9AC . -2F9AD . -2F9AE . -2F9AF . -2F9B0 . -2F9B1 . -2F9B2 . -2F9B3 . -2F9B4 . -2F9B5 . -2F9B6 . -2F9B7 . -2F9B8 . -2F9B9 . -2F9BA . -2F9BB . -2F9BC . -2F9BD . -2F9BE . -2F9BF . -2F9C0 . -2F9C1 . -2F9C2 . -2F9C3 . -2F9C4 . -2F9C5 . -2F9C6 . -2F9C7 . -2F9C8 . -2F9C9 . -2F9CA . -2F9CB . -2F9CC . -2F9CD . -2F9CE . -2F9CF . -2F9D0 . -2F9D1 . -2F9D2 . -2F9D3 . -2F9D4 . -2F9D5 . -2F9D6 . -2F9D7 . -2F9D8 . -2F9D9 . -2F9DA . -2F9DB . -2F9DC . -2F9DD . -2F9DE . -2F9DF . -2F9E0 . -2F9E1 . -2F9E2 . -2F9E3 . -2F9E4 . -2F9E5 . -2F9E6 . -2F9E7 . -2F9E8 . -2F9E9 . -2F9EA . -2F9EB . -2F9EC . -2F9ED . -2F9EE . -2F9EF . -2F9F0 . -2F9F1 . -2F9F2 . -2F9F3 . -2F9F4 . -2F9F5 . -2F9F6 . -2F9F7 . -2F9F8 . -2F9F9 . -2F9FA . -2F9FB . -2F9FC . -2F9FD . -2F9FE . -2F9FF . -2FA00 . -2FA01 . -2FA02 . -2FA03 . -2FA04 . -2FA05 . -2FA06 . -2FA07 . -2FA08 . -2FA09 . -2FA0A . -2FA0B . -2FA0C . -2FA0D . -2FA0E . -2FA0F . -2FA10 . -2FA11 . -2FA12 . -2FA13 . -2FA14 . -2FA15 . -2FA16 . -2FA17 . -2FA18 . -2FA19 . -2FA1A . -2FA1B . -2FA1C . -2FA1D . -2170 2160 -2171 2161 -2172 2162 -2173 2163 -2174 2164 -2175 2165 -2176 2166 -2177 2167 -2178 2168 -2179 2169 -217A 216A -217B 216B -217C 216C -217D 216D -217E 216E -217F 216F -24D0 24B6 -24D1 24B7 -24D2 24B8 -24D3 24B9 -24D4 24BA -24D5 24BB -24D6 24BC -24D7 24BD -24D8 24BE -24D9 24BF -24DA 24C0 -24DB 24C1 -24DC 24C2 -24DD 24C3 -24DE 24C4 -24DF 24C5 -24E0 24C6 -24E1 24C7 -24E2 24C8 -24E3 24C9 -24E4 24CA -24E5 24CB -24E6 24CC -24E7 24CD -24E8 24CE -24E9 24CF -0300 . -0301 . -0302 . -0303 . -0304 . -0305 . -0306 . -0307 . -0308 . -0309 . -030A . -030B . -030C . -030D . -030E . -030F . -0310 . -0311 . -0312 . -0313 . -0314 . -0315 . -0316 . -0317 . -0318 . -0319 . -031A . -031B . -031C . -031D . -031E . -031F . -0320 . -0321 . -0322 . -0323 . -0324 . -0325 . -0326 . -0327 . -0328 . -0329 . -032A . -032B . -032C . -032D . -032E . -032F . -0330 . -0331 . -0332 . -0333 . -0334 . -0335 . -0336 . -0337 . -0338 . -0339 . -033A . -033B . -033C . -033D . -033E . -033F . -0340 . -0341 . -0342 . -0343 . -0344 . -0345 . -0346 . -0347 . -0348 . -0349 . -034A . -034B . -034C . -034D . -034E . -034F . -0350 . -0351 . -0352 . -0353 . -0354 . -0355 . -0356 . -0357 . -0358 . -0359 . -035A . -035B . -035C . -035D . -035E . -035F . -0360 . -0361 . -0362 . -0363 . -0364 . -0365 . -0366 . -0367 . -0368 . -0369 . -036A . -036B . -036C . -036D . -036E . -036F . -0483 . -0484 . -0485 . -0486 . -0487 . -0488 . -0489 . -0591 . -0592 . -0593 . -0594 . -0595 . -0596 . -0597 . -0598 . -0599 . -059A . -059B . -059C . -059D . -059E . -059F . -05A0 . -05A1 . -05A2 . -05A3 . -05A4 . -05A5 . -05A6 . -05A7 . -05A8 . -05A9 . -05AA . -05AB . -05AC . -05AD . -05AE . -05AF . -05B0 . -05B1 . -05B2 . -05B3 . -05B4 . -05B5 . -05B6 . -05B7 . -05B8 . -05B9 . -05BA . -05BB . -05BC . -05BD . -05BF . -05C1 . -05C2 . -05C4 . -05C5 . -05C7 . -0610 . -0611 . -0612 . -0613 . -0614 . -0615 . -0616 . -0617 . -0618 . -0619 . -061A . -064B . -064C . -064D . -064E . -064F . -0650 . -0651 . -0652 . -0653 . -0654 . -0655 . -0656 . -0657 . -0658 . -0659 . -065A . -065B . -065C . -065D . -065E . -065F . -0670 . -06D6 . -06D7 . -06D8 . -06D9 . -06DA . -06DB . -06DC . -06DF . -06E0 . -06E1 . -06E2 . -06E3 . -06E4 . -06E7 . -06E8 . -06EA . -06EB . -06EC . -06ED . -0711 . -0730 . -0731 . -0732 . -0733 . -0734 . -0735 . -0736 . -0737 . -0738 . -0739 . -073A . -073B . -073C . -073D . -073E . -073F . -0740 . -0741 . -0742 . -0743 . -0744 . -0745 . -0746 . -0747 . -0748 . -0749 . -074A . -07A6 . -07A7 . -07A8 . -07A9 . -07AA . -07AB . -07AC . -07AD . -07AE . -07AF . -07B0 . -07EB . -07EC . -07ED . -07EE . -07EF . -07F0 . -07F1 . -07F2 . -07F3 . -0816 . -0817 . -0818 . -0819 . -081B . -081C . -081D . -081E . -081F . -0820 . -0821 . -0822 . -0823 . -0825 . -0826 . -0827 . -0829 . -082A . -082B . -082C . -082D . -0859 . -085A . -085B . -08E4 . -08E5 . -08E6 . -08E7 . -08E8 . -08E9 . -08EA . -08EB . -08EC . -08ED . -08EE . -08EF . -08F0 . -08F1 . -08F2 . -08F3 . -08F4 . -08F5 . -08F6 . -08F7 . -08F8 . -08F9 . -08FA . -08FB . -08FC . -08FD . -08FE . -0900 . -0901 . -0902 . -0903 . -093A . -093B . -093C . -093E . -093F . -0940 . -0941 . -0942 . -0943 . -0944 . -0945 . -0946 . -0947 . -0948 . -0949 . -094A . -094B . -094C . -094D . -094E . -094F . -0951 . -0952 . -0953 . -0954 . -0955 . -0956 . -0957 . -0962 . -0963 . -0981 . -0982 . -0983 . -09BC . -09BE . -09BF . -09C0 . -09C1 . -09C2 . -09C3 . -09C4 . -09C7 . -09C8 . -09CB . -09CC . -09CD . -09D7 . -09E2 . -09E3 . -0A01 . -0A02 . -0A03 . -0A3C . -0A3E . -0A3F . -0A40 . -0A41 . -0A42 . -0A47 . -0A48 . -0A4B . -0A4C . -0A4D . -0A51 . -0A70 . -0A71 . -0A75 . -0A81 . -0A82 . -0A83 . -0ABC . -0ABE . -0ABF . -0AC0 . -0AC1 . -0AC2 . -0AC3 . -0AC4 . -0AC5 . -0AC7 . -0AC8 . -0AC9 . -0ACB . -0ACC . -0ACD . -0AE2 . -0AE3 . -0B01 . -0B02 . -0B03 . -0B3C . -0B3E . -0B3F . -0B40 . -0B41 . -0B42 . -0B43 . -0B44 . -0B47 . -0B48 . -0B4B . -0B4C . -0B4D . -0B56 . -0B57 . -0B62 . -0B63 . -0B82 . -0BBE . -0BBF . -0BC0 . -0BC1 . -0BC2 . -0BC6 . -0BC7 . -0BC8 . -0BCA . -0BCB . -0BCC . -0BCD . -0BD7 . -0C01 . -0C02 . -0C03 . -0C3E . -0C3F . -0C40 . -0C41 . -0C42 . -0C43 . -0C44 . -0C46 . -0C47 . -0C48 . -0C4A . -0C4B . -0C4C . -0C4D . -0C55 . -0C56 . -0C62 . -0C63 . -0C82 . -0C83 . -0CBC . -0CBE . -0CBF . -0CC0 . -0CC1 . -0CC2 . -0CC3 . -0CC4 . -0CC6 . -0CC7 . -0CC8 . -0CCA . -0CCB . -0CCC . -0CCD . -0CD5 . -0CD6 . -0CE2 . -0CE3 . -0D02 . -0D03 . -0D3E . -0D3F . -0D40 . -0D41 . -0D42 . -0D43 . -0D44 . -0D46 . -0D47 . -0D48 . -0D4A . -0D4B . -0D4C . -0D4D . -0D57 . -0D62 . -0D63 . -0D82 . -0D83 . -0DCA . -0DCF . -0DD0 . -0DD1 . -0DD2 . -0DD3 . -0DD4 . -0DD6 . -0DD8 . -0DD9 . -0DDA . -0DDB . -0DDC . -0DDD . -0DDE . -0DDF . -0DF2 . -0DF3 . -0E31 . -0E34 . -0E35 . -0E36 . -0E37 . -0E38 . -0E39 . -0E3A . -0E47 . -0E48 . -0E49 . -0E4A . -0E4B . -0E4C . -0E4D . -0E4E . -0EB1 . -0EB4 . -0EB5 . -0EB6 . -0EB7 . -0EB8 . -0EB9 . -0EBB . -0EBC . -0EC8 . -0EC9 . -0ECA . -0ECB . -0ECC . -0ECD . -0F18 . -0F19 . -0F35 . -0F37 . -0F39 . -0F3E . -0F3F . -0F71 . -0F72 . -0F73 . -0F74 . -0F75 . -0F76 . -0F77 . -0F78 . -0F79 . -0F7A . -0F7B . -0F7C . -0F7D . -0F7E . -0F7F . -0F80 . -0F81 . -0F82 . -0F83 . -0F84 . -0F86 . -0F87 . -0F8D . -0F8E . -0F8F . -0F90 . -0F91 . -0F92 . -0F93 . -0F94 . -0F95 . -0F96 . -0F97 . -0F99 . -0F9A . -0F9B . -0F9C . -0F9D . -0F9E . -0F9F . -0FA0 . -0FA1 . -0FA2 . -0FA3 . -0FA4 . -0FA5 . -0FA6 . -0FA7 . -0FA8 . -0FA9 . -0FAA . -0FAB . -0FAC . -0FAD . -0FAE . -0FAF . -0FB0 . -0FB1 . -0FB2 . -0FB3 . -0FB4 . -0FB5 . -0FB6 . -0FB7 . -0FB8 . -0FB9 . -0FBA . -0FBB . -0FBC . -0FC6 . -102B . -102C . -102D . -102E . -102F . -1030 . -1031 . -1032 . -1033 . -1034 . -1035 . -1036 . -1037 . -1038 . -1039 . -103A . -103B . -103C . -103D . -103E . -1056 . -1057 . -1058 . -1059 . -105E . -105F . -1060 . -1062 . -1063 . -1064 . -1067 . -1068 . -1069 . -106A . -106B . -106C . -106D . -1071 . -1072 . -1073 . -1074 . -1082 . -1083 . -1084 . -1085 . -1086 . -1087 . -1088 . -1089 . -108A . -108B . -108C . -108D . -108F . -109A . -109B . -109C . -109D . -135D . -135E . -135F . -1712 . -1713 . -1714 . -1732 . -1733 . -1734 . -1752 . -1753 . -1772 . -1773 . -17B4 . -17B5 . -17B6 . -17B7 . -17B8 . -17B9 . -17BA . -17BB . -17BC . -17BD . -17BE . -17BF . -17C0 . -17C1 . -17C2 . -17C3 . -17C4 . -17C5 . -17C6 . -17C7 . -17C8 . -17C9 . -17CA . -17CB . -17CC . -17CD . -17CE . -17CF . -17D0 . -17D1 . -17D2 . -17D3 . -17DD . -180B . -180C . -180D . -18A9 . -1920 . -1921 . -1922 . -1923 . -1924 . -1925 . -1926 . -1927 . -1928 . -1929 . -192A . -192B . -1930 . -1931 . -1932 . -1933 . -1934 . -1935 . -1936 . -1937 . -1938 . -1939 . -193A . -193B . -19B0 . -19B1 . -19B2 . -19B3 . -19B4 . -19B5 . -19B6 . -19B7 . -19B8 . -19B9 . -19BA . -19BB . -19BC . -19BD . -19BE . -19BF . -19C0 . -19C8 . -19C9 . -1A17 . -1A18 . -1A19 . -1A1A . -1A1B . -1A55 . -1A56 . -1A57 . -1A58 . -1A59 . -1A5A . -1A5B . -1A5C . -1A5D . -1A5E . -1A60 . -1A61 . -1A62 . -1A63 . -1A64 . -1A65 . -1A66 . -1A67 . -1A68 . -1A69 . -1A6A . -1A6B . -1A6C . -1A6D . -1A6E . -1A6F . -1A70 . -1A71 . -1A72 . -1A73 . -1A74 . -1A75 . -1A76 . -1A77 . -1A78 . -1A79 . -1A7A . -1A7B . -1A7C . -1A7F . -1B00 . -1B01 . -1B02 . -1B03 . -1B04 . -1B34 . -1B35 . -1B36 . -1B37 . -1B38 . -1B39 . -1B3A . -1B3B . -1B3C . -1B3D . -1B3E . -1B3F . -1B40 . -1B41 . -1B42 . -1B43 . -1B44 . -1B6B . -1B6C . -1B6D . -1B6E . -1B6F . -1B70 . -1B71 . -1B72 . -1B73 . -1B80 . -1B81 . -1B82 . -1BA1 . -1BA2 . -1BA3 . -1BA4 . -1BA5 . -1BA6 . -1BA7 . -1BA8 . -1BA9 . -1BAA . -1BAB . -1BAC . -1BAD . -1BE6 . -1BE7 . -1BE8 . -1BE9 . -1BEA . -1BEB . -1BEC . -1BED . -1BEE . -1BEF . -1BF0 . -1BF1 . -1BF2 . -1BF3 . -1C24 . -1C25 . -1C26 . -1C27 . -1C28 . -1C29 . -1C2A . -1C2B . -1C2C . -1C2D . -1C2E . -1C2F . -1C30 . -1C31 . -1C32 . -1C33 . -1C34 . -1C35 . -1C36 . -1C37 . -1CD0 . -1CD1 . -1CD2 . -1CD4 . -1CD5 . -1CD6 . -1CD7 . -1CD8 . -1CD9 . -1CDA . -1CDB . -1CDC . -1CDD . -1CDE . -1CDF . -1CE0 . -1CE1 . -1CE2 . -1CE3 . -1CE4 . -1CE5 . -1CE6 . -1CE7 . -1CE8 . -1CED . -1CF2 . -1CF3 . -1CF4 . -1DC0 . -1DC1 . -1DC2 . -1DC3 . -1DC4 . -1DC5 . -1DC6 . -1DC7 . -1DC8 . -1DC9 . -1DCA . -1DCB . -1DCC . -1DCD . -1DCE . -1DCF . -1DD0 . -1DD1 . -1DD2 . -1DD3 . -1DD4 . -1DD5 . -1DD6 . -1DD7 . -1DD8 . -1DD9 . -1DDA . -1DDB . -1DDC . -1DDD . -1DDE . -1DDF . -1DE0 . -1DE1 . -1DE2 . -1DE3 . -1DE4 . -1DE5 . -1DE6 . -1DFC . -1DFD . -1DFE . -1DFF . -20D0 . -20D1 . -20D2 . -20D3 . -20D4 . -20D5 . -20D6 . -20D7 . -20D8 . -20D9 . -20DA . -20DB . -20DC . -20DD . -20DE . -20DF . -20E0 . -20E1 . -20E2 . -20E3 . -20E4 . -20E5 . -20E6 . -20E7 . -20E8 . -20E9 . -20EA . -20EB . -20EC . -20ED . -20EE . -20EF . -20F0 . -2CEF . -2CF0 . -2CF1 . -2D7F . -2DE0 . -2DE1 . -2DE2 . -2DE3 . -2DE4 . -2DE5 . -2DE6 . -2DE7 . -2DE8 . -2DE9 . -2DEA . -2DEB . -2DEC . -2DED . -2DEE . -2DEF . -2DF0 . -2DF1 . -2DF2 . -2DF3 . -2DF4 . -2DF5 . -2DF6 . -2DF7 . -2DF8 . -2DF9 . -2DFA . -2DFB . -2DFC . -2DFD . -2DFE . -2DFF . -302A . -302B . -302C . -302D . -302E . -302F . -3099 . -309A . -A66F . -A670 . -A671 . -A672 . -A674 . -A675 . -A676 . -A677 . -A678 . -A679 . -A67A . -A67B . -A67C . -A67D . -A69F . -A6F0 . -A6F1 . -A802 . -A806 . -A80B . -A823 . -A824 . -A825 . -A826 . -A827 . -A880 . -A881 . -A8B4 . -A8B5 . -A8B6 . -A8B7 . -A8B8 . -A8B9 . -A8BA . -A8BB . -A8BC . -A8BD . -A8BE . -A8BF . -A8C0 . -A8C1 . -A8C2 . -A8C3 . -A8C4 . -A8E0 . -A8E1 . -A8E2 . -A8E3 . -A8E4 . -A8E5 . -A8E6 . -A8E7 . -A8E8 . -A8E9 . -A8EA . -A8EB . -A8EC . -A8ED . -A8EE . -A8EF . -A8F0 . -A8F1 . -A926 . -A927 . -A928 . -A929 . -A92A . -A92B . -A92C . -A92D . -A947 . -A948 . -A949 . -A94A . -A94B . -A94C . -A94D . -A94E . -A94F . -A950 . -A951 . -A952 . -A953 . -A980 . -A981 . -A982 . -A983 . -A9B3 . -A9B4 . -A9B5 . -A9B6 . -A9B7 . -A9B8 . -A9B9 . -A9BA . -A9BB . -A9BC . -A9BD . -A9BE . -A9BF . -A9C0 . -AA29 . -AA2A . -AA2B . -AA2C . -AA2D . -AA2E . -AA2F . -AA30 . -AA31 . -AA32 . -AA33 . -AA34 . -AA35 . -AA36 . -AA43 . -AA4C . -AA4D . -AA7B . -AAB0 . -AAB2 . -AAB3 . -AAB4 . -AAB7 . -AAB8 . -AABE . -AABF . -AAC1 . -AAEB . -AAEC . -AAED . -AAEE . -AAEF . -AAF5 . -AAF6 . -ABE3 . -ABE4 . -ABE5 . -ABE6 . -ABE7 . -ABE8 . -ABE9 . -ABEA . -ABEC . -ABED . -FB1E . -FE00 . -FE01 . -FE02 . -FE03 . -FE04 . -FE05 . -FE06 . -FE07 . -FE08 . -FE09 . -FE0A . -FE0B . -FE0C . -FE0D . -FE0E . -FE0F . -FE20 . -FE21 . -FE22 . -FE23 . -FE24 . -FE25 . -FE26 . -101FD . -10A01 . -10A02 . -10A03 . -10A05 . -10A06 . -10A0C . -10A0D . -10A0E . -10A0F . -10A38 . -10A39 . -10A3A . -10A3F . -11000 . -11001 . -11002 . -11038 . -11039 . -1103A . -1103B . -1103C . -1103D . -1103E . -1103F . -11040 . -11041 . -11042 . -11043 . -11044 . -11045 . -11046 . -11080 . -11081 . -11082 . -110B0 . -110B1 . -110B2 . -110B3 . -110B4 . -110B5 . -110B6 . -110B7 . -110B8 . -110B9 . -110BA . -11100 . -11101 . -11102 . -11127 . -11128 . -11129 . -1112A . -1112B . -1112C . -1112D . -1112E . -1112F . -11130 . -11131 . -11132 . -11133 . -11134 . -11180 . -11181 . -11182 . -111B3 . -111B4 . -111B5 . -111B6 . -111B7 . -111B8 . -111B9 . -111BA . -111BB . -111BC . -111BD . -111BE . -111BF . -111C0 . -116AB . -116AC . -116AD . -116AE . -116AF . -116B0 . -116B1 . -116B2 . -116B3 . -116B4 . -116B5 . -116B6 . -116B7 . -16F51 . -16F52 . -16F53 . -16F54 . -16F55 . -16F56 . -16F57 . -16F58 . -16F59 . -16F5A . -16F5B . -16F5C . -16F5D . -16F5E . -16F5F . -16F60 . -16F61 . -16F62 . -16F63 . -16F64 . -16F65 . -16F66 . -16F67 . -16F68 . -16F69 . -16F6A . -16F6B . -16F6C . -16F6D . -16F6E . -16F6F . -16F70 . -16F71 . -16F72 . -16F73 . -16F74 . -16F75 . -16F76 . -16F77 . -16F78 . -16F79 . -16F7A . -16F7B . -16F7C . -16F7D . -16F7E . -16F8F . -16F90 . -16F91 . -16F92 . -1D165 . -1D166 . -1D167 . -1D168 . -1D169 . -1D16D . -1D16E . -1D16F . -1D170 . -1D171 . -1D172 . -1D17B . -1D17C . -1D17D . -1D17E . -1D17F . -1D180 . -1D181 . -1D182 . -1D185 . -1D186 . -1D187 . -1D188 . -1D189 . -1D18A . -1D18B . -1D1AA . -1D1AB . -1D1AC . -1D1AD . -1D242 . -1D243 . -1D244 . -E0100 . -E0101 . -E0102 . -E0103 . -E0104 . -E0105 . -E0106 . -E0107 . -E0108 . -E0109 . -E010A . -E010B . -E010C . -E010D . -E010E . -E010F . -E0110 . -E0111 . -E0112 . -E0113 . -E0114 . -E0115 . -E0116 . -E0117 . -E0118 . -E0119 . -E011A . -E011B . -E011C . -E011D . -E011E . -E011F . -E0120 . -E0121 . -E0122 . -E0123 . -E0124 . -E0125 . -E0126 . -E0127 . -E0128 . -E0129 . -E012A . -E012B . -E012C . -E012D . -E012E . -E012F . -E0130 . -E0131 . -E0132 . -E0133 . -E0134 . -E0135 . -E0136 . -E0137 . -E0138 . -E0139 . -E013A . -E013B . -E013C . -E013D . -E013E . -E013F . -E0140 . -E0141 . -E0142 . -E0143 . -E0144 . -E0145 . -E0146 . -E0147 . -E0148 . -E0149 . -E014A . -E014B . -E014C . -E014D . -E014E . -E014F . -E0150 . -E0151 . -E0152 . -E0153 . -E0154 . -E0155 . -E0156 . -E0157 . -E0158 . -E0159 . -E015A . -E015B . -E015C . -E015D . -E015E . -E015F . -E0160 . -E0161 . -E0162 . -E0163 . -E0164 . -E0165 . -E0166 . -E0167 . -E0168 . -E0169 . -E016A . -E016B . -E016C . -E016D . -E016E . -E016F . -E0170 . -E0171 . -E0172 . -E0173 . -E0174 . -E0175 . -E0176 . -E0177 . -E0178 . -E0179 . -E017A . -E017B . -E017C . -E017D . -E017E . -E017F . -E0180 . -E0181 . -E0182 . -E0183 . -E0184 . -E0185 . -E0186 . -E0187 . -E0188 . -E0189 . -E018A . -E018B . -E018C . -E018D . -E018E . -E018F . -E0190 . -E0191 . -E0192 . -E0193 . -E0194 . -E0195 . -E0196 . -E0197 . -E0198 . -E0199 . -E019A . -E019B . -E019C . -E019D . -E019E . -E019F . -E01A0 . -E01A1 . -E01A2 . -E01A3 . -E01A4 . -E01A5 . -E01A6 . -E01A7 . -E01A8 . -E01A9 . -E01AA . -E01AB . -E01AC . -E01AD . -E01AE . -E01AF . -E01B0 . -E01B1 . -E01B2 . -E01B3 . -E01B4 . -E01B5 . -E01B6 . -E01B7 . -E01B8 . -E01B9 . -E01BA . -E01BB . -E01BC . -E01BD . -E01BE . -E01BF . -E01C0 . -E01C1 . -E01C2 . -E01C3 . -E01C4 . -E01C5 . -E01C6 . -E01C7 . -E01C8 . -E01C9 . -E01CA . -E01CB . -E01CC . -E01CD . -E01CE . -E01CF . -E01D0 . -E01D1 . -E01D2 . -E01D3 . -E01D4 . -E01D5 . -E01D6 . -E01D7 . -E01D8 . -E01D9 . -E01DA . -E01DB . -E01DC . -E01DD . -E01DE . -E01DF . -E01E0 . -E01E1 . -E01E2 . -E01E3 . -E01E4 . -E01E5 . -E01E6 . -E01E7 . -E01E8 . -E01E9 . -E01EA . -E01EB . -E01EC . -E01ED . -E01EE . -E01EF . -{} {} \_relax -\_def\_tmp #1 #2 {\_lccode"#2="#1 \_uccode"#2="#2 } -\_tmp 0069 0130 -\_tmp 03B8 03F4 -\_tmp 00DF 1E9E -\_tmp 03C9 2126 -\_tmp 006B 212A -\_tmp 00E5 212B -\_def\_tmp #1 #2 {\_lccode"#1="#1 \_uccode"#1="#2 } -\_tmp 0131 0049 -\_tmp 017F 0053 -\_tmp 03BC 039C -\_tmp 03C2 03A3 -\_tmp 03D0 0392 -\_tmp 03D1 0398 -\_tmp 03D5 03A6 -\_tmp 03D6 03A0 -\_tmp 03F0 039A -\_tmp 03F1 03A1 -\_tmp 03F5 0395 -\_tmp 1E9B 1E60 -\_tmp 1FBE 0399 -% end of file -\_endcode - -All codes in unicode table keep information about pairs lowecase-uppercase -letters or single letter. We need to read such information and set -appropriate `\lccode` and `\uccode`. The `\catcode` above the code 127 -is not set, i.\,e.\ the `\catcode`=12 for all codes above 127. - -The file `uni-lcuc.opm` does this work. It is not much interesting file, only -first few lines from 15928 lines in total is shown here. - -{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip}\ttline=-1 -\def\docfile{uni-lcuc.opm} -\verbinput (3-30) uni-lcuc.opm -\vskip-\medskipamount -\noindent\typosize[8/]\dots etc. (see {\tt\Brown\docfile}) -} diff --git a/Master/texmf-dist/tex/luatex/optex/base/unimath-codes.opm b/Master/texmf-dist/tex/luatex/optex/base/unimath-codes.opm deleted file mode 100644 index 6e83ab94ad1..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/unimath-codes.opm +++ /dev/null @@ -1,439 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \_ncharrmA {Uni math codes <2021-03-11>} % preloaded on demand by \loadmath - - \_doc ----------------------------- - The control sequences for `\alpha`, `\beta` etc are redefined here. - The `\alpha` expands to the character with Unicode `"03B1`, this is a normal - character $α$. You can type it directly in your editor if you know how - to do this. - \_cod ----------------------------- - -\_umathnumB="0391 -\_greekdef \Alpha \Beta \Gamma \Delta \Epsilon \Zeta \Eta \Theta \Iota \Kappa - \Lambda \Mu \Nu \Xi \Omicron \Pi \Rho \varTheta \Sigma \Tau \Upsilon \Phi - \Chi \Psi \Omega \_relax - -\_umathnumB="03B1 -\_greekdef \alpha \beta \gamma \delta \varepsilon \zeta \eta \theta \iota \kappa - \lambda \mu \nu \xi \omicron \pi \rho \varsigma \sigma \tau \upsilon - \varphi \chi \psi \omega \vardelta \epsilon \vartheta \varkappa \phi - \varrho \varpi \_relax - - \_doc ----------------------------- - The math alphabets are declared here using the - \^`\_umathrange {<range>}<class><family><starting-code>` macro. - \_cod ----------------------------- - -\_chardef\_ncharrmA=`A \_chardef\_ncharrma=`a -\_chardef\_ncharbfA="1D400 \_chardef\_ncharbfa="1D41A -\_chardef\_ncharitA="1D434 \_chardef\_ncharita="1D44E -\_chardef\_ncharbiA="1D468 \_chardef\_ncharbia="1D482 -\_chardef\_ncharclA="1D49C \_chardef\_ncharcla="1D4B6 -\_chardef\_ncharbcA="1D4D0 \_chardef\_ncharbca="1D4EA -\_chardef\_ncharfrA="1D504 \_chardef\_ncharfra="1D51E -\_chardef\_ncharbrA="1D56C \_chardef\_ncharbra="1D586 -\_chardef\_ncharbbA="1D538 \_chardef\_ncharbba="1D552 -\_chardef\_ncharsnA="1D5A0 \_chardef\_ncharsna="1D5BA -\_chardef\_ncharbsA="1D5D4 \_chardef\_ncharbsa="1D5EE -\_chardef\_ncharsiA="1D608 \_chardef\_ncharsia="1D622 -\_chardef\_ncharsxA="1D63C \_chardef\_ncharsxa="1D656 -\_chardef\_ncharttA="1D670 \_chardef\_nchartta="1D68A - -\_protected\_def\_rmvariables {\_umathrange{A-Z}71\_ncharrmA \_umathrange{a-z}71\_ncharrma} -\_protected\_def\_bfvariables {\_umathrange{A-Z}71\_ncharbfA \_umathrange{a-z}71\_ncharbfa} -\_protected\_def\_itvariables {\_umathrange{A-Z}71\_ncharitA \_umathrange{a-z}71\_ncharita} -\_protected\_def\_bivariables {\_umathrange{A-Z}71\_ncharbiA \_umathrange{a-z}71\_ncharbia} -\_protected\_def\_calvariables {\_umathrange{A-Z}71\_ncharclA \_umathrange{a-z}71\_ncharcla} -\_protected\_def\_bcalvariables {\_umathrange{A-Z}71\_ncharbcA \_umathrange{a-z}71\_ncharbca} -\_protected\_def\_frakvariables {\_umathrange{A-Z}71\_ncharfrA \_umathrange{a-z}71\_ncharfra} -\_protected\_def\_bfrakvariables {\_umathrange{A-Z}71\_ncharbrA \_umathrange{a-z}71\_ncharbra} -\_protected\_def\_bbvariables {\_umathrange{A-Z}71\_ncharbbA \_umathrange{a-z}71\_ncharbba} -\_protected\_def\_sansvariables {\_umathrange{A-Z}71\_ncharsnA \_umathrange{a-z}71\_ncharsna} -\_protected\_def\_bsansvariables {\_umathrange{A-Z}71\_ncharbsA \_umathrange{a-z}71\_ncharbsa} -\_protected\_def\_isansvariables {\_umathrange{A-Z}71\_ncharsiA \_umathrange{a-z}71\_ncharsia} -\_protected\_def\_bisansvariables {\_umathrange{A-Z}71\_ncharsxA \_umathrange{a-z}71\_ncharsxa} -\_protected\_def\_ttvariables {\_umathrange{A-Z}71\_ncharttA \_umathrange{a-z}71\_nchartta} - -\_chardef\_greekrmA="0391 \_chardef\_greekrma="03B1 -\_chardef\_greekbfA="1D6A8 \_chardef\_greekbfa="1D6C2 -\_chardef\_greekitA="1D6E2 \_chardef\_greekita="1D6FC -\_chardef\_greekbiA="1D71C \_chardef\_greekbia="1D736 -\_chardef\_greeksnA="1D756 \_chardef\_greeksna="1D770 -\_chardef\_greeksiA="1D790 \_chardef\_greeksia="1D7AA - -\_protected\_def\_itgreek {\_umathrangegreek71\_greekita} -\_protected\_def\_rmgreek {\_umathrangegreek71\_greekrma} -\_protected\_def\_bfgreek {\_umathrangegreek71\_greekbfa} -\_protected\_def\_bigreek {\_umathrangegreek71\_greekbia} -\_protected\_def\_bsansgreek {\_umathrangegreek71\_greeksna} -\_protected\_def\_bisansgreek{\_umathrangegreek71\_greeksia} -\_protected\_def\_itGreek {\_umathrangeGREEK71\_greekitA} -\_protected\_def\_rmGreek {\_umathrangeGREEK71\_greekrmA} -\_protected\_def\_bfGreek {\_umathrangeGREEK71\_greekbfA} -\_protected\_def\_biGreek {\_umathrangeGREEK71\_greekbiA} -\_protected\_def\_bsansGreek {\_umathrangeGREEK71\_greeksnA} -\_protected\_def\_bisansGreek{\_umathrangeGREEK71\_greeksiA} - -\_chardef\_digitrmO=`0 -\_chardef\_digitbfO="1D7CE -\_chardef\_digitbbO="1D7D8 -\_chardef\_digitsnO="1D7E2 -\_chardef\_digitbsO="1D7EC -\_chardef\_digitttO="1D7F6 - -\_protected\_def\_rmdigits {\_umathrange{0-9}71\_digitrmO} -\_protected\_def\_bfdigits {\_umathrange{0-9}71\_digitbfO} -\_protected\_def\_bbdigits {\_umathrange{0-9}71\_digitbbO} -\_protected\_def\_sansdigits {\_umathrange{0-9}71\_digitsnO} -\_protected\_def\_bsansdigits {\_umathrange{0-9}71\_digitbsO} -\_protected\_def\_ttdigits {\_umathrange{0-9}71\_digitttO} - - \_doc ----------------------------- - The \`\cal`, \`\bbchar`, \`\frak`, \`\script` - and - the \`\rm`, \`\bf`, \`\it`, \`\bi`, \`\tt` are defined here. - Their \"8bit definitions" from the file `math-preload.opm` - (section~\ref[math-preload]) are removed.\nl - You can redefine them again if you need different behavior (for example - you don't want to use sans serif bold in math). What to do: - \begtt \advance\hsize by2em - \_protected\_def\_bf - {\_tryloadbf\_tenbf \_inmath{\_bfvariables\_bfgreek\_bfGreek\_bfdigits}} - \_protected\_def\_bi - {\_tryloadbi\_tenbi \_inmath{\_bivariables\_bigreek\_bfGreek\_bfdigits}} - \_public \bf \bi ; - \endtt - \`\_inmath` `{<cmds>}` applies `<cmds>` only in math mode. - \_cod ----------------------------- - -\_protected\_def\_inmath#1{\_relax \_ifmmode#1\_fi} % to keep off \loop processing in text mode - -% You can redefine these macros to follow your wishes. -% For example, you need upright lowercase greek letters, you don't need -% \bf and \bi behave as sans serif in math, ... - -\_protected\_def\_rm {\_tryloadrm \_tenrm \_inmath{\_rmvariables \_rmdigits}} -\_protected\_def\_it {\_tryloadit \_tenit \_inmath{\_itvariables}} -\_protected\_def\_bf - {\_tryloadbf \_tenbf \_inmath{\_bsansvariables \_bsansgreek \_bsansGreek \_bsansdigits}} -\_protected\_def\_bi - {\_tryloadbi \_tenbi \_inmath{\_bisansvariables \_bisansgreek \_bsansGreek \_bsansdigits}} -\_protected\_def\_tt {\_tryloadtt \_tentt \_inmath{\_ttvariables \_ttdigits}} -\_protected\_def\_bbchar {\_bbvariables \_bbdigits} -\_protected\_def\_cal {\_calvariables} -\_protected\_def\_frak {\_frakvariables} -\_protected\_def\_misans {\_isansvariables \_sansdigits} -\_protected\_def\_mbisans {\_bisansvariables \_bisansgreek \_bsansGreek \_bsansdigits} -\_protected\_def\_script {\_rmvariables \_fam4 } -\_protected\_def\_mit {\_itvariables \_rmdigits \_itgreek \_rmGreek } - -\_public \rm \it \bf \bi \tt \bbchar \cal \frak \misans \mbisans \script \mit ; - - \_doc ----------------------------- - Each Unicode slot carries information about math type. This is saved in - the file `mathclass.txt` which is copied to `mathclass.opm` The file - has the following format: - {\vitt{mathclass.opm}\verbinput (70-85) mathclass.opm } - We have to read this information and convert it to the `\Umathcode`s. - \_cod ----------------------------- - -\_begingroup % \input mathclass.opm (which is a copy of MathClass.txt): - \_def\_p#1;#2{\_edef\_tmp{\_pB#2}\_ifx\_tmp\_empty \_else\_pA#1....\_end#2\_fi} - \_def\_pA#1..#2..#3\_end#4{% - \_ifx\_relax#2\_relax \_pset{"#1}{#4}\_else - \_umathnumA="#1 - \_loop - \_pset{\_umathnumA}{#4}% - \_ifnum\_umathnumA<"#2 \_advance\_umathnumA by1 - \_repeat - \_fi - } - \_def\_pB#1{\_if#1L1\_fi \_if#1B2\_fi \_if#1V2\_fi \_if#1R3\_fi \_if#1N0\_fi \_if#1U0\_fi - \_if#1F0\_fi \_if#1O4\_fi \_if#1C5\_fi \_if#1P6\_fi \_if#1A7\_fi} - \_def\_pset#1#2{\_global\_Umathcode#1=\_tmp\_space 1 #1\_relax - \_if#2O\_global\_Udelcode#1=1 #1\_relax\_fi - \_if#2C\_global\_Udelcode#1=1 #1\_relax\_fi - \_if#2F\_global\_Udelcode#1=1 #1\_relax\_fi - } - \_catcode`#=14 - \_everypar={\_setbox0=\_lastbox \_par \_p} - \_setbox0=\_vbox{\_input mathclass.opm } -\_endgroup - - \_doc ----------------------------- - Each math symbol has its declaration in the file `unicode-math-table.tex` - which is copied to `unimath-table.opm`. The file has the following format: - {\vitt{unimath-table.opm}\verbinput (70-85) unimath-table.opm } - We have to read this information and convert it to the Unicode math codes. - \_cod ----------------------------- - -\_begingroup % \input unimath-table.opm (it is a copy of unicode-math-table.tex): - \_def\UnicodeMathSymbol #1#2#3#4{% - \_ifnum#1=\_Umathcodenum#1 % the code isn't set by mathclass.opm - \_global\_Umathchardef#2=0 1 #1 \_global\_Umathcode#1=0 1 #1 - \_else \_global\_Umathcharnumdef#2=\_Umathcodenum#1 \_fi - \_ifx#3\_mathopen \_gdef#2{\_Udelimiter 4 1 #1 }\_fi - \_ifx#3\_mathclose \_gdef#2{\_Udelimiter 5 1 #1 }\_fi - \_ifx#3\_mathaccent \_gdef#2{\_Umathaccent fixed 7 1 #1 }\_fi - } - \_input unimath-table.opm -\_endgroup - - \_doc ----------------------------- - Many special characters must be declared with care... - \_cod ----------------------------- - -\_global\_Udelcode`<=1 "027E8 % these characters have different meaning -\_global\_Udelcode`>=1 "027E9 % as normal and as delimeter - -\_mit % default math alphabets setting - -% hyphen character is transformed to minus: -\_Umathcode `- = 2 1 "2212 - -% mathclass defines : as Punct, plain.tex as Rel, we keep mathclass, -% i.e. there is difference from plain.tex, you can use $f:A\to B$. - -\_let\{=\lbrace \_let\}=\rbrace - -% mathclas defines ! as Ord, plain.tex as Close -\_Umathcode `! = 5 1 `! % keep plain.tex declaration -\_Umathchardef \mathexclam = 5 1 `! -% mathclas defines ? as Punct, plain.tex as Close -\_Umathcode `? = 5 1 `? % keep plain.tex declaration -\_Umathchardef \mathquestion = 5 1 `? - -\_Umathcode `* = 2 1 "02217 % equivalent to \ast, like in plain TeX - -\_protected\_def \_sqrt {\_Uradical 1 "0221A } -\_protected\_def \_cuberoot {\_Uradical 1 "0221B } -\_protected\_def \_fourthroot {\_Uradical 1 "0221C } - -\_public \sqrt \cuberoot \fourthroot ; - -\_def\_intwithnolimits#1#2 {\_ifx#1\_relax \_else - \_ea\_let\_csname\_csstring#1op\_endcsname=#1% - \_ea\_def\_ea #1\_ea{\_csname\_csstring#1op\_endcsname \_nolimits}% - \_bgroup \_lccode`\~=#2 \_lowercase{\_egroup \_mathcode`~="8000 \_let ~=#1}% - \_ea \_intwithnolimits \_fi -} -\_intwithnolimits \int "0222B \iint "0222C \iiint "0222D - \oint "0222E \oiint "0222F \oiiint "02230 - \intclockwise "02231 \varointclockwise "02232 \ointctrclockwise "02233 - \sumint "02A0B \iiiint "02A0C \intbar "02A0D \intBar "02A0E \fint "02A0F - \pointint "02A15 \sqint "02A16 \intlarhk "02A17 \intx "02A18 - \intcap "02A19 \intcup "02A1A \upint "02A1B \lowint "02A1C \_relax "0 - -\_protected\_def \vert {\_Udelimiter 0 1 "07C } -\_protected\_def \Vert {\_Udelimiter 0 1 "02016 } -\_protected\_def \Vvert {\_Udelimiter 0 1 "02980 } - -\_protected\_def \_overbrace #1{\mathop {\Umathaccent 7 1 "023DE{#1}}\limits} -\_protected\_def \_underbrace #1{\mathop {\Umathaccent bottom 7 1 "023DF{#1}}\limits} -\_protected\_def \_overparen #1{\mathop {\Umathaccent 7 1 "023DC{#1}}\limits} -\_protected\_def \_underparen #1{\mathop {\Umathaccent bottom 7 1 "023DD{#1}}\limits} -\_protected\_def \_overbracket #1{\mathop {\Umathaccent 7 1 "023B4{#1}}\limits} -\_protected\_def \_underbracket #1{\mathop {\Umathaccent bottom 7 1 "023B5{#1}}\limits} - -\_public \overbrace \underbrace \overparen \underparen \overbracket \underbracket ; - -\_protected\def \widehat {\Umathaccent 7 1 "00302 } -\_protected\def \widetilde {\Umathaccent 7 1 "00303 } -\_protected\def \overleftharpoon {\Umathaccent 7 1 "020D0 } -\_protected\def \overrightharpoon {\Umathaccent 7 1 "020D1 } -\_protected\def \overleftarrow {\Umathaccent 7 1 "020D6 } -\_protected\def \overrightarrow {\Umathaccent 7 1 "020D7 } -\_protected\def \overleftrightarrow {\Umathaccent 7 1 "020E1 } - -\_mathchardef\ldotp="612E -\_let\|=\Vert -\_mathcode`\_="8000 - -\_global\_Umathcode "22EF = 0 1 "22EF % mathclass says that it is Rel -\_global\_Umathcode "002E = 0 1 "002E % mathclass says that dot is Punct -\_global\_Umathchardef \unicodecdots = 0 1 "22EF - -\_global\_Umathcode `/ = 0 1 `/ % mathclass says that / is Bin, Plain TeX says that it is Ord. - -% compressed dots in S and SS styles (usable in \matrix when it is in T, S and SS style) -\_protected\_def \vdots {\_relax \_ifnum \_mathstyle>3 \_unicodevdots \_else \_vdots \_fi} -\_protected\_def \ddots {\_relax \_ifnum \_mathstyle>3 \_unicodeddots \_else \_ddots \_fi} -\_protected\_def \adots {\_relax \_ifnum \_mathstyle>3 \_unicodeadots \_else \_adots \_fi} - -% Unicode superscripts (²) and subscripts as simple macros with \mathcode"8000 -\_bgroup - \_def\_tmp#1#2{\_global\_mathcode#1="8000 \_lccode`\~=#1 \_lowercase{\_gdef~}{#2}} - \_fornum 0..1 \_do {\_tmp{"207#1}{{^#1}}} - \_tmp{"B2}{{^2}}\_tmp{"B3}{{^3}} - \_fornum 4..9 \_do {\_tmp{"207#1}{{^#1}}} - \_fornum 0..9 \_do {\_tmp{"208#1}{{_#1}}} -\_egroup - - \_doc ----------------------------- - Aliases are declared here. They are names not mentioned in the `unimath-table.opm` file - but commonly used in \TeX. - \_cod ----------------------------- - -\_let \setminus=\smallsetminus -\_let \diamond=\smwhtdiamond -\_let \colon=\mathcolon -\_let \bullet=\smblkcircle -\_let \circ=\vysmwhtcircle -\_let \bigcirc=\mdlgwhtcircle -\_let \to=\rightarrow -\_let \le=\leq -\_let \ge=\geq -\_let \neq=\ne -\_protected\_def \triangle {\mathord{\bigtriangleup}} -\_let \emptyset=\varnothing -\_let \hbar=\hslash -\_let \land=\wedge -\_let \lor=\vee -\_let \owns=\ni -\_let \gets=\leftarrow -\_let \mathring=\ocirc -\_let \lnot=\neg -\_let \longdivisionsign=\longdivision -\_let \backepsilon=\upbackepsilon -\_let \eth=\matheth -\_let \dbkarow=\dbkarrow -\_let \drbkarow=\drbkarrow -\_let \hksearow=\hksearrow -\_let \hkswarow=\hkswarrow - -\_let \upalpha=\mupalpha -\_let \upbeta=\mupbeta -\_let \upgamma=\mupgamma -\_let \updelta=\mupdelta -\_let \upepsilon=\mupvarepsilon -\_let \upvarepsilon=\mupvarepsilon -\_let \upzeta=\mupzeta -\_let \upeta=\mupeta -\_let \uptheta=\muptheta -\_let \upiota=\mupiota -\_let \upkappa=\mupkappa -\_let \uplambda=\muplambda -\_let \upmu=\mupmu -\_let \upnu=\mupnu -\_let \upxi=\mupxi -\_let \upomicron=\mupomicron -\_let \uppi=\muppi -\_let \uprho=\muprho -\_let \upvarrho=\mupvarrho -\_let \upvarsigma=\mupvarsigma -\_let \upsigma=\mupsigma -\_let \uptau=\muptau -\_let \upupsilon=\mupupsilon -\_let \upvarphi=\mupvarphi -\_let \upchi=\mupchi -\_let \uppsi=\muppsi -\_let \upomega=\mupomega -\_let \upvartheta=\mupvartheta -\_let \upphi=\mupphi -\_let \upvarpi=\mupvarpi - - \_doc ----------------------------- - The \`\not` macro is redefined here. If the `\_not!<char>` is defined - (by \`\_negationof`) - then this macro is used. Else centered / is printed over the <char>. - \_cod ----------------------------- - -\_protected\_def\_not#1{% - \_trycs{_not!\_csstring#1}{\_mathrel\_mathstyles{% - \_setbox0=\_hbox{\_math$\_currstyle#1$}% - \_hbox to\_wd0{\_hss$\_currstyle/$\_hss}\_kern-\_wd0 \_box0 -}}} -\_def\_negationof #1#2{\_ea\_let \_csname _not!\_csstring#1\_endcsname =#2} - -\_negationof = \neq -\_negationof < \nless -\_negationof > \ngtr -\_negationof \gets \nleftarrow -\_negationof \simeq \nsime -\_negationof \equal \ne -\_negationof \le \nleq -\_negationof \ge \ngeq -\_negationof \greater \ngtr -\_negationof \forksnot \forks -\_negationof \in \notin -\_negationof \mid \nmid -\_negationof \cong \ncong -\_negationof \leftarrow \nleftarrow -\_negationof \rightarrow \nrightarrow -\_negationof \leftrightarrow \nleftrightarrow -\_negationof \Leftarrow \nLeftarrow -\_negationof \Leftrightarrow \nLeftrightarrow -\_negationof \Rightarrow \nRightarrow -\_negationof \exists \nexists -\_negationof \ni \nni -\_negationof \paralel \nparalel -\_negationof \sim \nsim -\_negationof \approx \napprox -\_negationof \equiv \nequiv -\_negationof \asymp \nasymp -\_negationof \lesssim \nlesssim -\_negationof \ngtrsim \ngtrsim -\_negationof \lessgtr \nlessgtr -\_negationof \gtrless \ngtrless -\_negationof \prec \nprec -\_negationof \succ \nsucc -\_negationof \subset \nsubset -\_negationof \supset \nsupset -\_negationof \subseteq \nsubseteq -\_negationof \supseteq \nsupseteq -\_negationof \vdash \nvdash -\_negationof \vDash \nvDash -\_negationof \Vdash \nVdash -\_negationof \VDash \nVDash -\_negationof \preccurlyeq \npreccurlyeq -\_negationof \succcurlyeq \nsucccurlyeq -\_negationof \sqsubseteq \nsqsubseteq -\_negationof \sqsupseteq \nsqsupseteq -\_negationof \vartriangleleft \nvartriangleleft -\_negationof \vartriangleright \nvartriangleright -\_negationof \trianglelefteq \ntrianglelefteq -\_negationof \trianglerighteq \ntrianglerighteq -\_negationof \vinfty \nvinfty - -\_public \not ; - - \_doc ----------------------------- - Newly declared public control sequences are used in internal macros by - \OpTeX/. We need to get new meanings for these control sequences in - the private namespace. - \_cod ----------------------------- - -\_private - \ldotp \cdotp \bullet \triangleleft \trianglerigt \mapstochar \rightarrow - \prime \lhook \rightarrow \leftarrow \rhook \triangleright \triangleleft - \Relbar \Rightarrow \relbar \rightarrow \Leftarrow \mapstochar - \longrightarrow \Longleftrightarrow \unicodevdots \unicodeddots \unicodeadots ; - -\_endcode - -\secc More Unicode-math examples - -Example of using additional math font is in section 5.3 in the -\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf]{\tt optex-math.pdf} documentation - -You can combine more Unicode math fonts in single formula simply -by the `\addUmathfont` macro, see -\ulink[http://petr.olsak.net/optex/optex-tricks.html#addumathfont]{\OpTeX/ trick 0030}. - -See \url{http://tex.stackexchange.com/questions/308749} -for technical details about Unicode-math. - -\_endinput - -History: -2021-03-11 Umathcode `* declaed as \ast -2021-02-03 Unicode superscripts, subscripts declared -2021-01-31 Mathcode of ! ? set to Close, codes undeclared in mathclass set correctly -2021-01-23 Compressed \vdots, \ddots, \adots in script(script)style. -2020-11-13 Bug fix: \colon declared -2020-06-13 Umathcode of / declared as in Plain TeX -2020-06-07 \_itgreek \_itGreek, \_rmgreek \_rmGreek etc. introduced, names changed -2020-06-03 \not\mid = \nmid added, \not corrected -2020-04-30 Bug fix: \phi, \varpi etc. were bad encoded -2020-04-09 Bug fix: \Udelcode`<, \Udelcode`> added diff --git a/Master/texmf-dist/tex/luatex/optex/base/unimath-table.opm b/Master/texmf-dist/tex/luatex/optex/base/unimath-table.opm deleted file mode 100644 index 252c1fc26ac..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/unimath-table.opm +++ /dev/null @@ -1,2471 +0,0 @@ -%%^^A%% unicode-math-table.tex -- part of UNICODE-MATH <wspr.io/unicode-math> -%%^^A%% Source file of the math symbols. - -% Only \ddots, \adots and \vdots are called differently: -% \unicodeddots, \unicodeadots and \unicodevdots -% \mathquestion: Ord -> Close (because plain.tex declares it as Close) - -\UnicodeMathSymbol{"00021}{\mathexclam }{\mathclose}{exclamation mark}% -\UnicodeMathSymbol{"00023}{\mathoctothorpe }{\mathord}{number sign}% -\UnicodeMathSymbol{"00024}{\mathdollar }{\mathord}{dollar sign}% -\UnicodeMathSymbol{"00025}{\mathpercent }{\mathord}{percent sign}% -\UnicodeMathSymbol{"00026}{\mathampersand }{\mathord}{ampersand}% -\UnicodeMathSymbol{"00028}{\lparen }{\mathopen}{left parenthesis}% -\UnicodeMathSymbol{"00029}{\rparen }{\mathclose}{right parenthesis}% -\UnicodeMathSymbol{"0002B}{\mathplus }{\mathbin}{plus sign b:}% -\UnicodeMathSymbol{"0002C}{\mathcomma }{\mathpunct}{comma}% -\UnicodeMathSymbol{"0002E}{\mathperiod }{\mathord}{full stop, period}% -\UnicodeMathSymbol{"0002F}{\mathslash }{\mathord}{solidus}% -\UnicodeMathSymbol{"0003A}{\mathcolon }{\mathpunct}{colon}% -\UnicodeMathSymbol{"0003B}{\mathsemicolon }{\mathpunct}{semicolon p:}% -\UnicodeMathSymbol{"0003C}{\less }{\mathrel}{less-than sign r:}% -\UnicodeMathSymbol{"0003D}{\equal }{\mathrel}{equals sign r:}% -\UnicodeMathSymbol{"0003E}{\greater }{\mathrel}{greater-than sign r:}% -\UnicodeMathSymbol{"0003F}{\mathquestion }{\mathclose}{question mark}% -\UnicodeMathSymbol{"00040}{\mathatsign }{\mathord}{commercial at}% -\UnicodeMathSymbol{"0005B}{\lbrack }{\mathopen}{left square bracket}% -\UnicodeMathSymbol{"0005C}{\backslash }{\mathord}{reverse solidus}% -\UnicodeMathSymbol{"0005D}{\rbrack }{\mathclose}{right square bracket}% -\UnicodeMathSymbol{"0007B}{\lbrace }{\mathopen}{left curly bracket}% -\UnicodeMathSymbol{"0007C}{\vert }{\mathfence}{vertical bar}% -\UnicodeMathSymbol{"0007D}{\rbrace }{\mathclose}{right curly bracket}% -\UnicodeMathSymbol{"000A3}{\mathsterling }{\mathord}{pound sign}% -\UnicodeMathSymbol{"000A5}{\mathyen }{\mathord}{yen sign}% -\UnicodeMathSymbol{"000A7}{\mathsection }{\mathord}{section symbol}% -\UnicodeMathSymbol{"000AC}{\neg }{\mathord}{/neg /lnot not sign}% -\UnicodeMathSymbol{"000B1}{\pm }{\mathbin}{plus-or-minus sign}% -\UnicodeMathSymbol{"000B6}{\mathparagraph }{\mathord}{paragraph symbol}% -\UnicodeMathSymbol{"000B7}{\cdotp }{\mathbin}{/centerdot b: middle dot}% -\UnicodeMathSymbol{"000D7}{\times }{\mathbin}{multiply sign}% -\UnicodeMathSymbol{"000F0}{\matheth }{\mathalpha}{eth}% -\UnicodeMathSymbol{"000F7}{\div }{\mathbin}{divide sign}% -\UnicodeMathSymbol{"001B5}{\Zbar }{\mathord}{impedance (latin capital letter z with stroke)}% -\UnicodeMathSymbol{"00300}{\grave }{\mathaccent}{grave accent}% -\UnicodeMathSymbol{"00301}{\acute }{\mathaccent}{acute accent}% -\UnicodeMathSymbol{"00302}{\hat }{\mathaccent}{circumflex accent}% -\UnicodeMathSymbol{"00302}{\widehat }{\mathaccentwide}{circumflex accent}% -\UnicodeMathSymbol{"00303}{\tilde }{\mathaccent}{tilde}% -\UnicodeMathSymbol{"00303}{\widetilde }{\mathaccentwide}{tilde}% -\UnicodeMathSymbol{"00304}{\bar }{\mathaccent}{macron}% -\UnicodeMathSymbol{"00305}{\overbar }{\mathaccent}{overbar embellishment}% -\UnicodeMathSymbol{"00305}{\wideoverbar }{\mathaccentwide}{stretchy overbar embellishment}% -\UnicodeMathSymbol{"00306}{\breve }{\mathaccent}{breve}% -\UnicodeMathSymbol{"00306}{\widebreve }{\mathaccentwide}{stretchy breve}% -\UnicodeMathSymbol{"00307}{\dot }{\mathaccent}{dot above}% -\UnicodeMathSymbol{"00308}{\ddot }{\mathaccent}{dieresis}% -\UnicodeMathSymbol{"00309}{\ovhook }{\mathaccent}{combining hook above}% -\UnicodeMathSymbol{"0030A}{\ocirc }{\mathaccent}{ring}% -\UnicodeMathSymbol{"0030C}{\check }{\mathaccent}{caron}% -\UnicodeMathSymbol{"0030C}{\widecheck }{\mathaccentwide}{stretchy caron}% -\UnicodeMathSymbol{"00310}{\candra }{\mathaccent}{candrabindu (non-spacing)}% -\UnicodeMathSymbol{"00312}{\oturnedcomma }{\mathaccent}{combining turned comma above}% -\UnicodeMathSymbol{"00315}{\ocommatopright }{\mathaccent}{combining comma above right}% -\UnicodeMathSymbol{"0031A}{\droang }{\mathaccent}{left angle above (non-spacing)}% -\UnicodeMathSymbol{"00330}{\wideutilde }{\mathbotaccentwide}{under tilde accent (multiple characters and non-spacing)}% -\UnicodeMathSymbol{"00332}{\mathunderbar }{\mathbotaccentwide}{combining low line}% -\UnicodeMathSymbol{"00338}{\notaccent }{\mathaccentoverlay}{combining long solidus overlay}% -\UnicodeMathSymbol{"0034D}{\underleftrightarrow }{\mathbotaccentwide}{underleftrightarrow accent}% -\UnicodeMathSymbol{"00391}{\mupAlpha }{\mathalpha}{capital alpha, greek}% -\UnicodeMathSymbol{"00392}{\mupBeta }{\mathalpha}{capital beta, greek}% -\UnicodeMathSymbol{"00393}{\mupGamma }{\mathalpha}{capital gamma, greek}% -\UnicodeMathSymbol{"00394}{\mupDelta }{\mathalpha}{capital delta, greek}% -\UnicodeMathSymbol{"00395}{\mupEpsilon }{\mathalpha}{capital epsilon, greek}% -\UnicodeMathSymbol{"00396}{\mupZeta }{\mathalpha}{capital zeta, greek}% -\UnicodeMathSymbol{"00397}{\mupEta }{\mathalpha}{capital eta, greek}% -\UnicodeMathSymbol{"00398}{\mupTheta }{\mathalpha}{capital theta, greek}% -\UnicodeMathSymbol{"00399}{\mupIota }{\mathalpha}{capital iota, greek}% -\UnicodeMathSymbol{"0039A}{\mupKappa }{\mathalpha}{capital kappa, greek}% -\UnicodeMathSymbol{"0039B}{\mupLambda }{\mathalpha}{capital lambda, greek}% -\UnicodeMathSymbol{"0039C}{\mupMu }{\mathalpha}{capital mu, greek}% -\UnicodeMathSymbol{"0039D}{\mupNu }{\mathalpha}{capital nu, greek}% -\UnicodeMathSymbol{"0039E}{\mupXi }{\mathalpha}{capital xi, greek}% -\UnicodeMathSymbol{"0039F}{\mupOmicron }{\mathalpha}{capital omicron, greek}% -\UnicodeMathSymbol{"003A0}{\mupPi }{\mathalpha}{capital pi, greek}% -\UnicodeMathSymbol{"003A1}{\mupRho }{\mathalpha}{capital rho, greek}% -\UnicodeMathSymbol{"003A3}{\mupSigma }{\mathalpha}{capital sigma, greek}% -\UnicodeMathSymbol{"003A4}{\mupTau }{\mathalpha}{capital tau, greek}% -\UnicodeMathSymbol{"003A5}{\mupUpsilon }{\mathalpha}{capital upsilon, greek}% -\UnicodeMathSymbol{"003A6}{\mupPhi }{\mathalpha}{capital phi, greek}% -\UnicodeMathSymbol{"003A7}{\mupChi }{\mathalpha}{capital chi, greek}% -\UnicodeMathSymbol{"003A8}{\mupPsi }{\mathalpha}{capital psi, greek}% -\UnicodeMathSymbol{"003A9}{\mupOmega }{\mathalpha}{capital omega, greek}% -\UnicodeMathSymbol{"003B1}{\mupalpha }{\mathalpha}{small alpha, greek}% -\UnicodeMathSymbol{"003B2}{\mupbeta }{\mathalpha}{small beta, greek}% -\UnicodeMathSymbol{"003B3}{\mupgamma }{\mathalpha}{small gamma, greek}% -\UnicodeMathSymbol{"003B4}{\mupdelta }{\mathalpha}{small delta, greek}% -\UnicodeMathSymbol{"003B5}{\mupvarepsilon }{\mathalpha}{rounded small varepsilon, greek}% -\UnicodeMathSymbol{"003B6}{\mupzeta }{\mathalpha}{small zeta, greek}% -\UnicodeMathSymbol{"003B7}{\mupeta }{\mathalpha}{small eta, greek}% -\UnicodeMathSymbol{"003B8}{\muptheta }{\mathalpha}{straight theta, small theta, greek}% -\UnicodeMathSymbol{"003B9}{\mupiota }{\mathalpha}{small iota, greek}% -\UnicodeMathSymbol{"003BA}{\mupkappa }{\mathalpha}{small kappa, greek}% -\UnicodeMathSymbol{"003BB}{\muplambda }{\mathalpha}{small lambda, greek}% -\UnicodeMathSymbol{"003BC}{\mupmu }{\mathalpha}{small mu, greek}% -\UnicodeMathSymbol{"003BD}{\mupnu }{\mathalpha}{small nu, greek}% -\UnicodeMathSymbol{"003BE}{\mupxi }{\mathalpha}{small xi, greek}% -\UnicodeMathSymbol{"003BF}{\mupomicron }{\mathalpha}{small omicron, greek}% -\UnicodeMathSymbol{"003C0}{\muppi }{\mathalpha}{small pi, greek}% -\UnicodeMathSymbol{"003C1}{\muprho }{\mathalpha}{small rho, greek}% -\UnicodeMathSymbol{"003C2}{\mupvarsigma }{\mathalpha}{terminal sigma, greek}% -\UnicodeMathSymbol{"003C3}{\mupsigma }{\mathalpha}{small sigma, greek}% -\UnicodeMathSymbol{"003C4}{\muptau }{\mathalpha}{small tau, greek}% -\UnicodeMathSymbol{"003C5}{\mupupsilon }{\mathalpha}{small upsilon, greek}% -\UnicodeMathSymbol{"003C6}{\mupvarphi }{\mathalpha}{curly or open small phi, greek}% -\UnicodeMathSymbol{"003C7}{\mupchi }{\mathalpha}{small chi, greek}% -\UnicodeMathSymbol{"003C8}{\muppsi }{\mathalpha}{small psi, greek}% -\UnicodeMathSymbol{"003C9}{\mupomega }{\mathalpha}{small omega, greek}% -\UnicodeMathSymbol{"003D1}{\mupvartheta }{\mathalpha}{/vartheta - curly or open theta}% -\UnicodeMathSymbol{"003D5}{\mupphi }{\mathalpha}{/straightphi - small phi, greek}% -\UnicodeMathSymbol{"003D6}{\mupvarpi }{\mathalpha}{rounded small pi (pomega), greek}% -\UnicodeMathSymbol{"003DC}{\upDigamma }{\mathalpha}{capital digamma}% -\UnicodeMathSymbol{"003DD}{\updigamma }{\mathalpha}{old greek small letter digamma}% -\UnicodeMathSymbol{"003F0}{\mupvarkappa }{\mathalpha}{rounded small kappa, greek}% -\UnicodeMathSymbol{"003F1}{\mupvarrho }{\mathalpha}{rounded small rho, greek}% -\UnicodeMathSymbol{"003F4}{\mupvarTheta }{\mathalpha}{greek capital theta symbol}% -\UnicodeMathSymbol{"003F5}{\mupepsilon }{\mathalpha}{greek lunate varepsilon symbol}% -\UnicodeMathSymbol{"003F6}{\upbackepsilon }{\mathord}{greek reversed lunate epsilon symbol}% -\UnicodeMathSymbol{"02010}{\mathhyphen }{\mathalpha}{hyphen}% -\UnicodeMathSymbol{"02015}{\horizbar }{\mathord}{horizontal bar}% -\UnicodeMathSymbol{"02016}{\Vert }{\mathfence}{double vertical bar}% -\UnicodeMathSymbol{"02017}{\twolowline }{\mathord}{double low line (spacing)}% -\UnicodeMathSymbol{"02020}{\dagger }{\mathbin}{dagger relation}% -\UnicodeMathSymbol{"02021}{\ddagger }{\mathbin}{double dagger relation}% -\UnicodeMathSymbol{"02022}{\smblkcircle }{\mathbin}{/bullet b: round bullet, filled}% -\UnicodeMathSymbol{"02025}{\enleadertwodots }{\mathord}{double baseline dot (en leader)}% -\UnicodeMathSymbol{"02026}{\unicodeellipsis }{\mathord}{ellipsis (horizontal)}% -\UnicodeMathSymbol{"02032}{\prime }{\mathord}{prime or minute, not superscripted}% -\UnicodeMathSymbol{"02033}{\dprime }{\mathord}{double prime or second, not superscripted}% -\UnicodeMathSymbol{"02034}{\trprime }{\mathord}{triple prime (not superscripted)}% -\UnicodeMathSymbol{"02035}{\backprime }{\mathord}{reverse prime, not superscripted}% -\UnicodeMathSymbol{"02036}{\backdprime }{\mathord}{double reverse prime, not superscripted}% -\UnicodeMathSymbol{"02037}{\backtrprime }{\mathord}{triple reverse prime, not superscripted}% -\UnicodeMathSymbol{"02038}{\caretinsert }{\mathord}{caret (insertion mark)}% -\UnicodeMathSymbol{"0203C}{\Exclam }{\mathord}{double exclamation mark}% -\UnicodeMathSymbol{"02040}{\tieconcat }{\mathbin}{character tie, z notation sequence concatenation}% -\UnicodeMathSymbol{"02043}{\hyphenbullet }{\mathord}{rectangle, filled (hyphen bullet)}% -\UnicodeMathSymbol{"02044}{\fracslash }{\mathbin}{fraction slash}% -\UnicodeMathSymbol{"02047}{\Question }{\mathord}{double question mark}% -\UnicodeMathSymbol{"02050}{\closure }{\mathrel}{close up}% -\UnicodeMathSymbol{"02057}{\qprime }{\mathord}{quadruple prime, not superscripted}% -\UnicodeMathSymbol{"020AC}{\euro }{\mathord}{euro sign}% -\UnicodeMathSymbol{"020D0}{\leftharpoonaccent }{\mathaccent}{combining left harpoon above}% -\UnicodeMathSymbol{"020D0}{\overleftharpoon }{\mathaccentwide}{combining left harpoon above}% -\UnicodeMathSymbol{"020D1}{\rightharpoonaccent }{\mathaccent}{combining right harpoon above}% -\UnicodeMathSymbol{"020D1}{\overrightharpoon }{\mathaccentwide}{combining right harpoon above}% -\UnicodeMathSymbol{"020D2}{\vertoverlay }{\mathaccent}{combining long vertical line overlay}% -\UnicodeMathSymbol{"020D6}{\overleftarrow }{\mathaccentwide}{combining left arrow above}% -\UnicodeMathSymbol{"020D7}{\overrightarrow }{\mathaccentwide}{combining left arrow above}% -\UnicodeMathSymbol{"020D7}{\vec }{\mathaccent}{combining right arrow above}% -\UnicodeMathSymbol{"020DB}{\dddot }{\mathaccent}{combining three dots above}% -\UnicodeMathSymbol{"020DC}{\ddddot }{\mathaccent}{combining four dots above}% -\UnicodeMathSymbol{"020DD}{\enclosecircle }{\mathord}{combining enclosing circle}% -\UnicodeMathSymbol{"020DE}{\enclosesquare }{\mathord}{combining enclosing square}% -\UnicodeMathSymbol{"020DF}{\enclosediamond }{\mathord}{combining enclosing diamond}% -\UnicodeMathSymbol{"020E1}{\overleftrightarrow }{\mathaccentwide}{combining left right arrow above}% -\UnicodeMathSymbol{"020E4}{\enclosetriangle }{\mathord}{combining enclosing upward pointing triangle}% -\UnicodeMathSymbol{"020E7}{\annuity }{\mathaccent}{combining annuity symbol}% -\UnicodeMathSymbol{"020E8}{\threeunderdot }{\mathbotaccent}{combining triple underdot}% -\UnicodeMathSymbol{"020E9}{\widebridgeabove }{\mathaccent}{combining wide bridge above}% -\UnicodeMathSymbol{"020EC}{\underrightharpoondown }{\mathbotaccentwide}{combining rightwards harpoon with barb downwards}% -\UnicodeMathSymbol{"020ED}{\underleftharpoondown }{\mathbotaccentwide}{combining leftwards harpoon with barb downwards}% -\UnicodeMathSymbol{"020EE}{\underleftarrow }{\mathbotaccentwide}{combining left arrow below}% -\UnicodeMathSymbol{"020EF}{\underrightarrow }{\mathbotaccentwide}{combining right arrow below}% -\UnicodeMathSymbol{"020F0}{\asteraccent }{\mathaccent}{combining asterisk above}% -\UnicodeMathSymbol{"02102}{\BbbC }{\mathalpha}{/bbb c, open face c}% -\UnicodeMathSymbol{"02107}{\Eulerconst }{\mathord}{euler constant}% -\UnicodeMathSymbol{"0210A}{\mscrg }{\mathalpha}{/scr g, script letter g}% -\UnicodeMathSymbol{"0210B}{\mscrH }{\mathalpha}{hamiltonian (script capital h)}% -\UnicodeMathSymbol{"0210C}{\mfrakH }{\mathalpha}{/frak h, upper case h}% -\UnicodeMathSymbol{"0210D}{\BbbH }{\mathalpha}{/bbb h, open face h}% -\UnicodeMathSymbol{"0210E}{\Planckconst }{\mathord}{planck constant}% -\UnicodeMathSymbol{"0210F}{\hslash }{\mathalpha}{/hslash - variant planck's over 2pi}% -\UnicodeMathSymbol{"02110}{\mscrI }{\mathalpha}{/scr i, script letter i}% -\UnicodeMathSymbol{"02111}{\Im }{\mathalpha}{imaginary part}% -\UnicodeMathSymbol{"02112}{\mscrL }{\mathalpha}{lagrangian (script capital l)}% -\UnicodeMathSymbol{"02113}{\ell }{\mathalpha}{cursive small l}% -\UnicodeMathSymbol{"02115}{\BbbN }{\mathalpha}{/bbb n, open face n}% -\UnicodeMathSymbol{"02118}{\wp }{\mathalpha}{weierstrass p}% -\UnicodeMathSymbol{"02119}{\BbbP }{\mathalpha}{/bbb p, open face p}% -\UnicodeMathSymbol{"0211A}{\BbbQ }{\mathalpha}{/bbb q, open face q}% -\UnicodeMathSymbol{"0211B}{\mscrR }{\mathalpha}{/scr r, script letter r}% -\UnicodeMathSymbol{"0211C}{\Re }{\mathalpha}{real part}% -\UnicodeMathSymbol{"0211D}{\BbbR }{\mathalpha}{/bbb r, open face r}% -\UnicodeMathSymbol{"02124}{\BbbZ }{\mathalpha}{/bbb z, open face z}% -\UnicodeMathSymbol{"02127}{\mho }{\mathord}{conductance}% -\UnicodeMathSymbol{"02128}{\mfrakZ }{\mathalpha}{/frak z, upper case z}% -\UnicodeMathSymbol{"02129}{\turnediota }{\mathalpha}{turned iota}% -\UnicodeMathSymbol{"0212B}{\Angstrom }{\mathalpha}{angstrom capital a, ring}% -\UnicodeMathSymbol{"0212C}{\mscrB }{\mathalpha}{bernoulli function (script capital b)}% -\UnicodeMathSymbol{"0212D}{\mfrakC }{\mathalpha}{black-letter capital c}% -\UnicodeMathSymbol{"0212F}{\mscre }{\mathalpha}{/scr e, script letter e}% -\UnicodeMathSymbol{"02130}{\mscrE }{\mathalpha}{/scr e, script letter e}% -\UnicodeMathSymbol{"02131}{\mscrF }{\mathalpha}{/scr f, script letter f}% -\UnicodeMathSymbol{"02132}{\Finv }{\mathord}{turned capital f}% -\UnicodeMathSymbol{"02133}{\mscrM }{\mathalpha}{physics m-matrix (script capital m)}% -\UnicodeMathSymbol{"02134}{\mscro }{\mathalpha}{order of (script small o)}% -\UnicodeMathSymbol{"02135}{\aleph }{\mathalpha}{aleph, hebrew}% -\UnicodeMathSymbol{"02136}{\beth }{\mathalpha}{beth, hebrew}% -\UnicodeMathSymbol{"02137}{\gimel }{\mathalpha}{gimel, hebrew}% -\UnicodeMathSymbol{"02138}{\daleth }{\mathalpha}{daleth, hebrew}% -\UnicodeMathSymbol{"0213C}{\Bbbpi }{\mathord}{double-struck small pi}% -\UnicodeMathSymbol{"0213D}{\Bbbgamma }{\mathalpha}{double-struck small gamma}% -\UnicodeMathSymbol{"0213E}{\BbbGamma }{\mathalpha}{double-struck capital gamma}% -\UnicodeMathSymbol{"0213F}{\BbbPi }{\mathalpha}{double-struck capital pi}% -\UnicodeMathSymbol{"02140}{\Bbbsum }{\mathop}{double-struck n-ary summation}% -\UnicodeMathSymbol{"02141}{\Game }{\mathord}{turned sans-serif capital g}% -\UnicodeMathSymbol{"02142}{\sansLturned }{\mathord}{turned sans-serif capital l}% -\UnicodeMathSymbol{"02143}{\sansLmirrored }{\mathord}{reversed sans-serif capital l}% -\UnicodeMathSymbol{"02144}{\Yup }{\mathord}{turned sans-serif capital y}% -\UnicodeMathSymbol{"02145}{\mitBbbD }{\mathord}{double-struck italic capital d}% -\UnicodeMathSymbol{"02146}{\mitBbbd }{\mathord}{double-struck italic small d}% -\UnicodeMathSymbol{"02147}{\mitBbbe }{\mathord}{double-struck italic small e}% -\UnicodeMathSymbol{"02148}{\mitBbbi }{\mathord}{double-struck italic small i}% -\UnicodeMathSymbol{"02149}{\mitBbbj }{\mathord}{double-struck italic small j}% -\UnicodeMathSymbol{"0214A}{\PropertyLine }{\mathord}{property line}% -\UnicodeMathSymbol{"0214B}{\upand }{\mathbin}{turned ampersand}% -\UnicodeMathSymbol{"02190}{\leftarrow }{\mathrel}{/leftarrow /gets a: leftward arrow}% -\UnicodeMathSymbol{"02191}{\uparrow }{\mathrel}{upward arrow}% -\UnicodeMathSymbol{"02192}{\rightarrow }{\mathrel}{/rightarrow /to a: rightward arrow}% -\UnicodeMathSymbol{"02193}{\downarrow }{\mathrel}{downward arrow}% -\UnicodeMathSymbol{"02194}{\leftrightarrow }{\mathrel}{left and right arrow}% -\UnicodeMathSymbol{"02195}{\updownarrow }{\mathrel}{up and down arrow}% -\UnicodeMathSymbol{"02196}{\nwarrow }{\mathrel}{nw pointing arrow}% -\UnicodeMathSymbol{"02197}{\nearrow }{\mathrel}{ne pointing arrow}% -\UnicodeMathSymbol{"02198}{\searrow }{\mathrel}{se pointing arrow}% -\UnicodeMathSymbol{"02199}{\swarrow }{\mathrel}{sw pointing arrow}% -\UnicodeMathSymbol{"0219A}{\nleftarrow }{\mathrel}{not left arrow}% -\UnicodeMathSymbol{"0219B}{\nrightarrow }{\mathrel}{not right arrow}% -\UnicodeMathSymbol{"0219C}{\leftwavearrow }{\mathrel}{left arrow-wavy}% -\UnicodeMathSymbol{"0219D}{\rightwavearrow }{\mathrel}{right arrow-wavy}% -\UnicodeMathSymbol{"0219E}{\twoheadleftarrow }{\mathrel}{left two-headed arrow}% -\UnicodeMathSymbol{"0219F}{\twoheaduparrow }{\mathrel}{up two-headed arrow}% -\UnicodeMathSymbol{"021A0}{\twoheadrightarrow }{\mathrel}{right two-headed arrow}% -\UnicodeMathSymbol{"021A1}{\twoheaddownarrow }{\mathrel}{down two-headed arrow}% -\UnicodeMathSymbol{"021A2}{\leftarrowtail }{\mathrel}{left arrow-tailed}% -\UnicodeMathSymbol{"021A3}{\rightarrowtail }{\mathrel}{right arrow-tailed}% -\UnicodeMathSymbol{"021A4}{\mapsfrom }{\mathrel}{maps to, leftward}% -\UnicodeMathSymbol{"021A5}{\mapsup }{\mathrel}{maps to, upward}% -\UnicodeMathSymbol{"021A6}{\mapsto }{\mathrel}{maps to, rightward}% -\UnicodeMathSymbol{"021A7}{\mapsdown }{\mathrel}{maps to, downward}% -\UnicodeMathSymbol{"021A8}{\updownarrowbar }{\mathord}{up down arrow with base (perpendicular)}% -\UnicodeMathSymbol{"021A9}{\hookleftarrow }{\mathrel}{left arrow-hooked}% -\UnicodeMathSymbol{"021AA}{\hookrightarrow }{\mathrel}{right arrow-hooked}% -\UnicodeMathSymbol{"021AB}{\looparrowleft }{\mathrel}{left arrow-looped}% -\UnicodeMathSymbol{"021AC}{\looparrowright }{\mathrel}{right arrow-looped}% -\UnicodeMathSymbol{"021AD}{\leftrightsquigarrow }{\mathrel}{left and right arr-wavy}% -\UnicodeMathSymbol{"021AE}{\nleftrightarrow }{\mathrel}{not left and right arrow}% -\UnicodeMathSymbol{"021AF}{\downzigzagarrow }{\mathrel}{downwards zigzag arrow}% -\UnicodeMathSymbol{"021B0}{\Lsh }{\mathrel}{/lsh a:}% -\UnicodeMathSymbol{"021B1}{\Rsh }{\mathrel}{/rsh a:}% -\UnicodeMathSymbol{"021B2}{\Ldsh }{\mathrel}{left down angled arrow}% -\UnicodeMathSymbol{"021B3}{\Rdsh }{\mathrel}{right down angled arrow}% -\UnicodeMathSymbol{"021B4}{\linefeed }{\mathord}{rightwards arrow with corner downwards}% -\UnicodeMathSymbol{"021B5}{\carriagereturn }{\mathord}{downwards arrow with corner leftward = carriage return}% -\UnicodeMathSymbol{"021B6}{\curvearrowleft }{\mathrel}{left curved arrow}% -\UnicodeMathSymbol{"021B7}{\curvearrowright }{\mathrel}{right curved arrow}% -\UnicodeMathSymbol{"021B8}{\barovernorthwestarrow }{\mathord}{north west arrow to long bar}% -\UnicodeMathSymbol{"021B9}{\barleftarrowrightarrowbar}{\mathord}{leftwards arrow to bar over rightwards arrow to bar}% -\UnicodeMathSymbol{"021BA}{\acwopencirclearrow }{\mathord}{anticlockwise open circle arrow}% -\UnicodeMathSymbol{"021BB}{\cwopencirclearrow }{\mathord}{clockwise open circle arrow}% -\UnicodeMathSymbol{"021BC}{\leftharpoonup }{\mathrel}{left harpoon-up}% -\UnicodeMathSymbol{"021BD}{\leftharpoondown }{\mathrel}{left harpoon-down}% -\UnicodeMathSymbol{"021BE}{\upharpoonright }{\mathrel}{/upharpoonright /restriction a: up harpoon-right}% -\UnicodeMathSymbol{"021BF}{\upharpoonleft }{\mathrel}{up harpoon-left}% -\UnicodeMathSymbol{"021C0}{\rightharpoonup }{\mathrel}{right harpoon-up}% -\UnicodeMathSymbol{"021C1}{\rightharpoondown }{\mathrel}{right harpoon-down}% -\UnicodeMathSymbol{"021C2}{\downharpoonright }{\mathrel}{down harpoon-right}% -\UnicodeMathSymbol{"021C3}{\downharpoonleft }{\mathrel}{down harpoon-left}% -\UnicodeMathSymbol{"021C4}{\rightleftarrows }{\mathrel}{right arrow over left arrow}% -\UnicodeMathSymbol{"021C5}{\updownarrows }{\mathrel}{up arrow, down arrow}% -\UnicodeMathSymbol{"021C6}{\leftrightarrows }{\mathrel}{left arrow over right arrow}% -\UnicodeMathSymbol{"021C7}{\leftleftarrows }{\mathrel}{two left arrows}% -\UnicodeMathSymbol{"021C8}{\upuparrows }{\mathrel}{two up arrows}% -\UnicodeMathSymbol{"021C9}{\rightrightarrows }{\mathrel}{two right arrows}% -\UnicodeMathSymbol{"021CA}{\downdownarrows }{\mathrel}{two down arrows}% -\UnicodeMathSymbol{"021CB}{\leftrightharpoons }{\mathrel}{left harpoon over right}% -\UnicodeMathSymbol{"021CC}{\rightleftharpoons }{\mathrel}{right harpoon over left}% -\UnicodeMathSymbol{"021CD}{\nLeftarrow }{\mathrel}{not implied by}% -\UnicodeMathSymbol{"021CE}{\nLeftrightarrow }{\mathrel}{not left and right double arrows}% -\UnicodeMathSymbol{"021CF}{\nRightarrow }{\mathrel}{not implies}% -\UnicodeMathSymbol{"021D0}{\Leftarrow }{\mathrel}{is implied by}% -\UnicodeMathSymbol{"021D1}{\Uparrow }{\mathrel}{up double arrow}% -\UnicodeMathSymbol{"021D2}{\Rightarrow }{\mathrel}{implies}% -\UnicodeMathSymbol{"021D3}{\Downarrow }{\mathrel}{down double arrow}% -\UnicodeMathSymbol{"021D4}{\Leftrightarrow }{\mathrel}{left and right double arrow}% -\UnicodeMathSymbol{"021D5}{\Updownarrow }{\mathrel}{up and down double arrow}% -\UnicodeMathSymbol{"021D6}{\Nwarrow }{\mathrel}{nw pointing double arrow}% -\UnicodeMathSymbol{"021D7}{\Nearrow }{\mathrel}{ne pointing double arrow}% -\UnicodeMathSymbol{"021D8}{\Searrow }{\mathrel}{se pointing double arrow}% -\UnicodeMathSymbol{"021D9}{\Swarrow }{\mathrel}{sw pointing double arrow}% -\UnicodeMathSymbol{"021DA}{\Lleftarrow }{\mathrel}{left triple arrow}% -\UnicodeMathSymbol{"021DB}{\Rrightarrow }{\mathrel}{right triple arrow}% -\UnicodeMathSymbol{"021DC}{\leftsquigarrow }{\mathrel}{leftwards squiggle arrow}% -\UnicodeMathSymbol{"021DD}{\rightsquigarrow }{\mathrel}{rightwards squiggle arrow}% -\UnicodeMathSymbol{"021DE}{\nHuparrow }{\mathord}{upwards arrow with double stroke}% -\UnicodeMathSymbol{"021DF}{\nHdownarrow }{\mathord}{downwards arrow with double stroke}% -\UnicodeMathSymbol{"021E0}{\leftdasharrow }{\mathord}{leftwards dashed arrow}% -\UnicodeMathSymbol{"021E1}{\updasharrow }{\mathord}{upwards dashed arrow}% -\UnicodeMathSymbol{"021E2}{\rightdasharrow }{\mathord}{rightwards dashed arrow}% -\UnicodeMathSymbol{"021E3}{\downdasharrow }{\mathord}{downwards dashed arrow}% -\UnicodeMathSymbol{"021E4}{\barleftarrow }{\mathrel}{leftwards arrow to bar}% -\UnicodeMathSymbol{"021E5}{\rightarrowbar }{\mathrel}{rightwards arrow to bar}% -\UnicodeMathSymbol{"021E6}{\leftwhitearrow }{\mathord}{leftwards white arrow}% -\UnicodeMathSymbol{"021E7}{\upwhitearrow }{\mathord}{upwards white arrow}% -\UnicodeMathSymbol{"021E8}{\rightwhitearrow }{\mathord}{rightwards white arrow}% -\UnicodeMathSymbol{"021E9}{\downwhitearrow }{\mathord}{downwards white arrow}% -\UnicodeMathSymbol{"021EA}{\whitearrowupfrombar }{\mathord}{upwards white arrow from bar}% -\UnicodeMathSymbol{"021F4}{\circleonrightarrow }{\mathrel}{right arrow with small circle}% -\UnicodeMathSymbol{"021F5}{\downuparrows }{\mathrel}{downwards arrow leftwards of upwards arrow}% -\UnicodeMathSymbol{"021F6}{\rightthreearrows }{\mathrel}{three rightwards arrows}% -\UnicodeMathSymbol{"021F7}{\nvleftarrow }{\mathrel}{leftwards arrow with vertical stroke}% -\UnicodeMathSymbol{"021F8}{\nvrightarrow }{\mathrel}{rightwards arrow with vertical stroke}% -\UnicodeMathSymbol{"021F9}{\nvleftrightarrow }{\mathrel}{left right arrow with vertical stroke}% -\UnicodeMathSymbol{"021FA}{\nVleftarrow }{\mathrel}{leftwards arrow with double vertical stroke}% -\UnicodeMathSymbol{"021FB}{\nVrightarrow }{\mathrel}{rightwards arrow with double vertical stroke}% -\UnicodeMathSymbol{"021FC}{\nVleftrightarrow }{\mathrel}{left right arrow with double vertical stroke}% -\UnicodeMathSymbol{"021FD}{\leftarrowtriangle }{\mathrel}{leftwards open-headed arrow}% -\UnicodeMathSymbol{"021FE}{\rightarrowtriangle }{\mathrel}{rightwards open-headed arrow}% -\UnicodeMathSymbol{"021FF}{\leftrightarrowtriangle }{\mathrel}{left right open-headed arrow}% -\UnicodeMathSymbol{"02200}{\forall }{\mathord}{for all}% -\UnicodeMathSymbol{"02201}{\complement }{\mathord}{complement sign}% -\UnicodeMathSymbol{"02202}{\partial }{\mathalpha}{partial differential}% -\UnicodeMathSymbol{"02203}{\exists }{\mathord}{at least one exists}% -\UnicodeMathSymbol{"02204}{\nexists }{\mathord}{negated exists}% -\UnicodeMathSymbol{"02205}{\varnothing }{\mathord}{circle, slash}% -\UnicodeMathSymbol{"02206}{\increment }{\mathord}{laplacian (delta; nabla\string^2)}% -\UnicodeMathSymbol{"02207}{\nabla }{\mathalpha}{nabla, del, hamilton operator}% -\UnicodeMathSymbol{"02208}{\in }{\mathrel}{set membership, variant}% -\UnicodeMathSymbol{"02209}{\notin }{\mathrel}{negated set membership}% -\UnicodeMathSymbol{"0220A}{\smallin }{\mathrel}{set membership (small set membership)}% -\UnicodeMathSymbol{"0220B}{\ni }{\mathrel}{contains, variant}% -\UnicodeMathSymbol{"0220C}{\nni }{\mathrel}{negated contains, variant}% -\UnicodeMathSymbol{"0220D}{\smallni }{\mathrel}{/ni /owns r: contains (small contains as member)}% -\UnicodeMathSymbol{"0220E}{\QED }{\mathord}{end of proof}% -\UnicodeMathSymbol{"0220F}{\prod }{\mathop}{product operator}% -\UnicodeMathSymbol{"02210}{\coprod }{\mathop}{coproduct operator}% -\UnicodeMathSymbol{"02211}{\sum }{\mathop}{summation operator}% -\UnicodeMathSymbol{"02212}{\minus }{\mathbin}{minus sign}% -\UnicodeMathSymbol{"02213}{\mp }{\mathbin}{minus-or-plus sign}% -\UnicodeMathSymbol{"02214}{\dotplus }{\mathbin}{plus sign, dot above}% -\UnicodeMathSymbol{"02215}{\divslash }{\mathbin}{division slash}% -\UnicodeMathSymbol{"02216}{\smallsetminus }{\mathbin}{small set minus (cf. reverse solidus)}% -\UnicodeMathSymbol{"02217}{\ast }{\mathbin}{centered asterisk}% -\UnicodeMathSymbol{"02218}{\vysmwhtcircle }{\mathbin}{composite function (small circle)}% -\UnicodeMathSymbol{"02219}{\vysmblkcircle }{\mathbin}{bullet operator}% -\UnicodeMathSymbol{"0221A}{\sqrt }{\mathopen}{radical}% -\UnicodeMathSymbol{"0221A}{\surd }{\mathord}{radical}% -\UnicodeMathSymbol{"0221B}{\cuberoot }{\mathopen}{cube root}% -\UnicodeMathSymbol{"0221C}{\fourthroot }{\mathopen}{fourth root}% -\UnicodeMathSymbol{"0221D}{\propto }{\mathrel}{is proportional to}% -\UnicodeMathSymbol{"0221E}{\infty }{\mathord}{infinity}% -\UnicodeMathSymbol{"0221F}{\rightangle }{\mathord}{right (90 degree) angle}% -\UnicodeMathSymbol{"02220}{\angle }{\mathord}{angle}% -\UnicodeMathSymbol{"02221}{\measuredangle }{\mathord}{angle-measured}% -\UnicodeMathSymbol{"02222}{\sphericalangle }{\mathord}{angle-spherical}% -\UnicodeMathSymbol{"02223}{\mid }{\mathrel}{/mid r:}% -\UnicodeMathSymbol{"02224}{\nmid }{\mathrel}{negated mid}% -\UnicodeMathSymbol{"02225}{\parallel }{\mathrel}{parallel}% -\UnicodeMathSymbol{"02226}{\nparallel }{\mathrel}{not parallel}% -\UnicodeMathSymbol{"02227}{\wedge }{\mathbin}{/wedge /land b: logical and}% -\UnicodeMathSymbol{"02228}{\vee }{\mathbin}{/vee /lor b: logical or}% -\UnicodeMathSymbol{"02229}{\cap }{\mathbin}{intersection}% -\UnicodeMathSymbol{"0222A}{\cup }{\mathbin}{union or logical sum}% -\UnicodeMathSymbol{"0222B}{\int }{\mathop}{integral operator}% -\UnicodeMathSymbol{"0222C}{\iint }{\mathop}{double integral operator}% -\UnicodeMathSymbol{"0222D}{\iiint }{\mathop}{triple integral operator}% -\UnicodeMathSymbol{"0222E}{\oint }{\mathop}{contour integral operator}% -\UnicodeMathSymbol{"0222F}{\oiint }{\mathop}{double contour integral operator}% -\UnicodeMathSymbol{"02230}{\oiiint }{\mathop}{triple contour integral operator}% -\UnicodeMathSymbol{"02231}{\intclockwise }{\mathop}{clockwise integral}% -\UnicodeMathSymbol{"02232}{\varointclockwise }{\mathop}{contour integral, clockwise}% -\UnicodeMathSymbol{"02233}{\ointctrclockwise }{\mathop}{contour integral, anticlockwise}% -\UnicodeMathSymbol{"02234}{\therefore }{\mathord}{therefore}% -\UnicodeMathSymbol{"02235}{\because }{\mathord}{because}% -\UnicodeMathSymbol{"02236}{\mathratio }{\mathrel}{ratio}% -\UnicodeMathSymbol{"02237}{\Colon }{\mathrel}{two colons}% -\UnicodeMathSymbol{"02238}{\dotminus }{\mathbin}{minus sign, dot above}% -\UnicodeMathSymbol{"02239}{\dashcolon }{\mathrel}{excess (-:)}% -\UnicodeMathSymbol{"0223A}{\dotsminusdots }{\mathrel}{minus with four dots, geometric properties}% -\UnicodeMathSymbol{"0223B}{\kernelcontraction }{\mathrel}{homothetic}% -\UnicodeMathSymbol{"0223C}{\sim }{\mathrel}{similar}% -\UnicodeMathSymbol{"0223D}{\backsim }{\mathrel}{reverse similar}% -\UnicodeMathSymbol{"0223E}{\invlazys }{\mathbin}{most positive [inverted lazy s]}% -\UnicodeMathSymbol{"0223F}{\sinewave }{\mathord}{sine wave}% -\UnicodeMathSymbol{"02240}{\wr }{\mathbin}{wreath product}% -\UnicodeMathSymbol{"02241}{\nsim }{\mathrel}{not similar}% -\UnicodeMathSymbol{"02242}{\eqsim }{\mathrel}{equals, similar}% -\UnicodeMathSymbol{"02243}{\simeq }{\mathrel}{similar, equals}% -\UnicodeMathSymbol{"02244}{\nsime }{\mathrel}{not similar, equals}% -\UnicodeMathSymbol{"02243}{\sime }{\mathrel}{similar, equals (alias)}% -\UnicodeMathSymbol{"02244}{\nsimeq }{\mathrel}{not similar, equals (alias)}% -\UnicodeMathSymbol{"02245}{\cong }{\mathrel}{congruent with}% -\UnicodeMathSymbol{"02246}{\simneqq }{\mathrel}{similar, not equals [vert only for 9573 entity]}% -\UnicodeMathSymbol{"02247}{\ncong }{\mathrel}{not congruent with}% -\UnicodeMathSymbol{"02248}{\approx }{\mathrel}{approximate}% -\UnicodeMathSymbol{"02249}{\napprox }{\mathrel}{not approximate}% -\UnicodeMathSymbol{"0224A}{\approxeq }{\mathrel}{approximate, equals}% -\UnicodeMathSymbol{"0224B}{\approxident }{\mathrel}{approximately identical to}% -\UnicodeMathSymbol{"0224C}{\backcong }{\mathrel}{all equal to}% -\UnicodeMathSymbol{"0224D}{\asymp }{\mathrel}{asymptotically equal to}% -\UnicodeMathSymbol{"0224E}{\Bumpeq }{\mathrel}{bumpy equals}% -\UnicodeMathSymbol{"0224F}{\bumpeq }{\mathrel}{bumpy equals, equals}% -\UnicodeMathSymbol{"02250}{\doteq }{\mathrel}{equals, single dot above}% -\UnicodeMathSymbol{"02251}{\Doteq }{\mathrel}{/doteqdot /doteq r: equals, even dots}% -\UnicodeMathSymbol{"02252}{\fallingdotseq }{\mathrel}{equals, falling dots}% -\UnicodeMathSymbol{"02253}{\risingdotseq }{\mathrel}{equals, rising dots}% -\UnicodeMathSymbol{"02254}{\coloneq }{\mathrel}{colon, equals}% -\UnicodeMathSymbol{"02255}{\eqcolon }{\mathrel}{equals, colon}% -\UnicodeMathSymbol{"02256}{\eqcirc }{\mathrel}{circle on equals sign}% -\UnicodeMathSymbol{"02257}{\circeq }{\mathrel}{circle, equals}% -\UnicodeMathSymbol{"02258}{\arceq }{\mathrel}{arc, equals; corresponds to}% -\UnicodeMathSymbol{"02259}{\wedgeq }{\mathrel}{corresponds to (wedge, equals)}% -\UnicodeMathSymbol{"0225A}{\veeeq }{\mathrel}{logical or, equals}% -\UnicodeMathSymbol{"0225B}{\stareq }{\mathrel}{star equals}% -\UnicodeMathSymbol{"0225C}{\triangleq }{\mathrel}{triangle, equals}% -\UnicodeMathSymbol{"0225D}{\eqdef }{\mathrel}{equals by definition}% -\UnicodeMathSymbol{"0225E}{\measeq }{\mathrel}{measured by (m over equals)}% -\UnicodeMathSymbol{"0225F}{\questeq }{\mathrel}{equal with questionmark}% -\UnicodeMathSymbol{"02260}{\ne }{\mathrel}{/ne /neq r: not equal}% -\UnicodeMathSymbol{"02261}{\equiv }{\mathrel}{identical with}% -\UnicodeMathSymbol{"02262}{\nequiv }{\mathrel}{not identical with}% -\UnicodeMathSymbol{"02263}{\Equiv }{\mathrel}{strict equivalence (4 lines)}% -\UnicodeMathSymbol{"02264}{\leq }{\mathrel}{/leq /le r: less-than-or-equal}% -\UnicodeMathSymbol{"02265}{\geq }{\mathrel}{/geq /ge r: greater-than-or-equal}% -\UnicodeMathSymbol{"02266}{\leqq }{\mathrel}{less, double equals}% -\UnicodeMathSymbol{"02267}{\geqq }{\mathrel}{greater, double equals}% -\UnicodeMathSymbol{"02268}{\lneqq }{\mathrel}{less, not double equals}% -\UnicodeMathSymbol{"02269}{\gneqq }{\mathrel}{greater, not double equals}% -\UnicodeMathSymbol{"0226A}{\ll }{\mathrel}{much less than, type 2}% -\UnicodeMathSymbol{"0226B}{\gg }{\mathrel}{much greater than, type 2}% -\UnicodeMathSymbol{"0226C}{\between }{\mathrel}{between}% -\UnicodeMathSymbol{"0226D}{\nasymp }{\mathrel}{not asymptotically equal to}% -\UnicodeMathSymbol{"0226E}{\nless }{\mathrel}{not less-than}% -\UnicodeMathSymbol{"0226F}{\ngtr }{\mathrel}{not greater-than}% -\UnicodeMathSymbol{"02270}{\nleq }{\mathrel}{not less-than-or-equal}% -\UnicodeMathSymbol{"02271}{\ngeq }{\mathrel}{not greater-than-or-equal}% -\UnicodeMathSymbol{"02272}{\lesssim }{\mathrel}{less, similar}% -\UnicodeMathSymbol{"02273}{\gtrsim }{\mathrel}{greater, similar}% -\UnicodeMathSymbol{"02274}{\nlesssim }{\mathrel}{not less, similar}% -\UnicodeMathSymbol{"02275}{\ngtrsim }{\mathrel}{not greater, similar}% -\UnicodeMathSymbol{"02276}{\lessgtr }{\mathrel}{less, greater}% -\UnicodeMathSymbol{"02277}{\gtrless }{\mathrel}{greater, less}% -\UnicodeMathSymbol{"02278}{\nlessgtr }{\mathrel}{not less, greater}% -\UnicodeMathSymbol{"02279}{\ngtrless }{\mathrel}{not greater, less}% -\UnicodeMathSymbol{"0227A}{\prec }{\mathrel}{precedes}% -\UnicodeMathSymbol{"0227B}{\succ }{\mathrel}{succeeds}% -\UnicodeMathSymbol{"0227C}{\preccurlyeq }{\mathrel}{precedes, curly equals}% -\UnicodeMathSymbol{"0227D}{\succcurlyeq }{\mathrel}{succeeds, curly equals}% -\UnicodeMathSymbol{"0227E}{\precsim }{\mathrel}{precedes, similar}% -\UnicodeMathSymbol{"0227F}{\succsim }{\mathrel}{succeeds, similar}% -\UnicodeMathSymbol{"02280}{\nprec }{\mathrel}{not precedes}% -\UnicodeMathSymbol{"02281}{\nsucc }{\mathrel}{not succeeds}% -\UnicodeMathSymbol{"02282}{\subset }{\mathrel}{subset or is implied by}% -\UnicodeMathSymbol{"02283}{\supset }{\mathrel}{superset or implies}% -\UnicodeMathSymbol{"02284}{\nsubset }{\mathrel}{not subset, variant [slash negation]}% -\UnicodeMathSymbol{"02285}{\nsupset }{\mathrel}{not superset, variant [slash negation]}% -\UnicodeMathSymbol{"02286}{\subseteq }{\mathrel}{subset, equals}% -\UnicodeMathSymbol{"02287}{\supseteq }{\mathrel}{superset, equals}% -\UnicodeMathSymbol{"02288}{\nsubseteq }{\mathrel}{not subset, equals}% -\UnicodeMathSymbol{"02289}{\nsupseteq }{\mathrel}{not superset, equals}% -\UnicodeMathSymbol{"0228A}{\subsetneq }{\mathrel}{subset, not equals}% -\UnicodeMathSymbol{"0228B}{\supsetneq }{\mathrel}{superset, not equals}% -\UnicodeMathSymbol{"0228C}{\cupleftarrow }{\mathbin}{multiset}% -\UnicodeMathSymbol{"0228D}{\cupdot }{\mathbin}{union, with dot}% -\UnicodeMathSymbol{"0228E}{\uplus }{\mathbin}{plus sign in union}% -\UnicodeMathSymbol{"0228F}{\sqsubset }{\mathrel}{square subset}% -\UnicodeMathSymbol{"02290}{\sqsupset }{\mathrel}{square superset}% -\UnicodeMathSymbol{"02291}{\sqsubseteq }{\mathrel}{square subset, equals}% -\UnicodeMathSymbol{"02292}{\sqsupseteq }{\mathrel}{square superset, equals}% -\UnicodeMathSymbol{"02293}{\sqcap }{\mathbin}{square intersection}% -\UnicodeMathSymbol{"02294}{\sqcup }{\mathbin}{square union}% -\UnicodeMathSymbol{"02295}{\oplus }{\mathbin}{plus sign in circle}% -\UnicodeMathSymbol{"02296}{\ominus }{\mathbin}{minus sign in circle}% -\UnicodeMathSymbol{"02297}{\otimes }{\mathbin}{multiply sign in circle}% -\UnicodeMathSymbol{"02298}{\oslash }{\mathbin}{solidus in circle}% -\UnicodeMathSymbol{"02299}{\odot }{\mathbin}{middle dot in circle}% -\UnicodeMathSymbol{"0229A}{\circledcirc }{\mathbin}{small circle in circle}% -\UnicodeMathSymbol{"0229B}{\circledast }{\mathbin}{asterisk in circle}% -\UnicodeMathSymbol{"0229C}{\circledequal }{\mathbin}{equal in circle}% -\UnicodeMathSymbol{"0229D}{\circleddash }{\mathbin}{hyphen in circle}% -\UnicodeMathSymbol{"0229E}{\boxplus }{\mathbin}{plus sign in box}% -\UnicodeMathSymbol{"0229F}{\boxminus }{\mathbin}{minus sign in box}% -\UnicodeMathSymbol{"022A0}{\boxtimes }{\mathbin}{multiply sign in box}% -\UnicodeMathSymbol{"022A1}{\boxdot }{\mathbin}{/dotsquare /boxdot b: small dot in box}% -\UnicodeMathSymbol{"022A2}{\vdash }{\mathrel}{vertical, dash}% -\UnicodeMathSymbol{"022A3}{\dashv }{\mathrel}{dash, vertical}% -\UnicodeMathSymbol{"022A4}{\top }{\mathord}{top}% -\UnicodeMathSymbol{"022A5}{\bot }{\mathord}{bottom}% -\UnicodeMathSymbol{"022A6}{\assert }{\mathrel}{assertion (vertical, short dash)}% -\UnicodeMathSymbol{"022A7}{\models }{\mathrel}{models (vertical, short double dash)}% -\UnicodeMathSymbol{"022A8}{\vDash }{\mathrel}{vertical, double dash}% -\UnicodeMathSymbol{"022A9}{\Vdash }{\mathrel}{double vertical, dash}% -\UnicodeMathSymbol{"022AA}{\Vvdash }{\mathrel}{triple vertical, dash}% -\UnicodeMathSymbol{"022AB}{\VDash }{\mathrel}{double vert, double dash}% -\UnicodeMathSymbol{"022AC}{\nvdash }{\mathrel}{not vertical, dash}% -\UnicodeMathSymbol{"022AD}{\nvDash }{\mathrel}{not vertical, double dash}% -\UnicodeMathSymbol{"022AE}{\nVdash }{\mathrel}{not double vertical, dash}% -\UnicodeMathSymbol{"022AF}{\nVDash }{\mathrel}{not double vert, double dash}% -\UnicodeMathSymbol{"022B0}{\prurel }{\mathrel}{element precedes under relation}% -\UnicodeMathSymbol{"022B1}{\scurel }{\mathrel}{succeeds under relation}% -\UnicodeMathSymbol{"022B2}{\vartriangleleft }{\mathrel}{left triangle, open, variant}% -\UnicodeMathSymbol{"022B3}{\vartriangleright }{\mathrel}{right triangle, open, variant}% -\UnicodeMathSymbol{"022B4}{\trianglelefteq }{\mathrel}{left triangle, equals}% -\UnicodeMathSymbol{"022B5}{\trianglerighteq }{\mathrel}{right triangle, equals}% -\UnicodeMathSymbol{"022B6}{\origof }{\mathrel}{original of}% -\UnicodeMathSymbol{"022B7}{\imageof }{\mathrel}{image of}% -\UnicodeMathSymbol{"022B8}{\multimap }{\mathrel}{/multimap a:}% -\UnicodeMathSymbol{"022B9}{\hermitmatrix }{\mathord}{hermitian conjugate matrix}% -\UnicodeMathSymbol{"022BA}{\intercal }{\mathbin}{intercal}% -\UnicodeMathSymbol{"022BB}{\veebar }{\mathbin}{logical or, bar below (large vee); exclusive disjunction}% -\UnicodeMathSymbol{"022BC}{\barwedge }{\mathbin}{bar, wedge (large wedge)}% -\UnicodeMathSymbol{"022BD}{\barvee }{\mathbin}{bar, vee (large vee)}% -\UnicodeMathSymbol{"022BE}{\measuredrightangle }{\mathord}{right angle-measured [with arc]}% -\UnicodeMathSymbol{"022BF}{\varlrtriangle }{\mathord}{right triangle}% -\UnicodeMathSymbol{"022C0}{\bigwedge }{\mathop}{logical and operator}% -\UnicodeMathSymbol{"022C1}{\bigvee }{\mathop}{logical or operator}% -\UnicodeMathSymbol{"022C2}{\bigcap }{\mathop}{intersection operator}% -\UnicodeMathSymbol{"022C3}{\bigcup }{\mathop}{union operator}% -\UnicodeMathSymbol{"022C4}{\smwhtdiamond }{\mathbin}{white diamond}% -\UnicodeMathSymbol{"022C5}{\cdot }{\mathbin}{small middle dot}% -\UnicodeMathSymbol{"022C6}{\star }{\mathbin}{small star, filled, low}% -\UnicodeMathSymbol{"022C7}{\divideontimes }{\mathbin}{division on times}% -\UnicodeMathSymbol{"022C8}{\bowtie }{\mathrel}{bowtie}% -\UnicodeMathSymbol{"022C9}{\ltimes }{\mathbin}{times sign, left closed}% -\UnicodeMathSymbol{"022CA}{\rtimes }{\mathbin}{times sign, right closed}% -\UnicodeMathSymbol{"022CB}{\leftthreetimes }{\mathbin}{left semidirect product}% -\UnicodeMathSymbol{"022CC}{\rightthreetimes }{\mathbin}{right semidirect product}% -\UnicodeMathSymbol{"022CD}{\backsimeq }{\mathrel}{reverse similar, equals}% -\UnicodeMathSymbol{"022CE}{\curlyvee }{\mathbin}{curly logical or}% -\UnicodeMathSymbol{"022CF}{\curlywedge }{\mathbin}{curly logical and}% -\UnicodeMathSymbol{"022D0}{\Subset }{\mathrel}{double subset}% -\UnicodeMathSymbol{"022D1}{\Supset }{\mathrel}{double superset}% -\UnicodeMathSymbol{"022D2}{\Cap }{\mathbin}{/cap /doublecap b: double intersection}% -\UnicodeMathSymbol{"022D3}{\Cup }{\mathbin}{/cup /doublecup b: double union}% -\UnicodeMathSymbol{"022D4}{\pitchfork }{\mathrel}{pitchfork}% -\UnicodeMathSymbol{"022D5}{\equalparallel }{\mathrel}{parallel, equal; equal or parallel}% -\UnicodeMathSymbol{"022D6}{\lessdot }{\mathrel}{less than, with dot}% -\UnicodeMathSymbol{"022D7}{\gtrdot }{\mathrel}{greater than, with dot}% -\UnicodeMathSymbol{"022D8}{\lll }{\mathrel}{/ll /lll /llless r: triple less-than}% -\UnicodeMathSymbol{"022D9}{\ggg }{\mathrel}{/ggg /gg /gggtr r: triple greater-than}% -\UnicodeMathSymbol{"022DA}{\lesseqgtr }{\mathrel}{less, equals, greater}% -\UnicodeMathSymbol{"022DB}{\gtreqless }{\mathrel}{greater, equals, less}% -\UnicodeMathSymbol{"022DC}{\eqless }{\mathrel}{equal-or-less}% -\UnicodeMathSymbol{"022DD}{\eqgtr }{\mathrel}{equal-or-greater}% -\UnicodeMathSymbol{"022DE}{\curlyeqprec }{\mathrel}{curly equals, precedes}% -\UnicodeMathSymbol{"022DF}{\curlyeqsucc }{\mathrel}{curly equals, succeeds}% -\UnicodeMathSymbol{"022E0}{\npreccurlyeq }{\mathrel}{not precedes, curly equals}% -\UnicodeMathSymbol{"022E1}{\nsucccurlyeq }{\mathrel}{not succeeds, curly equals}% -\UnicodeMathSymbol{"022E2}{\nsqsubseteq }{\mathrel}{not, square subset, equals}% -\UnicodeMathSymbol{"022E3}{\nsqsupseteq }{\mathrel}{not, square superset, equals}% -\UnicodeMathSymbol{"022E4}{\sqsubsetneq }{\mathrel}{square subset, not equals}% -\UnicodeMathSymbol{"022E5}{\sqsupsetneq }{\mathrel}{square superset, not equals}% -\UnicodeMathSymbol{"022E6}{\lnsim }{\mathrel}{less, not similar}% -\UnicodeMathSymbol{"022E7}{\gnsim }{\mathrel}{greater, not similar}% -\UnicodeMathSymbol{"022E8}{\precnsim }{\mathrel}{precedes, not similar}% -\UnicodeMathSymbol{"022E9}{\succnsim }{\mathrel}{succeeds, not similar}% -\UnicodeMathSymbol{"022EA}{\nvartriangleleft }{\mathrel}{not left triangle}% -\UnicodeMathSymbol{"022EB}{\nvartriangleright }{\mathrel}{not right triangle}% -\UnicodeMathSymbol{"022EC}{\ntrianglelefteq }{\mathrel}{not left triangle, equals}% -\UnicodeMathSymbol{"022ED}{\ntrianglerighteq }{\mathrel}{not right triangle, equals}% -\UnicodeMathSymbol{"022EE}{\unicodevdots }{\mathrel}{vertical ellipsis}% -\UnicodeMathSymbol{"022EF}{\unicodecdots }{\mathord}{three dots, centered}% -\UnicodeMathSymbol{"022F0}{\unicodeadots }{\mathrel}{three dots, ascending}% -\UnicodeMathSymbol{"022F1}{\unicodeddots }{\mathrel}{three dots, descending}% -\UnicodeMathSymbol{"022F2}{\disin }{\mathrel}{element of with long horizontal stroke}% -\UnicodeMathSymbol{"022F3}{\varisins }{\mathrel}{element of with vertical bar at end of horizontal stroke}% -\UnicodeMathSymbol{"022F4}{\isins }{\mathrel}{small element of with vertical bar at end of horizontal stroke}% -\UnicodeMathSymbol{"022F5}{\isindot }{\mathrel}{element of with dot above}% -\UnicodeMathSymbol{"022F6}{\varisinobar }{\mathrel}{element of with overbar}% -\UnicodeMathSymbol{"022F7}{\isinobar }{\mathrel}{small element of with overbar}% -\UnicodeMathSymbol{"022F8}{\isinvb }{\mathrel}{element of with underbar}% -\UnicodeMathSymbol{"022F9}{\isinE }{\mathrel}{element of with two horizontal strokes}% -\UnicodeMathSymbol{"022FA}{\nisd }{\mathrel}{contains with long horizontal stroke}% -\UnicodeMathSymbol{"022FB}{\varnis }{\mathrel}{contains with vertical bar at end of horizontal stroke}% -\UnicodeMathSymbol{"022FC}{\nis }{\mathrel}{small contains with vertical bar at end of horizontal stroke}% -\UnicodeMathSymbol{"022FD}{\varniobar }{\mathrel}{contains with overbar}% -\UnicodeMathSymbol{"022FE}{\niobar }{\mathrel}{small contains with overbar}% -\UnicodeMathSymbol{"022FF}{\bagmember }{\mathrel}{z notation bag membership}% -\UnicodeMathSymbol{"02300}{\diameter }{\mathord}{diameter sign}% -\UnicodeMathSymbol{"02302}{\house }{\mathord}{house}% -\UnicodeMathSymbol{"02305}{\varbarwedge }{\mathbin}{/barwedge b: logical and, bar above [projective (bar over small wedge)]}% -\UnicodeMathSymbol{"02306}{\vardoublebarwedge }{\mathbin}{/doublebarwedge b: logical and, double bar above [perspective (double bar over small wedge)]}% -\UnicodeMathSymbol{"02308}{\lceil }{\mathopen}{left ceiling}% -\UnicodeMathSymbol{"02309}{\rceil }{\mathclose}{right ceiling}% -\UnicodeMathSymbol{"0230A}{\lfloor }{\mathopen}{left floor}% -\UnicodeMathSymbol{"0230B}{\rfloor }{\mathclose}{right floor}% -\UnicodeMathSymbol{"02310}{\invnot }{\mathord}{reverse not}% -\UnicodeMathSymbol{"02311}{\sqlozenge }{\mathord}{square lozenge}% -\UnicodeMathSymbol{"02312}{\profline }{\mathord}{profile of a line}% -\UnicodeMathSymbol{"02313}{\profsurf }{\mathord}{profile of a surface}% -\UnicodeMathSymbol{"02317}{\viewdata }{\mathord}{viewdata square}% -\UnicodeMathSymbol{"02319}{\turnednot }{\mathord}{turned not sign}% -\UnicodeMathSymbol{"0231C}{\ulcorner }{\mathopen}{upper left corner}% -\UnicodeMathSymbol{"0231D}{\urcorner }{\mathclose}{upper right corner}% -\UnicodeMathSymbol{"0231E}{\llcorner }{\mathopen}{lower left corner}% -\UnicodeMathSymbol{"0231F}{\lrcorner }{\mathclose}{lower right corner}% -\UnicodeMathSymbol{"02320}{\inttop }{\mathord}{top half integral}% -\UnicodeMathSymbol{"02321}{\intbottom }{\mathord}{bottom half integral}% -\UnicodeMathSymbol{"02322}{\frown }{\mathrel}{down curve}% -\UnicodeMathSymbol{"02323}{\smile }{\mathrel}{up curve}% -\UnicodeMathSymbol{"0232C}{\varhexagonlrbonds }{\mathord}{six carbon ring, corner down, double bonds lower right etc}% -\UnicodeMathSymbol{"02332}{\conictaper }{\mathord}{conical taper }% -\UnicodeMathSymbol{"02336}{\topbot }{\mathord}{top and bottom}% -\UnicodeMathSymbol{"0233D}{\obar }{\mathbin}{circle with vertical bar}% -\UnicodeMathSymbol{"0233F}{\APLnotslash }{\mathrel}{solidus, bar through (apl functional symbol slash bar)}% -\UnicodeMathSymbol{"02340}{\APLnotbackslash }{\mathord}{apl functional symbol backslash bar}% -\UnicodeMathSymbol{"02353}{\APLboxupcaret }{\mathord}{boxed up caret}% -\UnicodeMathSymbol{"02370}{\APLboxquestion }{\mathord}{boxed question mark}% -\UnicodeMathSymbol{"0237C}{\rangledownzigzagarrow }{\mathord}{right angle with downwards zigzag arrow}% -\UnicodeMathSymbol{"02394}{\hexagon }{\mathord}{horizontal benzene ring [hexagon flat open]}% -\UnicodeMathSymbol{"0239B}{\lparenuend }{\mathord}{left parenthesis upper hook}% -\UnicodeMathSymbol{"0239C}{\lparenextender }{\mathord}{left parenthesis extension}% -\UnicodeMathSymbol{"0239D}{\lparenlend }{\mathord}{left parenthesis lower hook}% -\UnicodeMathSymbol{"0239E}{\rparenuend }{\mathord}{right parenthesis upper hook}% -\UnicodeMathSymbol{"0239F}{\rparenextender }{\mathord}{right parenthesis extension}% -\UnicodeMathSymbol{"023A0}{\rparenlend }{\mathord}{right parenthesis lower hook}% -\UnicodeMathSymbol{"023A1}{\lbrackuend }{\mathord}{left square bracket upper corner}% -\UnicodeMathSymbol{"023A2}{\lbrackextender }{\mathord}{left square bracket extension}% -\UnicodeMathSymbol{"023A3}{\lbracklend }{\mathord}{left square bracket lower corner}% -\UnicodeMathSymbol{"023A4}{\rbrackuend }{\mathord}{right square bracket upper corner}% -\UnicodeMathSymbol{"023A5}{\rbrackextender }{\mathord}{right square bracket extension}% -\UnicodeMathSymbol{"023A6}{\rbracklend }{\mathord}{right square bracket lower corner}% -\UnicodeMathSymbol{"023A7}{\lbraceuend }{\mathord}{left curly bracket upper hook}% -\UnicodeMathSymbol{"023A8}{\lbracemid }{\mathord}{left curly bracket middle piece}% -\UnicodeMathSymbol{"023A9}{\lbracelend }{\mathord}{left curly bracket lower hook}% -\UnicodeMathSymbol{"023AA}{\vbraceextender }{\mathord}{curly bracket extension}% -\UnicodeMathSymbol{"023AB}{\rbraceuend }{\mathord}{right curly bracket upper hook}% -\UnicodeMathSymbol{"023AC}{\rbracemid }{\mathord}{right curly bracket middle piece}% -\UnicodeMathSymbol{"023AD}{\rbracelend }{\mathord}{right curly bracket lower hook}% -\UnicodeMathSymbol{"023AE}{\intextender }{\mathord}{integral extension}% -\UnicodeMathSymbol{"023AF}{\harrowextender }{\mathord}{horizontal line extension (used to extend arrows)}% -\UnicodeMathSymbol{"023B0}{\lmoustache }{\mathopen}{upper left or lower right curly bracket section}% -\UnicodeMathSymbol{"023B1}{\rmoustache }{\mathclose}{upper right or lower left curly bracket section}% -\UnicodeMathSymbol{"023B2}{\sumtop }{\mathord}{summation top}% -\UnicodeMathSymbol{"023B3}{\sumbottom }{\mathord}{summation bottom}% -\UnicodeMathSymbol{"023B4}{\overbracket }{\mathover}{top square bracket}% -\UnicodeMathSymbol{"023B5}{\underbracket }{\mathunder}{bottom square bracket}% -\UnicodeMathSymbol{"023B6}{\bbrktbrk }{\mathord}{bottom square bracket over top square bracket}% -\UnicodeMathSymbol{"023B7}{\sqrtbottom }{\mathord}{radical symbol bottom}% -\UnicodeMathSymbol{"023B8}{\lvboxline }{\mathord}{left vertical box line}% -\UnicodeMathSymbol{"023B9}{\rvboxline }{\mathord}{right vertical box line}% -\UnicodeMathSymbol{"023CE}{\varcarriagereturn }{\mathord}{return symbol}% -\UnicodeMathSymbol{"023DC}{\overparen }{\mathover}{top parenthesis (mathematical use)}% -\UnicodeMathSymbol{"023DD}{\underparen }{\mathunder}{bottom parenthesis (mathematical use)}% -\UnicodeMathSymbol{"023DE}{\overbrace }{\mathover}{top curly bracket (mathematical use)}% -\UnicodeMathSymbol{"023DF}{\underbrace }{\mathunder}{bottom curly bracket (mathematical use)}% -\UnicodeMathSymbol{"023E0}{\obrbrak }{\mathord}{top tortoise shell bracket (mathematical use)}% -\UnicodeMathSymbol{"023E1}{\ubrbrak }{\mathord}{bottom tortoise shell bracket (mathematical use)}% -\UnicodeMathSymbol{"023E2}{\trapezium }{\mathord}{white trapezium}% -\UnicodeMathSymbol{"023E3}{\benzenr }{\mathord}{benzene ring with circle}% -\UnicodeMathSymbol{"023E4}{\strns }{\mathord}{straightness}% -\UnicodeMathSymbol{"023E5}{\fltns }{\mathord}{flatness}% -\UnicodeMathSymbol{"023E6}{\accurrent }{\mathord}{ac current}% -\UnicodeMathSymbol{"023E7}{\elinters }{\mathord}{electrical intersection}% -\UnicodeMathSymbol{"02422}{\blanksymbol }{\mathord}{blank symbol}% -\UnicodeMathSymbol{"02423}{\mathvisiblespace }{\mathord}{open box}% -\UnicodeMathSymbol{"02506}{\bdtriplevdash }{\mathord}{doubly broken vert}% -\UnicodeMathSymbol{"02580}{\blockuphalf }{\mathord}{upper half block}% -\UnicodeMathSymbol{"02584}{\blocklowhalf }{\mathord}{lower half block}% -\UnicodeMathSymbol{"02588}{\blockfull }{\mathord}{full block}% -\UnicodeMathSymbol{"0258C}{\blocklefthalf }{\mathord}{left half block}% -\UnicodeMathSymbol{"02590}{\blockrighthalf }{\mathord}{right half block}% -\UnicodeMathSymbol{"02591}{\blockqtrshaded }{\mathord}{25\% shaded block}% -\UnicodeMathSymbol{"02592}{\blockhalfshaded }{\mathord}{50\% shaded block}% -\UnicodeMathSymbol{"02593}{\blockthreeqtrshaded }{\mathord}{75\% shaded block}% -\UnicodeMathSymbol{"025A0}{\mdlgblksquare }{\mathord}{square, filled}% -\UnicodeMathSymbol{"025A1}{\mdlgwhtsquare }{\mathord}{square, open}% -\UnicodeMathSymbol{"025A2}{\squoval }{\mathord}{white square with rounded corners}% -\UnicodeMathSymbol{"025A3}{\blackinwhitesquare }{\mathord}{white square containing black small square}% -\UnicodeMathSymbol{"025A4}{\squarehfill }{\mathord}{square, horizontal rule filled}% -\UnicodeMathSymbol{"025A5}{\squarevfill }{\mathord}{square, vertical rule filled}% -\UnicodeMathSymbol{"025A6}{\squarehvfill }{\mathord}{square with orthogonal crosshatch fill}% -\UnicodeMathSymbol{"025A7}{\squarenwsefill }{\mathord}{square, nw-to-se rule filled}% -\UnicodeMathSymbol{"025A8}{\squareneswfill }{\mathord}{square, ne-to-sw rule filled}% -\UnicodeMathSymbol{"025A9}{\squarecrossfill }{\mathord}{square with diagonal crosshatch fill}% -\UnicodeMathSymbol{"025AA}{\smblksquare }{\mathord}{/blacksquare - sq bullet, filled}% -\UnicodeMathSymbol{"025AB}{\smwhtsquare }{\mathord}{white small square}% -\UnicodeMathSymbol{"025AC}{\hrectangleblack }{\mathord}{black rectangle}% -\UnicodeMathSymbol{"025AD}{\hrectangle }{\mathord}{horizontal rectangle, open}% -\UnicodeMathSymbol{"025AE}{\vrectangleblack }{\mathord}{black vertical rectangle}% -\UnicodeMathSymbol{"025AF}{\vrectangle }{\mathord}{rectangle, white (vertical)}% -\UnicodeMathSymbol{"025B0}{\parallelogramblack }{\mathord}{black parallelogram}% -\UnicodeMathSymbol{"025B1}{\parallelogram }{\mathord}{parallelogram, open}% -\UnicodeMathSymbol{"025B2}{\bigblacktriangleup }{\mathord}{black up-pointing triangle}% -\UnicodeMathSymbol{"025B3}{\bigtriangleup }{\mathbin}{big up triangle, open}% -\UnicodeMathSymbol{"025B4}{\blacktriangle }{\mathord}{up triangle, filled}% -\UnicodeMathSymbol{"025B5}{\vartriangle }{\mathrel}{/triangle - up triangle, open}% -\UnicodeMathSymbol{"025B6}{\blacktriangleright }{\mathord}{(large) right triangle, filled}% -\UnicodeMathSymbol{"025B7}{\triangleright }{\mathbin}{(large) right triangle, open; z notation range restriction}% -\UnicodeMathSymbol{"025B8}{\smallblacktriangleright }{\mathord}{right triangle, filled}% -\UnicodeMathSymbol{"025B9}{\smalltriangleright }{\mathord}{right triangle, open}% -\UnicodeMathSymbol{"025BA}{\blackpointerright }{\mathord}{black right-pointing pointer}% -\UnicodeMathSymbol{"025BB}{\whitepointerright }{\mathord}{white right-pointing pointer}% -\UnicodeMathSymbol{"025BC}{\bigblacktriangledown }{\mathord}{big down triangle, filled}% -\UnicodeMathSymbol{"025BD}{\bigtriangledown }{\mathord}{big down triangle, open}% -\UnicodeMathSymbol{"025BE}{\blacktriangledown }{\mathord}{down triangle, filled}% -\UnicodeMathSymbol{"025BF}{\triangledown }{\mathord}{down triangle, open}% -\UnicodeMathSymbol{"025C0}{\blacktriangleleft }{\mathord}{(large) left triangle, filled}% -\UnicodeMathSymbol{"025C1}{\triangleleft }{\mathbin}{(large) left triangle, open; z notation domain restriction}% -\UnicodeMathSymbol{"025C2}{\smallblacktriangleleft }{\mathord}{left triangle, filled}% -\UnicodeMathSymbol{"025C3}{\smalltriangleleft }{\mathord}{left triangle, open}% -\UnicodeMathSymbol{"025C4}{\blackpointerleft }{\mathord}{black left-pointing pointer}% -\UnicodeMathSymbol{"025C5}{\whitepointerleft }{\mathord}{white left-pointing pointer}% -\UnicodeMathSymbol{"025C6}{\mdlgblkdiamond }{\mathord}{black diamond}% -\UnicodeMathSymbol{"025C7}{\mdlgwhtdiamond }{\mathord}{white diamond; diamond, open}% -\UnicodeMathSymbol{"025C8}{\blackinwhitediamond }{\mathord}{white diamond containing black small diamond}% -\UnicodeMathSymbol{"025C9}{\fisheye }{\mathord}{fisheye}% -\UnicodeMathSymbol{"025CA}{\mdlgwhtlozenge }{\mathord}{lozenge or total mark}% -\UnicodeMathSymbol{"025CB}{\mdlgwhtcircle }{\mathbin}{medium large circle}% -\UnicodeMathSymbol{"025CC}{\dottedcircle }{\mathord}{dotted circle}% -\UnicodeMathSymbol{"025CD}{\circlevertfill }{\mathord}{circle with vertical fill}% -\UnicodeMathSymbol{"025CE}{\bullseye }{\mathord}{bullseye}% -\UnicodeMathSymbol{"025CF}{\mdlgblkcircle }{\mathord}{circle, filled}% -\UnicodeMathSymbol{"025D0}{\circlelefthalfblack }{\mathord}{circle, filled left half [harvey ball]}% -\UnicodeMathSymbol{"025D1}{\circlerighthalfblack }{\mathord}{circle, filled right half}% -\UnicodeMathSymbol{"025D2}{\circlebottomhalfblack }{\mathord}{circle, filled bottom half}% -\UnicodeMathSymbol{"025D3}{\circletophalfblack }{\mathord}{circle, filled top half}% -\UnicodeMathSymbol{"025D4}{\circleurquadblack }{\mathord}{circle with upper right quadrant black}% -\UnicodeMathSymbol{"025D5}{\blackcircleulquadwhite }{\mathord}{circle with all but upper left quadrant black}% -\UnicodeMathSymbol{"025D6}{\blacklefthalfcircle }{\mathord}{left half black circle}% -\UnicodeMathSymbol{"025D7}{\blackrighthalfcircle }{\mathord}{right half black circle}% -\UnicodeMathSymbol{"025D8}{\inversebullet }{\mathord}{inverse bullet }% -\UnicodeMathSymbol{"025D9}{\inversewhitecircle }{\mathord}{inverse white circle}% -\UnicodeMathSymbol{"025DA}{\invwhiteupperhalfcircle }{\mathord}{upper half inverse white circle}% -\UnicodeMathSymbol{"025DB}{\invwhitelowerhalfcircle }{\mathord}{lower half inverse white circle}% -\UnicodeMathSymbol{"025DC}{\ularc }{\mathord}{upper left quadrant circular arc}% -\UnicodeMathSymbol{"025DD}{\urarc }{\mathord}{upper right quadrant circular arc}% -\UnicodeMathSymbol{"025DE}{\lrarc }{\mathord}{lower right quadrant circular arc}% -\UnicodeMathSymbol{"025DF}{\llarc }{\mathord}{lower left quadrant circular arc}% -\UnicodeMathSymbol{"025E0}{\topsemicircle }{\mathord}{upper half circle}% -\UnicodeMathSymbol{"025E1}{\botsemicircle }{\mathord}{lower half circle}% -\UnicodeMathSymbol{"025E2}{\lrblacktriangle }{\mathord}{lower right triangle, filled}% -\UnicodeMathSymbol{"025E3}{\llblacktriangle }{\mathord}{lower left triangle, filled}% -\UnicodeMathSymbol{"025E4}{\ulblacktriangle }{\mathord}{upper left triangle, filled}% -\UnicodeMathSymbol{"025E5}{\urblacktriangle }{\mathord}{upper right triangle, filled}% -\UnicodeMathSymbol{"025E6}{\smwhtcircle }{\mathord}{white bullet}% -\UnicodeMathSymbol{"025E7}{\squareleftblack }{\mathord}{square, filled left half}% -\UnicodeMathSymbol{"025E8}{\squarerightblack }{\mathord}{square, filled right half}% -\UnicodeMathSymbol{"025E9}{\squareulblack }{\mathord}{square, filled top left corner}% -\UnicodeMathSymbol{"025EA}{\squarelrblack }{\mathord}{square, filled bottom right corner}% -\UnicodeMathSymbol{"025EB}{\boxbar }{\mathbin}{vertical bar in box}% -\UnicodeMathSymbol{"025EC}{\trianglecdot }{\mathord}{triangle with centered dot}% -\UnicodeMathSymbol{"025ED}{\triangleleftblack }{\mathord}{up-pointing triangle with left half black}% -\UnicodeMathSymbol{"025EE}{\trianglerightblack }{\mathord}{up-pointing triangle with right half black}% -\UnicodeMathSymbol{"025EF}{\lgwhtcircle }{\mathord}{large circle}% -\UnicodeMathSymbol{"025F0}{\squareulquad }{\mathord}{white square with upper left quadrant}% -\UnicodeMathSymbol{"025F1}{\squarellquad }{\mathord}{white square with lower left quadrant}% -\UnicodeMathSymbol{"025F2}{\squarelrquad }{\mathord}{white square with lower right quadrant}% -\UnicodeMathSymbol{"025F3}{\squareurquad }{\mathord}{white square with upper right quadrant}% -\UnicodeMathSymbol{"025F4}{\circleulquad }{\mathord}{white circle with upper left quadrant}% -\UnicodeMathSymbol{"025F5}{\circlellquad }{\mathord}{white circle with lower left quadrant}% -\UnicodeMathSymbol{"025F6}{\circlelrquad }{\mathord}{white circle with lower right quadrant}% -\UnicodeMathSymbol{"025F7}{\circleurquad }{\mathord}{white circle with upper right quadrant}% -\UnicodeMathSymbol{"025F8}{\ultriangle }{\mathord}{upper left triangle}% -\UnicodeMathSymbol{"025F9}{\urtriangle }{\mathord}{upper right triangle}% -\UnicodeMathSymbol{"025FA}{\lltriangle }{\mathord}{lower left triangle}% -\UnicodeMathSymbol{"025FB}{\mdwhtsquare }{\mathord}{white medium square}% -\UnicodeMathSymbol{"025FC}{\mdblksquare }{\mathord}{black medium square}% -\UnicodeMathSymbol{"025FD}{\mdsmwhtsquare }{\mathord}{white medium small square}% -\UnicodeMathSymbol{"025FE}{\mdsmblksquare }{\mathord}{black medium small square}% -\UnicodeMathSymbol{"025FF}{\lrtriangle }{\mathord}{lower right triangle}% -\UnicodeMathSymbol{"02605}{\bigstar }{\mathord}{star, filled}% -\UnicodeMathSymbol{"02606}{\bigwhitestar }{\mathord}{star, open}% -\UnicodeMathSymbol{"02609}{\astrosun }{\mathord}{sun}% -\UnicodeMathSymbol{"02621}{\danger }{\mathord}{dangerous bend (caution sign)}% -\UnicodeMathSymbol{"0263B}{\blacksmiley }{\mathord}{black smiling face}% -\UnicodeMathSymbol{"0263C}{\sun }{\mathord}{white sun with rays}% -\UnicodeMathSymbol{"0263D}{\rightmoon }{\mathord}{first quarter moon}% -\UnicodeMathSymbol{"0263E}{\leftmoon }{\mathord}{last quarter moon}% -\UnicodeMathSymbol{"02640}{\female }{\mathord}{venus, female}% -\UnicodeMathSymbol{"02642}{\male }{\mathord}{mars, male}% -\UnicodeMathSymbol{"02660}{\spadesuit }{\mathord}{spades suit symbol}% -\UnicodeMathSymbol{"02661}{\heartsuit }{\mathord}{heart suit symbol}% -\UnicodeMathSymbol{"02662}{\diamondsuit }{\mathord}{diamond suit symbol}% -\UnicodeMathSymbol{"02663}{\clubsuit }{\mathord}{club suit symbol}% -\UnicodeMathSymbol{"02664}{\varspadesuit }{\mathord}{spade, white (card suit)}% -\UnicodeMathSymbol{"02665}{\varheartsuit }{\mathord}{filled heart (card suit)}% -\UnicodeMathSymbol{"02666}{\vardiamondsuit }{\mathord}{filled diamond (card suit)}% -\UnicodeMathSymbol{"02667}{\varclubsuit }{\mathord}{club, white (card suit)}% -\UnicodeMathSymbol{"02669}{\quarternote }{\mathord}{music note (sung text sign)}% -\UnicodeMathSymbol{"0266A}{\eighthnote }{\mathord}{eighth note}% -\UnicodeMathSymbol{"0266B}{\twonotes }{\mathord}{beamed eighth notes}% -\UnicodeMathSymbol{"0266D}{\flat }{\mathord}{musical flat}% -\UnicodeMathSymbol{"0266E}{\natural }{\mathord}{music natural}% -\UnicodeMathSymbol{"0266F}{\sharp }{\mathord}{musical sharp}% -\UnicodeMathSymbol{"0267E}{\acidfree }{\mathord}{permanent paper sign}% -\UnicodeMathSymbol{"02680}{\dicei }{\mathord}{die face-1}% -\UnicodeMathSymbol{"02681}{\diceii }{\mathord}{die face-2}% -\UnicodeMathSymbol{"02682}{\diceiii }{\mathord}{die face-3}% -\UnicodeMathSymbol{"02683}{\diceiv }{\mathord}{die face-4}% -\UnicodeMathSymbol{"02684}{\dicev }{\mathord}{die face-5}% -\UnicodeMathSymbol{"02685}{\dicevi }{\mathord}{die face-6}% -\UnicodeMathSymbol{"02686}{\circledrightdot }{\mathord}{white circle with dot right}% -\UnicodeMathSymbol{"02687}{\circledtwodots }{\mathord}{white circle with two dots}% -\UnicodeMathSymbol{"02688}{\blackcircledrightdot }{\mathord}{black circle with white dot right}% -\UnicodeMathSymbol{"02689}{\blackcircledtwodots }{\mathord}{black circle with two white dots}% -\UnicodeMathSymbol{"026A5}{\Hermaphrodite }{\mathord}{male and female sign}% -\UnicodeMathSymbol{"026AA}{\mdwhtcircle }{\mathord}{medium white circle}% -\UnicodeMathSymbol{"026AB}{\mdblkcircle }{\mathord}{medium black circle}% -\UnicodeMathSymbol{"026AC}{\mdsmwhtcircle }{\mathord}{medium small white circle}% -\UnicodeMathSymbol{"026B2}{\neuter }{\mathord}{neuter}% -\UnicodeMathSymbol{"02713}{\checkmark }{\mathord}{tick, check mark}% -\UnicodeMathSymbol{"02720}{\maltese }{\mathord}{maltese cross}% -\UnicodeMathSymbol{"0272A}{\circledstar }{\mathord}{circled white star}% -\UnicodeMathSymbol{"02736}{\varstar }{\mathord}{six pointed black star}% -\UnicodeMathSymbol{"0273D}{\dingasterisk }{\mathord}{heavy teardrop-spoked asterisk}% -\UnicodeMathSymbol{"02772}{\lbrbrak }{\mathopen}{light left tortoise shell bracket ornament}% -\UnicodeMathSymbol{"02773}{\rbrbrak }{\mathclose}{light right tortoise shell bracket ornament}% -\UnicodeMathSymbol{"0279B}{\draftingarrow }{\mathord}{right arrow with bold head (drafting)}% -\UnicodeMathSymbol{"027C0}{\threedangle }{\mathord}{three dimensional angle}% -\UnicodeMathSymbol{"027C1}{\whiteinwhitetriangle }{\mathord}{white triangle containing small white triangle}% -\UnicodeMathSymbol{"027C2}{\perp }{\mathrel}{perpendicular}% -\UnicodeMathSymbol{"027C3}{\subsetcirc }{\mathord}{open subset}% -\UnicodeMathSymbol{"027C4}{\supsetcirc }{\mathord}{open superset}% -\UnicodeMathSymbol{"027C5}{\lbag }{\mathopen}{left s-shaped bag delimiter}% -\UnicodeMathSymbol{"027C6}{\rbag }{\mathclose}{right s-shaped bag delimiter}% -\UnicodeMathSymbol{"027C7}{\veedot }{\mathbin}{or with dot inside}% -\UnicodeMathSymbol{"027C8}{\bsolhsub }{\mathrel}{reverse solidus preceding subset}% -\UnicodeMathSymbol{"027C9}{\suphsol }{\mathrel}{superset preceding solidus}% -\UnicodeMathSymbol{"027CC}{\longdivision }{\mathopen}{long division}% -\UnicodeMathSymbol{"027D0}{\diamondcdot }{\mathord}{white diamond with centred dot}% -\UnicodeMathSymbol{"027D1}{\wedgedot }{\mathbin}{and with dot}% -\UnicodeMathSymbol{"027D2}{\upin }{\mathrel}{element of opening upwards}% -\UnicodeMathSymbol{"027D3}{\pullback }{\mathrel}{lower right corner with dot}% -\UnicodeMathSymbol{"027D4}{\pushout }{\mathrel}{upper left corner with dot}% -\UnicodeMathSymbol{"027D5}{\leftouterjoin }{\mathop}{left outer join}% -\UnicodeMathSymbol{"027D6}{\rightouterjoin }{\mathop}{right outer join}% -\UnicodeMathSymbol{"027D7}{\fullouterjoin }{\mathop}{full outer join}% -\UnicodeMathSymbol{"027D8}{\bigbot }{\mathop}{large up tack}% -\UnicodeMathSymbol{"027D9}{\bigtop }{\mathop}{large down tack}% -\UnicodeMathSymbol{"027DA}{\DashVDash }{\mathrel}{left and right double turnstile}% -\UnicodeMathSymbol{"027DB}{\dashVdash }{\mathrel}{left and right tack}% -\UnicodeMathSymbol{"027DC}{\multimapinv }{\mathrel}{left multimap}% -\UnicodeMathSymbol{"027DD}{\vlongdash }{\mathrel}{long left tack}% -\UnicodeMathSymbol{"027DE}{\longdashv }{\mathrel}{long right tack}% -\UnicodeMathSymbol{"027DF}{\cirbot }{\mathrel}{up tack with circle above}% -\UnicodeMathSymbol{"027E0}{\lozengeminus }{\mathbin}{lozenge divided by horizontal rule}% -\UnicodeMathSymbol{"027E1}{\concavediamond }{\mathbin}{white concave-sided diamond}% -\UnicodeMathSymbol{"027E2}{\concavediamondtickleft }{\mathbin}{white concave-sided diamond with leftwards tick}% -\UnicodeMathSymbol{"027E3}{\concavediamondtickright }{\mathbin}{white concave-sided diamond with rightwards tick}% -\UnicodeMathSymbol{"027E4}{\whitesquaretickleft }{\mathbin}{white square with leftwards tick}% -\UnicodeMathSymbol{"027E5}{\whitesquaretickright }{\mathbin}{white square with rightwards tick}% -\UnicodeMathSymbol{"027E6}{\lBrack }{\mathopen}{mathematical left white square bracket}% -\UnicodeMathSymbol{"027E7}{\rBrack }{\mathclose}{mathematical right white square bracket}% -\UnicodeMathSymbol{"027E8}{\langle }{\mathopen}{mathematical left angle bracket}% -\UnicodeMathSymbol{"027E9}{\rangle }{\mathclose}{mathematical right angle bracket}% -\UnicodeMathSymbol{"027EA}{\lAngle }{\mathopen}{mathematical left double angle bracket}% -\UnicodeMathSymbol{"027EB}{\rAngle }{\mathclose}{mathematical right double angle bracket}% -\UnicodeMathSymbol{"027EC}{\Lbrbrak }{\mathopen}{mathematical left white tortoise shell bracket}% -\UnicodeMathSymbol{"027ED}{\Rbrbrak }{\mathclose}{mathematical right white tortoise shell bracket}% -\UnicodeMathSymbol{"027EE}{\lgroup }{\mathopen}{mathematical left flattened parenthesis}% -\UnicodeMathSymbol{"027EF}{\rgroup }{\mathclose}{mathematical right flattened parenthesis}% -\UnicodeMathSymbol{"027F0}{\UUparrow }{\mathrel}{upwards quadruple arrow}% -\UnicodeMathSymbol{"027F1}{\DDownarrow }{\mathrel}{downwards quadruple arrow}% -\UnicodeMathSymbol{"027F2}{\acwgapcirclearrow }{\mathrel}{anticlockwise gapped circle arrow}% -\UnicodeMathSymbol{"027F3}{\cwgapcirclearrow }{\mathrel}{clockwise gapped circle arrow}% -\UnicodeMathSymbol{"027F4}{\rightarrowonoplus }{\mathrel}{right arrow with circled plus}% -\UnicodeMathSymbol{"027F5}{\longleftarrow }{\mathrel}{long leftwards arrow}% -\UnicodeMathSymbol{"027F6}{\longrightarrow }{\mathrel}{long rightwards arrow}% -\UnicodeMathSymbol{"027F7}{\longleftrightarrow }{\mathrel}{long left right arrow}% -\UnicodeMathSymbol{"027F8}{\Longleftarrow }{\mathrel}{long leftwards double arrow}% -\UnicodeMathSymbol{"027F9}{\Longrightarrow }{\mathrel}{long rightwards double arrow}% -\UnicodeMathSymbol{"027FA}{\Longleftrightarrow }{\mathrel}{long left right double arrow}% -\UnicodeMathSymbol{"027FB}{\longmapsfrom }{\mathrel}{long leftwards arrow from bar}% -\UnicodeMathSymbol{"027FC}{\longmapsto }{\mathrel}{long rightwards arrow from bar}% -\UnicodeMathSymbol{"027FD}{\Longmapsfrom }{\mathrel}{long leftwards double arrow from bar}% -\UnicodeMathSymbol{"027FE}{\Longmapsto }{\mathrel}{long rightwards double arrow from bar}% -\UnicodeMathSymbol{"027FF}{\longrightsquigarrow }{\mathrel}{long rightwards squiggle arrow}% -\UnicodeMathSymbol{"02900}{\nvtwoheadrightarrow }{\mathrel}{rightwards two-headed arrow with vertical stroke}% -\UnicodeMathSymbol{"02901}{\nVtwoheadrightarrow }{\mathrel}{rightwards two-headed arrow with double vertical stroke}% -\UnicodeMathSymbol{"02902}{\nvLeftarrow }{\mathrel}{leftwards double arrow with vertical stroke}% -\UnicodeMathSymbol{"02903}{\nvRightarrow }{\mathrel}{rightwards double arrow with vertical stroke}% -\UnicodeMathSymbol{"02904}{\nvLeftrightarrow }{\mathrel}{left right double arrow with vertical stroke}% -\UnicodeMathSymbol{"02905}{\twoheadmapsto }{\mathrel}{rightwards two-headed arrow from bar}% -\UnicodeMathSymbol{"02906}{\Mapsfrom }{\mathrel}{leftwards double arrow from bar}% -\UnicodeMathSymbol{"02907}{\Mapsto }{\mathrel}{rightwards double arrow from bar}% -\UnicodeMathSymbol{"02908}{\downarrowbarred }{\mathrel}{downwards arrow with horizontal stroke}% -\UnicodeMathSymbol{"02909}{\uparrowbarred }{\mathrel}{upwards arrow with horizontal stroke}% -\UnicodeMathSymbol{"0290A}{\Uuparrow }{\mathrel}{upwards triple arrow}% -\UnicodeMathSymbol{"0290B}{\Ddownarrow }{\mathrel}{downwards triple arrow}% -\UnicodeMathSymbol{"0290C}{\leftbkarrow }{\mathrel}{leftwards double dash arrow}% -\UnicodeMathSymbol{"0290D}{\rightbkarrow }{\mathrel}{rightwards double dash arrow}% -\UnicodeMathSymbol{"0290E}{\leftdbkarrow }{\mathrel}{leftwards triple dash arrow}% -\UnicodeMathSymbol{"0290F}{\dbkarrow }{\mathrel}{rightwards triple dash arrow}% -\UnicodeMathSymbol{"02910}{\drbkarrow }{\mathrel}{rightwards two-headed triple dash arrow}% -\UnicodeMathSymbol{"02911}{\rightdotarrow }{\mathrel}{rightwards arrow with dotted stem}% -\UnicodeMathSymbol{"02912}{\baruparrow }{\mathrel}{upwards arrow to bar}% -\UnicodeMathSymbol{"02913}{\downarrowbar }{\mathrel}{downwards arrow to bar}% -\UnicodeMathSymbol{"02914}{\nvrightarrowtail }{\mathrel}{rightwards arrow with tail with vertical stroke}% -\UnicodeMathSymbol{"02915}{\nVrightarrowtail }{\mathrel}{rightwards arrow with tail with double vertical stroke}% -\UnicodeMathSymbol{"02916}{\twoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail}% -\UnicodeMathSymbol{"02917}{\nvtwoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail with vertical stroke}% -\UnicodeMathSymbol{"02918}{\nVtwoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail with double vertical stroke}% -\UnicodeMathSymbol{"02919}{\lefttail }{\mathrel}{leftwards arrow-tail}% -\UnicodeMathSymbol{"0291A}{\righttail }{\mathrel}{rightwards arrow-tail}% -\UnicodeMathSymbol{"0291B}{\leftdbltail }{\mathrel}{leftwards double arrow-tail}% -\UnicodeMathSymbol{"0291C}{\rightdbltail }{\mathrel}{rightwards double arrow-tail}% -\UnicodeMathSymbol{"0291D}{\diamondleftarrow }{\mathrel}{leftwards arrow to black diamond}% -\UnicodeMathSymbol{"0291E}{\rightarrowdiamond }{\mathrel}{rightwards arrow to black diamond}% -\UnicodeMathSymbol{"0291F}{\diamondleftarrowbar }{\mathrel}{leftwards arrow from bar to black diamond}% -\UnicodeMathSymbol{"02920}{\barrightarrowdiamond }{\mathrel}{rightwards arrow from bar to black diamond}% -\UnicodeMathSymbol{"02921}{\nwsearrow }{\mathrel}{north west and south east arrow}% -\UnicodeMathSymbol{"02922}{\neswarrow }{\mathrel}{north east and south west arrow}% -\UnicodeMathSymbol{"02923}{\hknwarrow }{\mathrel}{north west arrow with hook}% -\UnicodeMathSymbol{"02924}{\hknearrow }{\mathrel}{north east arrow with hook}% -\UnicodeMathSymbol{"02925}{\hksearrow }{\mathrel}{south east arrow with hook}% -\UnicodeMathSymbol{"02926}{\hkswarrow }{\mathrel}{south west arrow with hook}% -\UnicodeMathSymbol{"02927}{\tona }{\mathrel}{north west arrow and north east arrow}% -\UnicodeMathSymbol{"02928}{\toea }{\mathrel}{north east arrow and south east arrow}% -\UnicodeMathSymbol{"02929}{\tosa }{\mathrel}{south east arrow and south west arrow}% -\UnicodeMathSymbol{"0292A}{\towa }{\mathrel}{south west arrow and north west arrow}% -\UnicodeMathSymbol{"0292B}{\rdiagovfdiag }{\mathord}{rising diagonal crossing falling diagonal}% -\UnicodeMathSymbol{"0292C}{\fdiagovrdiag }{\mathord}{falling diagonal crossing rising diagonal}% -\UnicodeMathSymbol{"0292D}{\seovnearrow }{\mathord}{south east arrow crossing north east arrow}% -\UnicodeMathSymbol{"0292E}{\neovsearrow }{\mathord}{north east arrow crossing south east arrow}% -\UnicodeMathSymbol{"0292F}{\fdiagovnearrow }{\mathord}{falling diagonal crossing north east arrow}% -\UnicodeMathSymbol{"02930}{\rdiagovsearrow }{\mathord}{rising diagonal crossing south east arrow}% -\UnicodeMathSymbol{"02931}{\neovnwarrow }{\mathord}{north east arrow crossing north west arrow}% -\UnicodeMathSymbol{"02932}{\nwovnearrow }{\mathord}{north west arrow crossing north east arrow}% -\UnicodeMathSymbol{"02933}{\rightcurvedarrow }{\mathrel}{wave arrow pointing directly right}% -\UnicodeMathSymbol{"02934}{\uprightcurvearrow }{\mathord}{arrow pointing rightwards then curving upwards}% -\UnicodeMathSymbol{"02935}{\downrightcurvedarrow }{\mathord}{arrow pointing rightwards then curving downwards}% -\UnicodeMathSymbol{"02936}{\leftdowncurvedarrow }{\mathrel}{arrow pointing downwards then curving leftwards}% -\UnicodeMathSymbol{"02937}{\rightdowncurvedarrow }{\mathrel}{arrow pointing downwards then curving rightwards}% -\UnicodeMathSymbol{"02938}{\cwrightarcarrow }{\mathrel}{right-side arc clockwise arrow}% -\UnicodeMathSymbol{"02939}{\acwleftarcarrow }{\mathrel}{left-side arc anticlockwise arrow}% -\UnicodeMathSymbol{"0293A}{\acwoverarcarrow }{\mathrel}{top arc anticlockwise arrow}% -\UnicodeMathSymbol{"0293B}{\acwunderarcarrow }{\mathrel}{bottom arc anticlockwise arrow}% -\UnicodeMathSymbol{"0293C}{\curvearrowrightminus }{\mathrel}{top arc clockwise arrow with minus}% -\UnicodeMathSymbol{"0293D}{\curvearrowleftplus }{\mathrel}{top arc anticlockwise arrow with plus}% -\UnicodeMathSymbol{"0293E}{\cwundercurvearrow }{\mathrel}{lower right semicircular clockwise arrow}% -\UnicodeMathSymbol{"0293F}{\ccwundercurvearrow }{\mathrel}{lower left semicircular anticlockwise arrow}% -\UnicodeMathSymbol{"02940}{\acwcirclearrow }{\mathrel}{anticlockwise closed circle arrow}% -\UnicodeMathSymbol{"02941}{\cwcirclearrow }{\mathrel}{clockwise closed circle arrow}% -\UnicodeMathSymbol{"02942}{\rightarrowshortleftarrow }{\mathrel}{rightwards arrow above short leftwards arrow}% -\UnicodeMathSymbol{"02943}{\leftarrowshortrightarrow }{\mathrel}{leftwards arrow above short rightwards arrow}% -\UnicodeMathSymbol{"02944}{\shortrightarrowleftarrow }{\mathrel}{short rightwards arrow above leftwards arrow}% -\UnicodeMathSymbol{"02945}{\rightarrowplus }{\mathrel}{rightwards arrow with plus below}% -\UnicodeMathSymbol{"02946}{\leftarrowplus }{\mathrel}{leftwards arrow with plus below}% -\UnicodeMathSymbol{"02947}{\rightarrowx }{\mathrel}{rightwards arrow through x}% -\UnicodeMathSymbol{"02948}{\leftrightarrowcircle }{\mathrel}{left right arrow through small circle}% -\UnicodeMathSymbol{"02949}{\twoheaduparrowcircle }{\mathrel}{upwards two-headed arrow from small circle}% -\UnicodeMathSymbol{"0294A}{\leftrightharpoonupdown }{\mathrel}{left barb up right barb down harpoon}% -\UnicodeMathSymbol{"0294B}{\leftrightharpoondownup }{\mathrel}{left barb down right barb up harpoon}% -\UnicodeMathSymbol{"0294C}{\updownharpoonrightleft }{\mathrel}{up barb right down barb left harpoon}% -\UnicodeMathSymbol{"0294D}{\updownharpoonleftright }{\mathrel}{up barb left down barb right harpoon}% -\UnicodeMathSymbol{"0294E}{\leftrightharpoonupup }{\mathrel}{left barb up right barb up harpoon}% -\UnicodeMathSymbol{"0294F}{\updownharpoonrightright }{\mathrel}{up barb right down barb right harpoon}% -\UnicodeMathSymbol{"02950}{\leftrightharpoondowndown }{\mathrel}{left barb down right barb down harpoon}% -\UnicodeMathSymbol{"02951}{\updownharpoonleftleft }{\mathrel}{up barb left down barb left harpoon}% -\UnicodeMathSymbol{"02952}{\barleftharpoonup }{\mathrel}{leftwards harpoon with barb up to bar}% -\UnicodeMathSymbol{"02953}{\rightharpoonupbar }{\mathrel}{rightwards harpoon with barb up to bar}% -\UnicodeMathSymbol{"02954}{\barupharpoonright }{\mathrel}{upwards harpoon with barb right to bar}% -\UnicodeMathSymbol{"02955}{\downharpoonrightbar }{\mathrel}{downwards harpoon with barb right to bar}% -\UnicodeMathSymbol{"02956}{\barleftharpoondown }{\mathrel}{leftwards harpoon with barb down to bar}% -\UnicodeMathSymbol{"02957}{\rightharpoondownbar }{\mathrel}{rightwards harpoon with barb down to bar}% -\UnicodeMathSymbol{"02958}{\barupharpoonleft }{\mathrel}{upwards harpoon with barb left to bar}% -\UnicodeMathSymbol{"02959}{\downharpoonleftbar }{\mathrel}{downwards harpoon with barb left to bar}% -\UnicodeMathSymbol{"0295A}{\leftharpoonupbar }{\mathrel}{leftwards harpoon with barb up from bar}% -\UnicodeMathSymbol{"0295B}{\barrightharpoonup }{\mathrel}{rightwards harpoon with barb up from bar}% -\UnicodeMathSymbol{"0295C}{\upharpoonrightbar }{\mathrel}{upwards harpoon with barb right from bar}% -\UnicodeMathSymbol{"0295D}{\bardownharpoonright }{\mathrel}{downwards harpoon with barb right from bar}% -\UnicodeMathSymbol{"0295E}{\leftharpoondownbar }{\mathrel}{leftwards harpoon with barb down from bar}% -\UnicodeMathSymbol{"0295F}{\barrightharpoondown }{\mathrel}{rightwards harpoon with barb down from bar}% -\UnicodeMathSymbol{"02960}{\upharpoonleftbar }{\mathrel}{upwards harpoon with barb left from bar}% -\UnicodeMathSymbol{"02961}{\bardownharpoonleft }{\mathrel}{downwards harpoon with barb left from bar}% -\UnicodeMathSymbol{"02962}{\leftharpoonsupdown }{\mathrel}{leftwards harpoon with barb up above leftwards harpoon with barb down}% -\UnicodeMathSymbol{"02963}{\upharpoonsleftright }{\mathrel}{upwards harpoon with barb left beside upwards harpoon with barb right}% -\UnicodeMathSymbol{"02964}{\rightharpoonsupdown }{\mathrel}{rightwards harpoon with barb up above rightwards harpoon with barb down}% -\UnicodeMathSymbol{"02965}{\downharpoonsleftright }{\mathrel}{downwards harpoon with barb left beside downwards harpoon with barb right}% -\UnicodeMathSymbol{"02966}{\leftrightharpoonsup }{\mathrel}{leftwards harpoon with barb up above rightwards harpoon with barb up}% -\UnicodeMathSymbol{"02967}{\leftrightharpoonsdown }{\mathrel}{leftwards harpoon with barb down above rightwards harpoon with barb down}% -\UnicodeMathSymbol{"02968}{\rightleftharpoonsup }{\mathrel}{rightwards harpoon with barb up above leftwards harpoon with barb up}% -\UnicodeMathSymbol{"02969}{\rightleftharpoonsdown }{\mathrel}{rightwards harpoon with barb down above leftwards harpoon with barb down}% -\UnicodeMathSymbol{"0296A}{\leftharpoonupdash }{\mathrel}{leftwards harpoon with barb up above long dash}% -\UnicodeMathSymbol{"0296B}{\dashleftharpoondown }{\mathrel}{leftwards harpoon with barb down below long dash}% -\UnicodeMathSymbol{"0296C}{\rightharpoonupdash }{\mathrel}{rightwards harpoon with barb up above long dash}% -\UnicodeMathSymbol{"0296D}{\dashrightharpoondown }{\mathrel}{rightwards harpoon with barb down below long dash}% -\UnicodeMathSymbol{"0296E}{\updownharpoonsleftright }{\mathrel}{upwards harpoon with barb left beside downwards harpoon with barb right}% -\UnicodeMathSymbol{"0296F}{\downupharpoonsleftright }{\mathrel}{downwards harpoon with barb left beside upwards harpoon with barb right}% -\UnicodeMathSymbol{"02970}{\rightimply }{\mathrel}{right double arrow with rounded head}% -\UnicodeMathSymbol{"02971}{\equalrightarrow }{\mathrel}{equals sign above rightwards arrow}% -\UnicodeMathSymbol{"02972}{\similarrightarrow }{\mathrel}{tilde operator above rightwards arrow}% -\UnicodeMathSymbol{"02973}{\leftarrowsimilar }{\mathrel}{leftwards arrow above tilde operator}% -\UnicodeMathSymbol{"02974}{\rightarrowsimilar }{\mathrel}{rightwards arrow above tilde operator}% -\UnicodeMathSymbol{"02975}{\rightarrowapprox }{\mathrel}{rightwards arrow above almost equal to}% -\UnicodeMathSymbol{"02976}{\ltlarr }{\mathrel}{less-than above leftwards arrow}% -\UnicodeMathSymbol{"02977}{\leftarrowless }{\mathrel}{leftwards arrow through less-than}% -\UnicodeMathSymbol{"02978}{\gtrarr }{\mathrel}{greater-than above rightwards arrow}% -\UnicodeMathSymbol{"02979}{\subrarr }{\mathrel}{subset above rightwards arrow}% -\UnicodeMathSymbol{"0297A}{\leftarrowsubset }{\mathrel}{leftwards arrow through subset}% -\UnicodeMathSymbol{"0297B}{\suplarr }{\mathrel}{superset above leftwards arrow}% -\UnicodeMathSymbol{"0297C}{\leftfishtail }{\mathrel}{left fish tail}% -\UnicodeMathSymbol{"0297D}{\rightfishtail }{\mathrel}{right fish tail}% -\UnicodeMathSymbol{"0297E}{\upfishtail }{\mathrel}{up fish tail}% -\UnicodeMathSymbol{"0297F}{\downfishtail }{\mathrel}{down fish tail}% -\UnicodeMathSymbol{"02980}{\Vvert }{\mathfence}{triple vertical bar delimiter}% -\UnicodeMathSymbol{"02981}{\mdsmblkcircle }{\mathord}{z notation spot}% -\UnicodeMathSymbol{"02982}{\typecolon }{\mathrel}{z notation type colon}% -\UnicodeMathSymbol{"02983}{\lBrace }{\mathopen}{left white curly bracket}% -\UnicodeMathSymbol{"02984}{\rBrace }{\mathclose}{right white curly bracket}% -\UnicodeMathSymbol{"02985}{\lParen }{\mathopen}{left white parenthesis}% -\UnicodeMathSymbol{"02986}{\rParen }{\mathclose}{right white parenthesis}% -\UnicodeMathSymbol{"02987}{\llparenthesis }{\mathopen}{z notation left image bracket}% -\UnicodeMathSymbol{"02988}{\rrparenthesis }{\mathclose}{z notation right image bracket}% -\UnicodeMathSymbol{"02989}{\llangle }{\mathopen}{z notation left binding bracket}% -\UnicodeMathSymbol{"0298A}{\rrangle }{\mathclose}{z notation right binding bracket}% -\UnicodeMathSymbol{"0298B}{\lbrackubar }{\mathopen}{left square bracket with underbar}% -\UnicodeMathSymbol{"0298C}{\rbrackubar }{\mathclose}{right square bracket with underbar}% -\UnicodeMathSymbol{"0298D}{\lbrackultick }{\mathopen}{left square bracket with tick in top corner}% -\UnicodeMathSymbol{"0298E}{\rbracklrtick }{\mathclose}{right square bracket with tick in bottom corner}% -\UnicodeMathSymbol{"0298F}{\lbracklltick }{\mathopen}{left square bracket with tick in bottom corner}% -\UnicodeMathSymbol{"02990}{\rbrackurtick }{\mathclose}{right square bracket with tick in top corner}% -\UnicodeMathSymbol{"02991}{\langledot }{\mathopen}{left angle bracket with dot}% -\UnicodeMathSymbol{"02992}{\rangledot }{\mathclose}{right angle bracket with dot}% -\UnicodeMathSymbol{"02993}{\lparenless }{\mathopen}{left arc less-than bracket}% -\UnicodeMathSymbol{"02994}{\rparengtr }{\mathclose}{right arc greater-than bracket}% -\UnicodeMathSymbol{"02995}{\Lparengtr }{\mathopen}{double left arc greater-than bracket}% -\UnicodeMathSymbol{"02996}{\Rparenless }{\mathclose}{double right arc less-than bracket}% -\UnicodeMathSymbol{"02997}{\lblkbrbrak }{\mathopen}{left black tortoise shell bracket}% -\UnicodeMathSymbol{"02998}{\rblkbrbrak }{\mathclose}{right black tortoise shell bracket}% -\UnicodeMathSymbol{"02999}{\fourvdots }{\mathord}{dotted fence}% -\UnicodeMathSymbol{"0299A}{\vzigzag }{\mathord}{vertical zigzag line}% -\UnicodeMathSymbol{"0299B}{\measuredangleleft }{\mathord}{measured angle opening left}% -\UnicodeMathSymbol{"0299C}{\rightanglesqr }{\mathord}{right angle variant with square}% -\UnicodeMathSymbol{"0299D}{\rightanglemdot }{\mathord}{measured right angle with dot}% -\UnicodeMathSymbol{"0299E}{\angles }{\mathord}{angle with s inside}% -\UnicodeMathSymbol{"0299F}{\angdnr }{\mathord}{acute angle}% -\UnicodeMathSymbol{"029A0}{\gtlpar }{\mathord}{spherical angle opening left}% -\UnicodeMathSymbol{"029A1}{\sphericalangleup }{\mathord}{spherical angle opening up}% -\UnicodeMathSymbol{"029A2}{\turnangle }{\mathord}{turned angle}% -\UnicodeMathSymbol{"029A3}{\revangle }{\mathord}{reversed angle}% -\UnicodeMathSymbol{"029A4}{\angleubar }{\mathord}{angle with underbar}% -\UnicodeMathSymbol{"029A5}{\revangleubar }{\mathord}{reversed angle with underbar}% -\UnicodeMathSymbol{"029A6}{\wideangledown }{\mathord}{oblique angle opening up}% -\UnicodeMathSymbol{"029A7}{\wideangleup }{\mathord}{oblique angle opening down}% -\UnicodeMathSymbol{"029A8}{\measanglerutone }{\mathord}{measured angle with open arm ending in arrow pointing up and right}% -\UnicodeMathSymbol{"029A9}{\measanglelutonw }{\mathord}{measured angle with open arm ending in arrow pointing up and left}% -\UnicodeMathSymbol{"029AA}{\measanglerdtose }{\mathord}{measured angle with open arm ending in arrow pointing down and right}% -\UnicodeMathSymbol{"029AB}{\measangleldtosw }{\mathord}{measured angle with open arm ending in arrow pointing down and left}% -\UnicodeMathSymbol{"029AC}{\measangleurtone }{\mathord}{measured angle with open arm ending in arrow pointing right and up}% -\UnicodeMathSymbol{"029AD}{\measangleultonw }{\mathord}{measured angle with open arm ending in arrow pointing left and up}% -\UnicodeMathSymbol{"029AE}{\measangledrtose }{\mathord}{measured angle with open arm ending in arrow pointing right and down}% -\UnicodeMathSymbol{"029AF}{\measangledltosw }{\mathord}{measured angle with open arm ending in arrow pointing left and down}% -\UnicodeMathSymbol{"029B0}{\revemptyset }{\mathord}{reversed empty set}% -\UnicodeMathSymbol{"029B1}{\emptysetobar }{\mathord}{empty set with overbar}% -\UnicodeMathSymbol{"029B2}{\emptysetocirc }{\mathord}{empty set with small circle above}% -\UnicodeMathSymbol{"029B3}{\emptysetoarr }{\mathord}{empty set with right arrow above}% -\UnicodeMathSymbol{"029B4}{\emptysetoarrl }{\mathord}{empty set with left arrow above}% -\UnicodeMathSymbol{"029B5}{\circlehbar }{\mathbin}{circle with horizontal bar}% -\UnicodeMathSymbol{"029B6}{\circledvert }{\mathbin}{circled vertical bar}% -\UnicodeMathSymbol{"029B7}{\circledparallel }{\mathbin}{circled parallel}% -\UnicodeMathSymbol{"029B8}{\obslash }{\mathbin}{circled reverse solidus}% -\UnicodeMathSymbol{"029B9}{\operp }{\mathbin}{circled perpendicular}% -\UnicodeMathSymbol{"029BA}{\obot }{\mathord}{circle divided by horizontal bar and top half divided by vertical bar}% -\UnicodeMathSymbol{"029BB}{\olcross }{\mathord}{circle with superimposed x}% -\UnicodeMathSymbol{"029BC}{\odotslashdot }{\mathord}{circled anticlockwise-rotated division sign}% -\UnicodeMathSymbol{"029BD}{\uparrowoncircle }{\mathord}{up arrow through circle}% -\UnicodeMathSymbol{"029BE}{\circledwhitebullet }{\mathord}{circled white bullet}% -\UnicodeMathSymbol{"029BF}{\circledbullet }{\mathord}{circled bullet}% -\UnicodeMathSymbol{"029C0}{\olessthan }{\mathbin}{circled less-than}% -\UnicodeMathSymbol{"029C1}{\ogreaterthan }{\mathbin}{circled greater-than}% -\UnicodeMathSymbol{"029C2}{\cirscir }{\mathord}{circle with small circle to the right}% -\UnicodeMathSymbol{"029C3}{\cirE }{\mathord}{circle with two horizontal strokes to the right}% -\UnicodeMathSymbol{"029C4}{\boxdiag }{\mathbin}{squared rising diagonal slash}% -\UnicodeMathSymbol{"029C5}{\boxbslash }{\mathbin}{squared falling diagonal slash}% -\UnicodeMathSymbol{"029C6}{\boxast }{\mathbin}{squared asterisk}% -\UnicodeMathSymbol{"029C7}{\boxcircle }{\mathbin}{squared small circle}% -\UnicodeMathSymbol{"029C8}{\boxbox }{\mathbin}{squared square}% -\UnicodeMathSymbol{"029C9}{\boxonbox }{\mathord}{two joined squares}% -\UnicodeMathSymbol{"029CA}{\triangleodot }{\mathord}{triangle with dot above}% -\UnicodeMathSymbol{"029CB}{\triangleubar }{\mathord}{triangle with underbar}% -\UnicodeMathSymbol{"029CC}{\triangles }{\mathord}{s in triangle}% -\UnicodeMathSymbol{"029CD}{\triangleserifs }{\mathbin}{triangle with serifs at bottom}% -\UnicodeMathSymbol{"029CE}{\rtriltri }{\mathrel}{right triangle above left triangle}% -\UnicodeMathSymbol{"029CF}{\ltrivb }{\mathrel}{left triangle beside vertical bar}% -\UnicodeMathSymbol{"029D0}{\vbrtri }{\mathrel}{vertical bar beside right triangle}% -\UnicodeMathSymbol{"029D1}{\lfbowtie }{\mathrel}{left black bowtie}% -\UnicodeMathSymbol{"029D2}{\rfbowtie }{\mathrel}{right black bowtie}% -\UnicodeMathSymbol{"029D3}{\fbowtie }{\mathrel}{black bowtie}% -\UnicodeMathSymbol{"029D4}{\lftimes }{\mathrel}{left black times}% -\UnicodeMathSymbol{"029D5}{\rftimes }{\mathrel}{right black times}% -\UnicodeMathSymbol{"029D6}{\hourglass }{\mathbin}{white hourglass}% -\UnicodeMathSymbol{"029D7}{\blackhourglass }{\mathbin}{black hourglass}% -\UnicodeMathSymbol{"029D8}{\lvzigzag }{\mathopen}{left wiggly fence}% -\UnicodeMathSymbol{"029D9}{\rvzigzag }{\mathclose}{right wiggly fence}% -\UnicodeMathSymbol{"029DA}{\Lvzigzag }{\mathopen}{left double wiggly fence}% -\UnicodeMathSymbol{"029DB}{\Rvzigzag }{\mathclose}{right double wiggly fence}% -\UnicodeMathSymbol{"029DC}{\iinfin }{\mathord}{incomplete infinity}% -\UnicodeMathSymbol{"029DD}{\tieinfty }{\mathord}{tie over infinity}% -\UnicodeMathSymbol{"029DE}{\nvinfty }{\mathord}{infinity negated with vertical bar}% -\UnicodeMathSymbol{"029DF}{\dualmap }{\mathrel}{double-ended multimap}% -\UnicodeMathSymbol{"029E0}{\laplac }{\mathord}{square with contoured outline}% -\UnicodeMathSymbol{"029E1}{\lrtriangleeq }{\mathrel}{increases as}% -\UnicodeMathSymbol{"029E2}{\shuffle }{\mathbin}{shuffle product}% -\UnicodeMathSymbol{"029E3}{\eparsl }{\mathrel}{equals sign and slanted parallel}% -\UnicodeMathSymbol{"029E4}{\smeparsl }{\mathrel}{equals sign and slanted parallel with tilde above}% -\UnicodeMathSymbol{"029E5}{\eqvparsl }{\mathrel}{identical to and slanted parallel}% -\UnicodeMathSymbol{"029E6}{\gleichstark }{\mathrel}{gleich stark}% -\UnicodeMathSymbol{"029E7}{\thermod }{\mathord}{thermodynamic}% -\UnicodeMathSymbol{"029E8}{\downtriangleleftblack }{\mathord}{down-pointing triangle with left half black}% -\UnicodeMathSymbol{"029E9}{\downtrianglerightblack }{\mathord}{down-pointing triangle with right half black}% -\UnicodeMathSymbol{"029EA}{\blackdiamonddownarrow }{\mathord}{black diamond with down arrow}% -\UnicodeMathSymbol{"029EB}{\mdlgblklozenge }{\mathbin}{black lozenge}% -\UnicodeMathSymbol{"029EC}{\circledownarrow }{\mathord}{white circle with down arrow}% -\UnicodeMathSymbol{"029ED}{\blackcircledownarrow }{\mathord}{black circle with down arrow}% -\UnicodeMathSymbol{"029EE}{\errbarsquare }{\mathord}{error-barred white square}% -\UnicodeMathSymbol{"029EF}{\errbarblacksquare }{\mathord}{error-barred black square}% -\UnicodeMathSymbol{"029F0}{\errbardiamond }{\mathord}{error-barred white diamond}% -\UnicodeMathSymbol{"029F1}{\errbarblackdiamond }{\mathord}{error-barred black diamond}% -\UnicodeMathSymbol{"029F2}{\errbarcircle }{\mathord}{error-barred white circle}% -\UnicodeMathSymbol{"029F3}{\errbarblackcircle }{\mathord}{error-barred black circle}% -\UnicodeMathSymbol{"029F4}{\ruledelayed }{\mathrel}{rule-delayed}% -\UnicodeMathSymbol{"029F5}{\setminus }{\mathbin}{reverse solidus operator}% -\UnicodeMathSymbol{"029F6}{\dsol }{\mathbin}{solidus with overbar}% -\UnicodeMathSymbol{"029F7}{\rsolbar }{\mathbin}{reverse solidus with horizontal stroke}% -\UnicodeMathSymbol{"029F8}{\xsol }{\mathop}{big solidus}% -\UnicodeMathSymbol{"029F9}{\xbsol }{\mathop}{big reverse solidus}% -\UnicodeMathSymbol{"029FA}{\doubleplus }{\mathbin}{double plus}% -\UnicodeMathSymbol{"029FB}{\tripleplus }{\mathbin}{triple plus}% -\UnicodeMathSymbol{"029FC}{\lcurvyangle }{\mathopen}{left pointing curved angle bracket}% -\UnicodeMathSymbol{"029FD}{\rcurvyangle }{\mathclose}{right pointing curved angle bracket}% -\UnicodeMathSymbol{"029FE}{\tplus }{\mathbin}{tiny}% -\UnicodeMathSymbol{"029FF}{\tminus }{\mathbin}{miny}% -\UnicodeMathSymbol{"02A00}{\bigodot }{\mathop}{n-ary circled dot operator}% -\UnicodeMathSymbol{"02A01}{\bigoplus }{\mathop}{n-ary circled plus operator}% -\UnicodeMathSymbol{"02A02}{\bigotimes }{\mathop}{n-ary circled times operator}% -\UnicodeMathSymbol{"02A03}{\bigcupdot }{\mathop}{n-ary union operator with dot}% -\UnicodeMathSymbol{"02A04}{\biguplus }{\mathop}{n-ary union operator with plus}% -\UnicodeMathSymbol{"02A05}{\bigsqcap }{\mathop}{n-ary square intersection operator}% -\UnicodeMathSymbol{"02A06}{\bigsqcup }{\mathop}{n-ary square union operator}% -\UnicodeMathSymbol{"02A07}{\conjquant }{\mathop}{two logical and operator}% -\UnicodeMathSymbol{"02A08}{\disjquant }{\mathop}{two logical or operator}% -\UnicodeMathSymbol{"02A09}{\bigtimes }{\mathop}{n-ary times operator}% -\UnicodeMathSymbol{"02A0A}{\modtwosum }{\mathop}{modulo two sum}% -\UnicodeMathSymbol{"02A0B}{\sumint }{\mathop}{summation with integral}% -\UnicodeMathSymbol{"02A0C}{\iiiint }{\mathop}{quadruple integral operator}% -\UnicodeMathSymbol{"02A0D}{\intbar }{\mathop}{finite part integral}% -\UnicodeMathSymbol{"02A0E}{\intBar }{\mathop}{integral with double stroke}% -\UnicodeMathSymbol{"02A0F}{\fint }{\mathop}{integral average with slash}% -\UnicodeMathSymbol{"02A10}{\cirfnint }{\mathop}{circulation function}% -\UnicodeMathSymbol{"02A11}{\awint }{\mathop}{anticlockwise integration}% -\UnicodeMathSymbol{"02A12}{\rppolint }{\mathop}{line integration with rectangular path around pole}% -\UnicodeMathSymbol{"02A13}{\scpolint }{\mathop}{line integration with semicircular path around pole}% -\UnicodeMathSymbol{"02A14}{\npolint }{\mathop}{line integration not including the pole}% -\UnicodeMathSymbol{"02A15}{\pointint }{\mathop}{integral around a point operator}% -\UnicodeMathSymbol{"02A16}{\sqint }{\mathop}{quaternion integral operator}% -\UnicodeMathSymbol{"02A17}{\intlarhk }{\mathop}{integral with leftwards arrow with hook}% -\UnicodeMathSymbol{"02A18}{\intx }{\mathop}{integral with times sign}% -\UnicodeMathSymbol{"02A19}{\intcap }{\mathop}{integral with intersection}% -\UnicodeMathSymbol{"02A1A}{\intcup }{\mathop}{integral with union}% -\UnicodeMathSymbol{"02A1B}{\upint }{\mathop}{integral with overbar}% -\UnicodeMathSymbol{"02A1C}{\lowint }{\mathop}{integral with underbar}% -\UnicodeMathSymbol{"02A1D}{\Join }{\mathop}{join}% -\UnicodeMathSymbol{"02A1E}{\bigtriangleleft }{\mathop}{large left triangle operator}% -\UnicodeMathSymbol{"02A1F}{\zcmp }{\mathop}{z notation schema composition}% -\UnicodeMathSymbol{"02A20}{\zpipe }{\mathop}{z notation schema piping}% -\UnicodeMathSymbol{"02A21}{\zproject }{\mathop}{z notation schema projection}% -\UnicodeMathSymbol{"02A22}{\ringplus }{\mathbin}{plus sign with small circle above}% -\UnicodeMathSymbol{"02A23}{\plushat }{\mathbin}{plus sign with circumflex accent above}% -\UnicodeMathSymbol{"02A24}{\simplus }{\mathbin}{plus sign with tilde above}% -\UnicodeMathSymbol{"02A25}{\plusdot }{\mathbin}{plus sign with dot below}% -\UnicodeMathSymbol{"02A26}{\plussim }{\mathbin}{plus sign with tilde below}% -\UnicodeMathSymbol{"02A27}{\plussubtwo }{\mathbin}{plus sign with subscript two}% -\UnicodeMathSymbol{"02A28}{\plustrif }{\mathbin}{plus sign with black triangle}% -\UnicodeMathSymbol{"02A29}{\commaminus }{\mathbin}{minus sign with comma above}% -\UnicodeMathSymbol{"02A2A}{\minusdot }{\mathbin}{minus sign with dot below}% -\UnicodeMathSymbol{"02A2B}{\minusfdots }{\mathbin}{minus sign with falling dots}% -\UnicodeMathSymbol{"02A2C}{\minusrdots }{\mathbin}{minus sign with rising dots}% -\UnicodeMathSymbol{"02A2D}{\opluslhrim }{\mathbin}{plus sign in left half circle}% -\UnicodeMathSymbol{"02A2E}{\oplusrhrim }{\mathbin}{plus sign in right half circle}% -\UnicodeMathSymbol{"02A2F}{\vectimes }{\mathbin}{vector or cross product}% -\UnicodeMathSymbol{"02A30}{\dottimes }{\mathbin}{multiplication sign with dot above}% -\UnicodeMathSymbol{"02A31}{\timesbar }{\mathbin}{multiplication sign with underbar}% -\UnicodeMathSymbol{"02A32}{\btimes }{\mathbin}{semidirect product with bottom closed}% -\UnicodeMathSymbol{"02A33}{\smashtimes }{\mathbin}{smash product}% -\UnicodeMathSymbol{"02A34}{\otimeslhrim }{\mathbin}{multiplication sign in left half circle}% -\UnicodeMathSymbol{"02A35}{\otimesrhrim }{\mathbin}{multiplication sign in right half circle}% -\UnicodeMathSymbol{"02A36}{\otimeshat }{\mathbin}{circled multiplication sign with circumflex accent}% -\UnicodeMathSymbol{"02A37}{\Otimes }{\mathbin}{multiplication sign in double circle}% -\UnicodeMathSymbol{"02A38}{\odiv }{\mathbin}{circled division sign}% -\UnicodeMathSymbol{"02A39}{\triangleplus }{\mathbin}{plus sign in triangle}% -\UnicodeMathSymbol{"02A3A}{\triangleminus }{\mathbin}{minus sign in triangle}% -\UnicodeMathSymbol{"02A3B}{\triangletimes }{\mathbin}{multiplication sign in triangle}% -\UnicodeMathSymbol{"02A3C}{\intprod }{\mathbin}{interior product}% -\UnicodeMathSymbol{"02A3D}{\intprodr }{\mathbin}{righthand interior product}% -\UnicodeMathSymbol{"02A3E}{\fcmp }{\mathbin}{z notation relational composition}% -\UnicodeMathSymbol{"02A3F}{\amalg }{\mathbin}{amalgamation or coproduct}% -\UnicodeMathSymbol{"02A40}{\capdot }{\mathbin}{intersection with dot}% -\UnicodeMathSymbol{"02A41}{\uminus }{\mathbin}{union with minus sign}% -\UnicodeMathSymbol{"02A42}{\barcup }{\mathbin}{union with overbar}% -\UnicodeMathSymbol{"02A43}{\barcap }{\mathbin}{intersection with overbar}% -\UnicodeMathSymbol{"02A44}{\capwedge }{\mathbin}{intersection with logical and}% -\UnicodeMathSymbol{"02A45}{\cupvee }{\mathbin}{union with logical or}% -\UnicodeMathSymbol{"02A46}{\cupovercap }{\mathbin}{union above intersection}% -\UnicodeMathSymbol{"02A47}{\capovercup }{\mathbin}{intersection above union}% -\UnicodeMathSymbol{"02A48}{\cupbarcap }{\mathbin}{union above bar above intersection}% -\UnicodeMathSymbol{"02A49}{\capbarcup }{\mathbin}{intersection above bar above union}% -\UnicodeMathSymbol{"02A4A}{\twocups }{\mathbin}{union beside and joined with union}% -\UnicodeMathSymbol{"02A4B}{\twocaps }{\mathbin}{intersection beside and joined with intersection}% -\UnicodeMathSymbol{"02A4C}{\closedvarcup }{\mathbin}{closed union with serifs}% -\UnicodeMathSymbol{"02A4D}{\closedvarcap }{\mathbin}{closed intersection with serifs}% -\UnicodeMathSymbol{"02A4E}{\Sqcap }{\mathbin}{double square intersection}% -\UnicodeMathSymbol{"02A4F}{\Sqcup }{\mathbin}{double square union}% -\UnicodeMathSymbol{"02A50}{\closedvarcupsmashprod }{\mathbin}{closed union with serifs and smash product}% -\UnicodeMathSymbol{"02A51}{\wedgeodot }{\mathbin}{logical and with dot above}% -\UnicodeMathSymbol{"02A52}{\veeodot }{\mathbin}{logical or with dot above}% -\UnicodeMathSymbol{"02A53}{\Wedge }{\mathbin}{double logical and}% -\UnicodeMathSymbol{"02A54}{\Vee }{\mathbin}{double logical or}% -\UnicodeMathSymbol{"02A55}{\wedgeonwedge }{\mathbin}{two intersecting logical and}% -\UnicodeMathSymbol{"02A56}{\veeonvee }{\mathbin}{two intersecting logical or}% -\UnicodeMathSymbol{"02A57}{\bigslopedvee }{\mathbin}{sloping large or}% -\UnicodeMathSymbol{"02A58}{\bigslopedwedge }{\mathbin}{sloping large and}% -\UnicodeMathSymbol{"02A59}{\veeonwedge }{\mathrel}{logical or overlapping logical and}% -\UnicodeMathSymbol{"02A5A}{\wedgemidvert }{\mathbin}{logical and with middle stem}% -\UnicodeMathSymbol{"02A5B}{\veemidvert }{\mathbin}{logical or with middle stem}% -\UnicodeMathSymbol{"02A5C}{\midbarwedge }{\mathbin}{ogical and with horizontal dash}% -\UnicodeMathSymbol{"02A5D}{\midbarvee }{\mathbin}{logical or with horizontal dash}% -\UnicodeMathSymbol{"02A5E}{\doublebarwedge }{\mathbin}{logical and with double overbar}% -\UnicodeMathSymbol{"02A5F}{\wedgebar }{\mathbin}{logical and with underbar}% -\UnicodeMathSymbol{"02A60}{\wedgedoublebar }{\mathbin}{logical and with double underbar}% -\UnicodeMathSymbol{"02A61}{\varveebar }{\mathbin}{small vee with underbar}% -\UnicodeMathSymbol{"02A62}{\doublebarvee }{\mathbin}{logical or with double overbar}% -\UnicodeMathSymbol{"02A63}{\veedoublebar }{\mathbin}{logical or with double underbar}% -\UnicodeMathSymbol{"02A64}{\dsub }{\mathbin}{z notation domain antirestriction}% -\UnicodeMathSymbol{"02A65}{\rsub }{\mathbin}{z notation range antirestriction}% -\UnicodeMathSymbol{"02A66}{\eqdot }{\mathrel}{equals sign with dot below}% -\UnicodeMathSymbol{"02A67}{\dotequiv }{\mathrel}{identical with dot above}% -\UnicodeMathSymbol{"02A68}{\equivVert }{\mathrel}{triple horizontal bar with double vertical stroke}% -\UnicodeMathSymbol{"02A69}{\equivVvert }{\mathrel}{triple horizontal bar with triple vertical stroke}% -\UnicodeMathSymbol{"02A6A}{\dotsim }{\mathrel}{tilde operator with dot above}% -\UnicodeMathSymbol{"02A6B}{\simrdots }{\mathrel}{tilde operator with rising dots}% -\UnicodeMathSymbol{"02A6C}{\simminussim }{\mathrel}{similar minus similar}% -\UnicodeMathSymbol{"02A6D}{\congdot }{\mathrel}{congruent with dot above}% -\UnicodeMathSymbol{"02A6E}{\asteq }{\mathrel}{equals with asterisk}% -\UnicodeMathSymbol{"02A6F}{\hatapprox }{\mathrel}{almost equal to with circumflex accent}% -\UnicodeMathSymbol{"02A70}{\approxeqq }{\mathrel}{approximately equal or equal to}% -\UnicodeMathSymbol{"02A71}{\eqqplus }{\mathbin}{equals sign above plus sign}% -\UnicodeMathSymbol{"02A72}{\pluseqq }{\mathbin}{plus sign above equals sign}% -\UnicodeMathSymbol{"02A73}{\eqqsim }{\mathrel}{equals sign above tilde operator}% -\UnicodeMathSymbol{"02A74}{\Coloneq }{\mathrel}{double colon equal}% -\UnicodeMathSymbol{"02A75}{\eqeq }{\mathrel}{two consecutive equals signs}% -\UnicodeMathSymbol{"02A76}{\eqeqeq }{\mathrel}{three consecutive equals signs}% -\UnicodeMathSymbol{"02A77}{\ddotseq }{\mathrel}{equals sign with two dots above and two dots below}% -\UnicodeMathSymbol{"02A78}{\equivDD }{\mathrel}{equivalent with four dots above}% -\UnicodeMathSymbol{"02A79}{\ltcir }{\mathrel}{less-than with circle inside}% -\UnicodeMathSymbol{"02A7A}{\gtcir }{\mathrel}{greater-than with circle inside}% -\UnicodeMathSymbol{"02A7B}{\ltquest }{\mathrel}{less-than with question mark above}% -\UnicodeMathSymbol{"02A7C}{\gtquest }{\mathrel}{greater-than with question mark above}% -\UnicodeMathSymbol{"02A7D}{\leqslant }{\mathrel}{less-than or slanted equal to}% -\UnicodeMathSymbol{"02A7E}{\geqslant }{\mathrel}{greater-than or slanted equal to}% -\UnicodeMathSymbol{"02A7F}{\lesdot }{\mathrel}{less-than or slanted equal to with dot inside}% -\UnicodeMathSymbol{"02A80}{\gesdot }{\mathrel}{greater-than or slanted equal to with dot inside}% -\UnicodeMathSymbol{"02A81}{\lesdoto }{\mathrel}{less-than or slanted equal to with dot above}% -\UnicodeMathSymbol{"02A82}{\gesdoto }{\mathrel}{greater-than or slanted equal to with dot above}% -\UnicodeMathSymbol{"02A83}{\lesdotor }{\mathrel}{less-than or slanted equal to with dot above right}% -\UnicodeMathSymbol{"02A84}{\gesdotol }{\mathrel}{greater-than or slanted equal to with dot above left}% -\UnicodeMathSymbol{"02A85}{\lessapprox }{\mathrel}{less-than or approximate}% -\UnicodeMathSymbol{"02A86}{\gtrapprox }{\mathrel}{greater-than or approximate}% -\UnicodeMathSymbol{"02A87}{\lneq }{\mathrel}{less-than and single-line not equal to}% -\UnicodeMathSymbol{"02A88}{\gneq }{\mathrel}{greater-than and single-line not equal to}% -\UnicodeMathSymbol{"02A89}{\lnapprox }{\mathrel}{less-than and not approximate}% -\UnicodeMathSymbol{"02A8A}{\gnapprox }{\mathrel}{greater-than and not approximate}% -\UnicodeMathSymbol{"02A8B}{\lesseqqgtr }{\mathrel}{less-than above double-line equal above greater-than}% -\UnicodeMathSymbol{"02A8C}{\gtreqqless }{\mathrel}{greater-than above double-line equal above less-than}% -\UnicodeMathSymbol{"02A8D}{\lsime }{\mathrel}{less-than above similar or equal}% -\UnicodeMathSymbol{"02A8E}{\gsime }{\mathrel}{greater-than above similar or equal}% -\UnicodeMathSymbol{"02A8F}{\lsimg }{\mathrel}{less-than above similar above greater-than}% -\UnicodeMathSymbol{"02A90}{\gsiml }{\mathrel}{greater-than above similar above less-than}% -\UnicodeMathSymbol{"02A91}{\lgE }{\mathrel}{less-than above greater-than above double-line equal}% -\UnicodeMathSymbol{"02A92}{\glE }{\mathrel}{greater-than above less-than above double-line equal}% -\UnicodeMathSymbol{"02A93}{\lesges }{\mathrel}{less-than above slanted equal above greater-than above slanted equal}% -\UnicodeMathSymbol{"02A94}{\gesles }{\mathrel}{greater-than above slanted equal above less-than above slanted equal}% -\UnicodeMathSymbol{"02A95}{\eqslantless }{\mathrel}{slanted equal to or less-than}% -\UnicodeMathSymbol{"02A96}{\eqslantgtr }{\mathrel}{slanted equal to or greater-than}% -\UnicodeMathSymbol{"02A97}{\elsdot }{\mathrel}{slanted equal to or less-than with dot inside}% -\UnicodeMathSymbol{"02A98}{\egsdot }{\mathrel}{slanted equal to or greater-than with dot inside}% -\UnicodeMathSymbol{"02A99}{\eqqless }{\mathrel}{double-line equal to or less-than}% -\UnicodeMathSymbol{"02A9A}{\eqqgtr }{\mathrel}{double-line equal to or greater-than}% -\UnicodeMathSymbol{"02A9B}{\eqqslantless }{\mathrel}{double-line slanted equal to or less-than}% -\UnicodeMathSymbol{"02A9C}{\eqqslantgtr }{\mathrel}{double-line slanted equal to or greater-than}% -\UnicodeMathSymbol{"02A9D}{\simless }{\mathrel}{similar or less-than}% -\UnicodeMathSymbol{"02A9E}{\simgtr }{\mathrel}{similar or greater-than}% -\UnicodeMathSymbol{"02A9F}{\simlE }{\mathrel}{similar above less-than above equals sign}% -\UnicodeMathSymbol{"02AA0}{\simgE }{\mathrel}{similar above greater-than above equals sign}% -\UnicodeMathSymbol{"02AA1}{\Lt }{\mathrel}{double nested less-than}% -\UnicodeMathSymbol{"02AA2}{\Gt }{\mathrel}{double nested greater-than}% -\UnicodeMathSymbol{"02AA3}{\partialmeetcontraction }{\mathrel}{double less-than with underbar}% -\UnicodeMathSymbol{"02AA4}{\glj }{\mathrel}{greater-than overlapping less-than}% -\UnicodeMathSymbol{"02AA5}{\gla }{\mathrel}{greater-than beside less-than}% -\UnicodeMathSymbol{"02AA6}{\ltcc }{\mathrel}{less-than closed by curve}% -\UnicodeMathSymbol{"02AA7}{\gtcc }{\mathrel}{greater-than closed by curve}% -\UnicodeMathSymbol{"02AA8}{\lescc }{\mathrel}{less-than closed by curve above slanted equal}% -\UnicodeMathSymbol{"02AA9}{\gescc }{\mathrel}{greater-than closed by curve above slanted equal}% -\UnicodeMathSymbol{"02AAA}{\smt }{\mathrel}{smaller than}% -\UnicodeMathSymbol{"02AAB}{\lat }{\mathrel}{larger than}% -\UnicodeMathSymbol{"02AAC}{\smte }{\mathrel}{smaller than or equal to}% -\UnicodeMathSymbol{"02AAD}{\late }{\mathrel}{larger than or equal to}% -\UnicodeMathSymbol{"02AAE}{\bumpeqq }{\mathrel}{equals sign with bumpy above}% -\UnicodeMathSymbol{"02AAF}{\preceq }{\mathrel}{precedes above single-line equals sign}% -\UnicodeMathSymbol{"02AB0}{\succeq }{\mathrel}{succeeds above single-line equals sign}% -\UnicodeMathSymbol{"02AB1}{\precneq }{\mathrel}{precedes above single-line not equal to}% -\UnicodeMathSymbol{"02AB2}{\succneq }{\mathrel}{succeeds above single-line not equal to}% -\UnicodeMathSymbol{"02AB3}{\preceqq }{\mathrel}{precedes above equals sign}% -\UnicodeMathSymbol{"02AB4}{\succeqq }{\mathrel}{succeeds above equals sign}% -\UnicodeMathSymbol{"02AB5}{\precneqq }{\mathrel}{precedes above not equal to}% -\UnicodeMathSymbol{"02AB6}{\succneqq }{\mathrel}{succeeds above not equal to}% -\UnicodeMathSymbol{"02AB7}{\precapprox }{\mathrel}{precedes above almost equal to}% -\UnicodeMathSymbol{"02AB8}{\succapprox }{\mathrel}{succeeds above almost equal to}% -\UnicodeMathSymbol{"02AB9}{\precnapprox }{\mathrel}{precedes above not almost equal to}% -\UnicodeMathSymbol{"02ABA}{\succnapprox }{\mathrel}{succeeds above not almost equal to}% -\UnicodeMathSymbol{"02ABB}{\Prec }{\mathrel}{double precedes}% -\UnicodeMathSymbol{"02ABC}{\Succ }{\mathrel}{double succeeds}% -\UnicodeMathSymbol{"02ABD}{\subsetdot }{\mathrel}{subset with dot}% -\UnicodeMathSymbol{"02ABE}{\supsetdot }{\mathrel}{superset with dot}% -\UnicodeMathSymbol{"02ABF}{\subsetplus }{\mathrel}{subset with plus sign below}% -\UnicodeMathSymbol{"02AC0}{\supsetplus }{\mathrel}{superset with plus sign below}% -\UnicodeMathSymbol{"02AC1}{\submult }{\mathrel}{subset with multiplication sign below}% -\UnicodeMathSymbol{"02AC2}{\supmult }{\mathrel}{superset with multiplication sign below}% -\UnicodeMathSymbol{"02AC3}{\subedot }{\mathrel}{subset of or equal to with dot above}% -\UnicodeMathSymbol{"02AC4}{\supedot }{\mathrel}{superset of or equal to with dot above}% -\UnicodeMathSymbol{"02AC5}{\subseteqq }{\mathrel}{subset of above equals sign}% -\UnicodeMathSymbol{"02AC6}{\supseteqq }{\mathrel}{superset of above equals sign}% -\UnicodeMathSymbol{"02AC7}{\subsim }{\mathrel}{subset of above tilde operator}% -\UnicodeMathSymbol{"02AC8}{\supsim }{\mathrel}{superset of above tilde operator}% -\UnicodeMathSymbol{"02AC9}{\subsetapprox }{\mathrel}{subset of above almost equal to}% -\UnicodeMathSymbol{"02ACA}{\supsetapprox }{\mathrel}{superset of above almost equal to}% -\UnicodeMathSymbol{"02ACB}{\subsetneqq }{\mathrel}{subset of above not equal to}% -\UnicodeMathSymbol{"02ACC}{\supsetneqq }{\mathrel}{superset of above not equal to}% -\UnicodeMathSymbol{"02ACD}{\lsqhook }{\mathrel}{square left open box operator}% -\UnicodeMathSymbol{"02ACE}{\rsqhook }{\mathrel}{square right open box operator}% -\UnicodeMathSymbol{"02ACF}{\csub }{\mathrel}{closed subset}% -\UnicodeMathSymbol{"02AD0}{\csup }{\mathrel}{closed superset}% -\UnicodeMathSymbol{"02AD1}{\csube }{\mathrel}{closed subset or equal to}% -\UnicodeMathSymbol{"02AD2}{\csupe }{\mathrel}{closed superset or equal to}% -\UnicodeMathSymbol{"02AD3}{\subsup }{\mathrel}{subset above superset}% -\UnicodeMathSymbol{"02AD4}{\supsub }{\mathrel}{superset above subset}% -\UnicodeMathSymbol{"02AD5}{\subsub }{\mathrel}{subset above subset}% -\UnicodeMathSymbol{"02AD6}{\supsup }{\mathrel}{superset above superset}% -\UnicodeMathSymbol{"02AD7}{\suphsub }{\mathrel}{superset beside subset}% -\UnicodeMathSymbol{"02AD8}{\supdsub }{\mathrel}{superset beside and joined by dash with subset}% -\UnicodeMathSymbol{"02AD9}{\forkv }{\mathrel}{element of opening downwards}% -\UnicodeMathSymbol{"02ADA}{\topfork }{\mathrel}{pitchfork with tee top}% -\UnicodeMathSymbol{"02ADB}{\mlcp }{\mathrel}{transversal intersection}% -\UnicodeMathSymbol{"02ADC}{\forks }{\mathrel}{forking}% -\UnicodeMathSymbol{"02ADD}{\forksnot }{\mathrel}{nonforking}% -\UnicodeMathSymbol{"02ADE}{\shortlefttack }{\mathrel}{short left tack}% -\UnicodeMathSymbol{"02ADF}{\shortdowntack }{\mathrel}{short down tack}% -\UnicodeMathSymbol{"02AE0}{\shortuptack }{\mathrel}{short up tack}% -\UnicodeMathSymbol{"02AE1}{\perps }{\mathord}{perpendicular with s}% -\UnicodeMathSymbol{"02AE2}{\vDdash }{\mathrel}{vertical bar triple right turnstile}% -\UnicodeMathSymbol{"02AE3}{\dashV }{\mathrel}{double vertical bar left turnstile}% -\UnicodeMathSymbol{"02AE4}{\Dashv }{\mathrel}{vertical bar double left turnstile}% -\UnicodeMathSymbol{"02AE5}{\DashV }{\mathrel}{double vertical bar double left turnstile}% -\UnicodeMathSymbol{"02AE6}{\varVdash }{\mathrel}{long dash from left member of double vertical}% -\UnicodeMathSymbol{"02AE7}{\Barv }{\mathrel}{short down tack with overbar}% -\UnicodeMathSymbol{"02AE8}{\vBar }{\mathrel}{short up tack with underbar}% -\UnicodeMathSymbol{"02AE9}{\vBarv }{\mathrel}{short up tack above short down tack}% -\UnicodeMathSymbol{"02AEA}{\barV }{\mathrel}{double down tack}% -\UnicodeMathSymbol{"02AEB}{\Vbar }{\mathrel}{double up tack}% -\UnicodeMathSymbol{"02AEC}{\Not }{\mathrel}{double stroke not sign}% -\UnicodeMathSymbol{"02AED}{\bNot }{\mathrel}{reversed double stroke not sign}% -\UnicodeMathSymbol{"02AEE}{\revnmid }{\mathrel}{does not divide with reversed negation slash}% -\UnicodeMathSymbol{"02AEF}{\cirmid }{\mathrel}{vertical line with circle above}% -\UnicodeMathSymbol{"02AF0}{\midcir }{\mathrel}{vertical line with circle below}% -\UnicodeMathSymbol{"02AF1}{\topcir }{\mathord}{down tack with circle below}% -\UnicodeMathSymbol{"02AF2}{\nhpar }{\mathrel}{parallel with horizontal stroke}% -\UnicodeMathSymbol{"02AF3}{\parsim }{\mathrel}{parallel with tilde operator}% -\UnicodeMathSymbol{"02AF4}{\interleave }{\mathbin}{triple vertical bar binary relation}% -\UnicodeMathSymbol{"02AF5}{\nhVvert }{\mathbin}{triple vertical bar with horizontal stroke}% -\UnicodeMathSymbol{"02AF6}{\threedotcolon }{\mathbin}{triple colon operator}% -\UnicodeMathSymbol{"02AF7}{\lllnest }{\mathrel}{stacked very much less-than}% -\UnicodeMathSymbol{"02AF8}{\gggnest }{\mathrel}{stacked very much greater-than}% -\UnicodeMathSymbol{"02AF9}{\leqqslant }{\mathrel}{double-line slanted less-than or equal to}% -\UnicodeMathSymbol{"02AFA}{\geqqslant }{\mathrel}{double-line slanted greater-than or equal to}% -\UnicodeMathSymbol{"02AFB}{\trslash }{\mathbin}{triple solidus binary relation}% -\UnicodeMathSymbol{"02AFC}{\biginterleave }{\mathop}{large triple vertical bar operator}% -\UnicodeMathSymbol{"02AFD}{\sslash }{\mathbin}{double solidus operator}% -\UnicodeMathSymbol{"02AFE}{\talloblong }{\mathbin}{white vertical bar}% -\UnicodeMathSymbol{"02AFF}{\bigtalloblong }{\mathop}{n-ary white vertical bar}% -\UnicodeMathSymbol{"02B12}{\squaretopblack }{\mathord}{square with top half black}% -\UnicodeMathSymbol{"02B13}{\squarebotblack }{\mathord}{square with bottom half black}% -\UnicodeMathSymbol{"02B14}{\squareurblack }{\mathord}{square with upper right diagonal half black}% -\UnicodeMathSymbol{"02B15}{\squarellblack }{\mathord}{square with lower left diagonal half black}% -\UnicodeMathSymbol{"02B16}{\diamondleftblack }{\mathord}{diamond with left half black}% -\UnicodeMathSymbol{"02B17}{\diamondrightblack }{\mathord}{diamond with right half black}% -\UnicodeMathSymbol{"02B18}{\diamondtopblack }{\mathord}{diamond with top half black}% -\UnicodeMathSymbol{"02B19}{\diamondbotblack }{\mathord}{diamond with bottom half black}% -\UnicodeMathSymbol{"02B1A}{\dottedsquare }{\mathord}{dotted square}% -\UnicodeMathSymbol{"02B1B}{\lgblksquare }{\mathord}{black large square}% -\UnicodeMathSymbol{"02B1C}{\lgwhtsquare }{\mathord}{white large square}% -\UnicodeMathSymbol{"02B1D}{\vysmblksquare }{\mathord}{black very small square}% -\UnicodeMathSymbol{"02B1E}{\vysmwhtsquare }{\mathord}{white very small square}% -\UnicodeMathSymbol{"02B1F}{\pentagonblack }{\mathord}{black pentagon}% -\UnicodeMathSymbol{"02B20}{\pentagon }{\mathord}{white pentagon}% -\UnicodeMathSymbol{"02B21}{\varhexagon }{\mathord}{white hexagon}% -\UnicodeMathSymbol{"02B22}{\varhexagonblack }{\mathord}{black hexagon}% -\UnicodeMathSymbol{"02B23}{\hexagonblack }{\mathord}{horizontal black hexagon}% -\UnicodeMathSymbol{"02B24}{\lgblkcircle }{\mathord}{black large circle}% -\UnicodeMathSymbol{"02B25}{\mdblkdiamond }{\mathord}{black medium diamond}% -\UnicodeMathSymbol{"02B26}{\mdwhtdiamond }{\mathord}{white medium diamond}% -\UnicodeMathSymbol{"02B27}{\mdblklozenge }{\mathord}{black medium lozenge}% -\UnicodeMathSymbol{"02B28}{\mdwhtlozenge }{\mathord}{white medium lozenge}% -\UnicodeMathSymbol{"02B29}{\smblkdiamond }{\mathord}{black small diamond}% -\UnicodeMathSymbol{"02B2A}{\smblklozenge }{\mathord}{black small lozenge}% -\UnicodeMathSymbol{"02B2B}{\smwhtlozenge }{\mathord}{white small lozenge}% -\UnicodeMathSymbol{"02B2C}{\blkhorzoval }{\mathord}{black horizontal ellipse}% -\UnicodeMathSymbol{"02B2D}{\whthorzoval }{\mathord}{white horizontal ellipse}% -\UnicodeMathSymbol{"02B2E}{\blkvertoval }{\mathord}{black vertical ellipse}% -\UnicodeMathSymbol{"02B2F}{\whtvertoval }{\mathord}{white vertical ellipse}% -\UnicodeMathSymbol{"02B30}{\circleonleftarrow }{\mathrel}{left arrow with small circle}% -\UnicodeMathSymbol{"02B31}{\leftthreearrows }{\mathrel}{three leftwards arrows}% -\UnicodeMathSymbol{"02B32}{\leftarrowonoplus }{\mathrel}{left arrow with circled plus}% -\UnicodeMathSymbol{"02B33}{\longleftsquigarrow }{\mathrel}{long leftwards squiggle arrow}% -\UnicodeMathSymbol{"02B34}{\nvtwoheadleftarrow }{\mathrel}{leftwards two-headed arrow with vertical stroke}% -\UnicodeMathSymbol{"02B35}{\nVtwoheadleftarrow }{\mathrel}{leftwards two-headed arrow with double vertical stroke}% -\UnicodeMathSymbol{"02B36}{\twoheadmapsfrom }{\mathrel}{leftwards two-headed arrow from bar}% -\UnicodeMathSymbol{"02B37}{\twoheadleftdbkarrow }{\mathrel}{leftwards two-headed triple-dash arrow}% -\UnicodeMathSymbol{"02B38}{\leftdotarrow }{\mathrel}{leftwards arrow with dotted stem}% -\UnicodeMathSymbol{"02B39}{\nvleftarrowtail }{\mathrel}{leftwards arrow with tail with vertical stroke}% -\UnicodeMathSymbol{"02B3A}{\nVleftarrowtail }{\mathrel}{leftwards arrow with tail with double vertical stroke}% -\UnicodeMathSymbol{"02B3B}{\twoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail}% -\UnicodeMathSymbol{"02B3C}{\nvtwoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail with vertical stroke}% -\UnicodeMathSymbol{"02B3D}{\nVtwoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail with double vertical stroke}% -\UnicodeMathSymbol{"02B3E}{\leftarrowx }{\mathrel}{leftwards arrow through x}% -\UnicodeMathSymbol{"02B3F}{\leftcurvedarrow }{\mathrel}{wave arrow pointing directly left}% -\UnicodeMathSymbol{"02B40}{\equalleftarrow }{\mathrel}{equals sign above leftwards arrow}% -\UnicodeMathSymbol{"02B41}{\bsimilarleftarrow }{\mathrel}{reverse tilde operator above leftwards arrow}% -\UnicodeMathSymbol{"02B42}{\leftarrowbackapprox }{\mathrel}{leftwards arrow above reverse almost equal to}% -\UnicodeMathSymbol{"02B43}{\rightarrowgtr }{\mathrel}{rightwards arrow through greater-than}% -\UnicodeMathSymbol{"02B44}{\rightarrowsupset }{\mathrel}{rightwards arrow through subset}% -\UnicodeMathSymbol{"02B45}{\LLeftarrow }{\mathrel}{leftwards quadruple arrow}% -\UnicodeMathSymbol{"02B46}{\RRightarrow }{\mathrel}{rightwards quadruple arrow}% -\UnicodeMathSymbol{"02B47}{\bsimilarrightarrow }{\mathrel}{reverse tilde operator above rightwards arrow}% -\UnicodeMathSymbol{"02B48}{\rightarrowbackapprox }{\mathrel}{rightwards arrow above reverse almost equal to}% -\UnicodeMathSymbol{"02B49}{\similarleftarrow }{\mathrel}{tilde operator above leftwards arrow}% -\UnicodeMathSymbol{"02B4A}{\leftarrowapprox }{\mathrel}{leftwards arrow above almost equal to}% -\UnicodeMathSymbol{"02B4B}{\leftarrowbsimilar }{\mathrel}{leftwards arrow above reverse tilde operator}% -\UnicodeMathSymbol{"02B4C}{\rightarrowbsimilar }{\mathrel}{righttwards arrow above reverse tilde operator}% -\UnicodeMathSymbol{"02B50}{\medwhitestar }{\mathord}{white medium star}% -\UnicodeMathSymbol{"02B51}{\medblackstar }{\mathord}{black medium star}% -\UnicodeMathSymbol{"02B52}{\smwhitestar }{\mathord}{white small star}% -\UnicodeMathSymbol{"02B53}{\rightpentagonblack }{\mathord}{black right-pointing pentagon}% -\UnicodeMathSymbol{"02B54}{\rightpentagon }{\mathord}{white right-pointing pentagon}% -\UnicodeMathSymbol{"03012}{\postalmark }{\mathord}{postal mark}% -\UnicodeMathSymbol{"03030}{\hzigzag }{\mathord}{zigzag}% -\UnicodeMathSymbol{"1D400}{\mbfA }{\mathalpha}{mathematical bold capital a}% -\UnicodeMathSymbol{"1D401}{\mbfB }{\mathalpha}{mathematical bold capital b}% -\UnicodeMathSymbol{"1D402}{\mbfC }{\mathalpha}{mathematical bold capital c}% -\UnicodeMathSymbol{"1D403}{\mbfD }{\mathalpha}{mathematical bold capital d}% -\UnicodeMathSymbol{"1D404}{\mbfE }{\mathalpha}{mathematical bold capital e}% -\UnicodeMathSymbol{"1D405}{\mbfF }{\mathalpha}{mathematical bold capital f}% -\UnicodeMathSymbol{"1D406}{\mbfG }{\mathalpha}{mathematical bold capital g}% -\UnicodeMathSymbol{"1D407}{\mbfH }{\mathalpha}{mathematical bold capital h}% -\UnicodeMathSymbol{"1D408}{\mbfI }{\mathalpha}{mathematical bold capital i}% -\UnicodeMathSymbol{"1D409}{\mbfJ }{\mathalpha}{mathematical bold capital j}% -\UnicodeMathSymbol{"1D40A}{\mbfK }{\mathalpha}{mathematical bold capital k}% -\UnicodeMathSymbol{"1D40B}{\mbfL }{\mathalpha}{mathematical bold capital l}% -\UnicodeMathSymbol{"1D40C}{\mbfM }{\mathalpha}{mathematical bold capital m}% -\UnicodeMathSymbol{"1D40D}{\mbfN }{\mathalpha}{mathematical bold capital n}% -\UnicodeMathSymbol{"1D40E}{\mbfO }{\mathalpha}{mathematical bold capital o}% -\UnicodeMathSymbol{"1D40F}{\mbfP }{\mathalpha}{mathematical bold capital p}% -\UnicodeMathSymbol{"1D410}{\mbfQ }{\mathalpha}{mathematical bold capital q}% -\UnicodeMathSymbol{"1D411}{\mbfR }{\mathalpha}{mathematical bold capital r}% -\UnicodeMathSymbol{"1D412}{\mbfS }{\mathalpha}{mathematical bold capital s}% -\UnicodeMathSymbol{"1D413}{\mbfT }{\mathalpha}{mathematical bold capital t}% -\UnicodeMathSymbol{"1D414}{\mbfU }{\mathalpha}{mathematical bold capital u}% -\UnicodeMathSymbol{"1D415}{\mbfV }{\mathalpha}{mathematical bold capital v}% -\UnicodeMathSymbol{"1D416}{\mbfW }{\mathalpha}{mathematical bold capital w}% -\UnicodeMathSymbol{"1D417}{\mbfX }{\mathalpha}{mathematical bold capital x}% -\UnicodeMathSymbol{"1D418}{\mbfY }{\mathalpha}{mathematical bold capital y}% -\UnicodeMathSymbol{"1D419}{\mbfZ }{\mathalpha}{mathematical bold capital z}% -\UnicodeMathSymbol{"1D41A}{\mbfa }{\mathalpha}{mathematical bold small a}% -\UnicodeMathSymbol{"1D41B}{\mbfb }{\mathalpha}{mathematical bold small b}% -\UnicodeMathSymbol{"1D41C}{\mbfc }{\mathalpha}{mathematical bold small c}% -\UnicodeMathSymbol{"1D41D}{\mbfd }{\mathalpha}{mathematical bold small d}% -\UnicodeMathSymbol{"1D41E}{\mbfe }{\mathalpha}{mathematical bold small e}% -\UnicodeMathSymbol{"1D41F}{\mbff }{\mathalpha}{mathematical bold small f}% -\UnicodeMathSymbol{"1D420}{\mbfg }{\mathalpha}{mathematical bold small g}% -\UnicodeMathSymbol{"1D421}{\mbfh }{\mathalpha}{mathematical bold small h}% -\UnicodeMathSymbol{"1D422}{\mbfi }{\mathalpha}{mathematical bold small i}% -\UnicodeMathSymbol{"1D423}{\mbfj }{\mathalpha}{mathematical bold small j}% -\UnicodeMathSymbol{"1D424}{\mbfk }{\mathalpha}{mathematical bold small k}% -\UnicodeMathSymbol{"1D425}{\mbfl }{\mathalpha}{mathematical bold small l}% -\UnicodeMathSymbol{"1D426}{\mbfm }{\mathalpha}{mathematical bold small m}% -\UnicodeMathSymbol{"1D427}{\mbfn }{\mathalpha}{mathematical bold small n}% -\UnicodeMathSymbol{"1D428}{\mbfo }{\mathalpha}{mathematical bold small o}% -\UnicodeMathSymbol{"1D429}{\mbfp }{\mathalpha}{mathematical bold small p}% -\UnicodeMathSymbol{"1D42A}{\mbfq }{\mathalpha}{mathematical bold small q}% -\UnicodeMathSymbol{"1D42B}{\mbfr }{\mathalpha}{mathematical bold small r}% -\UnicodeMathSymbol{"1D42C}{\mbfs }{\mathalpha}{mathematical bold small s}% -\UnicodeMathSymbol{"1D42D}{\mbft }{\mathalpha}{mathematical bold small t}% -\UnicodeMathSymbol{"1D42E}{\mbfu }{\mathalpha}{mathematical bold small u}% -\UnicodeMathSymbol{"1D42F}{\mbfv }{\mathalpha}{mathematical bold small v}% -\UnicodeMathSymbol{"1D430}{\mbfw }{\mathalpha}{mathematical bold small w}% -\UnicodeMathSymbol{"1D431}{\mbfx }{\mathalpha}{mathematical bold small x}% -\UnicodeMathSymbol{"1D432}{\mbfy }{\mathalpha}{mathematical bold small y}% -\UnicodeMathSymbol{"1D433}{\mbfz }{\mathalpha}{mathematical bold small z}% -\UnicodeMathSymbol{"1D434}{\mitA }{\mathalpha}{mathematical italic capital a}% -\UnicodeMathSymbol{"1D435}{\mitB }{\mathalpha}{mathematical italic capital b}% -\UnicodeMathSymbol{"1D436}{\mitC }{\mathalpha}{mathematical italic capital c}% -\UnicodeMathSymbol{"1D437}{\mitD }{\mathalpha}{mathematical italic capital d}% -\UnicodeMathSymbol{"1D438}{\mitE }{\mathalpha}{mathematical italic capital e}% -\UnicodeMathSymbol{"1D439}{\mitF }{\mathalpha}{mathematical italic capital f}% -\UnicodeMathSymbol{"1D43A}{\mitG }{\mathalpha}{mathematical italic capital g}% -\UnicodeMathSymbol{"1D43B}{\mitH }{\mathalpha}{mathematical italic capital h}% -\UnicodeMathSymbol{"1D43C}{\mitI }{\mathalpha}{mathematical italic capital i}% -\UnicodeMathSymbol{"1D43D}{\mitJ }{\mathalpha}{mathematical italic capital j}% -\UnicodeMathSymbol{"1D43E}{\mitK }{\mathalpha}{mathematical italic capital k}% -\UnicodeMathSymbol{"1D43F}{\mitL }{\mathalpha}{mathematical italic capital l}% -\UnicodeMathSymbol{"1D440}{\mitM }{\mathalpha}{mathematical italic capital m}% -\UnicodeMathSymbol{"1D441}{\mitN }{\mathalpha}{mathematical italic capital n}% -\UnicodeMathSymbol{"1D442}{\mitO }{\mathalpha}{mathematical italic capital o}% -\UnicodeMathSymbol{"1D443}{\mitP }{\mathalpha}{mathematical italic capital p}% -\UnicodeMathSymbol{"1D444}{\mitQ }{\mathalpha}{mathematical italic capital q}% -\UnicodeMathSymbol{"1D445}{\mitR }{\mathalpha}{mathematical italic capital r}% -\UnicodeMathSymbol{"1D446}{\mitS }{\mathalpha}{mathematical italic capital s}% -\UnicodeMathSymbol{"1D447}{\mitT }{\mathalpha}{mathematical italic capital t}% -\UnicodeMathSymbol{"1D448}{\mitU }{\mathalpha}{mathematical italic capital u}% -\UnicodeMathSymbol{"1D449}{\mitV }{\mathalpha}{mathematical italic capital v}% -\UnicodeMathSymbol{"1D44A}{\mitW }{\mathalpha}{mathematical italic capital w}% -\UnicodeMathSymbol{"1D44B}{\mitX }{\mathalpha}{mathematical italic capital x}% -\UnicodeMathSymbol{"1D44C}{\mitY }{\mathalpha}{mathematical italic capital y}% -\UnicodeMathSymbol{"1D44D}{\mitZ }{\mathalpha}{mathematical italic capital z}% -\UnicodeMathSymbol{"1D44E}{\mita }{\mathalpha}{mathematical italic small a}% -\UnicodeMathSymbol{"1D44F}{\mitb }{\mathalpha}{mathematical italic small b}% -\UnicodeMathSymbol{"1D450}{\mitc }{\mathalpha}{mathematical italic small c}% -\UnicodeMathSymbol{"1D451}{\mitd }{\mathalpha}{mathematical italic small d}% -\UnicodeMathSymbol{"1D452}{\mite }{\mathalpha}{mathematical italic small e}% -\UnicodeMathSymbol{"1D453}{\mitf }{\mathalpha}{mathematical italic small f}% -\UnicodeMathSymbol{"1D454}{\mitg }{\mathalpha}{mathematical italic small g}% -\UnicodeMathSymbol{"1D456}{\miti }{\mathalpha}{mathematical italic small i}% -\UnicodeMathSymbol{"1D457}{\mitj }{\mathalpha}{mathematical italic small j}% -\UnicodeMathSymbol{"1D458}{\mitk }{\mathalpha}{mathematical italic small k}% -\UnicodeMathSymbol{"1D459}{\mitl }{\mathalpha}{mathematical italic small l}% -\UnicodeMathSymbol{"1D45A}{\mitm }{\mathalpha}{mathematical italic small m}% -\UnicodeMathSymbol{"1D45B}{\mitn }{\mathalpha}{mathematical italic small n}% -\UnicodeMathSymbol{"1D45C}{\mito }{\mathalpha}{mathematical italic small o}% -\UnicodeMathSymbol{"1D45D}{\mitp }{\mathalpha}{mathematical italic small p}% -\UnicodeMathSymbol{"1D45E}{\mitq }{\mathalpha}{mathematical italic small q}% -\UnicodeMathSymbol{"1D45F}{\mitr }{\mathalpha}{mathematical italic small r}% -\UnicodeMathSymbol{"1D460}{\mits }{\mathalpha}{mathematical italic small s}% -\UnicodeMathSymbol{"1D461}{\mitt }{\mathalpha}{mathematical italic small t}% -\UnicodeMathSymbol{"1D462}{\mitu }{\mathalpha}{mathematical italic small u}% -\UnicodeMathSymbol{"1D463}{\mitv }{\mathalpha}{mathematical italic small v}% -\UnicodeMathSymbol{"1D464}{\mitw }{\mathalpha}{mathematical italic small w}% -\UnicodeMathSymbol{"1D465}{\mitx }{\mathalpha}{mathematical italic small x}% -\UnicodeMathSymbol{"1D466}{\mity }{\mathalpha}{mathematical italic small y}% -\UnicodeMathSymbol{"1D467}{\mitz }{\mathalpha}{mathematical italic small z}% -\UnicodeMathSymbol{"1D468}{\mbfitA }{\mathalpha}{mathematical bold italic capital a}% -\UnicodeMathSymbol{"1D469}{\mbfitB }{\mathalpha}{mathematical bold italic capital b}% -\UnicodeMathSymbol{"1D46A}{\mbfitC }{\mathalpha}{mathematical bold italic capital c}% -\UnicodeMathSymbol{"1D46B}{\mbfitD }{\mathalpha}{mathematical bold italic capital d}% -\UnicodeMathSymbol{"1D46C}{\mbfitE }{\mathalpha}{mathematical bold italic capital e}% -\UnicodeMathSymbol{"1D46D}{\mbfitF }{\mathalpha}{mathematical bold italic capital f}% -\UnicodeMathSymbol{"1D46E}{\mbfitG }{\mathalpha}{mathematical bold italic capital g}% -\UnicodeMathSymbol{"1D46F}{\mbfitH }{\mathalpha}{mathematical bold italic capital h}% -\UnicodeMathSymbol{"1D470}{\mbfitI }{\mathalpha}{mathematical bold italic capital i}% -\UnicodeMathSymbol{"1D471}{\mbfitJ }{\mathalpha}{mathematical bold italic capital j}% -\UnicodeMathSymbol{"1D472}{\mbfitK }{\mathalpha}{mathematical bold italic capital k}% -\UnicodeMathSymbol{"1D473}{\mbfitL }{\mathalpha}{mathematical bold italic capital l}% -\UnicodeMathSymbol{"1D474}{\mbfitM }{\mathalpha}{mathematical bold italic capital m}% -\UnicodeMathSymbol{"1D475}{\mbfitN }{\mathalpha}{mathematical bold italic capital n}% -\UnicodeMathSymbol{"1D476}{\mbfitO }{\mathalpha}{mathematical bold italic capital o}% -\UnicodeMathSymbol{"1D477}{\mbfitP }{\mathalpha}{mathematical bold italic capital p}% -\UnicodeMathSymbol{"1D478}{\mbfitQ }{\mathalpha}{mathematical bold italic capital q}% -\UnicodeMathSymbol{"1D479}{\mbfitR }{\mathalpha}{mathematical bold italic capital r}% -\UnicodeMathSymbol{"1D47A}{\mbfitS }{\mathalpha}{mathematical bold italic capital s}% -\UnicodeMathSymbol{"1D47B}{\mbfitT }{\mathalpha}{mathematical bold italic capital t}% -\UnicodeMathSymbol{"1D47C}{\mbfitU }{\mathalpha}{mathematical bold italic capital u}% -\UnicodeMathSymbol{"1D47D}{\mbfitV }{\mathalpha}{mathematical bold italic capital v}% -\UnicodeMathSymbol{"1D47E}{\mbfitW }{\mathalpha}{mathematical bold italic capital w}% -\UnicodeMathSymbol{"1D47F}{\mbfitX }{\mathalpha}{mathematical bold italic capital x}% -\UnicodeMathSymbol{"1D480}{\mbfitY }{\mathalpha}{mathematical bold italic capital y}% -\UnicodeMathSymbol{"1D481}{\mbfitZ }{\mathalpha}{mathematical bold italic capital z}% -\UnicodeMathSymbol{"1D482}{\mbfita }{\mathalpha}{mathematical bold italic small a}% -\UnicodeMathSymbol{"1D483}{\mbfitb }{\mathalpha}{mathematical bold italic small b}% -\UnicodeMathSymbol{"1D484}{\mbfitc }{\mathalpha}{mathematical bold italic small c}% -\UnicodeMathSymbol{"1D485}{\mbfitd }{\mathalpha}{mathematical bold italic small d}% -\UnicodeMathSymbol{"1D486}{\mbfite }{\mathalpha}{mathematical bold italic small e}% -\UnicodeMathSymbol{"1D487}{\mbfitf }{\mathalpha}{mathematical bold italic small f}% -\UnicodeMathSymbol{"1D488}{\mbfitg }{\mathalpha}{mathematical bold italic small g}% -\UnicodeMathSymbol{"1D489}{\mbfith }{\mathalpha}{mathematical bold italic small h}% -\UnicodeMathSymbol{"1D48A}{\mbfiti }{\mathalpha}{mathematical bold italic small i}% -\UnicodeMathSymbol{"1D48B}{\mbfitj }{\mathalpha}{mathematical bold italic small j}% -\UnicodeMathSymbol{"1D48C}{\mbfitk }{\mathalpha}{mathematical bold italic small k}% -\UnicodeMathSymbol{"1D48D}{\mbfitl }{\mathalpha}{mathematical bold italic small l}% -\UnicodeMathSymbol{"1D48E}{\mbfitm }{\mathalpha}{mathematical bold italic small m}% -\UnicodeMathSymbol{"1D48F}{\mbfitn }{\mathalpha}{mathematical bold italic small n}% -\UnicodeMathSymbol{"1D490}{\mbfito }{\mathalpha}{mathematical bold italic small o}% -\UnicodeMathSymbol{"1D491}{\mbfitp }{\mathalpha}{mathematical bold italic small p}% -\UnicodeMathSymbol{"1D492}{\mbfitq }{\mathalpha}{mathematical bold italic small q}% -\UnicodeMathSymbol{"1D493}{\mbfitr }{\mathalpha}{mathematical bold italic small r}% -\UnicodeMathSymbol{"1D494}{\mbfits }{\mathalpha}{mathematical bold italic small s}% -\UnicodeMathSymbol{"1D495}{\mbfitt }{\mathalpha}{mathematical bold italic small t}% -\UnicodeMathSymbol{"1D496}{\mbfitu }{\mathalpha}{mathematical bold italic small u}% -\UnicodeMathSymbol{"1D497}{\mbfitv }{\mathalpha}{mathematical bold italic small v}% -\UnicodeMathSymbol{"1D498}{\mbfitw }{\mathalpha}{mathematical bold italic small w}% -\UnicodeMathSymbol{"1D499}{\mbfitx }{\mathalpha}{mathematical bold italic small x}% -\UnicodeMathSymbol{"1D49A}{\mbfity }{\mathalpha}{mathematical bold italic small y}% -\UnicodeMathSymbol{"1D49B}{\mbfitz }{\mathalpha}{mathematical bold italic small z}% -\UnicodeMathSymbol{"1D49C}{\mscrA }{\mathalpha}{mathematical script capital a}% -\UnicodeMathSymbol{"1D49E}{\mscrC }{\mathalpha}{mathematical script capital c}% -\UnicodeMathSymbol{"1D49F}{\mscrD }{\mathalpha}{mathematical script capital d}% -\UnicodeMathSymbol{"1D4A2}{\mscrG }{\mathalpha}{mathematical script capital g}% -\UnicodeMathSymbol{"1D4A5}{\mscrJ }{\mathalpha}{mathematical script capital j}% -\UnicodeMathSymbol{"1D4A6}{\mscrK }{\mathalpha}{mathematical script capital k}% -\UnicodeMathSymbol{"1D4A9}{\mscrN }{\mathalpha}{mathematical script capital n}% -\UnicodeMathSymbol{"1D4AA}{\mscrO }{\mathalpha}{mathematical script capital o}% -\UnicodeMathSymbol{"1D4AB}{\mscrP }{\mathalpha}{mathematical script capital p}% -\UnicodeMathSymbol{"1D4AC}{\mscrQ }{\mathalpha}{mathematical script capital q}% -\UnicodeMathSymbol{"1D4AE}{\mscrS }{\mathalpha}{mathematical script capital s}% -\UnicodeMathSymbol{"1D4AF}{\mscrT }{\mathalpha}{mathematical script capital t}% -\UnicodeMathSymbol{"1D4B0}{\mscrU }{\mathalpha}{mathematical script capital u}% -\UnicodeMathSymbol{"1D4B1}{\mscrV }{\mathalpha}{mathematical script capital v}% -\UnicodeMathSymbol{"1D4B2}{\mscrW }{\mathalpha}{mathematical script capital w}% -\UnicodeMathSymbol{"1D4B3}{\mscrX }{\mathalpha}{mathematical script capital x}% -\UnicodeMathSymbol{"1D4B4}{\mscrY }{\mathalpha}{mathematical script capital y}% -\UnicodeMathSymbol{"1D4B5}{\mscrZ }{\mathalpha}{mathematical script capital z}% -\UnicodeMathSymbol{"1D4B6}{\mscra }{\mathalpha}{mathematical script small a}% -\UnicodeMathSymbol{"1D4B7}{\mscrb }{\mathalpha}{mathematical script small b}% -\UnicodeMathSymbol{"1D4B8}{\mscrc }{\mathalpha}{mathematical script small c}% -\UnicodeMathSymbol{"1D4B9}{\mscrd }{\mathalpha}{mathematical script small d}% -\UnicodeMathSymbol{"1D4BB}{\mscrf }{\mathalpha}{mathematical script small f}% -\UnicodeMathSymbol{"1D4BD}{\mscrh }{\mathalpha}{mathematical script small h}% -\UnicodeMathSymbol{"1D4BE}{\mscri }{\mathalpha}{mathematical script small i}% -\UnicodeMathSymbol{"1D4BF}{\mscrj }{\mathalpha}{mathematical script small j}% -\UnicodeMathSymbol{"1D4C0}{\mscrk }{\mathalpha}{mathematical script small k}% -\UnicodeMathSymbol{"1D4C1}{\mscrl }{\mathalpha}{mathematical script small l}% -\UnicodeMathSymbol{"1D4C2}{\mscrm }{\mathalpha}{mathematical script small m}% -\UnicodeMathSymbol{"1D4C3}{\mscrn }{\mathalpha}{mathematical script small n}% -\UnicodeMathSymbol{"1D4C5}{\mscrp }{\mathalpha}{mathematical script small p}% -\UnicodeMathSymbol{"1D4C6}{\mscrq }{\mathalpha}{mathematical script small q}% -\UnicodeMathSymbol{"1D4C7}{\mscrr }{\mathalpha}{mathematical script small r}% -\UnicodeMathSymbol{"1D4C8}{\mscrs }{\mathalpha}{mathematical script small s}% -\UnicodeMathSymbol{"1D4C9}{\mscrt }{\mathalpha}{mathematical script small t}% -\UnicodeMathSymbol{"1D4CA}{\mscru }{\mathalpha}{mathematical script small u}% -\UnicodeMathSymbol{"1D4CB}{\mscrv }{\mathalpha}{mathematical script small v}% -\UnicodeMathSymbol{"1D4CC}{\mscrw }{\mathalpha}{mathematical script small w}% -\UnicodeMathSymbol{"1D4CD}{\mscrx }{\mathalpha}{mathematical script small x}% -\UnicodeMathSymbol{"1D4CE}{\mscry }{\mathalpha}{mathematical script small y}% -\UnicodeMathSymbol{"1D4CF}{\mscrz }{\mathalpha}{mathematical script small z}% -\UnicodeMathSymbol{"1D4D0}{\mbfscrA }{\mathalpha}{mathematical bold script capital a}% -\UnicodeMathSymbol{"1D4D1}{\mbfscrB }{\mathalpha}{mathematical bold script capital b}% -\UnicodeMathSymbol{"1D4D2}{\mbfscrC }{\mathalpha}{mathematical bold script capital c}% -\UnicodeMathSymbol{"1D4D3}{\mbfscrD }{\mathalpha}{mathematical bold script capital d}% -\UnicodeMathSymbol{"1D4D4}{\mbfscrE }{\mathalpha}{mathematical bold script capital e}% -\UnicodeMathSymbol{"1D4D5}{\mbfscrF }{\mathalpha}{mathematical bold script capital f}% -\UnicodeMathSymbol{"1D4D6}{\mbfscrG }{\mathalpha}{mathematical bold script capital g}% -\UnicodeMathSymbol{"1D4D7}{\mbfscrH }{\mathalpha}{mathematical bold script capital h}% -\UnicodeMathSymbol{"1D4D8}{\mbfscrI }{\mathalpha}{mathematical bold script capital i}% -\UnicodeMathSymbol{"1D4D9}{\mbfscrJ }{\mathalpha}{mathematical bold script capital j}% -\UnicodeMathSymbol{"1D4DA}{\mbfscrK }{\mathalpha}{mathematical bold script capital k}% -\UnicodeMathSymbol{"1D4DB}{\mbfscrL }{\mathalpha}{mathematical bold script capital l}% -\UnicodeMathSymbol{"1D4DC}{\mbfscrM }{\mathalpha}{mathematical bold script capital m}% -\UnicodeMathSymbol{"1D4DD}{\mbfscrN }{\mathalpha}{mathematical bold script capital n}% -\UnicodeMathSymbol{"1D4DE}{\mbfscrO }{\mathalpha}{mathematical bold script capital o}% -\UnicodeMathSymbol{"1D4DF}{\mbfscrP }{\mathalpha}{mathematical bold script capital p}% -\UnicodeMathSymbol{"1D4E0}{\mbfscrQ }{\mathalpha}{mathematical bold script capital q}% -\UnicodeMathSymbol{"1D4E1}{\mbfscrR }{\mathalpha}{mathematical bold script capital r}% -\UnicodeMathSymbol{"1D4E2}{\mbfscrS }{\mathalpha}{mathematical bold script capital s}% -\UnicodeMathSymbol{"1D4E3}{\mbfscrT }{\mathalpha}{mathematical bold script capital t}% -\UnicodeMathSymbol{"1D4E4}{\mbfscrU }{\mathalpha}{mathematical bold script capital u}% -\UnicodeMathSymbol{"1D4E5}{\mbfscrV }{\mathalpha}{mathematical bold script capital v}% -\UnicodeMathSymbol{"1D4E6}{\mbfscrW }{\mathalpha}{mathematical bold script capital w}% -\UnicodeMathSymbol{"1D4E7}{\mbfscrX }{\mathalpha}{mathematical bold script capital x}% -\UnicodeMathSymbol{"1D4E8}{\mbfscrY }{\mathalpha}{mathematical bold script capital y}% -\UnicodeMathSymbol{"1D4E9}{\mbfscrZ }{\mathalpha}{mathematical bold script capital z}% -\UnicodeMathSymbol{"1D4EA}{\mbfscra }{\mathalpha}{mathematical bold script small a}% -\UnicodeMathSymbol{"1D4EB}{\mbfscrb }{\mathalpha}{mathematical bold script small b}% -\UnicodeMathSymbol{"1D4EC}{\mbfscrc }{\mathalpha}{mathematical bold script small c}% -\UnicodeMathSymbol{"1D4ED}{\mbfscrd }{\mathalpha}{mathematical bold script small d}% -\UnicodeMathSymbol{"1D4EE}{\mbfscre }{\mathalpha}{mathematical bold script small e}% -\UnicodeMathSymbol{"1D4EF}{\mbfscrf }{\mathalpha}{mathematical bold script small f}% -\UnicodeMathSymbol{"1D4F0}{\mbfscrg }{\mathalpha}{mathematical bold script small g}% -\UnicodeMathSymbol{"1D4F1}{\mbfscrh }{\mathalpha}{mathematical bold script small h}% -\UnicodeMathSymbol{"1D4F2}{\mbfscri }{\mathalpha}{mathematical bold script small i}% -\UnicodeMathSymbol{"1D4F3}{\mbfscrj }{\mathalpha}{mathematical bold script small j}% -\UnicodeMathSymbol{"1D4F4}{\mbfscrk }{\mathalpha}{mathematical bold script small k}% -\UnicodeMathSymbol{"1D4F5}{\mbfscrl }{\mathalpha}{mathematical bold script small l}% -\UnicodeMathSymbol{"1D4F6}{\mbfscrm }{\mathalpha}{mathematical bold script small m}% -\UnicodeMathSymbol{"1D4F7}{\mbfscrn }{\mathalpha}{mathematical bold script small n}% -\UnicodeMathSymbol{"1D4F8}{\mbfscro }{\mathalpha}{mathematical bold script small o}% -\UnicodeMathSymbol{"1D4F9}{\mbfscrp }{\mathalpha}{mathematical bold script small p}% -\UnicodeMathSymbol{"1D4FA}{\mbfscrq }{\mathalpha}{mathematical bold script small q}% -\UnicodeMathSymbol{"1D4FB}{\mbfscrr }{\mathalpha}{mathematical bold script small r}% -\UnicodeMathSymbol{"1D4FC}{\mbfscrs }{\mathalpha}{mathematical bold script small s}% -\UnicodeMathSymbol{"1D4FD}{\mbfscrt }{\mathalpha}{mathematical bold script small t}% -\UnicodeMathSymbol{"1D4FE}{\mbfscru }{\mathalpha}{mathematical bold script small u}% -\UnicodeMathSymbol{"1D4FF}{\mbfscrv }{\mathalpha}{mathematical bold script small v}% -\UnicodeMathSymbol{"1D500}{\mbfscrw }{\mathalpha}{mathematical bold script small w}% -\UnicodeMathSymbol{"1D501}{\mbfscrx }{\mathalpha}{mathematical bold script small x}% -\UnicodeMathSymbol{"1D502}{\mbfscry }{\mathalpha}{mathematical bold script small y}% -\UnicodeMathSymbol{"1D503}{\mbfscrz }{\mathalpha}{mathematical bold script small z}% -\UnicodeMathSymbol{"1D504}{\mfrakA }{\mathalpha}{mathematical fraktur capital a}% -\UnicodeMathSymbol{"1D505}{\mfrakB }{\mathalpha}{mathematical fraktur capital b}% -\UnicodeMathSymbol{"1D507}{\mfrakD }{\mathalpha}{mathematical fraktur capital d}% -\UnicodeMathSymbol{"1D508}{\mfrakE }{\mathalpha}{mathematical fraktur capital e}% -\UnicodeMathSymbol{"1D509}{\mfrakF }{\mathalpha}{mathematical fraktur capital f}% -\UnicodeMathSymbol{"1D50A}{\mfrakG }{\mathalpha}{mathematical fraktur capital g}% -\UnicodeMathSymbol{"1D50D}{\mfrakJ }{\mathalpha}{mathematical fraktur capital j}% -\UnicodeMathSymbol{"1D50E}{\mfrakK }{\mathalpha}{mathematical fraktur capital k}% -\UnicodeMathSymbol{"1D50F}{\mfrakL }{\mathalpha}{mathematical fraktur capital l}% -\UnicodeMathSymbol{"1D510}{\mfrakM }{\mathalpha}{mathematical fraktur capital m}% -\UnicodeMathSymbol{"1D511}{\mfrakN }{\mathalpha}{mathematical fraktur capital n}% -\UnicodeMathSymbol{"1D512}{\mfrakO }{\mathalpha}{mathematical fraktur capital o}% -\UnicodeMathSymbol{"1D513}{\mfrakP }{\mathalpha}{mathematical fraktur capital p}% -\UnicodeMathSymbol{"1D514}{\mfrakQ }{\mathalpha}{mathematical fraktur capital q}% -\UnicodeMathSymbol{"1D516}{\mfrakS }{\mathalpha}{mathematical fraktur capital s}% -\UnicodeMathSymbol{"1D517}{\mfrakT }{\mathalpha}{mathematical fraktur capital t}% -\UnicodeMathSymbol{"1D518}{\mfrakU }{\mathalpha}{mathematical fraktur capital u}% -\UnicodeMathSymbol{"1D519}{\mfrakV }{\mathalpha}{mathematical fraktur capital v}% -\UnicodeMathSymbol{"1D51A}{\mfrakW }{\mathalpha}{mathematical fraktur capital w}% -\UnicodeMathSymbol{"1D51B}{\mfrakX }{\mathalpha}{mathematical fraktur capital x}% -\UnicodeMathSymbol{"1D51C}{\mfrakY }{\mathalpha}{mathematical fraktur capital y}% -\UnicodeMathSymbol{"1D51E}{\mfraka }{\mathalpha}{mathematical fraktur small a}% -\UnicodeMathSymbol{"1D51F}{\mfrakb }{\mathalpha}{mathematical fraktur small b}% -\UnicodeMathSymbol{"1D520}{\mfrakc }{\mathalpha}{mathematical fraktur small c}% -\UnicodeMathSymbol{"1D521}{\mfrakd }{\mathalpha}{mathematical fraktur small d}% -\UnicodeMathSymbol{"1D522}{\mfrake }{\mathalpha}{mathematical fraktur small e}% -\UnicodeMathSymbol{"1D523}{\mfrakf }{\mathalpha}{mathematical fraktur small f}% -\UnicodeMathSymbol{"1D524}{\mfrakg }{\mathalpha}{mathematical fraktur small g}% -\UnicodeMathSymbol{"1D525}{\mfrakh }{\mathalpha}{mathematical fraktur small h}% -\UnicodeMathSymbol{"1D526}{\mfraki }{\mathalpha}{mathematical fraktur small i}% -\UnicodeMathSymbol{"1D527}{\mfrakj }{\mathalpha}{mathematical fraktur small j}% -\UnicodeMathSymbol{"1D528}{\mfrakk }{\mathalpha}{mathematical fraktur small k}% -\UnicodeMathSymbol{"1D529}{\mfrakl }{\mathalpha}{mathematical fraktur small l}% -\UnicodeMathSymbol{"1D52A}{\mfrakm }{\mathalpha}{mathematical fraktur small m}% -\UnicodeMathSymbol{"1D52B}{\mfrakn }{\mathalpha}{mathematical fraktur small n}% -\UnicodeMathSymbol{"1D52C}{\mfrako }{\mathalpha}{mathematical fraktur small o}% -\UnicodeMathSymbol{"1D52D}{\mfrakp }{\mathalpha}{mathematical fraktur small p}% -\UnicodeMathSymbol{"1D52E}{\mfrakq }{\mathalpha}{mathematical fraktur small q}% -\UnicodeMathSymbol{"1D52F}{\mfrakr }{\mathalpha}{mathematical fraktur small r}% -\UnicodeMathSymbol{"1D530}{\mfraks }{\mathalpha}{mathematical fraktur small s}% -\UnicodeMathSymbol{"1D531}{\mfrakt }{\mathalpha}{mathematical fraktur small t}% -\UnicodeMathSymbol{"1D532}{\mfraku }{\mathalpha}{mathematical fraktur small u}% -\UnicodeMathSymbol{"1D533}{\mfrakv }{\mathalpha}{mathematical fraktur small v}% -\UnicodeMathSymbol{"1D534}{\mfrakw }{\mathalpha}{mathematical fraktur small w}% -\UnicodeMathSymbol{"1D535}{\mfrakx }{\mathalpha}{mathematical fraktur small x}% -\UnicodeMathSymbol{"1D536}{\mfraky }{\mathalpha}{mathematical fraktur small y}% -\UnicodeMathSymbol{"1D537}{\mfrakz }{\mathalpha}{mathematical fraktur small z}% -\UnicodeMathSymbol{"1D538}{\BbbA }{\mathalpha}{mathematical double-struck capital a}% -\UnicodeMathSymbol{"1D539}{\BbbB }{\mathalpha}{mathematical double-struck capital b}% -\UnicodeMathSymbol{"1D53B}{\BbbD }{\mathalpha}{mathematical double-struck capital d}% -\UnicodeMathSymbol{"1D53C}{\BbbE }{\mathalpha}{mathematical double-struck capital e}% -\UnicodeMathSymbol{"1D53D}{\BbbF }{\mathalpha}{mathematical double-struck capital f}% -\UnicodeMathSymbol{"1D53E}{\BbbG }{\mathalpha}{mathematical double-struck capital g}% -\UnicodeMathSymbol{"1D540}{\BbbI }{\mathalpha}{mathematical double-struck capital i}% -\UnicodeMathSymbol{"1D541}{\BbbJ }{\mathalpha}{mathematical double-struck capital j}% -\UnicodeMathSymbol{"1D542}{\BbbK }{\mathalpha}{mathematical double-struck capital k}% -\UnicodeMathSymbol{"1D543}{\BbbL }{\mathalpha}{mathematical double-struck capital l}% -\UnicodeMathSymbol{"1D544}{\BbbM }{\mathalpha}{mathematical double-struck capital m}% -\UnicodeMathSymbol{"1D546}{\BbbO }{\mathalpha}{mathematical double-struck capital o}% -\UnicodeMathSymbol{"1D54A}{\BbbS }{\mathalpha}{mathematical double-struck capital s}% -\UnicodeMathSymbol{"1D54B}{\BbbT }{\mathalpha}{mathematical double-struck capital t}% -\UnicodeMathSymbol{"1D54C}{\BbbU }{\mathalpha}{mathematical double-struck capital u}% -\UnicodeMathSymbol{"1D54D}{\BbbV }{\mathalpha}{mathematical double-struck capital v}% -\UnicodeMathSymbol{"1D54E}{\BbbW }{\mathalpha}{mathematical double-struck capital w}% -\UnicodeMathSymbol{"1D54F}{\BbbX }{\mathalpha}{mathematical double-struck capital x}% -\UnicodeMathSymbol{"1D550}{\BbbY }{\mathalpha}{mathematical double-struck capital y}% -\UnicodeMathSymbol{"1D552}{\Bbba }{\mathalpha}{mathematical double-struck small a}% -\UnicodeMathSymbol{"1D553}{\Bbbb }{\mathalpha}{mathematical double-struck small b}% -\UnicodeMathSymbol{"1D554}{\Bbbc }{\mathalpha}{mathematical double-struck small c}% -\UnicodeMathSymbol{"1D555}{\Bbbd }{\mathalpha}{mathematical double-struck small d}% -\UnicodeMathSymbol{"1D556}{\Bbbe }{\mathalpha}{mathematical double-struck small e}% -\UnicodeMathSymbol{"1D557}{\Bbbf }{\mathalpha}{mathematical double-struck small f}% -\UnicodeMathSymbol{"1D558}{\Bbbg }{\mathalpha}{mathematical double-struck small g}% -\UnicodeMathSymbol{"1D559}{\Bbbh }{\mathalpha}{mathematical double-struck small h}% -\UnicodeMathSymbol{"1D55A}{\Bbbi }{\mathalpha}{mathematical double-struck small i}% -\UnicodeMathSymbol{"1D55B}{\Bbbj }{\mathalpha}{mathematical double-struck small j}% -\UnicodeMathSymbol{"1D55C}{\Bbbk }{\mathalpha}{mathematical double-struck small k}% -\UnicodeMathSymbol{"1D55D}{\Bbbl }{\mathalpha}{mathematical double-struck small l}% -\UnicodeMathSymbol{"1D55E}{\Bbbm }{\mathalpha}{mathematical double-struck small m}% -\UnicodeMathSymbol{"1D55F}{\Bbbn }{\mathalpha}{mathematical double-struck small n}% -\UnicodeMathSymbol{"1D560}{\Bbbo }{\mathalpha}{mathematical double-struck small o}% -\UnicodeMathSymbol{"1D561}{\Bbbp }{\mathalpha}{mathematical double-struck small p}% -\UnicodeMathSymbol{"1D562}{\Bbbq }{\mathalpha}{mathematical double-struck small q}% -\UnicodeMathSymbol{"1D563}{\Bbbr }{\mathalpha}{mathematical double-struck small r}% -\UnicodeMathSymbol{"1D564}{\Bbbs }{\mathalpha}{mathematical double-struck small s}% -\UnicodeMathSymbol{"1D565}{\Bbbt }{\mathalpha}{mathematical double-struck small t}% -\UnicodeMathSymbol{"1D566}{\Bbbu }{\mathalpha}{mathematical double-struck small u}% -\UnicodeMathSymbol{"1D567}{\Bbbv }{\mathalpha}{mathematical double-struck small v}% -\UnicodeMathSymbol{"1D568}{\Bbbw }{\mathalpha}{mathematical double-struck small w}% -\UnicodeMathSymbol{"1D569}{\Bbbx }{\mathalpha}{mathematical double-struck small x}% -\UnicodeMathSymbol{"1D56A}{\Bbby }{\mathalpha}{mathematical double-struck small y}% -\UnicodeMathSymbol{"1D56B}{\Bbbz }{\mathalpha}{mathematical double-struck small z}% -\UnicodeMathSymbol{"1D56C}{\mbffrakA }{\mathalpha}{mathematical bold fraktur capital a}% -\UnicodeMathSymbol{"1D56D}{\mbffrakB }{\mathalpha}{mathematical bold fraktur capital b}% -\UnicodeMathSymbol{"1D56E}{\mbffrakC }{\mathalpha}{mathematical bold fraktur capital c}% -\UnicodeMathSymbol{"1D56F}{\mbffrakD }{\mathalpha}{mathematical bold fraktur capital d}% -\UnicodeMathSymbol{"1D570}{\mbffrakE }{\mathalpha}{mathematical bold fraktur capital e}% -\UnicodeMathSymbol{"1D571}{\mbffrakF }{\mathalpha}{mathematical bold fraktur capital f}% -\UnicodeMathSymbol{"1D572}{\mbffrakG }{\mathalpha}{mathematical bold fraktur capital g}% -\UnicodeMathSymbol{"1D573}{\mbffrakH }{\mathalpha}{mathematical bold fraktur capital h}% -\UnicodeMathSymbol{"1D574}{\mbffrakI }{\mathalpha}{mathematical bold fraktur capital i}% -\UnicodeMathSymbol{"1D575}{\mbffrakJ }{\mathalpha}{mathematical bold fraktur capital j}% -\UnicodeMathSymbol{"1D576}{\mbffrakK }{\mathalpha}{mathematical bold fraktur capital k}% -\UnicodeMathSymbol{"1D577}{\mbffrakL }{\mathalpha}{mathematical bold fraktur capital l}% -\UnicodeMathSymbol{"1D578}{\mbffrakM }{\mathalpha}{mathematical bold fraktur capital m}% -\UnicodeMathSymbol{"1D579}{\mbffrakN }{\mathalpha}{mathematical bold fraktur capital n}% -\UnicodeMathSymbol{"1D57A}{\mbffrakO }{\mathalpha}{mathematical bold fraktur capital o}% -\UnicodeMathSymbol{"1D57B}{\mbffrakP }{\mathalpha}{mathematical bold fraktur capital p}% -\UnicodeMathSymbol{"1D57C}{\mbffrakQ }{\mathalpha}{mathematical bold fraktur capital q}% -\UnicodeMathSymbol{"1D57D}{\mbffrakR }{\mathalpha}{mathematical bold fraktur capital r}% -\UnicodeMathSymbol{"1D57E}{\mbffrakS }{\mathalpha}{mathematical bold fraktur capital s}% -\UnicodeMathSymbol{"1D57F}{\mbffrakT }{\mathalpha}{mathematical bold fraktur capital t}% -\UnicodeMathSymbol{"1D580}{\mbffrakU }{\mathalpha}{mathematical bold fraktur capital u}% -\UnicodeMathSymbol{"1D581}{\mbffrakV }{\mathalpha}{mathematical bold fraktur capital v}% -\UnicodeMathSymbol{"1D582}{\mbffrakW }{\mathalpha}{mathematical bold fraktur capital w}% -\UnicodeMathSymbol{"1D583}{\mbffrakX }{\mathalpha}{mathematical bold fraktur capital x}% -\UnicodeMathSymbol{"1D584}{\mbffrakY }{\mathalpha}{mathematical bold fraktur capital y}% -\UnicodeMathSymbol{"1D585}{\mbffrakZ }{\mathalpha}{mathematical bold fraktur capital z}% -\UnicodeMathSymbol{"1D586}{\mbffraka }{\mathalpha}{mathematical bold fraktur small a}% -\UnicodeMathSymbol{"1D587}{\mbffrakb }{\mathalpha}{mathematical bold fraktur small b}% -\UnicodeMathSymbol{"1D588}{\mbffrakc }{\mathalpha}{mathematical bold fraktur small c}% -\UnicodeMathSymbol{"1D589}{\mbffrakd }{\mathalpha}{mathematical bold fraktur small d}% -\UnicodeMathSymbol{"1D58A}{\mbffrake }{\mathalpha}{mathematical bold fraktur small e}% -\UnicodeMathSymbol{"1D58B}{\mbffrakf }{\mathalpha}{mathematical bold fraktur small f}% -\UnicodeMathSymbol{"1D58C}{\mbffrakg }{\mathalpha}{mathematical bold fraktur small g}% -\UnicodeMathSymbol{"1D58D}{\mbffrakh }{\mathalpha}{mathematical bold fraktur small h}% -\UnicodeMathSymbol{"1D58E}{\mbffraki }{\mathalpha}{mathematical bold fraktur small i}% -\UnicodeMathSymbol{"1D58F}{\mbffrakj }{\mathalpha}{mathematical bold fraktur small j}% -\UnicodeMathSymbol{"1D590}{\mbffrakk }{\mathalpha}{mathematical bold fraktur small k}% -\UnicodeMathSymbol{"1D591}{\mbffrakl }{\mathalpha}{mathematical bold fraktur small l}% -\UnicodeMathSymbol{"1D592}{\mbffrakm }{\mathalpha}{mathematical bold fraktur small m}% -\UnicodeMathSymbol{"1D593}{\mbffrakn }{\mathalpha}{mathematical bold fraktur small n}% -\UnicodeMathSymbol{"1D594}{\mbffrako }{\mathalpha}{mathematical bold fraktur small o}% -\UnicodeMathSymbol{"1D595}{\mbffrakp }{\mathalpha}{mathematical bold fraktur small p}% -\UnicodeMathSymbol{"1D596}{\mbffrakq }{\mathalpha}{mathematical bold fraktur small q}% -\UnicodeMathSymbol{"1D597}{\mbffrakr }{\mathalpha}{mathematical bold fraktur small r}% -\UnicodeMathSymbol{"1D598}{\mbffraks }{\mathalpha}{mathematical bold fraktur small s}% -\UnicodeMathSymbol{"1D599}{\mbffrakt }{\mathalpha}{mathematical bold fraktur small t}% -\UnicodeMathSymbol{"1D59A}{\mbffraku }{\mathalpha}{mathematical bold fraktur small u}% -\UnicodeMathSymbol{"1D59B}{\mbffrakv }{\mathalpha}{mathematical bold fraktur small v}% -\UnicodeMathSymbol{"1D59C}{\mbffrakw }{\mathalpha}{mathematical bold fraktur small w}% -\UnicodeMathSymbol{"1D59D}{\mbffrakx }{\mathalpha}{mathematical bold fraktur small x}% -\UnicodeMathSymbol{"1D59E}{\mbffraky }{\mathalpha}{mathematical bold fraktur small y}% -\UnicodeMathSymbol{"1D59F}{\mbffrakz }{\mathalpha}{mathematical bold fraktur small z}% -\UnicodeMathSymbol{"1D5A0}{\msansA }{\mathalpha}{mathematical sans-serif capital a}% -\UnicodeMathSymbol{"1D5A1}{\msansB }{\mathalpha}{mathematical sans-serif capital b}% -\UnicodeMathSymbol{"1D5A2}{\msansC }{\mathalpha}{mathematical sans-serif capital c}% -\UnicodeMathSymbol{"1D5A3}{\msansD }{\mathalpha}{mathematical sans-serif capital d}% -\UnicodeMathSymbol{"1D5A4}{\msansE }{\mathalpha}{mathematical sans-serif capital e}% -\UnicodeMathSymbol{"1D5A5}{\msansF }{\mathalpha}{mathematical sans-serif capital f}% -\UnicodeMathSymbol{"1D5A6}{\msansG }{\mathalpha}{mathematical sans-serif capital g}% -\UnicodeMathSymbol{"1D5A7}{\msansH }{\mathalpha}{mathematical sans-serif capital h}% -\UnicodeMathSymbol{"1D5A8}{\msansI }{\mathalpha}{mathematical sans-serif capital i}% -\UnicodeMathSymbol{"1D5A9}{\msansJ }{\mathalpha}{mathematical sans-serif capital j}% -\UnicodeMathSymbol{"1D5AA}{\msansK }{\mathalpha}{mathematical sans-serif capital k}% -\UnicodeMathSymbol{"1D5AB}{\msansL }{\mathalpha}{mathematical sans-serif capital l}% -\UnicodeMathSymbol{"1D5AC}{\msansM }{\mathalpha}{mathematical sans-serif capital m}% -\UnicodeMathSymbol{"1D5AD}{\msansN }{\mathalpha}{mathematical sans-serif capital n}% -\UnicodeMathSymbol{"1D5AE}{\msansO }{\mathalpha}{mathematical sans-serif capital o}% -\UnicodeMathSymbol{"1D5AF}{\msansP }{\mathalpha}{mathematical sans-serif capital p}% -\UnicodeMathSymbol{"1D5B0}{\msansQ }{\mathalpha}{mathematical sans-serif capital q}% -\UnicodeMathSymbol{"1D5B1}{\msansR }{\mathalpha}{mathematical sans-serif capital r}% -\UnicodeMathSymbol{"1D5B2}{\msansS }{\mathalpha}{mathematical sans-serif capital s}% -\UnicodeMathSymbol{"1D5B3}{\msansT }{\mathalpha}{mathematical sans-serif capital t}% -\UnicodeMathSymbol{"1D5B4}{\msansU }{\mathalpha}{mathematical sans-serif capital u}% -\UnicodeMathSymbol{"1D5B5}{\msansV }{\mathalpha}{mathematical sans-serif capital v}% -\UnicodeMathSymbol{"1D5B6}{\msansW }{\mathalpha}{mathematical sans-serif capital w}% -\UnicodeMathSymbol{"1D5B7}{\msansX }{\mathalpha}{mathematical sans-serif capital x}% -\UnicodeMathSymbol{"1D5B8}{\msansY }{\mathalpha}{mathematical sans-serif capital y}% -\UnicodeMathSymbol{"1D5B9}{\msansZ }{\mathalpha}{mathematical sans-serif capital z}% -\UnicodeMathSymbol{"1D5BA}{\msansa }{\mathalpha}{mathematical sans-serif small a}% -\UnicodeMathSymbol{"1D5BB}{\msansb }{\mathalpha}{mathematical sans-serif small b}% -\UnicodeMathSymbol{"1D5BC}{\msansc }{\mathalpha}{mathematical sans-serif small c}% -\UnicodeMathSymbol{"1D5BD}{\msansd }{\mathalpha}{mathematical sans-serif small d}% -\UnicodeMathSymbol{"1D5BE}{\msanse }{\mathalpha}{mathematical sans-serif small e}% -\UnicodeMathSymbol{"1D5BF}{\msansf }{\mathalpha}{mathematical sans-serif small f}% -\UnicodeMathSymbol{"1D5C0}{\msansg }{\mathalpha}{mathematical sans-serif small g}% -\UnicodeMathSymbol{"1D5C1}{\msansh }{\mathalpha}{mathematical sans-serif small h}% -\UnicodeMathSymbol{"1D5C2}{\msansi }{\mathalpha}{mathematical sans-serif small i}% -\UnicodeMathSymbol{"1D5C3}{\msansj }{\mathalpha}{mathematical sans-serif small j}% -\UnicodeMathSymbol{"1D5C4}{\msansk }{\mathalpha}{mathematical sans-serif small k}% -\UnicodeMathSymbol{"1D5C5}{\msansl }{\mathalpha}{mathematical sans-serif small l}% -\UnicodeMathSymbol{"1D5C6}{\msansm }{\mathalpha}{mathematical sans-serif small m}% -\UnicodeMathSymbol{"1D5C7}{\msansn }{\mathalpha}{mathematical sans-serif small n}% -\UnicodeMathSymbol{"1D5C8}{\msanso }{\mathalpha}{mathematical sans-serif small o}% -\UnicodeMathSymbol{"1D5C9}{\msansp }{\mathalpha}{mathematical sans-serif small p}% -\UnicodeMathSymbol{"1D5CA}{\msansq }{\mathalpha}{mathematical sans-serif small q}% -\UnicodeMathSymbol{"1D5CB}{\msansr }{\mathalpha}{mathematical sans-serif small r}% -\UnicodeMathSymbol{"1D5CC}{\msanss }{\mathalpha}{mathematical sans-serif small s}% -\UnicodeMathSymbol{"1D5CD}{\msanst }{\mathalpha}{mathematical sans-serif small t}% -\UnicodeMathSymbol{"1D5CE}{\msansu }{\mathalpha}{mathematical sans-serif small u}% -\UnicodeMathSymbol{"1D5CF}{\msansv }{\mathalpha}{mathematical sans-serif small v}% -\UnicodeMathSymbol{"1D5D0}{\msansw }{\mathalpha}{mathematical sans-serif small w}% -\UnicodeMathSymbol{"1D5D1}{\msansx }{\mathalpha}{mathematical sans-serif small x}% -\UnicodeMathSymbol{"1D5D2}{\msansy }{\mathalpha}{mathematical sans-serif small y}% -\UnicodeMathSymbol{"1D5D3}{\msansz }{\mathalpha}{mathematical sans-serif small z}% -\UnicodeMathSymbol{"1D5D4}{\mbfsansA }{\mathalpha}{mathematical sans-serif bold capital a}% -\UnicodeMathSymbol{"1D5D5}{\mbfsansB }{\mathalpha}{mathematical sans-serif bold capital b}% -\UnicodeMathSymbol{"1D5D6}{\mbfsansC }{\mathalpha}{mathematical sans-serif bold capital c}% -\UnicodeMathSymbol{"1D5D7}{\mbfsansD }{\mathalpha}{mathematical sans-serif bold capital d}% -\UnicodeMathSymbol{"1D5D8}{\mbfsansE }{\mathalpha}{mathematical sans-serif bold capital e}% -\UnicodeMathSymbol{"1D5D9}{\mbfsansF }{\mathalpha}{mathematical sans-serif bold capital f}% -\UnicodeMathSymbol{"1D5DA}{\mbfsansG }{\mathalpha}{mathematical sans-serif bold capital g}% -\UnicodeMathSymbol{"1D5DB}{\mbfsansH }{\mathalpha}{mathematical sans-serif bold capital h}% -\UnicodeMathSymbol{"1D5DC}{\mbfsansI }{\mathalpha}{mathematical sans-serif bold capital i}% -\UnicodeMathSymbol{"1D5DD}{\mbfsansJ }{\mathalpha}{mathematical sans-serif bold capital j}% -\UnicodeMathSymbol{"1D5DE}{\mbfsansK }{\mathalpha}{mathematical sans-serif bold capital k}% -\UnicodeMathSymbol{"1D5DF}{\mbfsansL }{\mathalpha}{mathematical sans-serif bold capital l}% -\UnicodeMathSymbol{"1D5E0}{\mbfsansM }{\mathalpha}{mathematical sans-serif bold capital m}% -\UnicodeMathSymbol{"1D5E1}{\mbfsansN }{\mathalpha}{mathematical sans-serif bold capital n}% -\UnicodeMathSymbol{"1D5E2}{\mbfsansO }{\mathalpha}{mathematical sans-serif bold capital o}% -\UnicodeMathSymbol{"1D5E3}{\mbfsansP }{\mathalpha}{mathematical sans-serif bold capital p}% -\UnicodeMathSymbol{"1D5E4}{\mbfsansQ }{\mathalpha}{mathematical sans-serif bold capital q}% -\UnicodeMathSymbol{"1D5E5}{\mbfsansR }{\mathalpha}{mathematical sans-serif bold capital r}% -\UnicodeMathSymbol{"1D5E6}{\mbfsansS }{\mathalpha}{mathematical sans-serif bold capital s}% -\UnicodeMathSymbol{"1D5E7}{\mbfsansT }{\mathalpha}{mathematical sans-serif bold capital t}% -\UnicodeMathSymbol{"1D5E8}{\mbfsansU }{\mathalpha}{mathematical sans-serif bold capital u}% -\UnicodeMathSymbol{"1D5E9}{\mbfsansV }{\mathalpha}{mathematical sans-serif bold capital v}% -\UnicodeMathSymbol{"1D5EA}{\mbfsansW }{\mathalpha}{mathematical sans-serif bold capital w}% -\UnicodeMathSymbol{"1D5EB}{\mbfsansX }{\mathalpha}{mathematical sans-serif bold capital x}% -\UnicodeMathSymbol{"1D5EC}{\mbfsansY }{\mathalpha}{mathematical sans-serif bold capital y}% -\UnicodeMathSymbol{"1D5ED}{\mbfsansZ }{\mathalpha}{mathematical sans-serif bold capital z}% -\UnicodeMathSymbol{"1D5EE}{\mbfsansa }{\mathalpha}{mathematical sans-serif bold small a}% -\UnicodeMathSymbol{"1D5EF}{\mbfsansb }{\mathalpha}{mathematical sans-serif bold small b}% -\UnicodeMathSymbol{"1D5F0}{\mbfsansc }{\mathalpha}{mathematical sans-serif bold small c}% -\UnicodeMathSymbol{"1D5F1}{\mbfsansd }{\mathalpha}{mathematical sans-serif bold small d}% -\UnicodeMathSymbol{"1D5F2}{\mbfsanse }{\mathalpha}{mathematical sans-serif bold small e}% -\UnicodeMathSymbol{"1D5F3}{\mbfsansf }{\mathalpha}{mathematical sans-serif bold small f}% -\UnicodeMathSymbol{"1D5F4}{\mbfsansg }{\mathalpha}{mathematical sans-serif bold small g}% -\UnicodeMathSymbol{"1D5F5}{\mbfsansh }{\mathalpha}{mathematical sans-serif bold small h}% -\UnicodeMathSymbol{"1D5F6}{\mbfsansi }{\mathalpha}{mathematical sans-serif bold small i}% -\UnicodeMathSymbol{"1D5F7}{\mbfsansj }{\mathalpha}{mathematical sans-serif bold small j}% -\UnicodeMathSymbol{"1D5F8}{\mbfsansk }{\mathalpha}{mathematical sans-serif bold small k}% -\UnicodeMathSymbol{"1D5F9}{\mbfsansl }{\mathalpha}{mathematical sans-serif bold small l}% -\UnicodeMathSymbol{"1D5FA}{\mbfsansm }{\mathalpha}{mathematical sans-serif bold small m}% -\UnicodeMathSymbol{"1D5FB}{\mbfsansn }{\mathalpha}{mathematical sans-serif bold small n}% -\UnicodeMathSymbol{"1D5FC}{\mbfsanso }{\mathalpha}{mathematical sans-serif bold small o}% -\UnicodeMathSymbol{"1D5FD}{\mbfsansp }{\mathalpha}{mathematical sans-serif bold small p}% -\UnicodeMathSymbol{"1D5FE}{\mbfsansq }{\mathalpha}{mathematical sans-serif bold small q}% -\UnicodeMathSymbol{"1D5FF}{\mbfsansr }{\mathalpha}{mathematical sans-serif bold small r}% -\UnicodeMathSymbol{"1D600}{\mbfsanss }{\mathalpha}{mathematical sans-serif bold small s}% -\UnicodeMathSymbol{"1D601}{\mbfsanst }{\mathalpha}{mathematical sans-serif bold small t}% -\UnicodeMathSymbol{"1D602}{\mbfsansu }{\mathalpha}{mathematical sans-serif bold small u}% -\UnicodeMathSymbol{"1D603}{\mbfsansv }{\mathalpha}{mathematical sans-serif bold small v}% -\UnicodeMathSymbol{"1D604}{\mbfsansw }{\mathalpha}{mathematical sans-serif bold small w}% -\UnicodeMathSymbol{"1D605}{\mbfsansx }{\mathalpha}{mathematical sans-serif bold small x}% -\UnicodeMathSymbol{"1D606}{\mbfsansy }{\mathalpha}{mathematical sans-serif bold small y}% -\UnicodeMathSymbol{"1D607}{\mbfsansz }{\mathalpha}{mathematical sans-serif bold small z}% -\UnicodeMathSymbol{"1D608}{\mitsansA }{\mathalpha}{mathematical sans-serif italic capital a}% -\UnicodeMathSymbol{"1D609}{\mitsansB }{\mathalpha}{mathematical sans-serif italic capital b}% -\UnicodeMathSymbol{"1D60A}{\mitsansC }{\mathalpha}{mathematical sans-serif italic capital c}% -\UnicodeMathSymbol{"1D60B}{\mitsansD }{\mathalpha}{mathematical sans-serif italic capital d}% -\UnicodeMathSymbol{"1D60C}{\mitsansE }{\mathalpha}{mathematical sans-serif italic capital e}% -\UnicodeMathSymbol{"1D60D}{\mitsansF }{\mathalpha}{mathematical sans-serif italic capital f}% -\UnicodeMathSymbol{"1D60E}{\mitsansG }{\mathalpha}{mathematical sans-serif italic capital g}% -\UnicodeMathSymbol{"1D60F}{\mitsansH }{\mathalpha}{mathematical sans-serif italic capital h}% -\UnicodeMathSymbol{"1D610}{\mitsansI }{\mathalpha}{mathematical sans-serif italic capital i}% -\UnicodeMathSymbol{"1D611}{\mitsansJ }{\mathalpha}{mathematical sans-serif italic capital j}% -\UnicodeMathSymbol{"1D612}{\mitsansK }{\mathalpha}{mathematical sans-serif italic capital k}% -\UnicodeMathSymbol{"1D613}{\mitsansL }{\mathalpha}{mathematical sans-serif italic capital l}% -\UnicodeMathSymbol{"1D614}{\mitsansM }{\mathalpha}{mathematical sans-serif italic capital m}% -\UnicodeMathSymbol{"1D615}{\mitsansN }{\mathalpha}{mathematical sans-serif italic capital n}% -\UnicodeMathSymbol{"1D616}{\mitsansO }{\mathalpha}{mathematical sans-serif italic capital o}% -\UnicodeMathSymbol{"1D617}{\mitsansP }{\mathalpha}{mathematical sans-serif italic capital p}% -\UnicodeMathSymbol{"1D618}{\mitsansQ }{\mathalpha}{mathematical sans-serif italic capital q}% -\UnicodeMathSymbol{"1D619}{\mitsansR }{\mathalpha}{mathematical sans-serif italic capital r}% -\UnicodeMathSymbol{"1D61A}{\mitsansS }{\mathalpha}{mathematical sans-serif italic capital s}% -\UnicodeMathSymbol{"1D61B}{\mitsansT }{\mathalpha}{mathematical sans-serif italic capital t}% -\UnicodeMathSymbol{"1D61C}{\mitsansU }{\mathalpha}{mathematical sans-serif italic capital u}% -\UnicodeMathSymbol{"1D61D}{\mitsansV }{\mathalpha}{mathematical sans-serif italic capital v}% -\UnicodeMathSymbol{"1D61E}{\mitsansW }{\mathalpha}{mathematical sans-serif italic capital w}% -\UnicodeMathSymbol{"1D61F}{\mitsansX }{\mathalpha}{mathematical sans-serif italic capital x}% -\UnicodeMathSymbol{"1D620}{\mitsansY }{\mathalpha}{mathematical sans-serif italic capital y}% -\UnicodeMathSymbol{"1D621}{\mitsansZ }{\mathalpha}{mathematical sans-serif italic capital z}% -\UnicodeMathSymbol{"1D622}{\mitsansa }{\mathalpha}{mathematical sans-serif italic small a}% -\UnicodeMathSymbol{"1D623}{\mitsansb }{\mathalpha}{mathematical sans-serif italic small b}% -\UnicodeMathSymbol{"1D624}{\mitsansc }{\mathalpha}{mathematical sans-serif italic small c}% -\UnicodeMathSymbol{"1D625}{\mitsansd }{\mathalpha}{mathematical sans-serif italic small d}% -\UnicodeMathSymbol{"1D626}{\mitsanse }{\mathalpha}{mathematical sans-serif italic small e}% -\UnicodeMathSymbol{"1D627}{\mitsansf }{\mathalpha}{mathematical sans-serif italic small f}% -\UnicodeMathSymbol{"1D628}{\mitsansg }{\mathalpha}{mathematical sans-serif italic small g}% -\UnicodeMathSymbol{"1D629}{\mitsansh }{\mathalpha}{mathematical sans-serif italic small h}% -\UnicodeMathSymbol{"1D62A}{\mitsansi }{\mathalpha}{mathematical sans-serif italic small i}% -\UnicodeMathSymbol{"1D62B}{\mitsansj }{\mathalpha}{mathematical sans-serif italic small j}% -\UnicodeMathSymbol{"1D62C}{\mitsansk }{\mathalpha}{mathematical sans-serif italic small k}% -\UnicodeMathSymbol{"1D62D}{\mitsansl }{\mathalpha}{mathematical sans-serif italic small l}% -\UnicodeMathSymbol{"1D62E}{\mitsansm }{\mathalpha}{mathematical sans-serif italic small m}% -\UnicodeMathSymbol{"1D62F}{\mitsansn }{\mathalpha}{mathematical sans-serif italic small n}% -\UnicodeMathSymbol{"1D630}{\mitsanso }{\mathalpha}{mathematical sans-serif italic small o}% -\UnicodeMathSymbol{"1D631}{\mitsansp }{\mathalpha}{mathematical sans-serif italic small p}% -\UnicodeMathSymbol{"1D632}{\mitsansq }{\mathalpha}{mathematical sans-serif italic small q}% -\UnicodeMathSymbol{"1D633}{\mitsansr }{\mathalpha}{mathematical sans-serif italic small r}% -\UnicodeMathSymbol{"1D634}{\mitsanss }{\mathalpha}{mathematical sans-serif italic small s}% -\UnicodeMathSymbol{"1D635}{\mitsanst }{\mathalpha}{mathematical sans-serif italic small t}% -\UnicodeMathSymbol{"1D636}{\mitsansu }{\mathalpha}{mathematical sans-serif italic small u}% -\UnicodeMathSymbol{"1D637}{\mitsansv }{\mathalpha}{mathematical sans-serif italic small v}% -\UnicodeMathSymbol{"1D638}{\mitsansw }{\mathalpha}{mathematical sans-serif italic small w}% -\UnicodeMathSymbol{"1D639}{\mitsansx }{\mathalpha}{mathematical sans-serif italic small x}% -\UnicodeMathSymbol{"1D63A}{\mitsansy }{\mathalpha}{mathematical sans-serif italic small y}% -\UnicodeMathSymbol{"1D63B}{\mitsansz }{\mathalpha}{mathematical sans-serif italic small z}% -\UnicodeMathSymbol{"1D63C}{\mbfitsansA }{\mathalpha}{mathematical sans-serif bold italic capital a}% -\UnicodeMathSymbol{"1D63D}{\mbfitsansB }{\mathalpha}{mathematical sans-serif bold italic capital b}% -\UnicodeMathSymbol{"1D63E}{\mbfitsansC }{\mathalpha}{mathematical sans-serif bold italic capital c}% -\UnicodeMathSymbol{"1D63F}{\mbfitsansD }{\mathalpha}{mathematical sans-serif bold italic capital d}% -\UnicodeMathSymbol{"1D640}{\mbfitsansE }{\mathalpha}{mathematical sans-serif bold italic capital e}% -\UnicodeMathSymbol{"1D641}{\mbfitsansF }{\mathalpha}{mathematical sans-serif bold italic capital f}% -\UnicodeMathSymbol{"1D642}{\mbfitsansG }{\mathalpha}{mathematical sans-serif bold italic capital g}% -\UnicodeMathSymbol{"1D643}{\mbfitsansH }{\mathalpha}{mathematical sans-serif bold italic capital h}% -\UnicodeMathSymbol{"1D644}{\mbfitsansI }{\mathalpha}{mathematical sans-serif bold italic capital i}% -\UnicodeMathSymbol{"1D645}{\mbfitsansJ }{\mathalpha}{mathematical sans-serif bold italic capital j}% -\UnicodeMathSymbol{"1D646}{\mbfitsansK }{\mathalpha}{mathematical sans-serif bold italic capital k}% -\UnicodeMathSymbol{"1D647}{\mbfitsansL }{\mathalpha}{mathematical sans-serif bold italic capital l}% -\UnicodeMathSymbol{"1D648}{\mbfitsansM }{\mathalpha}{mathematical sans-serif bold italic capital m}% -\UnicodeMathSymbol{"1D649}{\mbfitsansN }{\mathalpha}{mathematical sans-serif bold italic capital n}% -\UnicodeMathSymbol{"1D64A}{\mbfitsansO }{\mathalpha}{mathematical sans-serif bold italic capital o}% -\UnicodeMathSymbol{"1D64B}{\mbfitsansP }{\mathalpha}{mathematical sans-serif bold italic capital p}% -\UnicodeMathSymbol{"1D64C}{\mbfitsansQ }{\mathalpha}{mathematical sans-serif bold italic capital q}% -\UnicodeMathSymbol{"1D64D}{\mbfitsansR }{\mathalpha}{mathematical sans-serif bold italic capital r}% -\UnicodeMathSymbol{"1D64E}{\mbfitsansS }{\mathalpha}{mathematical sans-serif bold italic capital s}% -\UnicodeMathSymbol{"1D64F}{\mbfitsansT }{\mathalpha}{mathematical sans-serif bold italic capital t}% -\UnicodeMathSymbol{"1D650}{\mbfitsansU }{\mathalpha}{mathematical sans-serif bold italic capital u}% -\UnicodeMathSymbol{"1D651}{\mbfitsansV }{\mathalpha}{mathematical sans-serif bold italic capital v}% -\UnicodeMathSymbol{"1D652}{\mbfitsansW }{\mathalpha}{mathematical sans-serif bold italic capital w}% -\UnicodeMathSymbol{"1D653}{\mbfitsansX }{\mathalpha}{mathematical sans-serif bold italic capital x}% -\UnicodeMathSymbol{"1D654}{\mbfitsansY }{\mathalpha}{mathematical sans-serif bold italic capital y}% -\UnicodeMathSymbol{"1D655}{\mbfitsansZ }{\mathalpha}{mathematical sans-serif bold italic capital z}% -\UnicodeMathSymbol{"1D656}{\mbfitsansa }{\mathalpha}{mathematical sans-serif bold italic small a}% -\UnicodeMathSymbol{"1D657}{\mbfitsansb }{\mathalpha}{mathematical sans-serif bold italic small b}% -\UnicodeMathSymbol{"1D658}{\mbfitsansc }{\mathalpha}{mathematical sans-serif bold italic small c}% -\UnicodeMathSymbol{"1D659}{\mbfitsansd }{\mathalpha}{mathematical sans-serif bold italic small d}% -\UnicodeMathSymbol{"1D65A}{\mbfitsanse }{\mathalpha}{mathematical sans-serif bold italic small e}% -\UnicodeMathSymbol{"1D65B}{\mbfitsansf }{\mathalpha}{mathematical sans-serif bold italic small f}% -\UnicodeMathSymbol{"1D65C}{\mbfitsansg }{\mathalpha}{mathematical sans-serif bold italic small g}% -\UnicodeMathSymbol{"1D65D}{\mbfitsansh }{\mathalpha}{mathematical sans-serif bold italic small h}% -\UnicodeMathSymbol{"1D65E}{\mbfitsansi }{\mathalpha}{mathematical sans-serif bold italic small i}% -\UnicodeMathSymbol{"1D65F}{\mbfitsansj }{\mathalpha}{mathematical sans-serif bold italic small j}% -\UnicodeMathSymbol{"1D660}{\mbfitsansk }{\mathalpha}{mathematical sans-serif bold italic small k}% -\UnicodeMathSymbol{"1D661}{\mbfitsansl }{\mathalpha}{mathematical sans-serif bold italic small l}% -\UnicodeMathSymbol{"1D662}{\mbfitsansm }{\mathalpha}{mathematical sans-serif bold italic small m}% -\UnicodeMathSymbol{"1D663}{\mbfitsansn }{\mathalpha}{mathematical sans-serif bold italic small n}% -\UnicodeMathSymbol{"1D664}{\mbfitsanso }{\mathalpha}{mathematical sans-serif bold italic small o}% -\UnicodeMathSymbol{"1D665}{\mbfitsansp }{\mathalpha}{mathematical sans-serif bold italic small p}% -\UnicodeMathSymbol{"1D666}{\mbfitsansq }{\mathalpha}{mathematical sans-serif bold italic small q}% -\UnicodeMathSymbol{"1D667}{\mbfitsansr }{\mathalpha}{mathematical sans-serif bold italic small r}% -\UnicodeMathSymbol{"1D668}{\mbfitsanss }{\mathalpha}{mathematical sans-serif bold italic small s}% -\UnicodeMathSymbol{"1D669}{\mbfitsanst }{\mathalpha}{mathematical sans-serif bold italic small t}% -\UnicodeMathSymbol{"1D66A}{\mbfitsansu }{\mathalpha}{mathematical sans-serif bold italic small u}% -\UnicodeMathSymbol{"1D66B}{\mbfitsansv }{\mathalpha}{mathematical sans-serif bold italic small v}% -\UnicodeMathSymbol{"1D66C}{\mbfitsansw }{\mathalpha}{mathematical sans-serif bold italic small w}% -\UnicodeMathSymbol{"1D66D}{\mbfitsansx }{\mathalpha}{mathematical sans-serif bold italic small x}% -\UnicodeMathSymbol{"1D66E}{\mbfitsansy }{\mathalpha}{mathematical sans-serif bold italic small y}% -\UnicodeMathSymbol{"1D66F}{\mbfitsansz }{\mathalpha}{mathematical sans-serif bold italic small z}% -\UnicodeMathSymbol{"1D670}{\mttA }{\mathalpha}{mathematical monospace capital a}% -\UnicodeMathSymbol{"1D671}{\mttB }{\mathalpha}{mathematical monospace capital b}% -\UnicodeMathSymbol{"1D672}{\mttC }{\mathalpha}{mathematical monospace capital c}% -\UnicodeMathSymbol{"1D673}{\mttD }{\mathalpha}{mathematical monospace capital d}% -\UnicodeMathSymbol{"1D674}{\mttE }{\mathalpha}{mathematical monospace capital e}% -\UnicodeMathSymbol{"1D675}{\mttF }{\mathalpha}{mathematical monospace capital f}% -\UnicodeMathSymbol{"1D676}{\mttG }{\mathalpha}{mathematical monospace capital g}% -\UnicodeMathSymbol{"1D677}{\mttH }{\mathalpha}{mathematical monospace capital h}% -\UnicodeMathSymbol{"1D678}{\mttI }{\mathalpha}{mathematical monospace capital i}% -\UnicodeMathSymbol{"1D679}{\mttJ }{\mathalpha}{mathematical monospace capital j}% -\UnicodeMathSymbol{"1D67A}{\mttK }{\mathalpha}{mathematical monospace capital k}% -\UnicodeMathSymbol{"1D67B}{\mttL }{\mathalpha}{mathematical monospace capital l}% -\UnicodeMathSymbol{"1D67C}{\mttM }{\mathalpha}{mathematical monospace capital m}% -\UnicodeMathSymbol{"1D67D}{\mttN }{\mathalpha}{mathematical monospace capital n}% -\UnicodeMathSymbol{"1D67E}{\mttO }{\mathalpha}{mathematical monospace capital o}% -\UnicodeMathSymbol{"1D67F}{\mttP }{\mathalpha}{mathematical monospace capital p}% -\UnicodeMathSymbol{"1D680}{\mttQ }{\mathalpha}{mathematical monospace capital q}% -\UnicodeMathSymbol{"1D681}{\mttR }{\mathalpha}{mathematical monospace capital r}% -\UnicodeMathSymbol{"1D682}{\mttS }{\mathalpha}{mathematical monospace capital s}% -\UnicodeMathSymbol{"1D683}{\mttT }{\mathalpha}{mathematical monospace capital t}% -\UnicodeMathSymbol{"1D684}{\mttU }{\mathalpha}{mathematical monospace capital u}% -\UnicodeMathSymbol{"1D685}{\mttV }{\mathalpha}{mathematical monospace capital v}% -\UnicodeMathSymbol{"1D686}{\mttW }{\mathalpha}{mathematical monospace capital w}% -\UnicodeMathSymbol{"1D687}{\mttX }{\mathalpha}{mathematical monospace capital x}% -\UnicodeMathSymbol{"1D688}{\mttY }{\mathalpha}{mathematical monospace capital y}% -\UnicodeMathSymbol{"1D689}{\mttZ }{\mathalpha}{mathematical monospace capital z}% -\UnicodeMathSymbol{"1D68A}{\mtta }{\mathalpha}{mathematical monospace small a}% -\UnicodeMathSymbol{"1D68B}{\mttb }{\mathalpha}{mathematical monospace small b}% -\UnicodeMathSymbol{"1D68C}{\mttc }{\mathalpha}{mathematical monospace small c}% -\UnicodeMathSymbol{"1D68D}{\mttd }{\mathalpha}{mathematical monospace small d}% -\UnicodeMathSymbol{"1D68E}{\mtte }{\mathalpha}{mathematical monospace small e}% -\UnicodeMathSymbol{"1D68F}{\mttf }{\mathalpha}{mathematical monospace small f}% -\UnicodeMathSymbol{"1D690}{\mttg }{\mathalpha}{mathematical monospace small g}% -\UnicodeMathSymbol{"1D691}{\mtth }{\mathalpha}{mathematical monospace small h}% -\UnicodeMathSymbol{"1D692}{\mtti }{\mathalpha}{mathematical monospace small i}% -\UnicodeMathSymbol{"1D693}{\mttj }{\mathalpha}{mathematical monospace small j}% -\UnicodeMathSymbol{"1D694}{\mttk }{\mathalpha}{mathematical monospace small k}% -\UnicodeMathSymbol{"1D695}{\mttl }{\mathalpha}{mathematical monospace small l}% -\UnicodeMathSymbol{"1D696}{\mttm }{\mathalpha}{mathematical monospace small m}% -\UnicodeMathSymbol{"1D697}{\mttn }{\mathalpha}{mathematical monospace small n}% -\UnicodeMathSymbol{"1D698}{\mtto }{\mathalpha}{mathematical monospace small o}% -\UnicodeMathSymbol{"1D699}{\mttp }{\mathalpha}{mathematical monospace small p}% -\UnicodeMathSymbol{"1D69A}{\mttq }{\mathalpha}{mathematical monospace small q}% -\UnicodeMathSymbol{"1D69B}{\mttr }{\mathalpha}{mathematical monospace small r}% -\UnicodeMathSymbol{"1D69C}{\mtts }{\mathalpha}{mathematical monospace small s}% -\UnicodeMathSymbol{"1D69D}{\mttt }{\mathalpha}{mathematical monospace small t}% -\UnicodeMathSymbol{"1D69E}{\mttu }{\mathalpha}{mathematical monospace small u}% -\UnicodeMathSymbol{"1D69F}{\mttv }{\mathalpha}{mathematical monospace small v}% -\UnicodeMathSymbol{"1D6A0}{\mttw }{\mathalpha}{mathematical monospace small w}% -\UnicodeMathSymbol{"1D6A1}{\mttx }{\mathalpha}{mathematical monospace small x}% -\UnicodeMathSymbol{"1D6A2}{\mtty }{\mathalpha}{mathematical monospace small y}% -\UnicodeMathSymbol{"1D6A3}{\mttz }{\mathalpha}{mathematical monospace small z}% -\UnicodeMathSymbol{"1D6A4}{\imath }{\mathalpha}{mathematical italic small dotless i}% -\UnicodeMathSymbol{"1D6A5}{\jmath }{\mathalpha}{mathematical italic small dotless j}% -\UnicodeMathSymbol{"1D6A8}{\mbfAlpha }{\mathalpha}{mathematical bold capital alpha}% -\UnicodeMathSymbol{"1D6A9}{\mbfBeta }{\mathalpha}{mathematical bold capital beta}% -\UnicodeMathSymbol{"1D6AA}{\mbfGamma }{\mathalpha}{mathematical bold capital gamma}% -\UnicodeMathSymbol{"1D6AB}{\mbfDelta }{\mathalpha}{mathematical bold capital delta}% -\UnicodeMathSymbol{"1D6AC}{\mbfEpsilon }{\mathalpha}{mathematical bold capital epsilon}% -\UnicodeMathSymbol{"1D6AD}{\mbfZeta }{\mathalpha}{mathematical bold capital zeta}% -\UnicodeMathSymbol{"1D6AE}{\mbfEta }{\mathalpha}{mathematical bold capital eta}% -\UnicodeMathSymbol{"1D6AF}{\mbfTheta }{\mathalpha}{mathematical bold capital theta}% -\UnicodeMathSymbol{"1D6B0}{\mbfIota }{\mathalpha}{mathematical bold capital iota}% -\UnicodeMathSymbol{"1D6B1}{\mbfKappa }{\mathalpha}{mathematical bold capital kappa}% -\UnicodeMathSymbol{"1D6B2}{\mbfLambda }{\mathalpha}{mathematical bold capital lambda}% -\UnicodeMathSymbol{"1D6B3}{\mbfMu }{\mathalpha}{mathematical bold capital mu}% -\UnicodeMathSymbol{"1D6B4}{\mbfNu }{\mathalpha}{mathematical bold capital nu}% -\UnicodeMathSymbol{"1D6B5}{\mbfXi }{\mathalpha}{mathematical bold capital xi}% -\UnicodeMathSymbol{"1D6B6}{\mbfOmicron }{\mathalpha}{mathematical bold capital omicron}% -\UnicodeMathSymbol{"1D6B7}{\mbfPi }{\mathalpha}{mathematical bold capital pi}% -\UnicodeMathSymbol{"1D6B8}{\mbfRho }{\mathalpha}{mathematical bold capital rho}% -\UnicodeMathSymbol{"1D6B9}{\mbfvarTheta }{\mathalpha}{mathematical bold capital theta symbol}% -\UnicodeMathSymbol{"1D6BA}{\mbfSigma }{\mathalpha}{mathematical bold capital sigma}% -\UnicodeMathSymbol{"1D6BB}{\mbfTau }{\mathalpha}{mathematical bold capital tau}% -\UnicodeMathSymbol{"1D6BC}{\mbfUpsilon }{\mathalpha}{mathematical bold capital upsilon}% -\UnicodeMathSymbol{"1D6BD}{\mbfPhi }{\mathalpha}{mathematical bold capital phi}% -\UnicodeMathSymbol{"1D6BE}{\mbfChi }{\mathalpha}{mathematical bold capital chi}% -\UnicodeMathSymbol{"1D6BF}{\mbfPsi }{\mathalpha}{mathematical bold capital psi}% -\UnicodeMathSymbol{"1D6C0}{\mbfOmega }{\mathalpha}{mathematical bold capital omega}% -\UnicodeMathSymbol{"1D6C1}{\mbfnabla }{\mathalpha}{mathematical bold nabla}% -\UnicodeMathSymbol{"1D6C2}{\mbfalpha }{\mathalpha}{mathematical bold small alpha}% -\UnicodeMathSymbol{"1D6C3}{\mbfbeta }{\mathalpha}{mathematical bold small beta}% -\UnicodeMathSymbol{"1D6C4}{\mbfgamma }{\mathalpha}{mathematical bold small gamma}% -\UnicodeMathSymbol{"1D6C5}{\mbfdelta }{\mathalpha}{mathematical bold small delta}% -\UnicodeMathSymbol{"1D6C6}{\mbfvarepsilon }{\mathalpha}{mathematical bold small varepsilon}% -\UnicodeMathSymbol{"1D6C7}{\mbfzeta }{\mathalpha}{mathematical bold small zeta}% -\UnicodeMathSymbol{"1D6C8}{\mbfeta }{\mathalpha}{mathematical bold small eta}% -\UnicodeMathSymbol{"1D6C9}{\mbftheta }{\mathalpha}{mathematical bold small theta}% -\UnicodeMathSymbol{"1D6CA}{\mbfiota }{\mathalpha}{mathematical bold small iota}% -\UnicodeMathSymbol{"1D6CB}{\mbfkappa }{\mathalpha}{mathematical bold small kappa}% -\UnicodeMathSymbol{"1D6CC}{\mbflambda }{\mathalpha}{mathematical bold small lambda}% -\UnicodeMathSymbol{"1D6CD}{\mbfmu }{\mathalpha}{mathematical bold small mu}% -\UnicodeMathSymbol{"1D6CE}{\mbfnu }{\mathalpha}{mathematical bold small nu}% -\UnicodeMathSymbol{"1D6CF}{\mbfxi }{\mathalpha}{mathematical bold small xi}% -\UnicodeMathSymbol{"1D6D0}{\mbfomicron }{\mathalpha}{mathematical bold small omicron}% -\UnicodeMathSymbol{"1D6D1}{\mbfpi }{\mathalpha}{mathematical bold small pi}% -\UnicodeMathSymbol{"1D6D2}{\mbfrho }{\mathalpha}{mathematical bold small rho}% -\UnicodeMathSymbol{"1D6D3}{\mbfvarsigma }{\mathalpha}{mathematical bold small final sigma}% -\UnicodeMathSymbol{"1D6D4}{\mbfsigma }{\mathalpha}{mathematical bold small sigma}% -\UnicodeMathSymbol{"1D6D5}{\mbftau }{\mathalpha}{mathematical bold small tau}% -\UnicodeMathSymbol{"1D6D6}{\mbfupsilon }{\mathalpha}{mathematical bold small upsilon}% -\UnicodeMathSymbol{"1D6D7}{\mbfvarphi }{\mathalpha}{mathematical bold small phi}% -\UnicodeMathSymbol{"1D6D8}{\mbfchi }{\mathalpha}{mathematical bold small chi}% -\UnicodeMathSymbol{"1D6D9}{\mbfpsi }{\mathalpha}{mathematical bold small psi}% -\UnicodeMathSymbol{"1D6DA}{\mbfomega }{\mathalpha}{mathematical bold small omega}% -\UnicodeMathSymbol{"1D6DB}{\mbfpartial }{\mathalpha}{mathematical bold partial differential}% -\UnicodeMathSymbol{"1D6DC}{\mbfepsilon }{\mathalpha}{mathematical bold varepsilon symbol}% -\UnicodeMathSymbol{"1D6DD}{\mbfvartheta }{\mathalpha}{mathematical bold theta symbol}% -\UnicodeMathSymbol{"1D6DE}{\mbfvarkappa }{\mathalpha}{mathematical bold kappa symbol}% -\UnicodeMathSymbol{"1D6DF}{\mbfphi }{\mathalpha}{mathematical bold phi symbol}% -\UnicodeMathSymbol{"1D6E0}{\mbfvarrho }{\mathalpha}{mathematical bold rho symbol}% -\UnicodeMathSymbol{"1D6E1}{\mbfvarpi }{\mathalpha}{mathematical bold pi symbol}% -\UnicodeMathSymbol{"1D6E2}{\mitAlpha }{\mathalpha}{mathematical italic capital alpha}% -\UnicodeMathSymbol{"1D6E3}{\mitBeta }{\mathalpha}{mathematical italic capital beta}% -\UnicodeMathSymbol{"1D6E4}{\mitGamma }{\mathalpha}{mathematical italic capital gamma}% -\UnicodeMathSymbol{"1D6E5}{\mitDelta }{\mathalpha}{mathematical italic capital delta}% -\UnicodeMathSymbol{"1D6E6}{\mitEpsilon }{\mathalpha}{mathematical italic capital epsilon}% -\UnicodeMathSymbol{"1D6E7}{\mitZeta }{\mathalpha}{mathematical italic capital zeta}% -\UnicodeMathSymbol{"1D6E8}{\mitEta }{\mathalpha}{mathematical italic capital eta}% -\UnicodeMathSymbol{"1D6E9}{\mitTheta }{\mathalpha}{mathematical italic capital theta}% -\UnicodeMathSymbol{"1D6EA}{\mitIota }{\mathalpha}{mathematical italic capital iota}% -\UnicodeMathSymbol{"1D6EB}{\mitKappa }{\mathalpha}{mathematical italic capital kappa}% -\UnicodeMathSymbol{"1D6EC}{\mitLambda }{\mathalpha}{mathematical italic capital lambda}% -\UnicodeMathSymbol{"1D6ED}{\mitMu }{\mathalpha}{mathematical italic capital mu}% -\UnicodeMathSymbol{"1D6EE}{\mitNu }{\mathalpha}{mathematical italic capital nu}% -\UnicodeMathSymbol{"1D6EF}{\mitXi }{\mathalpha}{mathematical italic capital xi}% -\UnicodeMathSymbol{"1D6F0}{\mitOmicron }{\mathalpha}{mathematical italic capital omicron}% -\UnicodeMathSymbol{"1D6F1}{\mitPi }{\mathalpha}{mathematical italic capital pi}% -\UnicodeMathSymbol{"1D6F2}{\mitRho }{\mathalpha}{mathematical italic capital rho}% -\UnicodeMathSymbol{"1D6F3}{\mitvarTheta }{\mathalpha}{mathematical italic capital theta symbol}% -\UnicodeMathSymbol{"1D6F4}{\mitSigma }{\mathalpha}{mathematical italic capital sigma}% -\UnicodeMathSymbol{"1D6F5}{\mitTau }{\mathalpha}{mathematical italic capital tau}% -\UnicodeMathSymbol{"1D6F6}{\mitUpsilon }{\mathalpha}{mathematical italic capital upsilon}% -\UnicodeMathSymbol{"1D6F7}{\mitPhi }{\mathalpha}{mathematical italic capital phi}% -\UnicodeMathSymbol{"1D6F8}{\mitChi }{\mathalpha}{mathematical italic capital chi}% -\UnicodeMathSymbol{"1D6F9}{\mitPsi }{\mathalpha}{mathematical italic capital psi}% -\UnicodeMathSymbol{"1D6FA}{\mitOmega }{\mathalpha}{mathematical italic capital omega}% -\UnicodeMathSymbol{"1D6FB}{\mitnabla }{\mathalpha}{mathematical italic nabla}% -\UnicodeMathSymbol{"1D6FC}{\mitalpha }{\mathalpha}{mathematical italic small alpha}% -\UnicodeMathSymbol{"1D6FD}{\mitbeta }{\mathalpha}{mathematical italic small beta}% -\UnicodeMathSymbol{"1D6FE}{\mitgamma }{\mathalpha}{mathematical italic small gamma}% -\UnicodeMathSymbol{"1D6FF}{\mitdelta }{\mathalpha}{mathematical italic small delta}% -\UnicodeMathSymbol{"1D700}{\mitvarepsilon }{\mathalpha}{mathematical italic small varepsilon}% -\UnicodeMathSymbol{"1D701}{\mitzeta }{\mathalpha}{mathematical italic small zeta}% -\UnicodeMathSymbol{"1D702}{\miteta }{\mathalpha}{mathematical italic small eta}% -\UnicodeMathSymbol{"1D703}{\mittheta }{\mathalpha}{mathematical italic small theta}% -\UnicodeMathSymbol{"1D704}{\mitiota }{\mathalpha}{mathematical italic small iota}% -\UnicodeMathSymbol{"1D705}{\mitkappa }{\mathalpha}{mathematical italic small kappa}% -\UnicodeMathSymbol{"1D706}{\mitlambda }{\mathalpha}{mathematical italic small lambda}% -\UnicodeMathSymbol{"1D707}{\mitmu }{\mathalpha}{mathematical italic small mu}% -\UnicodeMathSymbol{"1D708}{\mitnu }{\mathalpha}{mathematical italic small nu}% -\UnicodeMathSymbol{"1D709}{\mitxi }{\mathalpha}{mathematical italic small xi}% -\UnicodeMathSymbol{"1D70A}{\mitomicron }{\mathalpha}{mathematical italic small omicron}% -\UnicodeMathSymbol{"1D70B}{\mitpi }{\mathalpha}{mathematical italic small pi}% -\UnicodeMathSymbol{"1D70C}{\mitrho }{\mathalpha}{mathematical italic small rho}% -\UnicodeMathSymbol{"1D70D}{\mitvarsigma }{\mathalpha}{mathematical italic small final sigma}% -\UnicodeMathSymbol{"1D70E}{\mitsigma }{\mathalpha}{mathematical italic small sigma}% -\UnicodeMathSymbol{"1D70F}{\mittau }{\mathalpha}{mathematical italic small tau}% -\UnicodeMathSymbol{"1D710}{\mitupsilon }{\mathalpha}{mathematical italic small upsilon}% -\UnicodeMathSymbol{"1D711}{\mitvarphi }{\mathalpha}{mathematical italic small phi}% -\UnicodeMathSymbol{"1D712}{\mitchi }{\mathalpha}{mathematical italic small chi}% -\UnicodeMathSymbol{"1D713}{\mitpsi }{\mathalpha}{mathematical italic small psi}% -\UnicodeMathSymbol{"1D714}{\mitomega }{\mathalpha}{mathematical italic small omega}% -\UnicodeMathSymbol{"1D715}{\mitpartial }{\mathalpha}{mathematical italic partial differential}% -\UnicodeMathSymbol{"1D716}{\mitepsilon }{\mathalpha}{mathematical italic varepsilon symbol}% -\UnicodeMathSymbol{"1D717}{\mitvartheta }{\mathalpha}{mathematical italic theta symbol}% -\UnicodeMathSymbol{"1D718}{\mitvarkappa }{\mathalpha}{mathematical italic kappa symbol}% -\UnicodeMathSymbol{"1D719}{\mitphi }{\mathalpha}{mathematical italic phi symbol}% -\UnicodeMathSymbol{"1D71A}{\mitvarrho }{\mathalpha}{mathematical italic rho symbol}% -\UnicodeMathSymbol{"1D71B}{\mitvarpi }{\mathalpha}{mathematical italic pi symbol}% -\UnicodeMathSymbol{"1D71C}{\mbfitAlpha }{\mathalpha}{mathematical bold italic capital alpha}% -\UnicodeMathSymbol{"1D71D}{\mbfitBeta }{\mathalpha}{mathematical bold italic capital beta}% -\UnicodeMathSymbol{"1D71E}{\mbfitGamma }{\mathalpha}{mathematical bold italic capital gamma}% -\UnicodeMathSymbol{"1D71F}{\mbfitDelta }{\mathalpha}{mathematical bold italic capital delta}% -\UnicodeMathSymbol{"1D720}{\mbfitEpsilon }{\mathalpha}{mathematical bold italic capital epsilon}% -\UnicodeMathSymbol{"1D721}{\mbfitZeta }{\mathalpha}{mathematical bold italic capital zeta}% -\UnicodeMathSymbol{"1D722}{\mbfitEta }{\mathalpha}{mathematical bold italic capital eta}% -\UnicodeMathSymbol{"1D723}{\mbfitTheta }{\mathalpha}{mathematical bold italic capital theta}% -\UnicodeMathSymbol{"1D724}{\mbfitIota }{\mathalpha}{mathematical bold italic capital iota}% -\UnicodeMathSymbol{"1D725}{\mbfitKappa }{\mathalpha}{mathematical bold italic capital kappa}% -\UnicodeMathSymbol{"1D726}{\mbfitLambda }{\mathalpha}{mathematical bold italic capital lambda}% -\UnicodeMathSymbol{"1D727}{\mbfitMu }{\mathalpha}{mathematical bold italic capital mu}% -\UnicodeMathSymbol{"1D728}{\mbfitNu }{\mathalpha}{mathematical bold italic capital nu}% -\UnicodeMathSymbol{"1D729}{\mbfitXi }{\mathalpha}{mathematical bold italic capital xi}% -\UnicodeMathSymbol{"1D72A}{\mbfitOmicron }{\mathalpha}{mathematical bold italic capital omicron}% -\UnicodeMathSymbol{"1D72B}{\mbfitPi }{\mathalpha}{mathematical bold italic capital pi}% -\UnicodeMathSymbol{"1D72C}{\mbfitRho }{\mathalpha}{mathematical bold italic capital rho}% -\UnicodeMathSymbol{"1D72D}{\mbfitvarTheta }{\mathalpha}{mathematical bold italic capital theta symbol}% -\UnicodeMathSymbol{"1D72E}{\mbfitSigma }{\mathalpha}{mathematical bold italic capital sigma}% -\UnicodeMathSymbol{"1D72F}{\mbfitTau }{\mathalpha}{mathematical bold italic capital tau}% -\UnicodeMathSymbol{"1D730}{\mbfitUpsilon }{\mathalpha}{mathematical bold italic capital upsilon}% -\UnicodeMathSymbol{"1D731}{\mbfitPhi }{\mathalpha}{mathematical bold italic capital phi}% -\UnicodeMathSymbol{"1D732}{\mbfitChi }{\mathalpha}{mathematical bold italic capital chi}% -\UnicodeMathSymbol{"1D733}{\mbfitPsi }{\mathalpha}{mathematical bold italic capital psi}% -\UnicodeMathSymbol{"1D734}{\mbfitOmega }{\mathalpha}{mathematical bold italic capital omega}% -\UnicodeMathSymbol{"1D735}{\mbfitnabla }{\mathalpha}{mathematical bold italic nabla}% -\UnicodeMathSymbol{"1D736}{\mbfitalpha }{\mathalpha}{mathematical bold italic small alpha}% -\UnicodeMathSymbol{"1D737}{\mbfitbeta }{\mathalpha}{mathematical bold italic small beta}% -\UnicodeMathSymbol{"1D738}{\mbfitgamma }{\mathalpha}{mathematical bold italic small gamma}% -\UnicodeMathSymbol{"1D739}{\mbfitdelta }{\mathalpha}{mathematical bold italic small delta}% -\UnicodeMathSymbol{"1D73A}{\mbfitvarepsilon }{\mathalpha}{mathematical bold italic small varepsilon}% -\UnicodeMathSymbol{"1D73B}{\mbfitzeta }{\mathalpha}{mathematical bold italic small zeta}% -\UnicodeMathSymbol{"1D73C}{\mbfiteta }{\mathalpha}{mathematical bold italic small eta}% -\UnicodeMathSymbol{"1D73D}{\mbfittheta }{\mathalpha}{mathematical bold italic small theta}% -\UnicodeMathSymbol{"1D73E}{\mbfitiota }{\mathalpha}{mathematical bold italic small iota}% -\UnicodeMathSymbol{"1D73F}{\mbfitkappa }{\mathalpha}{mathematical bold italic small kappa}% -\UnicodeMathSymbol{"1D740}{\mbfitlambda }{\mathalpha}{mathematical bold italic small lambda}% -\UnicodeMathSymbol{"1D741}{\mbfitmu }{\mathalpha}{mathematical bold italic small mu}% -\UnicodeMathSymbol{"1D742}{\mbfitnu }{\mathalpha}{mathematical bold italic small nu}% -\UnicodeMathSymbol{"1D743}{\mbfitxi }{\mathalpha}{mathematical bold italic small xi}% -\UnicodeMathSymbol{"1D744}{\mbfitomicron }{\mathalpha}{mathematical bold italic small omicron}% -\UnicodeMathSymbol{"1D745}{\mbfitpi }{\mathalpha}{mathematical bold italic small pi}% -\UnicodeMathSymbol{"1D746}{\mbfitrho }{\mathalpha}{mathematical bold italic small rho}% -\UnicodeMathSymbol{"1D747}{\mbfitvarsigma }{\mathalpha}{mathematical bold italic small final sigma}% -\UnicodeMathSymbol{"1D748}{\mbfitsigma }{\mathalpha}{mathematical bold italic small sigma}% -\UnicodeMathSymbol{"1D749}{\mbfittau }{\mathalpha}{mathematical bold italic small tau}% -\UnicodeMathSymbol{"1D74A}{\mbfitupsilon }{\mathalpha}{mathematical bold italic small upsilon}% -\UnicodeMathSymbol{"1D74B}{\mbfitvarphi }{\mathalpha}{mathematical bold italic small phi}% -\UnicodeMathSymbol{"1D74C}{\mbfitchi }{\mathalpha}{mathematical bold italic small chi}% -\UnicodeMathSymbol{"1D74D}{\mbfitpsi }{\mathalpha}{mathematical bold italic small psi}% -\UnicodeMathSymbol{"1D74E}{\mbfitomega }{\mathalpha}{mathematical bold italic small omega}% -\UnicodeMathSymbol{"1D74F}{\mbfitpartial }{\mathalpha}{mathematical bold italic partial differential}% -\UnicodeMathSymbol{"1D750}{\mbfitepsilon }{\mathalpha}{mathematical bold italic varepsilon symbol}% -\UnicodeMathSymbol{"1D751}{\mbfitvartheta }{\mathalpha}{mathematical bold italic theta symbol}% -\UnicodeMathSymbol{"1D752}{\mbfitvarkappa }{\mathalpha}{mathematical bold italic kappa symbol}% -\UnicodeMathSymbol{"1D753}{\mbfitphi }{\mathalpha}{mathematical bold italic phi symbol}% -\UnicodeMathSymbol{"1D754}{\mbfitvarrho }{\mathalpha}{mathematical bold italic rho symbol}% -\UnicodeMathSymbol{"1D755}{\mbfitvarpi }{\mathalpha}{mathematical bold italic pi symbol}% -\UnicodeMathSymbol{"1D756}{\mbfsansAlpha }{\mathalpha}{mathematical sans-serif bold capital alpha}% -\UnicodeMathSymbol{"1D757}{\mbfsansBeta }{\mathalpha}{mathematical sans-serif bold capital beta}% -\UnicodeMathSymbol{"1D758}{\mbfsansGamma }{\mathalpha}{mathematical sans-serif bold capital gamma}% -\UnicodeMathSymbol{"1D759}{\mbfsansDelta }{\mathalpha}{mathematical sans-serif bold capital delta}% -\UnicodeMathSymbol{"1D75A}{\mbfsansEpsilon }{\mathalpha}{mathematical sans-serif bold capital epsilon}% -\UnicodeMathSymbol{"1D75B}{\mbfsansZeta }{\mathalpha}{mathematical sans-serif bold capital zeta}% -\UnicodeMathSymbol{"1D75C}{\mbfsansEta }{\mathalpha}{mathematical sans-serif bold capital eta}% -\UnicodeMathSymbol{"1D75D}{\mbfsansTheta }{\mathalpha}{mathematical sans-serif bold capital theta}% -\UnicodeMathSymbol{"1D75E}{\mbfsansIota }{\mathalpha}{mathematical sans-serif bold capital iota}% -\UnicodeMathSymbol{"1D75F}{\mbfsansKappa }{\mathalpha}{mathematical sans-serif bold capital kappa}% -\UnicodeMathSymbol{"1D760}{\mbfsansLambda }{\mathalpha}{mathematical sans-serif bold capital lambda}% -\UnicodeMathSymbol{"1D761}{\mbfsansMu }{\mathalpha}{mathematical sans-serif bold capital mu}% -\UnicodeMathSymbol{"1D762}{\mbfsansNu }{\mathalpha}{mathematical sans-serif bold capital nu}% -\UnicodeMathSymbol{"1D763}{\mbfsansXi }{\mathalpha}{mathematical sans-serif bold capital xi}% -\UnicodeMathSymbol{"1D764}{\mbfsansOmicron }{\mathalpha}{mathematical sans-serif bold capital omicron}% -\UnicodeMathSymbol{"1D765}{\mbfsansPi }{\mathalpha}{mathematical sans-serif bold capital pi}% -\UnicodeMathSymbol{"1D766}{\mbfsansRho }{\mathalpha}{mathematical sans-serif bold capital rho}% -\UnicodeMathSymbol{"1D767}{\mbfsansvarTheta }{\mathalpha}{mathematical sans-serif bold capital theta symbol}% -\UnicodeMathSymbol{"1D768}{\mbfsansSigma }{\mathalpha}{mathematical sans-serif bold capital sigma}% -\UnicodeMathSymbol{"1D769}{\mbfsansTau }{\mathalpha}{mathematical sans-serif bold capital tau}% -\UnicodeMathSymbol{"1D76A}{\mbfsansUpsilon }{\mathalpha}{mathematical sans-serif bold capital upsilon}% -\UnicodeMathSymbol{"1D76B}{\mbfsansPhi }{\mathalpha}{mathematical sans-serif bold capital phi}% -\UnicodeMathSymbol{"1D76C}{\mbfsansChi }{\mathalpha}{mathematical sans-serif bold capital chi}% -\UnicodeMathSymbol{"1D76D}{\mbfsansPsi }{\mathalpha}{mathematical sans-serif bold capital psi}% -\UnicodeMathSymbol{"1D76E}{\mbfsansOmega }{\mathalpha}{mathematical sans-serif bold capital omega}% -\UnicodeMathSymbol{"1D76F}{\mbfsansnabla }{\mathalpha}{mathematical sans-serif bold nabla}% -\UnicodeMathSymbol{"1D770}{\mbfsansalpha }{\mathalpha}{mathematical sans-serif bold small alpha}% -\UnicodeMathSymbol{"1D771}{\mbfsansbeta }{\mathalpha}{mathematical sans-serif bold small beta}% -\UnicodeMathSymbol{"1D772}{\mbfsansgamma }{\mathalpha}{mathematical sans-serif bold small gamma}% -\UnicodeMathSymbol{"1D773}{\mbfsansdelta }{\mathalpha}{mathematical sans-serif bold small delta}% -\UnicodeMathSymbol{"1D774}{\mbfsansvarepsilon }{\mathalpha}{mathematical sans-serif bold small varepsilon}% -\UnicodeMathSymbol{"1D775}{\mbfsanszeta }{\mathalpha}{mathematical sans-serif bold small zeta}% -\UnicodeMathSymbol{"1D776}{\mbfsanseta }{\mathalpha}{mathematical sans-serif bold small eta}% -\UnicodeMathSymbol{"1D777}{\mbfsanstheta }{\mathalpha}{mathematical sans-serif bold small theta}% -\UnicodeMathSymbol{"1D778}{\mbfsansiota }{\mathalpha}{mathematical sans-serif bold small iota}% -\UnicodeMathSymbol{"1D779}{\mbfsanskappa }{\mathalpha}{mathematical sans-serif bold small kappa}% -\UnicodeMathSymbol{"1D77A}{\mbfsanslambda }{\mathalpha}{mathematical sans-serif bold small lambda}% -\UnicodeMathSymbol{"1D77B}{\mbfsansmu }{\mathalpha}{mathematical sans-serif bold small mu}% -\UnicodeMathSymbol{"1D77C}{\mbfsansnu }{\mathalpha}{mathematical sans-serif bold small nu}% -\UnicodeMathSymbol{"1D77D}{\mbfsansxi }{\mathalpha}{mathematical sans-serif bold small xi}% -\UnicodeMathSymbol{"1D77E}{\mbfsansomicron }{\mathalpha}{mathematical sans-serif bold small omicron}% -\UnicodeMathSymbol{"1D77F}{\mbfsanspi }{\mathalpha}{mathematical sans-serif bold small pi}% -\UnicodeMathSymbol{"1D780}{\mbfsansrho }{\mathalpha}{mathematical sans-serif bold small rho}% -\UnicodeMathSymbol{"1D781}{\mbfsansvarsigma }{\mathalpha}{mathematical sans-serif bold small final sigma}% -\UnicodeMathSymbol{"1D782}{\mbfsanssigma }{\mathalpha}{mathematical sans-serif bold small sigma}% -\UnicodeMathSymbol{"1D783}{\mbfsanstau }{\mathalpha}{mathematical sans-serif bold small tau}% -\UnicodeMathSymbol{"1D784}{\mbfsansupsilon }{\mathalpha}{mathematical sans-serif bold small upsilon}% -\UnicodeMathSymbol{"1D785}{\mbfsansvarphi }{\mathalpha}{mathematical sans-serif bold small phi}% -\UnicodeMathSymbol{"1D786}{\mbfsanschi }{\mathalpha}{mathematical sans-serif bold small chi}% -\UnicodeMathSymbol{"1D787}{\mbfsanspsi }{\mathalpha}{mathematical sans-serif bold small psi}% -\UnicodeMathSymbol{"1D788}{\mbfsansomega }{\mathalpha}{mathematical sans-serif bold small omega}% -\UnicodeMathSymbol{"1D789}{\mbfsanspartial }{\mathalpha}{mathematical sans-serif bold partial differential}% -\UnicodeMathSymbol{"1D78A}{\mbfsansepsilon }{\mathalpha}{mathematical sans-serif bold varepsilon symbol}% -\UnicodeMathSymbol{"1D78B}{\mbfsansvartheta }{\mathalpha}{mathematical sans-serif bold theta symbol}% -\UnicodeMathSymbol{"1D78C}{\mbfsansvarkappa }{\mathalpha}{mathematical sans-serif bold kappa symbol}% -\UnicodeMathSymbol{"1D78D}{\mbfsansphi }{\mathalpha}{mathematical sans-serif bold phi symbol}% -\UnicodeMathSymbol{"1D78E}{\mbfsansvarrho }{\mathalpha}{mathematical sans-serif bold rho symbol}% -\UnicodeMathSymbol{"1D78F}{\mbfsansvarpi }{\mathalpha}{mathematical sans-serif bold pi symbol}% -\UnicodeMathSymbol{"1D790}{\mbfitsansAlpha }{\mathalpha}{mathematical sans-serif bold italic capital alpha}% -\UnicodeMathSymbol{"1D791}{\mbfitsansBeta }{\mathalpha}{mathematical sans-serif bold italic capital beta}% -\UnicodeMathSymbol{"1D792}{\mbfitsansGamma }{\mathalpha}{mathematical sans-serif bold italic capital gamma}% -\UnicodeMathSymbol{"1D793}{\mbfitsansDelta }{\mathalpha}{mathematical sans-serif bold italic capital delta}% -\UnicodeMathSymbol{"1D794}{\mbfitsansEpsilon }{\mathalpha}{mathematical sans-serif bold italic capital epsilon}% -\UnicodeMathSymbol{"1D795}{\mbfitsansZeta }{\mathalpha}{mathematical sans-serif bold italic capital zeta}% -\UnicodeMathSymbol{"1D796}{\mbfitsansEta }{\mathalpha}{mathematical sans-serif bold italic capital eta}% -\UnicodeMathSymbol{"1D797}{\mbfitsansTheta }{\mathalpha}{mathematical sans-serif bold italic capital theta}% -\UnicodeMathSymbol{"1D798}{\mbfitsansIota }{\mathalpha}{mathematical sans-serif bold italic capital iota}% -\UnicodeMathSymbol{"1D799}{\mbfitsansKappa }{\mathalpha}{mathematical sans-serif bold italic capital kappa}% -\UnicodeMathSymbol{"1D79A}{\mbfitsansLambda }{\mathalpha}{mathematical sans-serif bold italic capital lambda}% -\UnicodeMathSymbol{"1D79B}{\mbfitsansMu }{\mathalpha}{mathematical sans-serif bold italic capital mu}% -\UnicodeMathSymbol{"1D79C}{\mbfitsansNu }{\mathalpha}{mathematical sans-serif bold italic capital nu}% -\UnicodeMathSymbol{"1D79D}{\mbfitsansXi }{\mathalpha}{mathematical sans-serif bold italic capital xi}% -\UnicodeMathSymbol{"1D79E}{\mbfitsansOmicron }{\mathalpha}{mathematical sans-serif bold italic capital omicron}% -\UnicodeMathSymbol{"1D79F}{\mbfitsansPi }{\mathalpha}{mathematical sans-serif bold italic capital pi}% -\UnicodeMathSymbol{"1D7A0}{\mbfitsansRho }{\mathalpha}{mathematical sans-serif bold italic capital rho}% -\UnicodeMathSymbol{"1D7A1}{\mbfitsansvarTheta }{\mathalpha}{mathematical sans-serif bold italic capital theta symbol}% -\UnicodeMathSymbol{"1D7A2}{\mbfitsansSigma }{\mathalpha}{mathematical sans-serif bold italic capital sigma}% -\UnicodeMathSymbol{"1D7A3}{\mbfitsansTau }{\mathalpha}{mathematical sans-serif bold italic capital tau}% -\UnicodeMathSymbol{"1D7A4}{\mbfitsansUpsilon }{\mathalpha}{mathematical sans-serif bold italic capital upsilon}% -\UnicodeMathSymbol{"1D7A5}{\mbfitsansPhi }{\mathalpha}{mathematical sans-serif bold italic capital phi}% -\UnicodeMathSymbol{"1D7A6}{\mbfitsansChi }{\mathalpha}{mathematical sans-serif bold italic capital chi}% -\UnicodeMathSymbol{"1D7A7}{\mbfitsansPsi }{\mathalpha}{mathematical sans-serif bold italic capital psi}% -\UnicodeMathSymbol{"1D7A8}{\mbfitsansOmega }{\mathalpha}{mathematical sans-serif bold italic capital omega}% -\UnicodeMathSymbol{"1D7A9}{\mbfitsansnabla }{\mathalpha}{mathematical sans-serif bold italic nabla}% -\UnicodeMathSymbol{"1D7AA}{\mbfitsansalpha }{\mathalpha}{mathematical sans-serif bold italic small alpha}% -\UnicodeMathSymbol{"1D7AB}{\mbfitsansbeta }{\mathalpha}{mathematical sans-serif bold italic small beta}% -\UnicodeMathSymbol{"1D7AC}{\mbfitsansgamma }{\mathalpha}{mathematical sans-serif bold italic small gamma}% -\UnicodeMathSymbol{"1D7AD}{\mbfitsansdelta }{\mathalpha}{mathematical sans-serif bold italic small delta}% -\UnicodeMathSymbol{"1D7AE}{\mbfitsansvarepsilon }{\mathalpha}{mathematical sans-serif bold italic small varepsilon}% -\UnicodeMathSymbol{"1D7AF}{\mbfitsanszeta }{\mathalpha}{mathematical sans-serif bold italic small zeta}% -\UnicodeMathSymbol{"1D7B0}{\mbfitsanseta }{\mathalpha}{mathematical sans-serif bold italic small eta}% -\UnicodeMathSymbol{"1D7B1}{\mbfitsanstheta }{\mathalpha}{mathematical sans-serif bold italic small theta}% -\UnicodeMathSymbol{"1D7B2}{\mbfitsansiota }{\mathalpha}{mathematical sans-serif bold italic small iota}% -\UnicodeMathSymbol{"1D7B3}{\mbfitsanskappa }{\mathalpha}{mathematical sans-serif bold italic small kappa}% -\UnicodeMathSymbol{"1D7B4}{\mbfitsanslambda }{\mathalpha}{mathematical sans-serif bold italic small lambda}% -\UnicodeMathSymbol{"1D7B5}{\mbfitsansmu }{\mathalpha}{mathematical sans-serif bold italic small mu}% -\UnicodeMathSymbol{"1D7B6}{\mbfitsansnu }{\mathalpha}{mathematical sans-serif bold italic small nu}% -\UnicodeMathSymbol{"1D7B7}{\mbfitsansxi }{\mathalpha}{mathematical sans-serif bold italic small xi}% -\UnicodeMathSymbol{"1D7B8}{\mbfitsansomicron }{\mathalpha}{mathematical sans-serif bold italic small omicron}% -\UnicodeMathSymbol{"1D7B9}{\mbfitsanspi }{\mathalpha}{mathematical sans-serif bold italic small pi}% -\UnicodeMathSymbol{"1D7BA}{\mbfitsansrho }{\mathalpha}{mathematical sans-serif bold italic small rho}% -\UnicodeMathSymbol{"1D7BB}{\mbfitsansvarsigma }{\mathalpha}{mathematical sans-serif bold italic small final sigma}% -\UnicodeMathSymbol{"1D7BC}{\mbfitsanssigma }{\mathalpha}{mathematical sans-serif bold italic small sigma}% -\UnicodeMathSymbol{"1D7BD}{\mbfitsanstau }{\mathalpha}{mathematical sans-serif bold italic small tau}% -\UnicodeMathSymbol{"1D7BE}{\mbfitsansupsilon }{\mathalpha}{mathematical sans-serif bold italic small upsilon}% -\UnicodeMathSymbol{"1D7BF}{\mbfitsansvarphi }{\mathalpha}{mathematical sans-serif bold italic small phi}% -\UnicodeMathSymbol{"1D7C0}{\mbfitsanschi }{\mathalpha}{mathematical sans-serif bold italic small chi}% -\UnicodeMathSymbol{"1D7C1}{\mbfitsanspsi }{\mathalpha}{mathematical sans-serif bold italic small psi}% -\UnicodeMathSymbol{"1D7C2}{\mbfitsansomega }{\mathalpha}{mathematical sans-serif bold italic small omega}% -\UnicodeMathSymbol{"1D7C3}{\mbfitsanspartial }{\mathalpha}{mathematical sans-serif bold italic partial differential}% -\UnicodeMathSymbol{"1D7C4}{\mbfitsansepsilon }{\mathalpha}{mathematical sans-serif bold italic varepsilon symbol}% -\UnicodeMathSymbol{"1D7C5}{\mbfitsansvartheta }{\mathalpha}{mathematical sans-serif bold italic theta symbol}% -\UnicodeMathSymbol{"1D7C6}{\mbfitsansvarkappa }{\mathalpha}{mathematical sans-serif bold italic kappa symbol}% -\UnicodeMathSymbol{"1D7C7}{\mbfitsansphi }{\mathalpha}{mathematical sans-serif bold italic phi symbol}% -\UnicodeMathSymbol{"1D7C8}{\mbfitsansvarrho }{\mathalpha}{mathematical sans-serif bold italic rho symbol}% -\UnicodeMathSymbol{"1D7C9}{\mbfitsansvarpi }{\mathalpha}{mathematical sans-serif bold italic pi symbol}% -\UnicodeMathSymbol{"1D7CA}{\mbfDigamma }{\mathalpha}{mathematical bold capital digamma}% -\UnicodeMathSymbol{"1D7CB}{\mbfdigamma }{\mathalpha}{mathematical bold small digamma}% -\UnicodeMathSymbol{"1D7CE}{\mbfzero }{\mathord}{mathematical bold digit 0}% -\UnicodeMathSymbol{"1D7CF}{\mbfone }{\mathord}{mathematical bold digit 1}% -\UnicodeMathSymbol{"1D7D0}{\mbftwo }{\mathord}{mathematical bold digit 2}% -\UnicodeMathSymbol{"1D7D1}{\mbfthree }{\mathord}{mathematical bold digit 3}% -\UnicodeMathSymbol{"1D7D2}{\mbffour }{\mathord}{mathematical bold digit 4}% -\UnicodeMathSymbol{"1D7D3}{\mbffive }{\mathord}{mathematical bold digit 5}% -\UnicodeMathSymbol{"1D7D4}{\mbfsix }{\mathord}{mathematical bold digit 6}% -\UnicodeMathSymbol{"1D7D5}{\mbfseven }{\mathord}{mathematical bold digit 7}% -\UnicodeMathSymbol{"1D7D6}{\mbfeight }{\mathord}{mathematical bold digit 8}% -\UnicodeMathSymbol{"1D7D7}{\mbfnine }{\mathord}{mathematical bold digit 9}% -\UnicodeMathSymbol{"1D7D8}{\Bbbzero }{\mathord}{mathematical double-struck digit 0}% -\UnicodeMathSymbol{"1D7D9}{\Bbbone }{\mathord}{mathematical double-struck digit 1}% -\UnicodeMathSymbol{"1D7DA}{\Bbbtwo }{\mathord}{mathematical double-struck digit 2}% -\UnicodeMathSymbol{"1D7DB}{\Bbbthree }{\mathord}{mathematical double-struck digit 3}% -\UnicodeMathSymbol{"1D7DC}{\Bbbfour }{\mathord}{mathematical double-struck digit 4}% -\UnicodeMathSymbol{"1D7DD}{\Bbbfive }{\mathord}{mathematical double-struck digit 5}% -\UnicodeMathSymbol{"1D7DE}{\Bbbsix }{\mathord}{mathematical double-struck digit 6}% -\UnicodeMathSymbol{"1D7DF}{\Bbbseven }{\mathord}{mathematical double-struck digit 7}% -\UnicodeMathSymbol{"1D7E0}{\Bbbeight }{\mathord}{mathematical double-struck digit 8}% -\UnicodeMathSymbol{"1D7E1}{\Bbbnine }{\mathord}{mathematical double-struck digit 9}% -\UnicodeMathSymbol{"1D7E2}{\msanszero }{\mathord}{mathematical sans-serif digit 0}% -\UnicodeMathSymbol{"1D7E3}{\msansone }{\mathord}{mathematical sans-serif digit 1}% -\UnicodeMathSymbol{"1D7E4}{\msanstwo }{\mathord}{mathematical sans-serif digit 2}% -\UnicodeMathSymbol{"1D7E5}{\msansthree }{\mathord}{mathematical sans-serif digit 3}% -\UnicodeMathSymbol{"1D7E6}{\msansfour }{\mathord}{mathematical sans-serif digit 4}% -\UnicodeMathSymbol{"1D7E7}{\msansfive }{\mathord}{mathematical sans-serif digit 5}% -\UnicodeMathSymbol{"1D7E8}{\msanssix }{\mathord}{mathematical sans-serif digit 6}% -\UnicodeMathSymbol{"1D7E9}{\msansseven }{\mathord}{mathematical sans-serif digit 7}% -\UnicodeMathSymbol{"1D7EA}{\msanseight }{\mathord}{mathematical sans-serif digit 8}% -\UnicodeMathSymbol{"1D7EB}{\msansnine }{\mathord}{mathematical sans-serif digit 9}% -\UnicodeMathSymbol{"1D7EC}{\mbfsanszero }{\mathord}{mathematical sans-serif bold digit 0}% -\UnicodeMathSymbol{"1D7ED}{\mbfsansone }{\mathord}{mathematical sans-serif bold digit 1}% -\UnicodeMathSymbol{"1D7EE}{\mbfsanstwo }{\mathord}{mathematical sans-serif bold digit 2}% -\UnicodeMathSymbol{"1D7EF}{\mbfsansthree }{\mathord}{mathematical sans-serif bold digit 3}% -\UnicodeMathSymbol{"1D7F0}{\mbfsansfour }{\mathord}{mathematical sans-serif bold digit 4}% -\UnicodeMathSymbol{"1D7F1}{\mbfsansfive }{\mathord}{mathematical sans-serif bold digit 5}% -\UnicodeMathSymbol{"1D7F2}{\mbfsanssix }{\mathord}{mathematical sans-serif bold digit 6}% -\UnicodeMathSymbol{"1D7F3}{\mbfsansseven }{\mathord}{mathematical sans-serif bold digit 7}% -\UnicodeMathSymbol{"1D7F4}{\mbfsanseight }{\mathord}{mathematical sans-serif bold digit 8}% -\UnicodeMathSymbol{"1D7F5}{\mbfsansnine }{\mathord}{mathematical sans-serif bold digit 9}% -\UnicodeMathSymbol{"1D7F6}{\mttzero }{\mathord}{mathematical monospace digit 0}% -\UnicodeMathSymbol{"1D7F7}{\mttone }{\mathord}{mathematical monospace digit 1}% -\UnicodeMathSymbol{"1D7F8}{\mtttwo }{\mathord}{mathematical monospace digit 2}% -\UnicodeMathSymbol{"1D7F9}{\mttthree }{\mathord}{mathematical monospace digit 3}% -\UnicodeMathSymbol{"1D7FA}{\mttfour }{\mathord}{mathematical monospace digit 4}% -\UnicodeMathSymbol{"1D7FB}{\mttfive }{\mathord}{mathematical monospace digit 5}% -\UnicodeMathSymbol{"1D7FC}{\mttsix }{\mathord}{mathematical monospace digit 6}% -\UnicodeMathSymbol{"1D7FD}{\mttseven }{\mathord}{mathematical monospace digit 7}% -\UnicodeMathSymbol{"1D7FE}{\mtteight }{\mathord}{mathematical monospace digit 8}% -\UnicodeMathSymbol{"1D7FF}{\mttnine }{\mathord}{mathematical monospace digit 9}% -\UnicodeMathSymbol{"1EEF0}{\arabicmaj }{\mathop}{arabic mathematical operator meem with hah with tatweel}% -\UnicodeMathSymbol{"1EEF1}{\arabichad }{\mathop}{arabic mathematical operator hah with dal}% - -% /© -% -% ------------------------------------------------ -% 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 -% ------------------------------------------------ -% -% ©/ - diff --git a/Master/texmf-dist/tex/luatex/optex/base/usebib.opm b/Master/texmf-dist/tex/luatex/optex/base/usebib.opm deleted file mode 100644 index f37d21b3159..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/usebib.opm +++ /dev/null @@ -1,398 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \MakeReference {Reading bib databases <2021-03-12>} % loaded on demand by \usebib - - \_doc ----------------------------- - Loading the `librarian.tex` macro package. See `texdoc librarian` - for more information about it. - - We want to ignore `\errmessage` and we want not to create `\jobname.lbr` - file. - \_cod ----------------------------- - -\_def\errmessage#1{} -\_def\newwrite#1{\_csname lb@restoreat\_endcsname \_endinput} -\_def\_tmpb{\_catcode`\_=12 \_input librarian \_catcode`\_=11 }\_tmpb -\_let\errmessage=\_errmessage -\_let\newwrite=\_newwrite - -\_private \BibFile \ReadList \SortList \SortingOrder \NameCount \AbbreviateFirstname - \CreateField \RetrieveFieldInFor \RetrieveFieldIn ; - - \_doc ----------------------------- - The `\usebib` command. - \_cod ----------------------------- - -\_def\_usebib/#1 (#2) #3 {% - \_let\_citeI=\_relax \_xdef\_citelist{\_citelist\_citelistB}% - \_global\_let\_addcitelist=\_writeXcite - \_ifx\_citelist\_empty - \_opwarning{No cited items. \_noexpand\usebib ignored}% - \_else - \_bgroup \_par - \_emergencystretch=.3\_hsize - \_ifx\_bibpart\_undefined \_def\_bibpart{none}\_fi - \_def\_optexbibstyle{#2}% - \_setctable\_optexcatcodes - \_ea \_skiptoendinput \_input languages.opm - \_input bib-#2.opm - \_the \_bibtexhook - \_ifcsname _mt:bib.and:\_cs{_lan:\_the\_language}\_endcsname \_else - \_opwarning{\_string\usebib: No phrases for language - "\_cs{_lan:\_the\_language}" (using "en")}% - \_language=0 \_chardef\_documentlanguage=0 - \_fi - \_def\_tmp##1[*]##2\_relax{\_def\_tmp{##2}}\_ea\_tmp\_citelist[*]\_relax - \_ifx\_tmp\_empty\_else % there was \nocite[*] used. - \_setbox0=\_vbox{\_hsize=\_maxdimen \_def\_citelist{}\_adef@{\_readbibentry}% - \_input #3.bib - \_ea}\_ea\_def\_ea\_citelist\_ea{\_citelist}% - \_fi - \_def\_citeI[##1]{\_csname lb@cite\_endcsname{##1}{\_bibpart}{}{}}\_citelist - \_BibFile{#3}% - \_if s#1\_SortList{\_bibpart}\_fi - \_ReadList{\_bibpart}% - \_restorectable - \_egroup - \_fi -} -\_long\_def\_skiptoendinput#1\_endinput{} -\_def\_readbibentry#1#{\_readbibentryA} -\_def\_readbibentryA#1{\_readbibentryB#1,,\_relax!.} -\_def\_readbibentryB#1#2,#3\_relax!.{\_addto\_citelist{\_citeI[#1#2]}} - - \_doc ----------------------------- - Corrections in librarian macros. - \_cod ----------------------------- - -\_tmpnum=\_catcode`\@ \_catcode`\@=11 -\_def\lb@checkmissingentries#1,{% we needn't \errmessage here, only \opmacwarning - \_def\lb@temp{#1}% - \_unless\_ifx\lb@temp\lb@eoe - \lb@ifcs{#1}{fields}% - {}% - {\_opwarning{\_string\usebib: entry [#1] isn't found in .bib}}% - \_ea\lb@checkmissingentries - \_fi -} -\_def\lb@readentry#1#2#3,{% space before key have to be ingnored - \_def\lb@temp{#2#3}% we need case sensitive keys - \_def\lb@next{\_ea\lb@gotoat\lb@gobbletoeoe}% - \lb@ifcs\lb@temp{requested}% - {\_let\lb@entrykey\lb@temp - \lb@ifcs\lb@entrykey{fields}{}% - {\lb@defcs\lb@entrykey{fields}{}% - \_lowercase{\lb@addfield{entrytype}{#1}}% - \_let\lb@next\lb@analyzeentry}}{}% - \lb@next -} -\_let\lb@compareA=\lb@compare -\_let\lb@preparesortA=\lb@preparesort -\_def\lb@compare#1\lb@eoe#2\lb@eoe{% SpecialSort: - \_ifx\lb@sorttype\lb@namestring - \_ifx\_sortfield\_undefined \lb@compareA#1\lb@eoe#2\lb@eoe - \_else - \_ea\_RetrieveFieldInFor\_ea{\_sortfield}\lb@entrykey\lb@temp - \_ifx\lb@temp\_empty \_toks1={#1\lb@eoe}\_else \_toks1=\_ea{\lb@temp\lb@eoe}\_fi - \_ea\_RetrieveFieldInFor\_ea{\_sortfield}\lb@currententry\lb@temp - \_ifx\lb@temp\_empty \_toks2={#2\lb@eoe}\_else \_toks2=\_ea{\lb@temp\lb@eoe}\_fi - \_edef\lb@temp{\_noexpand\lb@compareA\_space\_the\_toks1 \_space\_the\_toks2}\lb@temp - \_fi - \_else \lb@compareA#1\lb@eoe#2\lb@eoe \_fi -} -\_def\lb@preparesort#1#2\lb@eoe{% - \_if#1-% - \_def\lb@sorttype{#2}% - \_else - \_def\lb@sorttype{#1#2}% - \_fi - \lb@preparesortA#1#2\lb@eoe -} -\_def\_SpecialSort#1{\_def\_sortfield{#1}} -\_def\WriteImmediateInfo#1{} % the existence of .lbr file bocks new reading of .bib -\_catcode`\@=\_tmpnum - - \_doc ----------------------------- - Main action per each entry. - \_cod ----------------------------- - -\_def\MakeReference{\_par \_bibskip - \_advance\_bibnum by1 - \_isdefined{_bim:\_the\_bibnum}\_iftrue - \_edef\_tmpb{\_csname _bim:\_the\_bibnum\_endcsname}% - \_bibmark=\_ea{\_tmpb}% - \_else \_bibmark={}\_fi - \_edef\_tmpb{\EntryKey}% - \_noindent \_dest[cite:\_the\_bibnum]\_printlabel\EntryKey - \_printbib - {% - \_RetrieveFieldIn{entrytype}\_entrytype - \_csname _print:BEGIN\_endcsname - \_isdefined{_print:\_entrytype}\_iftrue - \_csname _print:\_entrytype\_endcsname - \_else - \_ifx\_entrytype\_empty \_else - \_opwarning{Entrytype @\_entrytype\_space from [\EntryKey] undefined}% - \_csname _print:misc\_endcsname - \_fi\_fi - \_csname _print:END\_endcsname - \_ifx\_wref\_wrefrelax\_else - \_immediate\_wref\_Xbib{{\EntryKey}{\_the\_bibnum}{\_the\_bibmark}}\_fi - }\_par -} - - \_doc ----------------------------- - The \`\_bprinta`, \`\_bprintb`, \`\_bprintc`, \`\_bprintv` - commands used in the style files: - \_cod ----------------------------- - -\_def\_bprinta {\_bprintb*} -\_def\_bprintb #1[#2#3]{% - \_def\_bibfieldname{#2#3}% - \_if!#2\_relax - \_def\_bibfieldname{#3}% - \_RetrieveFieldIn{#3}\_bibfield - \_ifx\_bibfield\_empty\_else - \_RetrieveFieldIn{#3number}\_namecount - \_def\_bibfield{\_csname _Read#3\_ea\_endcsname \_csname _pp:#3\_endcsname}% - \_fi - \_else - \_RetrieveFieldIn{#2#3}\_bibfield - \_fi - \_if^#1^% - \_ifx\_bibfield\_empty \_ea\_ea\_ea \_doemptyfield - \_else \_ea\_ea\_ea \_dofullfield \_fi - \_else \_ea \_bprintaA - \_fi -} -\_def\_dofullfield#1#2{\_def\_dofield##1{#1}\_ea\_dofield\_ea{\_bibfield}} -\_def\_doemptyfield#1#2{\_def\_dofield##1{#2}\_ea\_dofield\_ea{\_bibfield}} -\_let\_Readauthor=\ReadAuthor \_let\_Readeditor=\ReadEditor -\_def\_bprintaA #1#2{\_ifx\_bibfield\_empty #2\_else\_bprintaB #1**\_eee\_fi} -\_def\_bprintaB #1*#2*#3\_eee{\_if^#3^#1\_else\_ea\_bprintaC\_ea{\_bibfield}{#1}{#2}\_fi} -\_def\_bprintaC #1#2#3{#2#1#3} -\_def\_bprintc#1#2{\_bprintcA#1#2**\_relax} -\_def\_bprintcA#1#2*#3*#4\_relax{\_ifx#1\_empty \_else \_if^#4^#2\_else#2#1#3\_fi\_fi} -\_def\_bprintv [#1]#2#3{\_def\_tmpa{#2}\_def\_tmpb{#3}\_bprintvA #1,,} -\_def\_bprintvA #1,{% - \_if^#1^\_tmpb\_else - \_RetrieveFieldIn{#1}\_tmp - \_ifx \_tmp\_empty - \_else \_tmpa \_def\_tmpb{}\_def\_tmpa{}% - \_fi - \_ea \_bprintvA - \_fi -} -\_sdef{_pp:author}{\_letNames\_authorname} -\_sdef{_pp:editor}{\_letNames\_editorname} -\_def\_letNames{\_let\_Firstname=\Firstname \_let\_Lastname=\Lastname - \_let\_Von=\Von \_let\_Junior=\Junior -} - - \_doc ----------------------------- - Various macros + multilingual. Note that \`\_nobibwarnlist` is used in - \`\_bibwarning` and it is set by \^`\nobibwarning` macro. - \_cod ----------------------------- - -\_def\_bibwarning{% - \_ea\_isinlist \_ea\_nobibwarnlist\_ea{\_ea,\EntryKey,}\_iffalse - \_opwarning{Missing field "\_bibfieldname" in [\EntryKey]}\_fi} - -\_endcode - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -The file `usebib.opm` implements the command -\~`\usebib/<sorttype> (<style>) <bibfiles>` -where `<sorttype>` is one letter `c` (references ordered by citation order in -the text) or `s` (references ordered by key in the style file), -`<style>` is the part of the name `bib-<style>.opm` of the style file -and `<bibfiles>` are one or more `.bib` file names without suffix separated by -comma without space. Example: - -\begtt -\usebib/s (simple) mybase,yourbase -\endtt - -This command reads the `<bibfiles>` directly and creates the list of -bibliographic references (only those declared by \~`\cite[]` or -\~`\nocite[]` in the text). The formatting of such references is defined in the style -file. - -The principle \"first entry wins" is used. Suppose `\usebib/s (simple) local,global`. -If an entry with the same label is declared in `local.bib` and in -`global.bib` too then the first wins. So, you can set exceptions in your -`local.bib` file for your document. - -The `bib-<style>.opm` declares entry types (like `@BOOK`, `@ARTICLE`) and declares -their mandatory and optional fields (like `author`, `title`). When -a mandatory field is missing in an entry in the `.bib` file then a warning is printed on the -terminal about it. You can suppress such warnings by command -\^`\nobibwarning`~`[<bib-labels>]`, where <bib-labels> is a comma-separated list -of labels (without spaces) where missing mandatory fields will be no warned. - -Old `.bib` files may use the obscure notation for accents like `{\"o}`. -Recommendation: convert such old files to Unicode encoding. If you are -unable to do this then you can set \^`\bibtexhook={`\^`\oldaccents}`. - -\secc Notes for bib-style writers - -The `.bib` files include records in the format: - -\begtt \catcode`\<=13 -@<entry-type>{<label>, - <field-name> = "<field-data>", - <field-name> = "<field-data>", - ...etc -} -\endtt -% -see the file `demo/op-biblist.bib` for a real example. The <entry-types> and -<field-names> are case insensitive. - -Ancient Bib\TeX/ has read such files and has generated files appropriate for -reading by \LaTeX. It has worked with a set of <entry-types>, see the www -page \url{http://en.wikipedia.org/wiki/BibTeX}. The set of entry types -listed on this www page is de facto the Bib\TeX/ standard. The \OpTeX/ bib -style writer must \"declare" all such entry types and more non-standard -entry types can be declared too if there is a good reason for doing it. The -word \"declare" used in the previous sentence means that a bib-style writer must -define the printing rules for each <entry-type>. -The printing rules for <entry-type> include: which fields will be printed, in -what order, by what format they will be printed on (italic, caps, etc.), -which fields are mandatory, which are optional, and which are ignored in -`.bib` records. - -The style writer can be inspired by two styles already done: `bib-simple.opm` -and `bib-iso690.opm`. The second one is documented in detail in -section~\ref[isobib]. - -The printing rules for each <entry-type> must be declared by -`\_sdef{_print:<entry-type>}` in `bib-<style>.opm` file. -The `<entry-type>` has to be lowercase here. \OpTeX/ supports following -macros for a more comfortable setting of printing rules: - -\begitems -* \^`\_bprinta` `[<field-name>] {<if defined>} {<if not defined>}`. The part <if defined> - is executed if <field-name> is declared in .bib file for the entry which is - currently processed. Else the part <if not defined> is processed. - The part <if defined> can include the `*` parameter which is replaced - by the value of the <field-name>. -* The part <if not defined> can include - the \^`\_bibwarning` command if the <field-name> is mandatory. -* \^`\_bprintb` `[<field-name>] {<if defined>} {<if not defined>}`. The same as - `\_bprinta`, but the `##1` parameter is used instead `*`. Differences: `##1` - parameter can be used more than once and can be enclosed in nested - braces. The `*` parameter can be used at most once and cannot be enclosed - in braces. Warning: if the `\_bprintb` commands are nested (`\_bprintb` in - `\_bprintb`), then you need to write the `####1` parameter for internal `\_bprintb`. - But if `\_bprinta` commands are nested then the parameter is not duplicated. -* \^`\_bprintc` `\macro {<if non-empty>}`. The <if non-empty> part is executed if - `\macro` is non-empty. The `*` parameter can be used, it is replaced by - the `\macro`. -* \^`\_bprintv` `[<field1>,<field2>,...] {<if defined>} {<if not defined>}`. - The part <if defined> is executed if <field1> or <filed2> or ... - is defined, else the second part <if not defined> is executed. - There is one filed name or the list field names separated by commas. - The parts cannot include any parameters. -\enditems - -There are two special field-names: `!author` and `!editor`. The processed list of -authors or editors are printed here instead of raw data, see the commands -\~`\_authorname` and \~`\_editorname` below. - -The bib-style writer can define `_print:BEGIN` and/or `_print:END`. -They are executed at the beginning or -end of each `<entry-type>`. The formatting does not solve the numbering and -paragraph indentation of the entry. This is processed by \^`\_printbib` macro -used in \OpTeX/ (and may be redefined by the author or document designer). - -The \^`\bibmark={something}` can be declared, for instance in the `_print:END` macro. -Such \"bibmark" is saved to the `.ref` file and used in next \TeX/ run as -`\cite` marks when `\nonumcitations` is set. - -Moreover, the bib-style writer must declare the format of -special fields `author` and `editor`. These fields include a -list of names, each name is precessed individually in a loop. The -\^`\_authorname` or \^`\_editorname` is called for each name on the list. -The bib-style writer must define -the \`\_authorname` and \`\_editorname` commands -in order to declare the format of printing each individual name. -The following control sequences can be used in these macros: - -\begitems -* `\_NameCount`: the number of the currently processed author in the list -* `\_namecont`: the total number of the authors in the list -* `\_Lastname`, `\_Firstname`, `\_Von`, `\_Junior`: the parts of the name. -\enditems - -The whole style file is read in the group during the `\usebib` command is executed -before typesetting the reference list. Each definition or setting is local -here. - -The auto-generated phrases (dependent on current language) can be used in -bib-style files by `\_mtext{bib.<identifier>}`, where <ident> is an identifier of -the phrase and the phrase itself is defined by -`\_sdef{_mt:bib.<identifier>:<language>}{<phrase>}`. See section~\ref[langphrases] -for more detail. Phrases for <identifiers>: -and, etal, edition, citedate, volume, number, prepages, postpages, editor, -editors, available, availablealso, bachthesis, masthesis, phdthesis -are defined already, see the end of section~\ref[langphrases]. - -If you are using non-standard field-names in .bib database and bib-style, -you have to declare them by `\_CreateField {<fieldname>}`. - -You can declare `\_SortingOrder` in the manner documented by librarian package. - -User or author of the bib-style can create the hidden field which has a -precedence while sorting names. Example: - -\begtt -\CreateField {sortedby} -\SpecialSort {sortedby} -\endtt -Suppose that the .bib file includes: -\begtt -... -author = "Jan Chadima", -sortedby = "Hzzadima Jan", -... -\endtt -Now, this author is sorted between H and I, because the Ch digraph in this -name has to be sorted by this rule. - -If you need (for example) to place the auto-citations before other citations, -then you can mark your entries in `.bib` file by `sortedby = "@"`, because this -character is sorted before `A`. - -\_endinput - -History: --------- - -2021-03-12 \_citelistB added before first test. -2021-02-15 \_expandafter -> \_ea -Apr. 2014: released in OPmac -Jan. 2016: "first entry wins" implemented -Apr. 2016: \readentry -> \readbibentry, \usebib->\MakeReference -Feb. 2018: \input librarian does not create \jobname.lbr - -% Source: - -% opmac-bib -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Petr Olsak, version Feb. 2018 (beta) - -% This is module for OPmac macros, see http://petr.olsak.net/opmac.html -% The command: -% \usebib/<sorttype> (<style>) (bibfiles> -% for direct reading .bib files by OPmac macros (without bibTeX) is implemented here. -% The implementation depends on librarian.tex package by Paul Isambert. -% Use: -% \input opmac \input opmac-bib -% or simply: -% \input opmac-bib -% before using the command \usebib. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end - diff --git a/Master/texmf-dist/tex/luatex/optex/base/verbatim.opm b/Master/texmf-dist/tex/luatex/optex/base/verbatim.opm deleted file mode 100644 index 8fd20ee5317..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/verbatim.opm +++ /dev/null @@ -1,372 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \begtt {Verbatim <2021-01-22>} % preloaded in format - - \_doc ---------------------------- - The internal parameters - \`\_ttskip`, \`\_ttpenalty`, \`\_viline`, \`\_vifile` and \`\_ttfont` - for verbatim macros are set. - \_cod ---------------------------- - -\_def\_ttskip{\_medskip} % space above and below \begtt, \verbinput -\_mathchardef\_ttpenalty=100 % penalty between lines in \begtt, \verbinput -\_newcount\_viline % last line number in \verbinput -\_newread\_vifile % file given by \verinput -\_def\_ttfont{\_tt} % default tt font - - \_doc ---------------------------- - \`\code``{<text>}` expands to `\detokenize{<text>}` when `\escapechar=-1`. In - order to do it more robust when it is used in `\write` then it expands as - noexpanded `\code<space>` (followed by space in its csname). This macro - does the real work. - - The \`\_printinverbatim``{<text>}` macro is used for `\code{<text>}` printing and for - \code{`}<text>\code{`} printing. It is defined as `\hbox`, so the in-verbatim <text> - will be never broken. But you can re-define this macro. - - When `\code` occurs in PDF outlines then it does the same as `\detokenize`. - The macro for preparing outlines sets `\escapechar` to $-1$ and uses - \^`\_regoul` token list before `\edef`. - - The `\code` is not `\proteced` because we want it expands to - `\unexpanded{\code<space>{<text>}}` in `\write` parameters. This protect the - expansions of the `\code` parameter (like `\\`, `\^` etc.). - \_cod ---------------------------- - -\_def\_code#1{\_unexpanded\_ea{\_csname _code \_endcsname{#1}}} -\_protected\_sdef{_code }#1{{\_escapechar=-1 \_ttfont \_the\_everyintt \_relax - \_ea\_printinverbatim\_ea{\_detokenize{#1}}}} -\_def\_printinverbatim#1{\_leavevmode\_hbox{#1}} - -\_regmacro {}{}{\_let\code=\_detokenize \_let\_code=\_detokenize} -\_public \code ; - - \_doc ---------------------------- - The \`\_setverb` macro sets all catcodes to \"verbatim mode". It should be used only - in a group, so we prepare a new catcode table with \"verbatim" catcodes and we define - it as\nl `\_catcodetable`\`\_verbatimcatcodes`. After the group is finished then - original catcode table is restored. - \_cod ---------------------------- - -\_newcatcodetable \_verbatimcatcodes -\_def\_setverb{\_begingroup - \_def\do##1{\_catcode`##1=12 } - \_dospecials - \_savecatcodetable\_verbatimcatcodes % all characters are normal - \_endgroup -} -\_setverb -\_def\_setverb{\_catcodetable\_verbatimcatcodes }% - - \_doc ---------------------------- - \`\verbchar``<char>` saves original catcode of previously declared `<char>` (if - such character was declared) using \`\_savedttchar` and \`\_savedttcharc` - values. Then new such values are stored. The declared character is activated - by `\_adef` as a macro (active character) which opens a group, - does `\_setverb` and other settings and reads its parameter until second the same - character. This is done by the \`\_readverb` macro. Finally, it prints scanned - `<text>` by \^`\_printinverbatim` and closes group. Suppose that `\verbchar"` is - used. Then the following work is schematically done: - \begtt - \_def "{\_begingroup \_setverb ... \_readverb} - \_def \_readverb #1"{\_printinverbatim{#1}\_endgroup} - \endtt - Note that the second occurrence of `"` is not active because `\_setverb` - deactivates it. - \_cod ---------------------------- - -\_def\_verbchar#1{% - \_ifx\_savedttchar\_undefined\_else \_catcode\_savedttchar=\_savedttcharc \_fi - \_chardef\_savedttchar=`#1 - \_chardef\_savedttcharc=\_catcode`#1 - \_adef{#1}{\_begingroup \_setverb \_adef{ }{\_dsp}\_ttfont \_the\_everyintt\_relax \_readverb}% - \_def\_readverb ##1#1{\_printinverbatim{##1}\_endgroup}% -} -\_let \_activettchar=\_verbchar % for backward compatibility -\_public \verbchar \activettchar ; - - \_doc ---------------------------- - \`\begtt` is defined only as public. We don't need a private `\_begtt` variant. - This macro opens a group and sets `%` as an active character (temporary). - This will allow it to be used as the comment character at the same line after - `\begtt`. Then \`\_begtti` is run. It is defined by \^`\eoldef`, - so users can put a parameter at the - same line where `\begtt` is. This `#1` parameter is used after \^`\everytt` - parameters settings, so users can change them locally. - - The \^`\_begtti` macro does \^`\_setverb` and another preprocessing, sets - `\endlinechar` to `^^J` and reads the following text in verbatim mode - until \`\endtt` occurs. This scanning is done by \`\_startverb` macro which is - defined as: - \begtt \adef/{\bslash} - \_def\_startverb #1/endtt #2^^J{...} - \endtt - We must to ensure that the backslash in `\endtt` has category 12 (this is a - reason of the `\ea` chain in real code). - The `#2` is something between `\endtt` and the end of the same line and it is simply - ignored. - - The `\_startverb` puts the scanned data to \`\_prepareverbdata`. It sets the data - to `\_tmpb` without changes by default, but you should re-define it in order - to do special changes if you want. (For example, \^`\hisyntax` redefines - this macro.) The scanned data have `^^J` at each end of line and all spaces are - active characters (defined as {\visiblesp`\ `}). - Other characters have normal category 11 or 12. - - When `\_prepareverbdata` finishes then `\_startverb` runs `\_printverb` loop - over each line of the data and does a final work: last skip plus `\noindent` - in the next paragraph. - \_cod --------------------------- - -\_def\begtt{\_par \_begingroup \_adef\%##1\_relax{\_relax}\_begtti} -\_eoldef \_begtti#1{\_wipeepar \_setxhsize - \_vskip\_parskip \_ttskip - \_setverb - \_ifnum\_ttline<0 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi - \_adef{ }{\_dsp}\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt - \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}% - \_the\_everytt \_relax #1\_relax \_ttfont - \_def\_testcommentchars##1\_iftrue{\_iffalse}\_let\_hicomments=\_relax - \_endlinechar=`^^J - \_startverb -} -\_ea\_def\_ea\_startverb \_ea#\_ea1\_csstring\\endtt#2^^J{% - \_prepareverbdata\_tmpb{#1^^J}% - \_ea\_printverb \_tmpb\_end - \_par - \_endgroup \_ttskip - \_isnextchar\_par{}{\_noindent}% -} -\_def\_prepareverbdata#1#2{\_def#1{#2}} - - \_doc - The \`\_printverb` macro calls \^`\_printverbline``{<line>}` repeatedly - to each scanned line of verbatim text. The `\_printverb` is used from - `\begtt...\endtt` and from `\verbinput` too. - - The \^`\_testcommentchars` replaces the following `\_iftrue` to - `\_iffalse` by default unless the \~`\commentchars` are set. So, the main body - of the loop is written in the `\_else` part of the `\_iftrue` condition. - The \^`\_printverbline``{<line>}` is called here. - - The \`\_printverbline``{<line>}` expects that it starts in vertical mode and it must - do `\par` to return the vertical mode. The \`\_printverblinenum` - is used here: it does nothing when `\_ttline`\code{<0} else it prints the line - number using `\_llap`. - - \`\_putttpenalty` puts \^`\_ttpenalty` before second and next lines, but - not before first line in each `\begtt...\endtt` environment. - \_cod ---------------------------- - -\_def\_printverb #1^^J#2{% - \_ifx\_printverblinenum\_relax \_else \_incr\_ttline \_fi - \_testcommentchars #1\_relax\_relax\_relax - \_iftrue - \_ifx\_end#2 \_printcomments\_fi - \_else - \_ifx\_vcomments\_empty\_else \_printcomments \_def\_vcomments{}\_fi - \_ifx\_end#2 - \_bgroup \_adef{ }{}\_def\t{}% if the last line is emtpy, we don't print it - \_ifcat&\_egroup \_else\_egroup \_printverbline{#1}\_fi - \_else - \_printverbline{#1}% - \_fi - \_fi - \_ifx\_end#2 \_let\_next=\_relax \_else \_def\_next{\_printverb#2}\_fi - \_next -} -\_def\_printverbline#1{\_putttpenalty \_indent \_printverblinenum \_kern\_ttshift #1\par} -\_def\_initverblinenum{\_tenrm \_thefontscale[700]\_ea\_let\_ea\_sevenrm\_the\_font} -\_def\_printverblinenum{\_llap{\_sevenrm \_the\_ttline\_kern.9em}} -\_def\_putttpenalty{\_def\_putttpenalty{\_penalty\_ttpenalty}} - - \_doc ---------------------------- - Macro \`\verbinput` uses a file read previously or opens the given file. Then - it runs the parameter scanning by \`\_viscanparameter` and \`\_viscanminus`. - Finally the \`\_doverbinput` is run. At the beginning of `\_doverbinput`, we have - `\_viline`= number of lines already read using previous `\verbinput`, - `\_vinolines`= the number of lines we need to skip and `\_vidolnes`= the - number of lines we need to print. - A similar preparation is done as in `\begtt` after the group is opened. Then - we skip \`\_vinolines` lines in a loop a and we read \`\_vidolines` lines. The - read data is accumulated into `\_tmpb` macro. The next steps are equal to - the steps done in \^`\_startverb` macro: data are processed via - \^`\_prepareverbdata` and printed via \^`\_printverb` loop. - \_cod \_fin ---------------------- - -\_def\_verbinput #1(#2) #3 {\_par \_def\_tmpa{#3}% - \_def\_tmpb{#1}% cmds used in local group - \_ifx\_vifilename\_tmpa \_else - \_openin\_vifile={#3}% - \_global\_viline=0 \_global\_let\_vifilename=\_tmpa - \_ifeof\_vifile - \_opwarning{\_string\verbinput: file "#3" unable to read} - \_ea\_ea\_ea\_skiptorelax - \_fi - \_fi - \_viscanparameter #2+\_relax -} -\_def\_skiptorelax#1\_relax{} - -\_def \_viscanparameter #1+#2\_relax{% - \_if$#2$\_viscanminus(#1)\_else \_viscanplus(#1+#2)\_fi -} -\_def\_viscanplus(#1+#2+){% - \_if$#1$\_tmpnum=\_viline - \_else \_ifnum#1<0 \_tmpnum=\_viline \_advance\_tmpnum by-#1 - \_else \_tmpnum=#1 - \_advance\_tmpnum by-1 - \_ifnum\_tmpnum<0 \_tmpnum=0 \_fi % (0+13) = (1+13) - \_fi \_fi - \_edef\_vinolines{\_the\_tmpnum}% - \_if$#2$\_def\_vidolines{0}\_else\_edef\_vidolines{#2}\_fi - \_doverbinput -} -\_def\_viscanminus(#1-#2){% - \_if$#1$\_tmpnum=0 - \_else \_tmpnum=#1 \_advance\_tmpnum by-1 \_fi - \_ifnum\_tmpnum<0 \_tmpnum=0 \_fi % (0-13) = (1-13) - \_edef\_vinolines{\_the\_tmpnum}% - \_if$#2$\_tmpnum=0 - \_else \_tmpnum=#2 \_advance\_tmpnum by-\_vinolines \_fi - \_edef\_vidolines{\_the\_tmpnum}% - \_doverbinput -} -\_def\_doverbinput{% - \_tmpnum=\_vinolines - \_advance\_tmpnum by-\_viline - \_ifnum\_tmpnum<0 - \_openin\_vifile={\_vifilename}% - \_global\_viline=0 - \_else - \_edef\_vinolines{\_the\_tmpnum}% - \_fi - \_vskip\_parskip \_ttskip \_wipeepar \_setxhsize - \_begingroup - \_ifnum\_ttline<-1 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi - \_setverb \_adef{ }{\_dsp}\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt - \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}% - \_the\_everytt\_relax \_tmpb\_relax \_ttfont - \_endlinechar=`^^J \_tmpnum=0 - \_loop \_ifeof\_vifile \_tmpnum=\_vinolines\_space \_fi - \_ifnum\_tmpnum<\_vinolines\_space - \_vireadline \_advance\_tmpnum by1 \_repeat %% skip lines - \_edef\_ttlinesave{\_ttline=\_the\_ttline}% - \_ifnum\_ttline=-1 \_ttline=\_viline \_fi - \_tmpnum=0 \_def\_tmpb{}% - \_ifnum\_vidolines=0 \_tmpnum=-1 \_fi - \_ifeof\_vifile \_tmpnum=\_vidolines\_space \_fi - \_loop \_ifnum\_tmpnum<\_vidolines\_space - \_vireadline - \_ifnum\_vidolines=0 \_else\_advance\_tmpnum by1 \_fi - \_ifeof\_vifile \_tmpnum=\_vidolines\_space \_else \_visaveline \_fi %% save line - \_repeat - \_ea\_prepareverbdata \_ea \_tmpb\_ea{\_tmpb^^J}% - \_catcode`\ =10 \_catcode`\%=9 % used in \commentchars comments - \_ea\_printverb \_tmpb\_end - \_global\_ttlinesave - \_par - \_endgroup - \_ttskip - \_isnextchar\_par{}{\_noindent}% -} -\_def\_vireadline{\_read\_vifile to \_tmp \_incr\_viline } -\_def\_visaveline{\_ea\_addto\_ea\_tmpb\_ea{\_tmp}} - -\_public \verbinput ; - - \_doc ----------------------------- - If the language of your code\label[commentchars]\wlabel{} - printed by \^`\verbinput` supports the - format of comments started by two characters from the beginning of the - line then you can set these characters by \^`\commentchars``<first><second>`. - Such comments are printed in the non-verbatim mode without these two - characters and they look like the verbatim printing is interrupted - at the places where such comments are. - See the section~\ref[lua] for good illustration. - The file `optex.lua` is read by a single command - `\verbinput (4-) optex.lua` here and the `\commentchars --` was set before it. - - If you need to set a special character by \^`\commentchars` then you must - to set the catcode to 12 (and space to 13). Examples: - \begtt - \commentchars // % C++ comments - \commentchars -- % Lua comments - {\catcode`\%=12 \_ea}\commentchars %% % TeX comments - {\catcode`\#=12 \catcode`\ =13 \_ea}\commentchars#{ } % bash comments - \endtt - - There is one limitation when \TeX/ interprets the comments declared by - \^`\commentchars`. Each block of comments is accumulated to one line - and then it is re-interpreted by \TeX. So, the ends of lines in the - comments block are lost. You cannot use macros which - need to scan end of lines, for example `\begtt...\endtt` inside the comments - block does not work. The character `%` is ignored in comments but you can use `\%` - for printing or `%` alone for de-activating `\_endpar` from empty - comment lines. - - Implementation: The \`\commentchars``<first><second>` redefines the \`\_testcommentchars` - used in \^`\_printverb` in order to it removes the following `\_iftrue` - and returns `\_iftrue` or `\_iffalse` depending on the fact that - the comment characters are or aren't present at the beginning of tested line. - If it is true (`\ifnum` expands to `\ifnum 10>0`) then the rest of the - line is added to the \`\_vcomments` macro. - - The \`\_hicomments` is `\relax` by default but it is redefined by \^`\commentchars` - in order to keep no-colorized comments if we need to use feature from - \^`\commentchars`. - - The accumulated comments are printed whenever the non-comment line - occurs. This is done by \`\_printcomments` macro. - You can re-define it, but the main idea must be kept: it is printed in the - group, `\_reloding \_rm` initializes normal font, `\catcodetable0` - returns to normal catcode table used before `\verbinput` is started, and - the text accumulated in `\_vcomments` must be printed by - `\_scantextokens` primitive. - \_cod ----------------------------- - -\_def\_vcomments{} -\_let\_hicomments=\_relax - -\_def\_commentchars#1#2{% - \_def\_testcommentchars ##1##2##3\_relax ##4\_iftrue{\_ifnum % not closed in this macro - \_ifx #1##1\_ifx#2##21\_fi\_fi 0>0 - \_ifx\_relax##3\_relax \_addto\_vcomments{\_endgraf}% empty comment=\enfgraf - \_else \_addto\_vcomments{##3 }\_fi}% - \_def\_hicomments{\_replfromto{\b\n#1#2}{^^J}{\w{#1#2####1}^^J}}% used in \hisyntax -} -\_def\_testcommentchars #1\_iftrue{\_iffalse} % default value of \_testcommentchar -\_def\_printcomments{\_ttskip - {\_catcodetable0 \_reloading \_rm \_everypar={}% - \_noindent \_ignorespaces \_scantextokens\_ea{\_vcomments}\_par}% - \_ttskip -} -\_public \commentchars ; - - \_doc ----------------------------- - The \`\visiblesp` sets spaces as visible characters \char9251. - It redefines the \^`\_dsp`, so it is useful for verbatim modes only. - - The \`\_dsp` is equivalent to {\visiblesp`\ `} primitive. - It is used in all verbatim environments: spaces are active and defined as - `\_dsp` here. - \_cod ----------------------------- - -\_def \_visiblesp{\_ifx\_initunifonts\_relax \_def\_dsp{\_char9251 }% - \_else \_def\_dsp{\_char32 }\_fi} -\_let\_dsp=\ % primitive "direct space" - -\_public \visiblesp ; - -\_endcode - -\_endinput - -History: -2020-01-22 ... \activettchar changed to \verbchar -2020-12-30 ... \secc followed by \begtt must be unbreakable -2020-11-13 ... \commentchars implemented -2020-04-22 ... \ttshift introduced -2020-04-06 ... \visiblesp added -2020-04-04 ... ^^I activated as \t for multiline verbatim - \verbinput <cmds> (...) <filename>, <cmds> added. diff --git a/Master/texmf-dist/tex/luatex/optex/demo/op-biblist.bib b/Master/texmf-dist/tex/luatex/optex/demo/op-biblist.bib deleted file mode 100644 index 691a02ea0ea..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/demo/op-biblist.bib +++ /dev/null @@ -1,298 +0,0 @@ -This is an example of .bib file using by OpTeX. -Petr Olsak 2014 ----------------------------------------------------------- -See the section 1.5.3 of OpTeX documentation for more information. - -@BOOK{white, - author = "David J. Whitehouse", - title = "Handbook of surface and nanometrology", - edition = "2nd", - address = "Boca Raton", - publisher = "CRC Press", - year = 2011, - isbn = "978-1-4200-8201-2", - lang = "en", -} -@BOOK{lech, - author = "Richard Lech", - title = "Fundamental principles of engineering nanometrology", - howpublished = "online", - address = "Oxford", - publisher = "Elsevier", - year = 2009, - isbn = "978-0-08-096454-6", - citedate = "2011/08/29", - url = "http://www.sciencedirect.com/science/book/9780080964546", - option = "autrim:1", -} -@BOOK{Cmej, - author = "Světla Čmejrková and František Daneš and Jindra Světlá", - title = "Jak napsat odborný text", - address = "Praha", - publisher = "Leda", - year = 1999, - isbn = "80-85927-69-1", - key = "Czzmejrkova", -} -@BOOK{ tbn, - bibmark = "Ol00", - author = "Petr Olšák", - title = "\TeX{}book naruby", - edition = "2.", - address = "Brno", - publisher = "Konvoj", - year = 2001, - isbn = "80-7302-007-6", - url = "http://math.feld.cvut.cz/olsak/tbn.html", - option = "urlalso", -} -@BOOK{ tst, - author = "Petr Olšák", - title = "Typografický systém \TeX{}", - edition = "2.", - address = "Brno", - publisher = "Konvoj", - year = 2000, - url = "http://math.feld.cvut.cz/olsak/tst.html", - isbn = "80-85615-91-6", -} -@BOOK{ tpp, - author = "Petr Olšák", - title = "\TeX{} pro pragmatiky", - year = "2013", - address = "Brno", - publisher = "CsTUG", - isbn = "978-80-901950-1-1", - option = "titlepost:{\TeX{} -- CSplain -- OPmac}", - howpublished = "online", - url = "http://math.feld.cvut.cz/olsak/tpp.html", -} -@BOOK{texbook, - author = "Donald Ervin Knuth", - title = "The \TeX{}book", - address = "Boston", - publisher = "Addison-Wesley", - year = 1984, - isbn = "02-011-3448-9", -} -@BOOK{ rowling, - author = "Robert Calbraith", - option = "auprint:{\AU\space [pseudonym of J. K. Rowling]}", - title = "The Cuckoo's Calling", - address = "New York", - publisher = "Mulholland Books", - isbn = "0-316-20684-6", - year = 2013, -} -@BOOK{ earle, - author = "Richard Earle", - title = "The art of cause marketing: - how to use advertising to change personal behavior and public policy", - ednote = "Cover and interior design by Monica \upper{Baziuk}", - address = "New York", - publisher = "McGraw-Hill", - year = 2000, - isbn = "0-07-138702-1", - option = "yearprint:{\copyright2000}", -} -@BOOK{ novaci, - author = "Jan Novák and Helena Nováková", - title = "Alergenní rostliny", - address = "Praha", - publisher = "Knižní klub", - year = 2010, - isbn = "80-242-2591-3", -} -@BOOK{ adobe, - author = "Adobe\ creative\ team", - title = "Adobe Flash CS4 Professional: Oficiální výukový kurz", - ednote = "Přeložil Lukáš \upper{Krejčí}", - address = "Brno", - publisher = "Computer Press", - year = 2009, - isbn = "80-251-2334-8", -} -@BOOK{ nierhaus, - author = "Grehard Nierhaus", - title = "Algorithmic Composition: Paradigms of Automated Music Generation", - address = "Wien", - publisher = "Springer", - year = 2009, - isbn = "3-211-77539-6", - url = "http://www.springerlink.com/content/g7h129", - option = "yearprint:{\copyright2009} urlalso", -} -@BOOK{ taschen, - author = "Laszlo Taschen", - title = "Modern architekture A-Z", - ednote = "vol. 1, A-L", - address = "Köln", - publisher = "Tashen", - year = 2010, - isbn = "383-6521-321", -} -@ARTICLE{ opmactug, - author = "Petr Olšák", - title = "OPmac: Macros for Plain \TeX", - journal = "TUGboat", - publisher = "\TeX{} Users Group", - year = 2013, - volume = 34, - number = 1, - pages = "88--96", - issn = "0896-3207", - url = "http://petr.olsak.net/ftp/olsak/bulletin/tb106olsak-csplain.pdf", - option = "urlalso", - lang = "en", -} -@ARTICLE{ optextug, - author = "Petr Olšák", - title = "\OpTeX/ -- A new generation of Plain \TeX/", - journal = "TUGboat", - publisher = "\TeX{} Users Group", - year = 2020, - volume = 41, - number = 3, - pages = "348--354", - issn = "0896-3207", - url = "http://petr.olsak.net/ftp/olsak/bulletin/tb128olsak-optex.pdf", - option = "urlalso", - lang = "en", -} -@THESIS{ mirekB, - author = "Miroslav Olšák", - title = "Kvadratické rovnice na slovech", - school = "Univerzita Karlova v~Praze, fakulta Matematicko-fyzikální", - address = "Praha", - year = 2013, - url = "http://www.olsak.net/mirek/bakalarka/", - type = "Bakalářská práce", - option = "urlalso", -} -@THESIS{ mirekM, - author = "Miroslav Olšák", - title = "Součiny Fréchetovských prostorů", - school = "Univerzita Karlova v~Praze, fakulta Matematicko-fyzikální", - address = "Praha", - year = 2015, - url = "http://www.olsak.net/mirek/diplomka/", - type = "Diplomová práce", - option = "urlalso", -} -@THESIS{ mirekD, - author = "Miroslav Olšák", - title = "Generalizing CSP-related results to infinite algebras", - school = "Univerzita Karlova v~Praze, fakulta Matematicko-fyzikální", - address = "Praha", - year = 2019, - url = "https://dspace.cuni.cz/handle/20.500.11956/108756", - type = "Disertační práce", - option = "urlalso", - lang = "en", -} -@INBOOK{ zakonVS, - author = "Česko", - title = "Zákon č. 111 ze dne 22. dubna 1998 o vysokých školách a o změně a - doplnění dalších zákonů (zákon o vysokých školách)", - booktitle = "Sbírka zákonů České republiky", - year = 1998, - series = "částka 39, s. 5388--5419", - url = "http://aplikace.mvcr.cz/archiv2008/sbirka/1998/sb039-98.pdf", - issn = "1211-1244", - option = "urlalso unpublished", - key = "Czzesko", -} -@INBOOK{ lonka, - author = "Kristi Lonka", - title = "Helping doctoral students to finish their theses", - booktitle = "Teaching academic writing in European higher education", - editor = "Lennart Björk and Gerd Bräuer and Lotte Reinecker and Peter Stray Jörgensen", - address = "Dordrecht", - publisher = "Kluwer Academic Publ.", - year = 2003, - pages = "113--131", - isbn = "1-4020-1208-X", - option = "edprint:{\ED,~eds.}", -} -@INBOOK{ demay, - author = "Y. Demay", - title = "Computation of 2D viscoelastic flows for a differential constitutive equation", - editor = "J-M. Piau and J-F. Agassant", - booktitle = "Rheology for Polymer Melt Processing", - howpublished = "online", - publisher = "Elsevier", - year = 2011, - numbering = "s.~237--255", - isbn = "0444822369", - citedate = "2011/08/29", - url = "htpp://www.sciencedirect.com/science/article/pii/S0169310796800098", - option = "nowarn", -} -@INPROCEEDINGS{ distler, - author = "Tobias Distler and Rüdiger Kapitza", - title = "Increasing performance in Byzantine fault-tolerant systems on-demand replica consistency", - booktitle = "Proceedings of the Eurosys' 2011 conference. April 10 -- April 13, 2011, Salzburg, Austria", - address = "New York", - publisher = "Association of computer machinery", - year = 2011, - numbering = "pp.~91--105", - isbn = "1-4503-0634-8", -} -@INPROCEEDINGS{ talich, - author = "Milan Talich and Filip Antoš", - title = "Metody a postupy doigitalizace a online zpřístupnění starých kartografických děl", - howpublished = "online", - booktitle = "INFORUM 2011: 17. ročník konference o profesionálních informačních zdrojích, - 24.--26. května 2011, Vysoká škola ekonomická v Praze", - option = "unpublished", - url = "http://www.inforum.cz/pdf/2011/talich-milan.pdf", - citedate = "2011/08/29", - year = 2011, - option = "nowarn", -} -@ARTICLE{ mansouri, - author = "Majdi Mansouri and Quachani Ilham and Hicham Snoussi and Richard Cédric", - title = "Adaptive quantized target tracking in wireless sensors networks", - journal = "Wireles Networks", - number = 7, - volume = 17, - pages = "1625--1639", - lang = "en", - option = "nowarn", -} -@ARTICLE{ calafiore, - author = "Giuseppe C. Calafiore and Fabrizio Dabbene and Roberto Tempo", - title = "Research~ on probabilistic methods for control system design", - journal = "Automatica", - howpublished = "online", - Publisher = "Elsevier", - month = "July", - year = 2011, - volume = 47, - number = 7, - pages = "1279--1293", - issn = "0005-1090", - citedate = "2011/07/17", - doi = "10.1016/j.automatica.2011.02.029", - lang = "en", -} -@MISC{ bowles, - title = "What is fluid technology?", - ednote = "Bowles Fluidics Corp.", - citedate = "2011/10/10", - url = "http://www.bowlesfluidics.com/capabilites/technology/", - key = "zzzz" -} -@MISC{ biernatova, - author = "Olga Biernátová and Jan Skůpa", - title = "Bibliografické okazy a citace dokumentů: dle ČSN ISO 690 (01~0197) platné od 1. dubna 2011", - ednote = "Brno, 2011. Vytvořeno ve spolupráci s portálem citace.com", - url = "http://www.citace.com/dokumenty.php", -} -@MISC{ trtikova, - author = "Ilona Trtíková and Ludmila Tichá", - title = "Jak citovat", - ednote = "Ústřední knihovna ČVUT, 2011, 2012, 2013", - citedate = "2014/04/22", - url = "http://knihovna.cvut.cz/studium/jak-psat-vskp/doporuceni/jak-citovat/", -} diff --git a/Master/texmf-dist/tex/luatex/optex/demo/op-demo.tex b/Master/texmf-dist/tex/luatex/optex/demo/op-demo.tex deleted file mode 100644 index e17b2f0b2f7..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/demo/op-demo.tex +++ /dev/null @@ -1,127 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\fontfam[LMfonts] % Default font family: Latin Modern - -\margins/1 a5 (1,1,1,1.4)cm % A5 paper + 1cm margins -\typosize[9/10.5] % 9pt font / 10.5pt baselineskip -\parindent=10pt % typesetting parameters -\hyperlinks \Blue\Blue % active hyperlinks -\verbchar` % in-text verbatim by `...` -\everyintt={\Red} % in-text verbatim Red -\enquotes % use \"text" for English quotation - -\tit Demonstration - -\nonum\notoc\sec Contents - -\maketoc % Table of Contents is auto-generated here - -\sec Lists - -The lists have to be surrounded by `\begitems` -and `\enditems` sequences. - -\begitems -* First item. -* Second item. - \begitems \style i - * Nested item list, - * numbered by roman numerals. - \enditems -* Last item. -\enditems - -\secc Title of\nl Subsection - -The subsection text\dots - -\sec References - -There is a numbered equation. -The number is auto-generated by `\eqmark` sequence. -$$\label[my-eq] - a^2 + b^2 = c^2 \eqmark -$$ -We can refer to Equation~\ref[my-eq] -on page~\pgref[my-eq]. -We can refer to Table~\ref[my-tab] in -Section~\ref[tab-sec] too. And Figure~\ref[my-pic] -is on page~\pgref[my-pic]. - -\sec Hyperlinks - -You can refer to \url{http://petr.olsak.net} using `\url`. -Or use `\ulink` if the raw URL needs to be hidden: -\ulink[http://petr.olsak.net/optex]{\OpTeX/ page}. -The parameter text is colorized and it becomes -an active link if the `\hyperlinks` sequence -is used at the beginning of the document. -Internal links are activated too. - -\sec[tab-sec] Tables - -The `\table` sequence can be used -instead of \"low level" `\halign`. -The following table is framed by the `\frame` sequence -to get a double frame. - -\bigskip -\caption/t [my-tab] Testing table. -\cskip -\centerline{% - \frame{\table{|r|c|l|}{\crl - \bf Title A & \bf Title B & \bf Title C \crll - first & second & third \cr - next & text & last \crl }}} - -\sec Images - -The images (PDF, JPG, PNG, TIFF) can be inserted -by `\inspic` sequence. The `\caption` -can be added if you need to refer to a figure. - -\label[my-pic] -\centerline {\picwidth=2.7cm \inspic{op-ring.png}} -\cskip -\caption/f The nonempty ideal of a simple ring -- - the ring itself. - -\sec Verbatim - -In-text verbatim is surrounded by the character declared -by `\verbchar` sequence. The listing can be surrounded -by `\begtt` and `\endtt` sequences -\begtt -This is verbatim. - All characters are printed $$, \, # etc. -\endtt -or it can be included by `\verbinput` from an external file. - -\verbinput (98-100) op-demo.tex - -\sec Math - -The Math alphabets -`\mit`, `\cal`, `\script`, `\frak`, `\bbchar`, `\bi` -are provided. For example: -$$ - {\bi A} = \pmatrix {\cal C & \script C \cr - \frak M & \bbchar R }. -$$ -Hundreds of AMS symbols are available: -$\sphericalangle, \boxplus, \Cup, \Cap, \ldots$ - -\sec Others - -The `\fontfam` command selects a desired family of fonts. -The `\typosize` or `\typoscale` sequences set the size -and baselineskip of used fonts (including math fonts). -The `\fnote` generates a footnote\fnote{Like this} and -`\mnote` generates a margin note. -The `\margins` sets margins and paper dimensions. -The `\cite` sequence can be used for bibliographic citations. -The `\bib` sequence creates one bibliography record. Or -you can use `\usebib` for direct access to the {\tt.bib} files. -The list of features does not end here\dots - -\bye diff --git a/Master/texmf-dist/tex/luatex/optex/demo/op-letter-cs.tex b/Master/texmf-dist/tex/luatex/optex/demo/op-letter-cs.tex deleted file mode 100644 index b6883cb74c6..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/demo/op-letter-cs.tex +++ /dev/null @@ -1,41 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\letter % \letter OpTeX style activated -\fontfam[bonum] -\cslang - -\address - Vážený pan - Mgr. Bořek Byrokrat - ředitel Ústavu pro další možnosti - Úřední 789 - 123 45 Praha 1 - -\hfill V Praze dne \today - -\subject Žádost o možnost další možnosti - -Vážený pane řediteli, - -na základě Vašeho dopisu č.j.~123456/78-dat a elektronické výzvy si dovoluji -Vás požádat o prozkoumání mé možnosti další možnosti. -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do -eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim -veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea -commodo consequat. - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do -eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim -veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea -commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit -esse cillum dolore eu fugiat nulla pariatur. - -S úctou - -\hfill \address - {\it Petr Olšák} - specialista na \TeX/ - Ulice 12345 - Praha 13 - -\bye diff --git a/Master/texmf-dist/tex/luatex/optex/demo/op-letter-en.tex b/Master/texmf-dist/tex/luatex/optex/demo/op-letter-en.tex deleted file mode 100644 index 0154e48c018..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/demo/op-letter-en.tex +++ /dev/null @@ -1,38 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex -\useOpTeX - -\letter % \letter OpTeX style activated -\enlang \enquotes % Language and quote style -\fontfam[bonum] - -\hfill\address - Alice Author - 123 Sender Street - City 4567 - -\bigskip - -\address - Mr. Bobby Bureaucrat - 456 Magnolia Street - City 8901 - -\hfill\today - -\subject Inquiry regarding \"lorem ipsum" - -Dear Mr. Bureaucrat, - -\lorem[1-2] % 2 paragraphs of blindtext - -Thank you for your time. - -With best regards, - -\bigskip % leave some space for signature -\bigskip - -Alice Author - -\bye - diff --git a/Master/texmf-dist/tex/luatex/optex/demo/op-ring.png b/Master/texmf-dist/tex/luatex/optex/demo/op-ring.png deleted file mode 100644 index de7811df83e..00000000000 Binary files a/Master/texmf-dist/tex/luatex/optex/demo/op-ring.png and /dev/null differ diff --git a/Master/texmf-dist/tex/luatex/optex/demo/op-slides-bg.png b/Master/texmf-dist/tex/luatex/optex/demo/op-slides-bg.png deleted file mode 100644 index 4ac1ad8c38c..00000000000 Binary files a/Master/texmf-dist/tex/luatex/optex/demo/op-slides-bg.png and /dev/null differ diff --git a/Master/texmf-dist/tex/luatex/optex/demo/op-slides.tex b/Master/texmf-dist/tex/luatex/optex/demo/op-slides.tex deleted file mode 100644 index 50bcdaffa60..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/demo/op-slides.tex +++ /dev/null @@ -1,322 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\slides % OpTeX slides style activated - -\catcode`<=13 % special printing of <text> -\def<#1>{\hbox{$\langle$\it#1\/$\rangle$}} -\everyintt={\catcode`\<=13} - -\hyperlinks\Blue\Blue % hyperlinks are used in the title page -\backgroundpic{op-slides-bg.png} % background picture - -\verbchar` % inline verbatim -\enquotes % English quotes \"..." - -\slideshow %------------------------------------------------------------ - - -\tit \OpTeX/ slides - -\subtit Petr Olšák\nl petr@olsak.net - -\subtit\rm \url{http://petr.olsak.net/optex} - -\pg; %------------------------------------------------------------------ - -\sec Basics - -* The the simple document looks like: - -\begtt -\slides % style initialized -%\wideformat % 16:9 -\slideshow % partially uncovering ideas - -\sec First slide -text -\pg; - -\sec Second slide -text -\pg. -\endtt - -* If `\slideshow` is missing or commented out then - \"partially uncovering ideas" (see later) are deactivated. It is useful - for printing. -* The `\slideshow` must be the last command in the declaration part of the - document. -* By default, the slides have A5 landscape format. - You can declare `\wideformat`. Then the height is the same - but width is 263\,mm, i.\,e.~the ratio width:height is 16:9. - -\pg; %------------------------------------------------------------------ - -\sec Title slide - -* Title of the document (used at the first slide) is created - by `\tit Title` (terminated by end of line). -* The `\subtit Author name etc.`\ (terminated by end of line) - can be used after `\tit` at the first slide. -* You can use `\nl` for a new line in paragraphs or titles. - -\sec Default design - -* The paragraph texts are ragged right. -* Titles, subtitles, and section titles are centered. -* The `\sec` and `\secc` are printed without numbers. -* No paragraph indentation, a little vertical space between paragraphs. -* The Heros font family (aka Helvetica) is initialized as default.\nl - Sans-serif FiraMath font for math typesetting is used.\nl - If `\fontfam[<famname>]` precedes `\slides` then it rewrites default. -* The items in lists are started by a blue square (`\type X` and `\type x` ). - -\pg; %------------------------------------------------------------------ - -\sec One slide (one page) - -* Top-level item list is activated by default. The asterisk `*` opens - new item at the top-level list. -* Nested items lists (second and more level) should be created in - the `\begitems`\dots`\enditems` environments. -* Each slide (page) must be terminated by `\pg;` command. -* The last slide must be terminated by `\pg.` command or by `\bye`. - -\begtt -\sec My ideas - -* First idea -* Second idea - \begitems - * First sub-idea - * Second sub-idea - \enditems -* Final idea -\endtt - -* Note: each page is processed in a group, so: put your own definitions - (if~exist) before `\slideshow` or use `\global` assignment. - -\pg; %------------------------------------------------------------------ - -\sec Partially uncovering ideas - -* The control sequence `\pg` must be followed by:\pg+ -\begitems -* the character `;` -- normal next page,\pg+ -* the character `.` -- the end of the document,\pg+ -* the character `+` -- next page keeps the same text - and a next text is added (usable for partially uncovering of ideas).\pg+ -\enditems - -* Summary: -\begtt -\pg; ... next page -\pg. ... the end of the document -\pg+ ... uncover next text on the same page -\endtt -\pg+ - -* When `\slideshow` is not declared then `\pg+` is deactivated.\pg+ -* The `\pg+` creates a new \"virtual page", so the current paragraph is - terminated. - -\pg; %------------------------------------------------------------------ - -\sec Example with partially uncovering ideas - -The previous page was created by: - -\begtt -\sec Partially uncovering ideas - -* The control sequence `\pg` must be followed by:\pg+ - -\begitems -* the character `.` -- normal next page,\pg+ -* the character `;` -- the end of the document,\pg+ -* the character `+` -- next ... \pg+ -\enditems - -* Summary -... -* When `\slideshow` is not declared - then `\pg+` is deactivated.\pg+ -* The `\pg+` creates a new \"virtual page", - so the current paragraph is terminated. -\pg; -\endtt - -\pg; %------------------------------------------------------------------ - -\sec Notes to `\slideshow` - -* When `\slideshow` is active then you cannot reference sections by - hyperlinked `\ref`. Only `\pgref` works (and goes to the last layer - of the referenced page). -* If the text overfull the page (slide) then it follows to the next page without - saying explicitly `\pg;`. But `\slideshow` cannot work in this case.\pg+ -* If `\slideshow` then each part of page between two `\pg`'s or between - `\slideshow` and the first `\pg` is processed in a local group. -* If not `\slideshow` then the document is not separated to groups. - This can lead to different results. So, you can put `\slideopen` command - instead of `\slideshow`. Then local groups are opened exactly as when - `\slideshow` is used but `\slideshow` is not activated. Example: - -\begtt -\slides -\def\foo...{...} % global definitions. -%\slideshow % printing version, no slide show. -\slideopen % opens group for first page. -... first page -\pg; % closes group and opens group for second page. -... second page -\pg. % closes group of the last page. -\endtt - -\pg; %------------------------------------------------------------------ - -\sec More about design - -* You can use `\backgroundpic{<image-file>}` for putting an image to the background. -* You can re-declare `\footline` or re-define internal macros for design as - you wish. -* The TeXGyre Heros font is used as default text font, the FiraMath is used - for math. -* If you want to use another text font fmaily, use `\fontfam` - {\em before} `\slides` command. -* If you want to use different math font, use - `\loadmath{[font]}` before `\fontfam` (if used) and before `\slides`. For example: - -\begtt -\loadmath{[Asana-Math]} % Math font: Asana -\fontfam[Termes] % Text font: Termes -\slides -... -\endtt - -* You can put the images or text wherever using `\putimege` or `\puttext` - macros... - -\pg; %------------------------------------------------------------------ - -\sec Putting images and texts wherever - -* `\puttext <right> <up> {<text>}` puts a <text> to the desired place: - It moves the current point <right> and <up>, puts the <text> and returns - back, so the typesetting continues from previous position. The parameters - <right> and <up> are dimensions. For example - -\begtt -\puttext 0mm 50mm {\Red HELLO} -\endtt - - \puttext 0mm 50mm {\Red HELLO} - prints red HELLO, as shown here.\pg+ - -* `\putpic <right> <up> <width> <height> {<image-file>}` - puts the image with desired <width> and <height> at the position like - `\puttext` puts the text. - - \putpic .8\hsize 20mm 30mm \nospec {op-ring.png} -* The ring above is the result of - -\begtt -\putpic .8\hsize 20mm 30mm \nospec {op-ring.png} -\endtt - % - used at beginning of this paragraph.\pg+ -* Use `\nospec` for <width> or <height> of the image if you don't want to specify both - dimensions (because you don't want to change the image aspect ratio). - -\pg; %------------------------------------------------------------------ - -\sec Limits of the \code{\\pg+} sequence - -* The \code{\\pg+} sequence (partially uncovering ideas) cannot be used inside - a~group. -* The exception is the nested environment `\begitems...\enditems`. -* The `\pg+` always finalizes the current paragraph. - It is impossible to hide only a part of the horizontal mode.\pg+ - -\sec The \code{\\layers}\,...\code{\\endlayers} environment - -If you really need something unsupported by `\pg+` then you can use - -\begtt \catcode`\<=13 -\layers <number> -<layered text> -\endlayers -\endtt - -* The <layered text> should include conditions like - `\ifnum\layernum...` or `\ifcase\layernum`. - It is printed <number> times to more slide pages (layers) with the same - surrounding text. See next page... - -\pg; %------------------------------------------------------------------ - -\sec Example of \code{\\layers} environment - -The `\slides` style provides a shortcut `\use` and a macro `\pshow` (means -partially show): - -\begtt -\def\use#1#2{\ifnum\layernum#1\relax#2\fi} -\def\pshow#1{\use{=#1}\Red \use{<#1}\Transparent \ignorespaces} -\endtt -`\use{=3}{do something}` does something only if `\layernum=3`. - -The `{\pshow<num> <text>}` prints <text> in Red when current layer is equal -to <num> or it prints <text> normally when current layers is greater than <num>. -The transparent (invisible) text is used in other cases. - -The following dance: -\layers 3 -{\pshow2 Second text.} {\pshow3 Third text.} {\pshow1 First text.} -\endlayers -\pg+ - -was generated by - -\begtt -\layers 3 -{\pshow2 Second text.} {\pshow3 Third text.} {\pshow1 First text.} -\endlayers -\endtt - -\pg+ -* The <layered text> is treated as a macro parameter. So, you cannot use verbatim - nor `\sec` titles here. Maximal one `\layers` environment can be per one - page (terminated by `\pg+` or `\pg;` or `\pg.` - -\pg; %------------------------------------------------------------------ - -\sec Comparison \OpTeX/ slides with Beamer\fnote{\url{http://www.ctan.org/pkg/beamer}} - -The \LaTeX{} package {\bf\Blue Beamer} gives much more features and many themes -are prepared for Beamer, {\bf\Red but} -\pg+ -* the user of Beamer is forced to {\em program} his/her document using - dozens of \code{\\begin{foo}} and \code{\\end{foo}} and many another - programming constructions,\pg+ -* plain \TeX{} gives you a possibility to simply - {\em write} your document with minimal markup. The result is more compact. - You can concentrate on the contents of your document, not on the - programming syntax.\pg+ -* User needs to read 250 pages of doc for understanding Beamer,\pg+ -* on the other hand, you need to read only eleven - slides\fnote{this twelfth slide isn't counted} - and you are ready to use {\bf\Blue\OpTeX/ slides}. - -\pg; %------------------------------------------------------------------ - -\null -\vskip2cm -\centerline{\typosize[35/40]\bf Thanks for your attention}\pg+ - -\vskip2cm -\centerline{\Blue\typosize[60/70]\bf Questions?} - -\pg. %----------------------------- THE END ---------------------------- - diff --git a/Master/texmf-dist/tex/luatex/optex/pkg/emoji.opm b/Master/texmf-dist/tex/luatex/optex/pkg/emoji.opm deleted file mode 100644 index e14579135f1..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/pkg/emoji.opm +++ /dev/null @@ -1,55 +0,0 @@ -% This is the macro package used by OpTeX, see http://petr.olsak.net/optex - -% emoji.opm, Petr Olšák <petr@olsak.net>, 2021 - -% Emoji allows us to use colored emoticons as characters from the font. -% The \emoji{<name>} command is available, see texdoc emoji (from -% corresponding LaTeX package). - -\_namespace{emoji} - -\_codedecl \.emoji {Emotikons from the TwemojiMozilla.ttf font} - - \_doc ----------------------------- - Font TwemojiMozilla.ttf is loaded. The font feature +colr is needed. - The `\emojifont` is implemented using `\_resizethefont` as size-dependent. - \_cod ----------------------------- - -\_initunifonts -\_font\.tenemoji=[TwemojiMozilla]:+colr -\_def\.emojifont{\.tenemoji\_resizethefont} -\_def\.emoji#1{{\.emojifont\_trycs{_emoji_:#1}{\_opwarning{uknown emoji "#1"}}}} - - \_doc ----------------------------- - The mapping from names or aliases to the codes are declared in the - `emoji-table.def` file from the \LaTeX/ package emoji. - \_cod ----------------------------- - -\_bgroup - \_def\__emoji_def #1 #2#3#4#5#6{% #1=n, #2=data, #3=name, #4=aliases, #5=descr, #6=versi - \_sxdef{_emoji_:#3}{#2}% - \_ifx^#4^\_else \_foreach #4, \_do ##1, {\_global\_slet{_emoji_:##1}{_emoji_:#3}}\_fi - } - \_def\ProvidesExplFile#1#2#3#4{} - \_def\__emoji_group#1 #2{} - \_def\__emoji_subgroup#1 #2{} - \_catcode`\#=12 - \_input {emoji-table.def}% defining emoji names -\_egroup - -\_nspublic \emoji \emojifont ; - -\_endnamespace - -\_endcode - -\begtt % ----------------------- Testing file --------------------------- -\load[emoji] -We can use \emoji{grinning} or directly: {\emojifont 😀} too. -\bye -\endtt % ---------------------------------------------------------------- - -More than 3000 emoticons are available. - -If you want black-and-white pictograms, see another font: -\url{http://petr.olsak.net/optex/optex-tricks.html\#fawesome} diff --git a/Master/texmf-dist/tex/luatex/optex/pkg/plain-at.opm b/Master/texmf-dist/tex/luatex/optex/pkg/plain-at.opm deleted file mode 100644 index 3277d7b24ea..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/pkg/plain-at.opm +++ /dev/null @@ -1,43 +0,0 @@ -% This is macro package used by OpTeX, see http://petr.olsak.net/optex - -\_codedecl \_undefined {Obscure @ names from plain TeX <2020-05-22>} - -\_setctable \_optexcatcodes -% PlainTeX obscure names: -\_catcode`\@=11 -\_let\z@=\_zo -\_let\z@skip=\_zoskip -\_newdimen\p@ \p@=1pt -\_chardef\@ne=1 -\_chardef\tw@=2 -\_chardef\thr@@=3 -\_chardef\sixt@@n=16 -\_mathchardef\@m=1000 -\_mathchardef\@M=10000 -\_mathchardef\@MM=20000 -\_countdef\m@ne=22 \m@ne=-1 -\_chardef\@cclv=255 -\_mathchardef\@cclvi=256 -\_skipdef\skip@=0 -\_dimendef\dimen@=0 -\_dimendef\dimen@i=1 -\_dimendef\dimen@ii=2 -\_countdef\count@=255 -\_def\m@th{\_mathsurround\z@} -\_def\o@lign{\_lineskiplimit\z@ \_oalign} -\_def\n@space{\_nulldelimiterspace\z@ \m@th} -\_newdimen\p@renwd \p@renwd=8.75pt -\_def\alloc@#1#2#3#4#5{\_allocator#5{\_csstring#2}#3} -\_restorectable - -\_endcode - -We absolutely don't recommend to use such obscure names in your macros. But -sometimes you need to read an old plain TeX document or a macro file. You -can load this file in such cases. For example: - -\begtt - \load [plain-at, shapepar.sty] -\endtt - -\_endinput diff --git a/Master/texmf-dist/tex/luatex/optex/pkg/qrcode.opm b/Master/texmf-dist/tex/luatex/optex/pkg/qrcode.opm deleted file mode 100644 index 5df0ad2c074..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/pkg/qrcode.opm +++ /dev/null @@ -1,2707 +0,0 @@ -% This is macro package used by OpTeX, see http://petr.olsak.net/optex -% qrcode.opm, Petr Olšák <petr@olsak.net>, 2020 - -% See end of the file for more information - -\_codedecl \qrcode {Macro for QR code printing <2020-05-04>} - -\_namespace{qr} - -\_newcount\.i -\_newcount\.j -\_newcount\.a -\_newcount\.b -\_newcount\.c - -\_def\.relax{\_relax}% - -\_def\.utfstring#1{\_directlua{ - local text="\_luaescapestring{#1}" - tex.print(string.format('\_pcent.2x',string.len(text))) - for i=1,string.len(text) do - tex.print(string.format('\_pcent.2x',string.byte(text,i))) - end -}} -\_def\.utfstringlen#1{\_directlua{ - tex.print(string.len("\_luaescapestring{#1}")) -}} - -\_def\.g_preface_macro#1#2{% - % #1 = macro to be appended to - % #2 = code to add - \_edef\.codeA{#2}% - \_ea\_ea\_ea\_gdef\_ea\_ea\_ea#1\_ea\_ea\_ea{\_ea\.codeA#1}% -} - -\_def\.getstringlength#1{% - \_xdef\.stringlength{\.utfstringlen{#1}}% -}% - -\_def\.for#1=#2to#3by#4#{\.forA{#1}{#2}{#3}{#4}} -\_long\_def\.forA#1#2#3#4#5{\_begingroup - {\_escapechar=`\\ % allocation of #1 as counter: - \_ea \_ifx\_csname for:\_string#1\_endcsname \_relax - \_csname newcount\_ea\_endcsname \_csname for:\_string#1\_endcsname\_fi - \_ea}\_ea\_let\_ea#1\_csname for:\_string#1\_endcsname - #1=#2% - \_def\.forB{#5\_advance#1by#4\_relax \_ea\.forC}% - \_ifnum#4>0 \_def\.forC{\_ifnum#1>#3\_relax\_else\.forB\_fi}% - \_else \_def\.forC{\_ifnum#1<#3\_relax\_else\.forB\_fi}% - \_fi - \_ifnum#4=0 \let\.forC=\_relax \_fi - \.forC \_endgroup -} - -\_def\.padatfront#1#2{% - % #1 = macro containing text to pad - % #2 = desired number of characters - % Pads a number with initial zeros. - \.getstringlength{#1}% - \.a=\.stringlength\_relax - \_advance\.a by 1\_relax - \.for \.iz = \.a to #2 by 1 - {\.g_preface_macro{#1}{0}}% -} - -\.a=-1\_relax -\_def\.savehexsymbols(#1#2){% - \_advance\.a by 1\_relax% - \_ea\_def\_csname _qr_hexchar:\_the\.a\_endcsname{#1}% - \_ea\_edef\_csname _qr_hextodecimal:#1\_endcsname{\_the\.a}% - \_ifnum\.a=15\_relax - %Done. - \_let\.next=\_relax - \_else - \_def\.next{\.savehexsymbols(#2)}% - \_fi - \.next -}% -\.savehexsymbols(0123456789abcdef\_relax\_relax)% - -\_def\.decimaltobase#1#2#3{% - % #1 = macro to store result - % #2 = decimal representation of a positive integer - % #3 = new base - \_bgroup - \_edef\.newbase{#3}% - \_gdef\.base_result{}% - \.a=#2\_relax% - \.decimaltobase_recursive% - \_xdef#1{\.base_result}% - \_egroup -} -\_def\.decimaltobase_recursive{% - \.b=\.a - \_divide\.b by \.newbase\_relax - \_multiply\.b by -\.newbase\_relax - \_advance\.b by \.a\_relax - \_divide\.a by \.newbase\_relax - \_ifnum\.b<10\_relax - \_edef\.newdigit{\_the\.b}% - \_else - \_edef\.newdigit{\_csname _qr_hexchar:\_the\.b\_endcsname}% - \_fi - \_edef\.argument{{\_noexpand\.base_result}{\.newdigit}}% - \_ea\.g_preface_macro\.argument - \_ifnum\.a=0\_relax - \_relax - \_else - \_ea\.decimaltobase_recursive - \_fi -} -\_long\_def\.xaddto#1#2{\_xdef#1{#1#2}} - -\_def\.decimaltohex[#1]#2#3{% - % #1 (opt.) = number of hex digits to create - % #2 = macro to store result - % #3 = decimal digits to convert - \.decimaltobase{#2}{#3}{16}% - \.padatfront{#2}{#1}% -} -\_def\.decimaltobinary[#1]#2#3{% - % #1 (opt.) = number of bits to create - % #2 = macro to store result - % #3 = decimal digits to convert - \.decimaltobase{#2}{#3}{2}% - \.padatfront{#2}{#1}% -} - -\.for \.iz = 0 to 15 by 1% - {% - \.decimaltohex[1]{\.hexchar}{\_the\.iz}% - \.decimaltobinary[4]{\.bits}{\_the\.iz}% - \_ea\_xdef\_csname _qr_b2h:\.bits\_endcsname{\.hexchar}% - \_ea\_xdef\_csname _qr_h2b:\.hexchar\_endcsname{\.bits}% - }% - -\_def\.binarytohex[#1]#2#3{% - % #1 (optional) = # digits desired - % #2 = macro to save to - % #3 = binary string (must be multiple of 4 bits) - \_def\.testi{#1}% - \_ifx\.testi\.relax% - %No argument specified - \_def\.desireddigits{0}% - \_else - \_def\.desireddigits{#1}% - \_fi - \_gdef\.base_result{}% - \_edef\.argument{(#3\_relax\_relax\_relax\_relax\_relax)}% - \_ea\.binarytohex_int\.argument% - \.padatfront{\.base_result}{\.desireddigits}% - \_xdef#2{\.base_result}% -} -\_def\.binarytohex_int(#1#2#3#4#5){% - % #1#2#3#4 = 4 bits - % #5 = remainder, including \_relax\_relax\_relax\_relax\_relax terminator - \_def\.testi{#1}% - \_ifx\.testi\.relax% - %Done. - \_def\.next{\_relax}% - \_else% - \_xdef\.base_result{\.base_result\_csname _qr_b2h:#1#2#3#4\_endcsname}% - \_def\.next{\.binarytohex_int(#5)}% - \_fi% - \.next% -} - -\_def\.hextobinary[#1]#2#3{% - % #1 (optional) = # bits desired - % #2 = macro to save to - % #3 = hexadecimal string - \_bgroup - \_def\.testi{#1}% - \_ifx\.testi\.relax - %No argument specified - \_def\.desireddigits{0}% - \_else - \_def\.desireddigits{#1}% - \_fi - \_gdef\.base_result{}% - \_edef\.argument{(#3\_relax\_relax)}% - \_ea\.hextobinary_int\.argument% - \.padatfront{\.base_result}{\.desireddigits}% - \_xdef#2{\.base_result}% - \_egroup -} -\_def\.hextobinary_int(#1#2){% - % #1 = hexadecimal character - % #2 = remainder, including \_relax\_relax terminator - \_def\.testii{#1}% - \_ifx\.testii\.relax - %Done. - \_def\.next{\_relax}% - \_else - \_xdef\.base_result{\.base_result\_csname _qr_h2b:#1\_endcsname}% - \_def\.next{\.hextobinary_int(#2)}% - \_fi - \.next -} - -\_def\.hextodecimal#1#2{% - \_edef\.argument{#2}% - \_ea\.a\_ea=\_ea\_number\_ea"\.argument\_relax - \_edef#1{\_the\.a}% -} - -\_def\.hextodecimal#1#2{% - % #1 = macro to store result - % #2 = hexadecimal representation of a positive integer - \_bgroup - \.a=0\_relax - \_edef\.argument{(#2\_relax)}% - \_ea\.hextodecimal_recursive\.argument% - \_xdef#1{\_the\.a}% - \_egroup -} -\_def\.hextodecimal_recursive(#1#2){% - % #1 = first hex char - % #2 = remainder - \_advance \.a by \_csname _qr_hextodecimal:#1\_endcsname\_relax% - \_edef\.testii{#2}% - \_ifx\.testii\.relax% - %Done. - \_let\.next=\_relax% - \_else - %There's at least one more digit. - \_multiply\.a by 16\_relax - \_edef\.next{\_noexpand\.hextodecimal_recursive(#2)}% - \_fi% - \.next% -} - -\_def\.storetomatrix#1#2#3#4{% - % #1 = matrix name - % #2 = row number - % #3 = column number - % #4 = value of matrix entry - \_ea\_gdef\_csname #1@#2@#3\_endcsname{#4}% -}% - -\_def\.estoretomatrix#1#2#3#4{% - % This version performs exactly one expansion on #4. - % #1 = matrix name - % #2 = row number - % #3 = column number - % #4 = value of matrix - \_ea\_gdef\_csname #1@#2@#3\_ea\_endcsname\_ea{#4}% -}% - -\_def\.matrixentry#1#2#3{% - % #1 = matrix name - % #2 = row number - % #3 = column number - \_csname #1@#2@#3\_endcsname -}% - -\_def\.createsquareblankmatrix#1#2{% -% \.creatematrix{#1}% - \_ea\_gdef\_csname #1@numrows\_endcsname{#2}% - \_ea\_gdef\_csname #1@numcols\_endcsname{#2}% - \.for \.iz = 1 to #2 by 1% - {\.for \.jz = 1 to #2 by 1% - {\.storetomatrix{#1}{\_the\.iz}{\_the\.jz}{\.blank}}}% -}% - -\_def\.numberofrowsinmatrix#1{% - \_csname #1@numrows\_endcsname% -}% - -\_def\.numberofcolsinmatrix#1{% - \_csname #1@numcols\_endcsname% -}% - -\_def\.setnumberofrows#1#2{% - \_ea\_xdef\_csname #1@numrows\_endcsname{#2}% -}% - -\_def\.setnumberofcols#1#2{% - \_ea\_xdef\_csname #1@numcols\_endcsname{#2}% -}% - -\_newdimen\.desiredheight -\_newdimen\.modulesize - -\_def\.link#1#2{\_hbox{\_pdfstartlink height\_ht0 depth0pt \.border - user{/Subtype/Link/A <</Type/Action/S/URI/URI(#1)>>}\_relax #2\_pdfendlink}% -} -\_def\.border{% - \_ifcsname _qr_kv:qrborder\_endcsname attr{/C[\.kv{qrborder}] /Border[0 0 .6]}% - \_else attr{/Border[0 0 0]}% - \_fi -} - -\_def\.createliteralmatrix#1#2#3{% - % #1 = matrix name - % #2 = m, the number of rows and columns in the square matrix - % #3 = a string of m^2 tokens to be written into the matrix -% \.creatematrix{#1}% - \_ea\_xdef\_csname #1@numrows\_endcsname{#2}% - \_ea\_xdef\_csname #1@numcols\_endcsname{#2}% - \_gdef\.literalmatrix_tokens{#3}% - \.for \.iz = 1 to #2 by 1% - {\.for \.jz = 1 to #2 by 1% - {\_ea\.createliteralmatrix_int\_ea(\.literalmatrix_tokens)% - \.estoretomatrix{#1}{\_the\.iz}{\_the\.jz}{\.entrytext}% - }% - }% -} -\_def\.createliteralmatrix_int(#1#2){% - \_def\.entrytext{#1}% - \_gdef\.literalmatrix_tokens{#2}% -} - -\.createliteralmatrix{finderpattern}{8}{% - \.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.whitefixed - \.blackfixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.blackfixed\.whitefixed - \.blackfixed\.whitefixed\.blackfixed\.blackfixed\.blackfixed\.whitefixed\.blackfixed\.whitefixed - \.blackfixed\.whitefixed\.blackfixed\.blackfixed\.blackfixed\.whitefixed\.blackfixed\.whitefixed - \.blackfixed\.whitefixed\.blackfixed\.blackfixed\.blackfixed\.whitefixed\.blackfixed\.whitefixed - \.blackfixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.blackfixed\.whitefixed - \.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.whitefixed - \.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed -}% - -\.createliteralmatrix{alignmentpattern}{5}{% - \.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed - \.blackfixed\.whitefixed\.whitefixed\.whitefixed\.blackfixed - \.blackfixed\.whitefixed\.blackfixed\.whitefixed\.blackfixed - \.blackfixed\.whitefixed\.whitefixed\.whitefixed\.blackfixed - \.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed -}% - -\_def\.copymatrixentry#1#2#3#4#5#6{% - % Copy the (#2,#3) entry of matrix #1 - % to the (#5,#6) position of matrix #4. - \_ea\_ea\_ea\_global% - \_ea\_ea\_ea\_let\_ea\_ea\_csname #4@#5@#6\_endcsname - \_csname #1@#2@#3\_endcsname -}% - -\_def\.createduplicatematrix#1#2{% - % #1 = name of copy - % #2 = original matrix to be copied -% \.creatematrix{#1}% - \.for \.iz = 1 to \.numberofrowsinmatrix{#2} by 1% - {\.for \.jz = 1 to \.numberofcolsinmatrix{#2} by 1% - {\.copymatrixentry{#2}{\_the\.iz}{\_the\.jz}{#1}{\_the\.iz}{\_the\.jz}% - }% - }% - \.setnumberofrows{#1}{\.numberofrowsinmatrix{#2}}% - \.setnumberofcols{#1}{\.numberofcolsinmatrix{#2}}% -}% - -\_def\.placefinderpattern_int#1#2#3#4#5{% - % Work on matrix #1. - % Start in position (#2, #3) -- should be a corner - % #4 indicates horizontal direction (1=right, -1=left) - % #5 indicates vertical direction (1=down, -1=up) - % - % In this code, \sourcei and \sourcej are TeX counts working through the finderpattern matrix, - % and i and j are counters indicating positions in the big matrix. - \.setcounter\.i{#2}% - \.for \.sourcei=1 to 8 by 1% - {\.setcounter\.j{#3}% - \.for \.sourcej=1 to 8 by 1% - {\.copymatrixentry{finderpattern}{\_the\.sourcei}{\_the\.sourcej}% - {#1}{\_the\.i}{\_the\.j}% - \.addtocounter\.j{#5}% - }% - \.addtocounter\.i{#4}% - }% -}% - -\_def\.placefinderpatterns#1{% - % #1=matrix name - \.placefinderpattern_int{#1}{1}{1}{1}{1}% - \.placefinderpattern_int{#1}{\.numberofrowsinmatrix{#1}}{1}{-1}{1}% - \.placefinderpattern_int{#1}{1}{\.numberofcolsinmatrix{#1}}{1}{-1}% -}% - -\_def\.placetimingpatterns#1{% - %Set \.endingcol to n-8. - \.a=\.size\_relax% - \_advance\.a by -8\_relax% - \_edef\.endingcol{\_the\.a}% - \.for \.jz = 9 to \.endingcol by 1% - {\_ifodd\.jz\_relax% - \.storetomatrix{#1}{7}{\_the\.jz}{\.blackfixed}% - \.storetomatrix{#1}{\_the\.jz}{7}{\.blackfixed}% - \_else% - \.storetomatrix{#1}{7}{\_the\.jz}{\.whitefixed}% - \.storetomatrix{#1}{\_the\.jz}{7}{\.whitefixed}% - \_fi% - }% -}% - -\_def\.placealignmentpattern_int#1#2#3{% - % Work on matrix #1. - % Write an alignment pattern into the matrix, centered on (#2,#3). - \.a=#2\_relax% - \_advance\.a by -2\_relax% - \.b=#3\_relax% - \_advance\.b by -2\_relax% - \.setcounter\.i{\_the\.a}% - \.for \.iz=1 to 5 by 1% - {\.setcounter\.j{\_the\.b}% - \.for \.jz=1 to 5 by 1% - {\.copymatrixentry{alignmentpattern}{\_the\.iz}{\_the\.jz}% - {#1}{\_the\.i}{\_the\.j}% - \.stepcounter\.j - }% - \.stepcounter\.i - }% -}% - -\_newifi\_ifqr_incorner% -\_def\.placealignmentpatterns#1{% - %There are k^2-3 alignment patterns, - %arranged in a (k x k) grid within the matrix. - %They begin in row 7, column 7, - %except that the ones in the NW, NE, and SW corners - %are omitted because of the finder patterns. - %Recall that - % * \.k stores k, - % * \.alignment_firstskip stores how far between the 1st and 2nd row/col, & - % * \.alignment_generalskip stores how far between each subsequent row/col. - \_ea\_ifnum\.k>0\_relax - %There will be at least one alignment pattern. - %N.B. k cannot equal 1. - \_ea\_ifnum\.k=2\_relax - % 2*2-3 = exactly 1 alignment pattern. - \.a=7\_relax - \_advance\.a by \.alignment_firstskip\_relax - \_xdef\.targetii{\_the\.a}% - \.placealignmentpattern_int{#1}{\.targetii}{\.targetii}% - \_else - % k is at least 3, so the following loops should be safe. - \_xdef\.targetii{7}% - \.for \.ii = 1 to \.k by 1% - {\_ifcase\.ii\_relax% - \_relax% \.ii should never equal 0. - \_or - \_xdef\.targetii{7}% If \.ii = 1, we start in row 7. - \_or - %If \.ii = 2, we add the firstskip. - \.a=\.targetii\_relax% - \_advance\.a by \.alignment_firstskip\_relax% - \_xdef\.targetii{\_the\.a}% - \_else - %If \.ii>2, we add the generalskip. - \.a=\.targetii\_relax% - \_advance\.a by \.alignment_generalskip\_relax% - \_xdef\.targetii{\_the\.a}% - \_fi - \.for \.jj = 1 to \.k by 1% - {\_ifcase\.jj\_relax% - \_relax% \.jj should never equal 0. - \_or - \_xdef\.targetjj{7}% If \.jj=1, we start in row 7. - \_or - %If \.jj=2, we add the firstskip. - \.a=\.targetjj\_relax% - \_advance\.a by \.alignment_firstskip% - \_xdef\.targetjj{\_the\.a}% - \_else - %If \.jj>2, we add the generalskip. - \.a=\.targetjj\_relax% - \_advance\.a by \.alignment_generalskip% - \_xdef\.targetjj{\_the\.a}% - \_fi - \.incornerfalse% - \_ifnum\.ii=1\_relax - \_ifnum\.jj=1\_relax - \.incornertrue - \_else - \_ifnum\.k=\.jj\_relax - \.incornertrue - \_fi - \_fi - \_else - \_ea\_ifnum\.k=\.ii\_relax - \_ifnum\.jj=1\_relax - \.incornertrue - \_fi - \_fi - \_fi - \_ifqr_incorner - \_relax - \_else - \.placealignmentpattern_int{#1}{\.targetii}{\.targetjj}% - \_fi - }% ends \.for \.jj - }% ends \.for \.ii - \_fi - \_fi -}% - -\_def\.placedummyformatpatterns#1{% - \.for \.jz = 1 to 9 by 1% - {\_ifnum\.jz=7\_relax% - \_else% - \.storetomatrix{#1}{9}{\_the\.jz}{\.formatsquare}% - \.storetomatrix{#1}{\_the\.jz}{9}{\.formatsquare}% - \_fi% - }% - \.setcounter\.j{\.size}% - \.for \.jz = 1 to 8 by 1% - {\.storetomatrix{#1}{9}{\_the\.j}{\.formatsquare}% - \.storetomatrix{#1}{\_the\.j}{9}{\.formatsquare}% - \.addtocounter\.j{-1}% - }% - %Now go back and change the \.formatsquare in (n-8,9) to \.blackfixed. - \.addtocounter\.j{1}% - \.storetomatrix{#1}{\_the\.j}{9}{\.blackfixed}% -}% - -\_def\.placedummyversionpatterns#1{% - \_ea\_ifnum\.version>6\_relax - %Must include version information. - \_global\.i=\.size% - \_global\_advance\.i by -10\_relax% - \.for \.iz = 1 to 3 by 1% - {\.for \.jz = 1 to 6 by 1% - {\.storetomatrix{#1}{\_the\.i}{\_the\.jz}{\.formatsquare}% - \.storetomatrix{#1}{\_the\.jz}{\_the\.i}{\.formatsquare}% - }% - \.stepcounter\.i - }% - \_fi -}% - -\_def\.writebit(#1#2)#3{% - % #3 = matrix name - % (qr_i,qr_j) = position to write in (counters) - % #1 = bit to be written - % #2 = remaining bits plus '\_relax' as an end-of-file marker - \_edef\.datatowrite{#2}% - \_ifnum#1=1 - \.storetomatrix{#3}{\_the\.i}{\_the\.j}{\.black}% - \_else - \.storetomatrix{#3}{\_the\.i}{\_the\.j}{\.white}% - \_fi -}% - -\_newifi\_ifqr_rightcol -\_newifi\_ifqr_goingup - -\_def\.writedata_hex#1#2{% - % #1 = name of a matrix that has been prepared with finder patterns, timing patterns, etc. - % #2 = a string consisting of bytes to write into the matrix, in two-char hex format. - \.setcounter\.i{\.numberofrowsinmatrix{#1}}% - \.setcounter\.j{\.numberofcolsinmatrix{#1}}% - \.rightcoltrue - \.goinguptrue - \_edef\.argument{{#1}(#2\_relax\_relax\_relax)}% - \_ea\.writedata_hex_recursive\.argument% -}% - -\_def\.writedata_hex_recursive#1(#2#3#4){% - % #1 = name of a matrix that has been prepared with finder patterns, timing patterns, etc. - % (qr_i,qr_j) = position to write in counters - % #2#3#4 contains the hex codes of the bytes to be written, plus \_relax\_relax\_relax - % as an end-of-file marker - \_edef\.testii{#2}% - \_ifx\.testii\.relax% - % #2 is \_relax, so there is nothing more to write. - \_relax - \_let\.go=\_relax - \_else - % #2 is not \_relax, so there is another byte to write. - \.hextobinary[8]{\.bytetowrite}{#2#3}% - \_xdef\.datatowrite{\.bytetowrite\_relax}% %Add terminating "\_relax" - \.writedata_recursive{#1}% %This function actually writes the 8 bits. - \_edef\.argument{{#1}(#4)}% - \_ea\_def\_ea\.go\_ea{\_ea\.writedata_hex_recursive\.argument}% %Call self to write the next bit. - \_fi - \.go -}% - -\_def\.writedata#1#2{% - % #1 = name of a matrix that has been prepared with finder patterns, timing patterns, etc. - % #2 = a string consisting of 0's and 1's to write into the matrix. - \.setcounter\.i{\.numberofrowsinmatrix{#1}}% - \.setcounter\.j{\.numberofcolsinmatrix{#1}}% - \.rightcoltrue - \.goinguptrue - \_edef\.datatowrite{#2\_relax}% - \.writedata_recursive{#1}% -}% - -\_def\.iblank{\.blank}% - -\_def\.writedata_recursive#1{% - % #1 = matrix name - % (qr_i,qr_j) = position to write in (counters) - % \.datatowrite contains the bits to be written, plus '\_relax' as an end-of-file marker - \_ea\_let\_ea\.squarevalue\_csname #1@\_the\.i @\_the\.j\_endcsname% - \_ifx\.squarevalue\.iblank - %Square is blank, so write data in it. - \_ea\.writebit\_ea(\.datatowrite){#1}% - %The \.writebit macro not only writes the first bit of \.datatowrite into the matrix, - %but also removes the bit from the 'bitstream' of \.datatowrite. - \_fi - %Now adjust our position in the matrix. - \_ifqr_rightcol - %From the right-hand half of the two-bit column, we always move left. Easy peasy. - \.addtocounter\.j{-1}% - \.rightcolfalse - \_else - %If we're in the left-hand column, things are harder. - \_ifqr_goingup - %First, suppose we're going upwards. - \_ifnum\.i>1\_relax% - %If we're not in the first row, things are easy. - %We move one to the right and one up. - \.addtocounter\.j{1}% - \.addtocounter\.i{-1}% - \.rightcoltrue - \_else - %If we are in the first row, then we move to the left, - %and we are now in the right-hand column on a downward pass. - \.addtocounter\.j{-1}% - \.goingupfalse - \.rightcoltrue - \_fi - \_else - %Now, suppose we're going downwards. - \_ea\_ifnum\.size>\.i\_relax% - %If we're not yet in the bottom row, things are easy. - %We move one to the right and one down. - \.addtocounter\.j{1}% - \.addtocounter\.i{1}% - \.rightcoltrue - \_else - %If we are in the bottom row, then we move to the left, - %and we are now in the right-hand column on an upward pass. - \.addtocounter\.j{-1}% - \.rightcoltrue - \.goinguptrue - \_fi - \_fi - %One problem: what if we just moved into the 7th column? - %Das ist verboten. - %If we just moved (left) into the 7th column, we should move on into the 6th column. - \_ifnum\.j=7\_relax% - \.setcounter\.j{6}% - \_fi - \_fi - %Now check whether there are any more bits to write. - \_ifx\.datatowrite\.relax - % \.datatowrite is just `\_relax', so we're done. - \_let\.nexttoken=\_relax - \_relax - \_else - % Write some more! - \_def\.nexttoken{\.writedata_recursive{#1}}% - \_fi - \.nexttoken -}% - -\_def\.writeremainderbits#1{% - % #1 = name of a matrix that has been prepared and partly filled. - % (qr_i,qr_j) = position to write in counters - \_ea\_ifnum\.numremainderbits>0\_relax - \_def\.datatowrite{}% - \.for \.iz = 1 to \.numremainderbits by 1% - {\.xaddto{\.datatowrite}{0}}% - \.xaddto{\.datatowrite}{\_relax}% terminator - \.writedata_recursive{#1}% - \_fi -}% - -\_newifi\_ifqr_cellinmask - -\_def\.setmaskingfunction#1{% - % #1 = 1 decimal digit for the mask. (I see no reason to use the 3-bit binary code.) - % The current position is (\themaski,\themaskj), with indexing starting at 0. - \_edef\.maskselection{#1}% - \_ea\_ifcase\.maskselection\_relax - %Case 0: checkerboard - \_def\.parsemaskingfunction{% - % Compute mod(\themaski+\themaskj,2)% - \.a=\.maski% - \_advance\.a by \.maskj% - \.b=\.a% - \_divide\.b by 2% - \_multiply\.b by 2% - \_advance\.a by -\.b% - \_edef\.maskfunctionresult{\_the\.a}% - }% - \_or - %Case 1: horizontal stripes - \_def\.parsemaskingfunction{% - % Compute mod(\themaski,2)% - \_ifodd\.maski\_relax% - \_def\.maskfunctionresult{1}% - \_else% - \_def\.maskfunctionresult{0}% - \_fi% - }% - \_or - %Case 2: vertical stripes - \_def\.parsemaskingfunction{% - % Compute mod(\themaskj,3)% - \.a=\.maskj% - \_divide\.a by 3% - \_multiply\.a by 3% - \_advance\.a by -\.maskj% - \_edef\.maskfunctionresult{\_the\.a}% - }% - \_or - %Case 3: diagonal stripes - \_def\.parsemaskingfunction{% - % Compute mod(\themaski+\themaskj,3)% - \.a=\.maski% - \_advance\.a by \.maskj% - \.b=\.a% - \_divide\.b by 3% - \_multiply\.b by 3% - \_advance\.b by -\.a% - \_edef\.maskfunctionresult{\_the\.b}% - }% - \_or - %Case 4: wide checkerboard - \_def\.parsemaskingfunction{% - % Compute mod(floor(\themaski/2) + floor(\themaskj/3),2) % - \.a=\.maski% - \_divide\.a by 2% - \.b=\.maskj% - \_divide\.b by 3% - \_advance\.a by \.b% - \.b=\.a% - \_divide\.a by 2% - \_multiply\.a by 2% - \_advance\.a by -\.b% - \_edef\.maskfunctionresult{\_the\.a}% - }% - \_or - %Case 5: quilt - \_def\.parsemaskingfunction{% - % Compute mod(\themaski*\themaskj,2) + mod(\themaski*\themaskj,3) % - \.a=\.maski% - \_multiply\.a by \.maskj% - \.b=\.a% - \.c=\.a% - \_divide\.a by 2% - \_multiply\.a by 2% - \_advance\.a by -\.c% (result will be -mod(i*j,2), which is negative.) - \_divide\.b by 3% - \_multiply\.b by 3% - \_advance\.b by -\.c% (result will be -mod(i*j,3), which is negative.) - \_advance\.a by \.b% (result is negative of what's in the spec.) - \_edef\.maskfunctionresult{\_the\.a}% - }% - \_or - %Case 6: arrows - \_def\.parsemaskingfunction{% - % Compute mod( mod(\themaski*\themaskj,2) + mod(\themaski*\themaskj,3) , 2 ) % - \.a=\.maski% - \_multiply\.a by \.maskj% - \.b=\.a% - \.c=\.a% - \_multiply\.c by 2% % \.c equals 2*i*j. - \_divide\.a by 2% - \_multiply\.a by 2% - \_advance\.c by -\.a% Now \.c equals i*j + mod(i*j,2). - \_divide\.b by 3% - \_multiply\.b by 3% - \_advance\.c by -\.b% (Now \.c equals mod(i*j,2) + mod(i*j,3). - \.a=\.c% - \_divide\.a by 2% - \_multiply\.a by 2% - \_advance\.c by-\.a% - \_edef\.maskfunctionresult{\_the\.c}% - }% - \_or - %Case 7: shotgun - \_def\.parsemaskingfunction{% - % Compute mod( mod(\themaski+\themaskj,2) + mod(\themaski*\themaskj,3) , 2 ) % - \.a=\.maski% - \_advance\.a by \.maskj% %So \.a = i+j - \.b=\.maski% - \_multiply\.b by \.maskj% %So \.b = i*j - \.c=\.a% - \_advance\.c by \.b% So \.c = i+j+i*j - \_divide\.a by 2% - \_multiply\.a by 2% - \_advance\.c by -\.a% So \.c = mod(i+j,2) + i*j - \_divide\.b by 3% - \_multiply\.b by 3% - \_advance\.c by -\.b% So \.c = mod(i+j,2) + mod(i*j,3) - \.a=\.c% - \_divide\.c by 2% - \_multiply\.c by 2% - \_advance\.a by -\.c% - \_edef\.maskfunctionresult{\_the\.a}% - }% - \_fi -}% - -\_def\.checkifcellisinmask{% - % The current position is (\.iz,\.jz), in TeX counts, - % but the counters (maski,maskj) should contain - % the current position with indexing starting at 0. - % That is, maski = \.iz-1 and maskj = \.jz-1. - % - % \.parsemaskingfunction must have been set by a call to \.setmaskingfunction - \.parsemaskingfunction - \_ea\_ifnum\.maskfunctionresult=0\_relax - \.cellinmasktrue - \_else - \.cellinmaskfalse - \_fi -}% - -\_newcount\.maski -\_newcount\.maskj - -\_def\.applymask#1#2#3{% - % #1 = name of a matrix that should be filled out completely - % except for the format and/or version information. - % #2 = name of a new matrix to contain the masked version - % #3 = 1 decimal digit naming the mask - \.createduplicatematrix{#2}{#1}% - \.setmaskingfunction{#3}% - \.setcounter\.maski{-1}% - \.for \.iz = 1 to \.size by 1% - {\.stepcounter\.maski - \.setcounter\.maskj{-1}% - \.for \.jz = 1 to \.size by 1% - {\.stepcounter\.maskj - \.checkifcellisinmask - \_ifqr_cellinmask - \.checkifcurrentcellcontainsdata{#2}% - \_ifqr_currentcellcontainsdata - \.flipcurrentcell{#2}% - \_fi - \_fi - }% - }% -}% - -\_newifi\_ifqr_currentcellcontainsdata -\.currentcellcontainsdatafalse - -\_def\.iwhite{\.white}% -\_def\.iblack{\.black}% - -\_def\.checkifcurrentcellcontainsdata#1{% - % #1 = name of matrix - \.currentcellcontainsdatafalse - \_ea\_ifx\_csname #1@\_the\.iz @\_the\.jz\_endcsname\.iwhite - \.currentcellcontainsdatatrue - \_fi - \_ea\_ifx\_csname #1@\_the\.iz @\_the\.jz\_endcsname\.iblack - \.currentcellcontainsdatatrue - \_fi -}% - -\_def\.flippedblack{\.black}% -\_def\.flippedwhite{\.white}% - -\_def\.flipcurrentcell#1{% - % #1 = name of matrix - % (\.iz, \.jz) = current position, in TeX counts. - % This assumes the cell contains data, either black or white! - \_ea\_ifx\_csname #1@\_the\.iz @\_the\.jz\_endcsname\.iwhite - \.storetomatrix{#1}{\_the\.iz}{\_the\.jz}{\.flippedblack}% - \_else - \.storetomatrix{#1}{\_the\.iz}{\_the\.jz}{\.flippedwhite}% - \_fi -}% - -\_def\.chooseandapplybestmask#1{% - % #1 = name of a matrix that should be filled out completely - % except for the format and/or version information. - % This function applies all eight masks in succession, - % calculates their penalties, and remembers the best. - % The number indicating which mask was used is saved in \.mask_selected. - \.createduplicatematrix{originalmatrix}{#1}% - \.message{<Applying Mask 0...}% - \.applymask{originalmatrix}{#1}{0}% - \.message{done. Calculating penalty...}% - \.evaluatemaskpenalty{#1}% - \_xdef\.currentbestpenalty{\.penalty}% - \.message{penalty is \.penalty>^^J}% - \_gdef\.currentbestmask{0}% - \.for \.iz = 1 to 7 by 1% - {\.message{<Applying Mask \_the\.iz...}% - \.applymask{originalmatrix}{currentmasked}{\_the\.iz}% - \.message{done. Calculating penalty...}% - \.evaluatemaskpenalty{currentmasked}% - \.message{penalty is \.penalty>^^J}% - \_ea\_ea\_ea\_ifnum\_ea\.penalty\_ea<\.currentbestpenalty\_relax - %We found a better mask. - \_xdef\.currentbestmask{\_the\.iz}% - \.createduplicatematrix{#1}{currentmasked}% - \_xdef\.currentbestpenalty{\.penalty}% - \_fi - }% - \_xdef\.mask_selected{\.currentbestmask}% - \.message{<Selected Mask \.mask_selected>^^J}% -}% - -\_def\.Ni{3}% -\_def\.Nii{3}% -\_def\.Niii{40}% -\_def\.Niv{10}% -\_def\.fiveones{11111}% -\_def\.fivezeros{00000}% -\_def\.twoones{11}% -\_def\.twozeros{00}% -\_def\.finderA{00001011101}% -\_def\.finderB{10111010000}% -\_def\.finderBthree{1011101000}% -\_def\.finderBtwo{101110100}% -\_def\.finderBone{10111010}% -\_def\.finderBzero{1011101}% -\_newifi\_ifqr_stringoffive -\_def\.addpenaltyiii{% - \.addtocounter\.penaltyiii{\.Niii}% -}% -\_newcount\.totalones -\_newcount\.penaltyi -\_newcount\.penaltyii -\_newcount\.penaltyiii -\_newcount\.penaltyiv -\_def\.evaluatemaskpenalty#1{% - % #1 = name of a matrix that we will test for the penalty - % according to the specs. - \.setcounter\.penaltyi{0}% - \.setcounter\.penaltyii{0}% - \.setcounter\.penaltyiii{0}% - \.setcounter\.penaltyiv{0}% - \_bgroup%localize the meanings we give to the symbols - \_def\.black{1}\_def\.white{0}% - \_def\.blackfixed{1}\_def\.whitefixed{0}% - \_def\.formatsquare{0}% This is not stated in the specs, but seems - % to be the standard implementation. - \_def\.blank{0}% These would be any bits at the end. - % - \.setcounter\.totalones{0}% - \.for \.iz=1 to \.size by 1% - {\_def\.lastfive{z}% %The z is a dummy, that will be removed before any testing. - \.stringoffivefalse - \_def\.lasttwo_thisrow{z}% %The z is a dummy. - \_def\.lasttwo_nextrow{z}% %The z is a dummy. - \_def\.lastnine{z0000}% %The 0000 stands for the white space to the left. The z is a dummy. - \_def\.ignore_finderBat{0}% - \.for \.jz=1 to \.size by 1% - {\_edef\.newbit{\.matrixentry{#1}{\_the\.iz}{\_the\.jz}}% - % - % LASTFIVE CODE FOR PENALTY 1 - % First, add the new bit to the end. - \_ea\.xaddto\_ea\.lastfive\_ea{\.newbit}% - \_ifnum\.jz<5\_relax% - %Not yet on the 5th entry. - %Don't do any testing. - \_else - % 5th entry or later. - % Remove the old one, and then test. - \.removefirsttoken\.lastfive% - \_ifx\.lastfive\.fiveones% - \_ifqr_stringoffive - %This is a continuation of a previous block of five or more 1's. - \.stepcounter\.penaltyi - \_else - %This is a new string of five 1's. - \.addtocounter\.penaltyi{\.Ni}% - \_global\.stringoffivetrue - \_fi - \_else - \_ifx\.lastfive\.fivezeros% - \_ifqr_stringoffive - %This is a continuation of a previous block of five or more 0's. - \.stepcounter\.penaltyi - \_else - %This is a new string of five 0's. - \.addtocounter\.penaltyi{\.Ni}% - \_global\.stringoffivetrue - \_fi - \_else - %This is not a string of five 1's or five 0's. - \_global\.stringoffivefalse - \_fi - \_fi - \_fi - % - % 2x2 BLOCKS FOR PENALTY 2 - % Every 2x2 block of all 1's counts for \.Nii penalty points. - % We do not need to run this test in the last row. - \_ea\_ifnum\_ea\.iz\_ea<\.size\_relax - \_ea\.xaddto\_ea\.lasttwo_thisrow\_ea{\.newbit}% - %Compute \.iplusone - \.a=\.iz\_relax% - \_advance\.a by 1% - \_edef\.iplusone{\_the\.a}% - % - \_edef\.nextrowbit{\.matrixentry{#1}{\.iplusone}{\_the\.jz}}% - \_ea\.xaddto\_ea\.lasttwo_nextrow\_ea{\.nextrowbit}% - \_ifnum\.jz<2\_relax% - %Still in the first column; no check. - \_else - %Second column or later. Remove the old bits, and then test. - \.removefirsttoken\.lasttwo_thisrow - \.removefirsttoken\.lasttwo_nextrow - \_ifx\.lasttwo_thisrow\.twoones - \_ifx\.lasttwo_nextrow\.twoones - \.addtocounter\.penaltyii{\.Nii}% - \_fi - \_else - \_ifx\.lasttwo_thisrow\.twozeros - \_ifx\.lasttwo_nextrow\.twozeros - \.addtocounter\.penaltyii{\.Nii}% - \_fi - \_fi - \_fi - \_fi - \_fi - % - % LASTNINE CODE FOR PENALTY 3 - % First, add the new bit to the end. - \_ea\.xaddto\_ea\.lastnine\_ea{\.newbit}% - \_ifnum\.jz<7\_relax% - %Not yet on the 7th entry. - %Don't do any testing. - \_else - % 7th entry or later. - % Remove the old one, and then test. - \.removefirsttoken\.lastnine - \_ea\_ifnum\.size=\.jz\_relax% - % Last column. Any of the following should count: - % 1011101 (\.finderBzero) - % 10111010 (\.finderBone) - % 101110100 (\.finderBtwo) - % 1011101000 (\.finderBthree) - % 10111010000 (\.finderB) - \_ifx\.lastnine\.finderB - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBthree - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBtwo - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBone - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBzero - \.addpenaltyiii - \_fi - \_fi - \_fi - \_fi - \_fi - \_else - \_ifx\.lastnine\.finderA% %Matches 0000 1011101 - \.addpenaltyiii - %Also, we record our discovery, so that we can't count this pattern again - %if it shows up four columns later as 1011101 0000. - % - %Set \.ignore_finderBat to \.jz+4. - \.a=\.jz\_relax% - \_advance\.a by 4% - \_xdef\.ignore_finderBat{\_the\.a}% - \_else - \_ifx\.lastfive\.finderB% %Matches 1011101 0000. - \_ea\_ifnum\.ignore_finderBat=\.jz\_relax - %This pattern was *not* counted already earlier. - \.addpenaltyiii - \_fi - \_fi - \_fi - \_fi - \_fi - % - %COUNT 1's FOR PENALTY 4 - \_ea\_ifnum\.newbit=1\_relax% - \.stepcounter\.totalones - \_fi - }% end of j-loop - }% end of i-loop - % - %NOW WE ALSO NEED TO RUN DOWN THE COLUMNS TO FINISH CALCULATING PENALTIES 1 AND 3. - \.for \.jz=1 to \.size by 1% - {\_def\.lastfive{z}% %The z is a dummy, that will be removed before any testing. - \.stringoffivefalse - \_def\.lastnine{z0000}% %The 0000 stands for the white space to the left. The z is a dummy. - \_def\.ignore_finderBat{0}% - \.for \.iz=1 to \.size by 1% - {\_edef\.newbit{\.matrixentry{#1}{\_the\.iz}{\_the\.jz}}% - % - % LASTFIVE CODE FOR PENALTY 1 - % First, add the new bit to the end. - \_ea\.xaddto\_ea\.lastfive\_ea{\.newbit}% - \_ifnum\.iz<5\_relax% - %Not yet on the 5th entry. - %Don't do any testing. - \_else - % 5th entry or later. - % Remove the old one, and then test. - \.removefirsttoken\.lastfive - \_ifx\.lastfive\.fiveones% - \_ifqr_stringoffive - %This is a continuation of a previous block of five or more 1's. - \.stepcounter\.penaltyi - \_else - %This is a new string of five 1's. - \.addtocounter\.penaltyi{\.Ni}% - \_global\.stringoffivetrue - \_fi - \_else - \_ifx\.lastfive\.fivezeros% - \_ifqr_stringoffive - %This is a continuation of a previous block of five or more 0's. - \.stepcounter\.penaltyi - \_else - %This is a new string of five 0's. - \.addtocounter\.penaltyi{\.Ni}% - \_global\.stringoffivetrue - \_fi - \_else - %This is not a string of five 1's or five 0's. - \_global\.stringoffivefalse - \_fi - \_fi - \_fi - % - % HAPPILY, WE DON'T NEED TO CALCULATE PENALTY 2 AGAIN. - % - % LASTNINE CODE FOR PENALTY 3 - % First, add the new bit to the end. - \_ea\.xaddto\_ea\.lastnine\_ea{\.newbit}% - \_ifnum\.iz<7\_relax% - %Not yet on the 7th entry. - %Don't do any testing. - \_else - % 7th entry or later. - % Remove the old one, and then test. - \.removefirsttoken\.lastnine - \_ea\_ifnum\.size=\.iz\_relax% - % Last column. Any of the following should count: - % 1011101 (\.finderBzero) - % 10111010 (\.finderBone) - % 101110100 (\.finderBtwo) - % 1011101000 (\.finderBthree) - % 10111010000 (\.finderB) - \_ifx\.lastnine\.finderB - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBthree - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBtwo - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBone - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBzero - \.addpenaltyiii - \_fi - \_fi - \_fi - \_fi - \_fi - \_else - \_ifx\.lastnine\.finderA% %Matches 0000 1011101 - \.addpenaltyiii - %Also, we record our discovery, so that we can't count this pattern again - %if it shows up four columns later as 1011101 0000. - % - %Set \.ignore_finderBat to \.iz+4. - \.a=\.iz\_relax% - \_advance\.a by 4% - \_xdef\.ignore_finderBat{\_the\.a}% - \_else - \_ifx\.lastfive\.finderB% %Matches 1011101 0000. - \_ea\_ifnum\.ignore_finderBat=\.iz\_relax - %This pattern was *not* counted already earlier. - \.addpenaltyiii - \_fi - \_fi - \_fi - \_fi - \_fi - % - }% end of i-loop - }% end of j-loop - \_egroup - % - %CALCULATE PENALTY 4 - %According to the spec, penalty #4 is computed as - % floor( |(i/n^2)-0.5|/0.05 ) - % where i is the total number of 1's in the matrix. - % This is equal to abs(20*i-10n^2) div n^2. - % - \.a=\.totalones\_relax - \_multiply\.a by 20\_relax - \.b=\.size\_relax - \_multiply\.b by \.size\_relax - \.c=10\_relax - \_multiply\.c by \.b\_relax - \_advance\.a by -\.c\_relax - \_ifnum\.a<0\_relax - \_multiply\.a by -1\_relax - \_fi - \_divide\.a by \.b\_relax - \.setcounter\.penaltyiv{\_the\.a}% - % - %CALCULATE TOTAL PENALTY - \.a=\_the\.penaltyi\_relax% - \_advance\.a by \_the\.penaltyii\_relax% - \_advance\.a by \_the\.penaltyiii\_relax% - \_advance\.a by \_the\.penaltyiv\_relax% - \_edef\.penalty{\_the\.a}% -}% - -\_def\.removefirsttoken#1{% - %Removes the first token from the macro named in #1. - \_edef\.argument{(#1)}% - \_ea\.removefirsttoken_int\.argument% - \_xdef#1{\.removefirsttoken_result}% -}% -\_def\.removefirsttoken_int(#1#2){% - \_def\.removefirsttoken_result{#2}% -}% - -\_def\.writeformatstring#1#2{% - % #1 = matrix name - % #2 = binary string representing the encoded and masked format information - \.setcounter\.i{9}% - \.setcounter\.j{1}% - \_edef\.argument{{#1}(#2\_relax)}% - \_ea\.writeformatA_recursive\.argument - % - \.setcounter\.i{\.numberofrowsinmatrix{#1}}% - \.setcounter\.j{9}% - \_ea\.writeformatB_recursive\.argument -}% - -\_def\.writeformatA_recursive#1(#2#3){% - % #1 = matrix name - % #2 = first bit of string - % #3 = rest of bitstream - % (qr_i,qr_j) = current (valid) position to write (in counters) - \_ifnum#2=1\_relax - \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.blackformat}% - \_else - \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.whiteformat}% - \_fi - % Now the tricky part--moving \.iz and \.jz to their next positions. - \_ifnum\.j<9\_relax - %If we're not yet in column 9, move right. - \.stepcounter\.j - \_ifnum\.j=7\_relax - %But we skip column 7! - \.stepcounter\.j - \_fi - \_else - %If we're in column 9, we move up. - \.addtocounter\.i{-1}% - \_ifnum\.i=7\_relax - %But we skip row 7! - \.addtocounter\.i{-1}% - \_fi - \_fi - %N.B. that at the end of time, this will leave us at invalid position (0,9). - %That makes for an easy test to know when we are done. - \_ifnum\.i<1 - \_let\.nexttoken=\_relax - \_else - \_def\.nexttoken{\.writeformatA_recursive{#1}(#3)}% - \_fi - \.nexttoken -}% - -\_def\.writeformatB_recursive#1(#2#3){% - % #1 = matrix name - % #2 = first bit of string - % #3 = rest of bitstream - % (qr_i,qr_j) = current (valid) position to write (in counters) - \_ifnum#2=1\_relax - \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.blackformat}% - \_else - \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.whiteformat}% - \_fi - % Now the tricky part--moving counters i and j to their next positions. - \.a=\.size% - \_advance\.a by -6\_relax% - \_ifnum\.a<\.i\_relax - %If we're not yet in row n-6, move up. - \.addtocounter\.i{-1}% - \_else - \_ifnum\.a=\.i\_relax - %If we're actually in row n-6, we jump to position (9,n-7). - \.setcounter\.i{9}% - %Set counter j equal to \.size-7. - \_global\.j=\.size\_relax% - \_global\_advance\.j by -7\_relax% - \_else - %Otherwise, we must be in row 9. - %In this case, we move right. - \.stepcounter\.j - \_fi - \_fi - %N.B. that at the end of time, this will leave us at invalid position (9,n+1). - %That makes for an easy test to know when we are done. - \_ea\_ifnum\.size<\.j\_relax - \_let\.nexttoken=\_relax - \_else - \_def\.nexttoken{\.writeformatB_recursive{#1}(#3)}% - \_fi - \.nexttoken -}% - -\_def\.writeversionstring#1#2{% - % #1 = matrix name - % #2 = binary string representing the encoded version information - % - % Plot the encoded version string into the matrix. - % This is only done for versions 7 and higher. - \_ea\_ifnum\.version>6\_relax - %Move to position (n-8,6). - \.setcounter\.i{\.size}\_relax% - \.addtocounter\.i{-8}\_relax% - \.setcounter\.j{6}% - \_edef\.argument{{#1}(#2\_relax)}% - \_ea\.writeversion_recursive\.argument - \_fi -}% - -\_def\.writeversion_recursive#1(#2#3){% - % #1 = matrix name - % #2 = first bit of string - % #3 = rest of bitstream - % (qr_i,qr_j) = current (valid) position to write (in counters) - % - % The version information is stored symmetrically in the matrix - % In two transposed regions, so we can write both at the same time. - % In the comments, we describe what happens in the lower-left region, - % not the upper-right. - % - %Set \.topline equal to n-10. - \.a=\.size\_relax% - \_advance\.a by -10\_relax% - \_edef\.topline{\_the\.a}% - % - \_ifnum#2=1\_relax - \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.blackformat}% - \.storetomatrix{#1}{\_the\.j}{\_the\.i}{\.blackformat}% - \_else - \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.whiteformat}% - \.storetomatrix{#1}{\_the\.j}{\_the\.i}{\.whiteformat}% - \_fi - % Now the tricky part--moving counters i and j to their next positions. - \.addtocounter\.i{-1}% - \_ea\_ifnum\.topline>\.i\_relax - %We've overshot the top of the region. - %We need to move left one column and down three. - \.addtocounter\.j{-1}% - \.addtocounter\.i{3}% - \_fi - %N.B. that at the end of time, this will leave us at invalid position (n-8,0). - %That makes for an easy test to know when we are done. - \_ifnum\.j<1\_relax - \_let\.nexttoken=\_relax - \_else - \_def\.nexttoken{\.writeversion_recursive{#1}(#3)}% - \_fi - \.nexttoken -}% -\_newcount\.hexchars - -\_def\.encode_binary#1{% - % #1 = string of ascii characters, to be converted into bitstream - % - % We do this one entirely in hex, rather than binary, because we can. - % - %Now comes the actual data. - % - {\_endlinechar=-1 \_xdef\.codetext{4\.utfstring{#1}0}}% - %The terminator is 0 - %\.xaddto\.codetext{0}% %This is '0000' in binary. - % - %There is no need to pad bits to make a multiple of 8, - %because the data length is already 4 + 8 + 8n + 4. - % - %Now add padding codewords if needed. - \.setcounter\.hexchars{0}% - \.getstringlength{\.codetext}% - \.setcounter\.hexchars{\.stringlength}% - %Set \.numpaddingcodewords equal to \.totaldatacodewords - hexchars/2. - \.a=-\.hexchars\_relax - \_divide\.a by 2\_relax - \_advance\.a by \.totaldatacodewords\_relax - \_edef\.numpaddingcodewords{\_the\.a}% - % - \_ea\_ifnum\.numpaddingcodewords<0% - \_edef\.ds{ERROR: Too much data! Over by \.numpaddingcodewords bytes.}\_show\.ds - \_fi - \_ea\_ifnum\.numpaddingcodewords>0% - \.for \.iz = 2 to \.numpaddingcodewords by 2% - {\.xaddto{\.codetext}{ec11}}% - \_ea\_ifodd\.numpaddingcodewords\_relax - \.xaddto{\.codetext}{ec}% - \_fi - \_fi -}% - -\_def\.splitcodetextintoblocks{% - \.setcounter\.i{0}% - \.for \.jz = 1 to \.numshortblocks by 1% - {\.stepcounter\.i - \.splitoffblock{\.codetext}{\_the\.i}{\.shortblock_size}% - }% - \_ea\_ifnum\.numlongblocks>0\_relax - \.for \.jz = 1 to \.numlongblocks by 1% - {\.stepcounter\.i - \.splitoffblock{\.codetext}{\_the\.i}{\.longblock_size}% - }% - \_fi -}% - -\_def\.splitoffblock#1#2#3{% - % #1 = current codetext in hexadecimal - % #2 = number to use in csname "\datablock@#2". - % #3 = number of bytes to split off - \.message{<Splitting off block #2>}% - \_ea\_gdef\_csname datablock@#2\_endcsname{}% %This line is important! - \.for \.iz = 1 to #3 by 1% - {\_edef\.argument{{#2}(#1)}% - \_ea\.splitoffblock_int\.argument - }% -}% - -\_def\.splitoffblock_int#1(#2#3#4){% - % #1 = number to use in csname "\datablock@#1". - % #2#3 = next byte to split off - % #4 = remaining text - % - % We add the next byte to "\datablock@#1", - % and we remove it from the codetext. - \_ea\_xdef\_csname datablock@#1\_endcsname{\_csname datablock@#1\_endcsname#2#3}% - \_xdef\.codetext{#4}% -}% - -\_def\.createerrorblocks{% - \.for \.ii = 1 to \.numblocks by 1% - {\.message{<Making error block \_the\.ii>}% - \.FXgenerate_errorbytes{\_csname datablock@\_the\.ii\_endcsname}{\.numeccodewords}% - \_ea\_xdef\_csname errorblock@\_the\.ii\_endcsname{\.FXerrorbytes}% - }% -}% - -\_def\.interleave{% - \.setcounter\.i{0}% - \_def\.interleaved_text{}% - \.message{<Interleaving datablocks of length \.shortblock_size\_space and \.longblock_size: }% - \.for \.ii = 1 to \.shortblock_size by 1% - {\.for \.jj = 1 to \.numblocks by 1% - {\.writefromblock{datablock}{\_the\.jj}% - }% - \.message{\_the\.ii,}% - }% - %The long blocks are numbered \.numshortblocks+1, \.numshortblocks+2, ..., \.numblocks. - \.a=\.numshortblocks\_relax - \_advance\.a by 1\_relax - \.for \.jj = \.a to \.numblocks by 1% - {\.writefromblock{datablock}{\_the\.jj}}% - \_ea\_ifnum\.numlongblocks>0\_relax% - \.message{\.longblock_size.>}% - \_else - \.message{.>}% - \_fi - \.message{<Interleaving errorblocks of length \.numeccodewords: }% - \.for \.ii = 1 to \.numeccodewords by 1% - {\.message{\_the\.ii,}% - \.for \.jj = 1 to \.numblocks by 1% - {\.writefromblock{errorblock}{\_the\.jj}% - }% - }% - \.message{.><Interleaving complete.>}% -}% - -\_def\.writefromblock#1#2{% - % #1 = either 'datablock' or 'errorblock' - % #2 = block number, in {1,...,\.numblocks}% - \_edef\.argument{(\_csname #1@#2\_endcsname\_relax\_relax\_relax)}% - \_ea\.writefromblock_int\.argument - \_ea\_xdef\_csname #1@#2\_endcsname{\.writefromblock_remainder}% -}% - -\_def\.writefromblock_int(#1#2#3){% - % #1#2 = first byte (in hex) of text, which will be written to \.interleaved_text - % #3 = remainder, including \_relax\_relax\_relax terminator. - \.xaddto{\.interleaved_text}{#1#2}% - \.writefromblock_intint(#3)% -}% - -\_def\.writefromblock_intint(#1\_relax\_relax\_relax){% - \_xdef\.writefromblock_remainder{#1}% -}% - -\_newifi\_ifqr_leadingcoeff -\_def\.testleadingcoeff(#1#2){% - % Tests whether the leading digit of #1#2 is 1. - \_ifnum#1=1\_relax - \.leadingcoefftrue - \_else - \.leadingcoefffalse - \_fi -}% - -\_def\.polynomialdivide#1#2{% - \_edef\.numerator{#1}% - \_edef\.denominator{#2}% - \.divisiondonefalse% - \_ea\_ea\_ea\.oneroundofdivision\_ea\_ea\_ea{\_ea\.numerator\_ea}\_ea{\.denominator}% -}% - -\_def\.empty{}% -\_def\.oneroundofdivision#1#2{% - % #1 = f(x), of degree n - % #2 = g(x), of degree m - % Obtains a new polynomial h(x), congruent to f(x) modulo g(x), - % but of degree at most n-1. - % - % If leading coefficient of f(x) is 1, subtracts off g(x) * x^(n-m). - % If leading coefficient of f(x) is 0, strips off that leading zero. - % - \.testleadingcoeff(#1)% - \_ifqr_leadingcoeff - \.xorbitstrings{#1}{#2}% - \_ifqr_xorfailed - %If xor failed, that means our #1 was already the remainder! - \.divisiondonetrue - \_edef\.theremainder{#1}% - \_else - %xor succeeded. We need to recurse. - \_ea\_ea\_ea\_edef\_ea\_ea\_ea\.numerator\_ea\_ea\_ea{\_ea\.stripleadingzero\_ea(\.xorresult)}% - \_fi - \_else - \_ea\_def\_ea\.numerator\_ea{\.stripleadingzero(#1)}% - \_ifx\.numerator\.empty - \.divisiondonetrue - \_def\.theremainder{0}% - \_fi - \_fi - \_ifqr_divisiondone - \_relax - \_else - \_ea\.oneroundofdivision\_ea{\.numerator}{#2}% - \_fi -}% - -\_def\.stripleadingzero(0#1){#1}%Strips off a leading zero. - -\_newifi\_ifqr_xorfailed% This flag will trigger when #2 is longer than #1. - -\_def\.xorbitstrings#1#2{% - % #1 = bitstring - % #2 = bitstring no longer than #1 - \.xorfailedfalse - \_edef\.argument{(,#1\_relax\_relax)(#2\_relax\_relax)}% - \_ea\.xorbitstrings_recursive\.argument - %\.xorbitstrings_recursive(,#1\_relax\_relax)(#2\_relax\_relax)% -}% - -\_def\.xorbitstrings_recursive(#1,#2#3)(#4#5){% - % #1#2#3 is the first bitstring, xor'ed up through #1. - % #4#5 is the remaining portion of the second bitstring. - \_def\.testii{#2}% - \_def\.testiv{#4}% - \_ifx\.testii\.relax - % #1 contains the whole string. - % Now if #4 is also \_relax, that means the two strings started off with equal lengths. - % If, however, #4 is not \_relax, that means the second string was longer than the first, a problem. - \_ifx\.testiv\.relax - %No problem. We are done. - \.xorbit_saveresult(#1#2#3)% - \_else - %Problem! The second string was longer than the first. - \.xorfailedtrue - \_def\.xorresult{}% - \_fi - \_else - % There is still a bit to manipulate in #2. - % Check whether #4 contains anything. - \_ifx\.testiv\.relax - % No, #4 is empty. We are done. "#2#3" contains the remainder of the first string, - % which we append untouched and then strip off the two \_relax-es. - \.xorbit_saveresult(#1#2#3)% - \_else - % Yes, #4 still has something to XOR. Do the task. - \_ifnum#2=#4\_relax - \.xorbitstrings_recursive(#1% - 0,#3)(#5)% - \_else - \.xorbitstrings_recursive(#1% - 1,#3)(#5)% - \_fi - \_fi - \_fi -}% - -\_def\.xorbit_saveresult(#1\_relax\_relax){% - %Strips off the extra '\_relax'es at the end. - \_def\.xorresult{#1}% -}% - -\_newifi\_ifqr_divisiondone - -\_def\.BCHcode#1{% - \_edef\.formatinfo{#1}% - \_def\.formatinfopadded{\.formatinfo 0000000000}% - \_def\.divisor{10100110111}% - \.divisiondonefalse - \.polynomialdivide{\.formatinfopadded}{\.divisor}% - % - \.getstringlength{\.theremainder}% - %Run loop from stringlength+1 to 10. - \.a=\.stringlength\_relax% - \_advance\.a by 1\_relax% - \.for \.iz = \.a to 10 by 1% - {% - \_xdef\.theremainder{0\.theremainder}% - }% - \_edef\.BCHresult{\.formatinfo\.theremainder}% -}% - -\_def\.formatmask{101010000010010}% - -\_def\.encodeandmaskformat#1{% - \.BCHcode{#1}% - \.xorbitstrings{\.BCHresult}{\.formatmask}% - \_edef\.formatbitstring{\.xorresult}% -}% - -\_def\.Golaycode#1{% - % #1 = 6-bit version number - \_edef\.versioninfo{#1}% - \_def\.versioninfopadded{\.versioninfo 000000000000}% %Append 12 zeros. - \_def\.divisor{1111100100101}% - \.divisiondonefalse - \.polynomialdivide{\.versioninfopadded}{\.divisor}% - % - \.getstringlength{\.theremainder}% - %Run loop from stringlength+1 to 12. - \.a=\.stringlength\_relax% - \_advance\.a by 1\_relax% - \.for \.iz = \.a to 12 by 1% - {% - \_xdef\.theremainder{0\.theremainder}% - }% - \_edef\.Golayresult{\.versioninfo\.theremainder}% -}% -\_def\.Fresult{}% - -\_def\.xorbitstring#1#2#3{% - % #1 = new macro to receive result - % #2, #3 = bitstrings to xor. The second can be shorter than the first. - \_def\.xor_result{}% - \_edef\.argument{(#2\_relax\_relax)(#3\_relax\_relax)}% - \_ea\.xorbitstring_recursive\.argument% - \_edef#1{\.xor_result}% -}% -\_def\.xorbitstring_recursive(#1#2)(#3#4){% - \_edef\.testi{#1}% - \_ifx\.testi\.relax% - %Done. - \let\.next=\_relax% - \_else - \_if#1#3\_relax - \.xaddto{\.xor_result}{0}% - \_else - \.xaddto{\.xor_result}{1}% - \_fi - \_edef\.next{\_noexpand\.xorbitstring_recursive(#2)(#4)}% - \_fi - \.next -} - -\_def\.Faddchar_raw#1#2{% - %Add two hexadecimal digits using bitwise xor - \.hextobinary[4]{\.summandA}{#1}% - \.hextobinary[4]{\.summandB}{#2}% - \.xorbitstring{\.Fresult}{\.summandA}{\.summandB}% - \.binarytohex[1]{\.Fresult}{\.Fresult}% -}% - -\_def\.canceltwos#1{% - \_edef\.argument{(#1\_relax\_relax)}% - \_ea\.canceltwos_int\.argument% -}% - -\_def\.canceltwos_int(#1#2){% - \_ea\.canceltwos_recursion(,#1#2)% -}% - -\_def\.canceltwos_recursion(#1,#2#3){% - \_def\.testii{#2}% - \_ifx\.testii\.relax - %Cancelling complete. - \.striptworelaxes(#1#2#3)% - %Now \.Fresult contains the answer. - \_else - \_relax - \_ifnum#2=2\_relax - \.canceltwos_recursion(#10,#3)% - \_else - \.canceltwos_recursion(#1#2,#3)% - \_fi - \_fi -}% - -\_def\.striptworelaxes(#1\_relax\_relax){% - \_gdef\.Fresult{#1}% -}% - -\.for \.iz = 0 to 15 by 1% - {\.decimaltohex[1]{\.tempa}{\_the\.iz}% - \.for \.jz = 0 to 15 by 1% - {\.decimaltohex[1]{\.tempb}{\_the\.jz}% - \.Faddchar_raw\.tempa\.tempb - \_ea\_xdef\_csname F@addchar@\.tempa\.tempb\_endcsname{\.Fresult}% - }% - }% - -\_def\.Faddchar#1#2{% - \_ea\_def\_ea\.Fresult\_ea{\_csname F@addchar@#1#2\_endcsname}% -}% - -\_def\.Faddstrings#1#2{% - \_edef\.argument{(,#1\_relax\_relax)(#2\_relax\_relax)}% - \_ea\.Faddstrings_recursion\.argument% -}% - -\_def\.Faddstrings_recursion(#1,#2#3)(#4#5){% - %Adds two hexadecimal strings, bitwise, from left to right. - %The second string is allowed to be shorter than the first. - \_def\.testii{#2}% - \_def\.testiv{#4}% - \_ifx\.testii\.relax - %The entire string has been processed. - \_gdef\.Fresult{#1}% - \_else - \_ifx\.testiv\.relax - %The second string is over. - \.striptworelaxes(#1#2#3)% - %Now \.Fresult contains the answer. - \_else - %We continue to add. - \.Faddchar{#2}{#4}% - \_edef\.argument{(#1\.Fresult,#3)(#5)}% - \_ea\.Faddstrings_recursion\.argument% - \_fi - \_fi -}% -\_gdef\.Fstripleadingzero(0#1){\_edef\.Fresult{#1}}% - -\.i=0% -\_def\.poweroftwo{1}% -\.for \.iz = 1 to 254 by 1% - {\_global\_advance\.i by1% - \.a=\.poweroftwo\_relax - \_multiply\.a by 2\_relax - \_edef\.poweroftwo{\_the\.a}% - \.decimaltohex[2]{\.poweroftwo_hex}{\.poweroftwo}% - \_ea\_ifnum\.poweroftwo>255\_relax - %We need to bitwise add the polynomial represented by 100011101, i.e. 0x11d. - \.Faddstrings{\.poweroftwo_hex}{11d}% %Now it should start with 0. - \_ea\.Fstripleadingzero\_ea(\.Fresult)% %Now it should be two hex digits. - \_edef\.poweroftwo_hex{\.Fresult}% %Save the hex version. - \.hextodecimal{\.poweroftwo}{\.Fresult}% - \_fi - \_xdef\.poweroftwo{\.poweroftwo}% - \_ea\_xdef\_csname F@twotothe@\_the\.i\_endcsname{\.poweroftwo_hex}% - \_ea\_xdef\_csname F@logtwo@\.poweroftwo_hex\_endcsname{\_the\.i}% - }% -\_ea\_xdef\_csname F@twotothe@0\_endcsname{01}% -\_ea\_xdef\_csname F@logtwo@01\_endcsname{0}% - -\_def\.Ftwotothe#1{% - \_ea\_xdef\_ea\.Fresult\_ea{\_csname F@twotothe@#1\_endcsname}% -}% -\_def\.Flogtwo#1{% - \_ea\_xdef\_ea\.Fresult\_ea{\_csname F@logtwo@#1\_endcsname}% -}% - -\_def\.zerozero{00}% - -\_def\.Fmultiply#1#2{% - % #1 and #2 are two elements of F_256, - % given as two-character hexadecimal strings. - % Multiply them within F_256, and place the answer in \.Fresult - \_edef\.argA{#1}% - \_edef\.argB{#2}% - \_ifx\.argA\.zerozero - \_def\.Fresult{00}% - \_else - \_ifx\.argB\.zerozero - \_def\.Fresult{00}% - \_else - \_ea\.Flogtwo\_ea{\.argA}% - \_edef\.logA{\.Fresult}% - \_ea\.Flogtwo\_ea{\.argB}% - \_edef\.logB{\.Fresult}% - \_ea\.a\_ea=\.logA\_relax% \.a = \logA - \_ea\_advance\_ea\.a\.logB\_relax% \advance \.a by \logB - \_ifnum\.a>254\_relax% - \_advance\.a by -255\_relax - \_fi - \_ea\.Ftwotothe\_ea{\_the\.a}% - % Now \.Fresult contains the product, as desired. - \_fi - \_fi -}% - -\_newifi\_ifqr_FXleadingcoeff_zero -\_def\.FXtestleadingcoeff(#1#2#3){% - % Tests whether the leading coefficient of the hex-string #1#2#3 is '00'. - \_edef\.FXleadingcoefficient{#1#2}% - \.FXleadingcoeff_zerofalse - \_ifx\.FXleadingcoefficient\.zerozero - \.FXleadingcoeff_zerotrue - \_fi -}% - -\_newifi\_ifqr_FXdivisiondone - -\_newcount\.divisionsremaining %Keep track of how many divisions to go! -\_def\.FXpolynomialdivide#1#2{% - \_edef\.FXnumerator{#1}% - \_edef\.denomin{#2}% - \.getstringlength\.FXnumerator - \.setcounter\.divisionsremaining{\.stringlength}% - \.getstringlength\.denomin - \.addtocounter\.divisionsremaining{-\.stringlength}% - \.addtocounter\.divisionsremaining{2}% - \_divide\.divisionsremaining by 2\_relax %2 hex chars per number - \.FXdivisiondonefalse - \_ea\_ea\_ea\.FXpolynomialdivide_recursive\_ea\_ea\_ea{\_ea\.FXnumerator\_ea}\_ea{\.denomin}% -}% - -\_def\.FXpolynomialdivide_recursive#1#2{% - % #1 = f(x), of degree n - % #2 = g(x), of degree m - % Obtains a new polynomial h(x), congruent to f(x) modulo g(x), - % but of degree at most n-1. - % - % If leading coefficient of f(x) is 0, strips off that leading zero. - % If leading coefficient of f(x) is a, subtracts off a * g(x) * x^(n-m). - % N.B. we assume g is monic. - % - \.FXtestleadingcoeff(#1)% - \_ifqr_FXleadingcoeff_zero - %Leading coefficient is zero, so remove it. - \_ea\_def\_ea\.FXnumerator\_ea{\.FXstripleadingzero(#1)}% - \_else% - %Leading coefficient is nonzero, and contained in \.FXleadingcoefficient - \.FXsubtractphase{#1}{#2}{\.FXleadingcoefficient}% - \_ifqr_FXsubtractfailed - %If subtraction failed, that means our #1 was already the remainder! - \.FXdivisiondonetrue - \_edef\.theremainder{#1}% - \_else% - %xor succeeded. We need to recurse. - \_ea\_ea\_ea\_edef\_ea\_ea\_ea\.FXnumerator\_ea\_ea\_ea{\_ea\.FXstripleadingzero\_ea(\.FXsubtraction_result)}% - \_fi% - \_fi% - \.addtocounter\.divisionsremaining{-1}% - \_ifnum\.divisionsremaining=0\_relax - %Division is done! - \.FXdivisiondonetrue - \_edef\.theremainder{\.FXnumerator}% - \_relax% - \_else% - \_ea\.FXpolynomialdivide_recursive\_ea{\.FXnumerator}{#2}% - \_fi% -}% - -\_def\.FXstripleadingzero(00#1){#1}%Strips off a single leading zero of F_256. - -\_newifi\_ifqr_FXsubtractfailed% This flag will trigger when #2 is longer than #1. - -\_def\.FXsubtractphase#1#2#3{% - % #1 = bitstring - % #2 = bitstring no longer than #1 - % #3 = leading coefficient - \.FXsubtractfailedfalse - \_edef\.argument{(,#1\_relax\_relax\_relax)(#2\_relax\_relax\_relax)(#3)}% - \_ea\.FXsubtract_recursive\.argument% -}% - -\_def\.FXsubtract_recursive(#1,#2#3#4)(#5#6#7)(#8){% - % This is a recursive way to compute f(x) - a*g(x)*x^k. - % #1#2#3#4 is the first bitstring, subtracted up through #1. - % Thus #2#3 constitutes the next two-character coefficient. - % #5#6#7 is the remaining portion of the second bitstring. - % Thus #5#6 constitutes the next two-character coefficient - % #8 is the element a of F_256. It should contain two characters. - \_def\.testii{#2}% - \_def\.testv{#5}% - \_ifx\.testii\.relax - % #1 contains the whole string. - % Now if #5 is also \_relax, that means the two strings started off with equal lengths. - % If, however, #5 is not \_relax, that means the second string was longer than the first, a problem. - \_ifx\.testv\.relax - %No problem. We are done. - \.FXsubtract_saveresult(#1#2#3#4)% %We keep the #2#3#4 to be sure we have all three relax-es to strip off. - \_else - %Problem! The second string was longer than the first. - %This usually indicates the end of the long division process. - \.FXsubtractfailedtrue - \_def\.FXsubtraction_result{}% - \_fi - \_else - % There is still a coefficient to manipulate in #2#3. - % Check whether #5 contains anything. - \_ifx\.testv\.relax - % No, #5 is empty. We are done. "#2#3#4" contains the remainder of the first string, - % which we append untouched and then strip off the three \_relax-es. - \.FXsubtract_saveresult(#1#2#3#4)% - \_else - % Yes, #5#6 still has something to XOR. Do the task. - \.Fmultiply{#5#6}{#8}% Multiply by the factor 'a'. - \.Faddstrings{#2#3}{\.Fresult}% Subtract. (We're in characteristic two, so adding works.) - \_edef\.argument{(#1\.Fresult,#4)(#7)(#8)}% - \_ea\.FXsubtract_recursive\.argument% - \_fi - \_fi -}% - -\_def\.FXsubtract_saveresult(#1\_relax\_relax\_relax){% - %Strips off the three extra '\_relax'es at the end. - \_def\.FXsubtraction_result{#1}% -}% - -\_def\.FXcreategeneratorpolynomial#1{% - % #1 = n, the number of error codewords desired. - % We need to create \prod_{j=0}^{n-1} (x-2^j). - \_edef\.FXgenerator_degree{#1}% - \_def\.FXgeneratorpolynomial{01}% Initially, set it equal to 1. - \.setcounter\.i{0}% - \.FXcreategenerator_recursive% - %The result is now stored in \.FXgeneratorpolynomial -}% - -\_def\.FXcreategenerator_recursive{% - % \.FXgeneratorpolynomial contains the current polynomial f(x), - % which should be a degree-i polynomial - % equal to \prod_{j=0}^{i-1} (x-2^j). - % (If i=0, then \.FXgeneratorpolynomial should be 01.) - % This recursion step should multiply the existing polynomial by (x-2^i), - % increment i by 1, and check whether we're done or not. - \_edef\.summandA{\.FXgeneratorpolynomial 00}% This is f(x) * x - \_edef\.summandB{00\.FXgeneratorpolynomial}% This is f(x), with a 0x^{i+1} in front. - \.Ftwotothe{\_the\.i}% - \_edef\.theconstant{\.Fresult}% - \.FXsubtractphase{\.summandA}{\.summandB}{\.theconstant}% - %This calculates \.summandA + \.theconstant * \.summandB - %and stores the result in \.FXsubtraction_result - \_edef\.FXgeneratorpolynomial{\.FXsubtraction_result}% - \.stepcounter\.i - \_ea \_ifnum\.FXgenerator_degree=\.i\_relax - %We just multiplied by (x-2^{n-1}), so we're done. - \_relax - \_else% - %We need to do this again! - \_ea \.FXcreategenerator_recursive - \_fi -}% - -\_def\.FXgenerate_errorbytes#1#2{% - % #1 = datastream in hex - % #2 = number of error correction bytes requested - \_edef\.numerrorbytes{#2}% - \_ea\.FXcreategeneratorpolynomial\_ea{\.numerrorbytes}% - \_edef\.FXnumerator{#1}% - \.for \.iz = 1 to \.numerrorbytes by 1% - {\.xaddto\.FXnumerator{00}}% %One error byte means two hex codes. - \.FXpolynomialdivide{\.FXnumerator}{\.FXgeneratorpolynomial}% - \_edef\.FXerrorbytes{\.theremainder}% -}% -\_newifi\_ifqr_versionmodules - -\_def\.level_char#1{% - \_ea\_ifcase#1 - M\_or L\_or H\_or Q\_fi}% - -\_newifi\_ifqr_versiongoodenough -\_def\.choose_bestversion#1{% - % \.desiredversion = user-requested version - % \.desiredlevel = user-requested error-correction level - \_edef\.stringlength{\.utfstringlen{#1}}% - % - %Run double loop over levels and versions, looking for - %the smallest version that can contain our data, - %and then choosing the best error-correcting level at that version, - %subject to the level being at least as good as the user desires. - \_global\.versiongoodenoughfalse% - \_gdef\.bestversion{0}% - \_gdef\.bestlevel{0}% - \_ifnum\.desiredversion=0\_relax - \.a=1\_relax - \_else - \.a=\.desiredversion\_relax - \_fi - \.for \.iz=\.a to 40 by 1 - {\_edef\.version{\_the\.iz}% - \_global\.versiongoodenoughfalse - \.for \.jz=0 to 3 by 1% - {%First, we map {0,1,2,3} to {1,0,4,3}, so that we loop through {M,L,H,Q} - %in order of increasing error-correction capabilities. - \.a = \.jz\_relax - \_divide \.a by 2\_relax - \_multiply \.a by 4\_relax - \_advance \.a by 1\_relax - \_advance \.a by -\.jz\_relax - \_edef\.level{\_the\.a}% - \_ifnum\.desiredlevel=\.a\_relax - \_global\.versiongoodenoughtrue - \_fi - \_ifqr_versiongoodenough - \.calculate_capacity{\.version}{\.level}% - \_ea\_ea\_ea\_ifnum\_ea\.truecapacity\_ea<\.stringlength\_relax - %Too short - \_relax - \_else - %Long enough! - \_xdef\.bestversion{\.version}% - \_xdef\.bestlevel{\.level}% - \_global\.iz=40% - \_fi - \_fi - }% - }% - \_edef\.version{\.bestversion}% - \_edef\.level{\.bestlevel}% - \_ea\_ifnum\.desiredversion>0\_relax - \_ifx\.bestversion\.desiredversion\_relax - %No change from desired version. - \_else - %Version was increased - \.message{<Requested QR version '\.desiredversion' is too small for desired text.}% - \.message{Version increased to '\.bestversion' to fit text.>^^J}% - \_fi - \_fi - \_ifx\.bestlevel\.desiredlevel\_relax - %No change in level. - \_else - \.message{<Error-correction level increased from \.level_char{\.desiredlevel}}% - \.message{to \.level_char{\.bestlevel} at no cost.>^^J}% - \_fi -}% - -\_def\.calculate_capacity#1#2{% - \_edef\.version{#1}% - \_edef\.level{#2}% - %Calculate \.size, the number of modules per side. - % The formula is 4\.version+17. - \.a=\.version\_relax - \_multiply\.a by 4\_relax - \_advance\.a by 17\_relax - \_xdef\.size{\_the\.a}% - % - % Calculate \.k, which governs the number of alignment patterns. - % The alignment patterns lie in a kxk square, except for 3 that are replaced by finding patterns. - % The formula is 2 + floor( \.version / 7 ), except that k=0 for version 1. - \_ea\_ifnum\.version=1\_relax% - \_def\.k{0}% - \_else% - \.a=\.version\_relax - \_divide \.a by 7\_relax - \_advance\.a by 2\_relax - \_edef\.k{\_the\.a}% - \_fi% - % - %Calculate number of function pattern modules. - %This consists of the three 8x8 finder patterns, the two timing strips, and the (k^2-3) 5x5 alignment patterns. - %The formula is 160+2n+25(k^2-3)-10(k-2), unless k=0 in which case we just have 160+2n. - \.a=\.size\_relax - \_multiply\.a by 2\_relax - \_advance\.a by 160\_relax - \_ea\_ifnum\.k=0\_relax\_else - %\.k is nonzero, hence at least 2, so we continue to add 25(k^2-3)-10(k-2). - \.b=\.k\_relax - \_multiply\.b by \.k\_relax - \_advance\.b by -3\_relax - \_multiply\.b by 25\_relax - \_advance\.a by \.b\_relax - \.b=\.k\_relax - \_advance\.b by -2\_relax - \_multiply\.b by 10\_relax - \_advance\.a by -\.b\_relax - \_fi - \_edef\.numfunctionpatternmodules{\_the\.a}% - % - %Calculate the number of version modules, either 36 or 0. - \_ea\_ifnum\.version>6\_relax - \.versionmodulestrue - \_def\.numversionmodules{36}% - \_else - \.versionmodulesfalse - \_def\.numversionmodules{0}% - \_fi - % - %Now calculate the codeword capacity and remainder bits. - %Take n^2 modules, subtract all those dedicated to finder patterns etc., format information, and version information, - %and what's left is the number of bits we can play with. - %The number of complete bytes is \.numdatacodewords; - %the leftover bits are \.numremainderbits. - \.a=\.size\_relax - \_multiply \.a by \.size\_relax - \_advance \.a by -\.numfunctionpatternmodules\_relax - \_advance \.a by -31\_relax% % There are 31 format modules. - \_advance \.a by -\.numversionmodules\_relax - \.b=\.a\_relax - \_divide \.a by 8\_relax - \_edef\.numdatacodewords{\_the\.a}% - \_multiply\.a by 8\_relax - \_advance \.b by -\.a\_relax - \_edef\.numremainderbits{\_the\.b}% - % - %The size of the character count indicator also varies by version. - %There are only two options, so hardcoding seems easier than expressing these functionally. - \_ea\_ifnum\.version<10\_relax - \_def\.charactercountbytes_byte{1}% - \_def\.charactercountbits_byte{8}% - \_else - \_def\.charactercountbytes_byte{2}% - \_def\.charactercountbits_byte{16}% - \_fi - % - %Now we call on the table, from the QR specification, - %of how many blocks to divide the message into, and how many error bytes each block gets. - %This affects the true capacity for data, which we store into \.totaldatacodewords. - % The following macro sets \.numblocks and \.numeccodewords - % based on Table 9 of the QR specification. - \.settableix - \.a = -\.numblocks\_relax - \_multiply \.a by \.numeccodewords\_relax - \_advance\.a by \.numdatacodewords\_relax - \_edef\.totaldatacodewords{\_the\.a}% - \_advance\.a by -\.charactercountbytes_byte\_relax%Subtract character count - \_advance\.a by -1\_relax% Subtract 1 byte for the 4-bit mode indicator and the 4-bit terminator at the end. - \_edef\.truecapacity{\_the\.a}% -} - -\_def\.setversion#1#2{% - % #1 = version number, an integer between 1 and 40 inclusive. - % #2 = error-correction level, as an integer between 0 and 3 inclusive. - % 0 = 00 = M - % 1 = 01 = L - % 2 = 10 = H - % 3 = 11 = Q - % This macro calculates and sets a variety of global macros and/or counters - % storing version information that is used later in construction the QR code. - % Thus \setversion should be called every time! - % - \_edef\.version{#1}% - \_edef\.level{#2}% - % - \.calculate_capacity{\.version}{\.level}% - %The capacity-check code sets the following: - % * \.size - % * \.k - % * \_ifqr_versionmodules - % * \.numversionmodules - % * \.numdatacodewords - % * \.numremainderbits - % * \.charactercountbits_byte - % * \.charactercountbytes_byte - % * \.numblocks (via \.settableix) - % * \.numeccodewords (via \.settableix) - % * \.totaldatacodewords - % - % The alignment patterns' square is 7 modules in from each edge. - % They are spaced "as evenly as possible" with an even number of modules between each row/column, - % unevenness in division being accommodated by making the first such gap smaller. - % The formula seems to be - % general distance = 2*round((n-13)/(k-1)/2+0.25) - % = 2*floor((n-13)/(k-1)/2+0.75) - % = 2*floor( (2*(n-13)/(k-1)+3) / 4 ) - % = (((2*(n-13)) div (k-1) + 3 ) div 4 ) * 2 - % first distance = leftovers - % The 0.25 is to accommodate version 32, which is the only time we round down. - % Otherwise a simple 2*ceiling((n-13)/(k-1)/2) would have sufficed. - % - \.a = \.size\_relax - \_advance\.a by -13\_relax - \_multiply\.a by 2\_relax - \.b = \.k\_relax - \_advance \.b by -1\_relax - \_divide\.a by \.b\_relax - \_advance\.a by 3\_relax - \_divide\.a by 4\_relax - \_multiply\.a by 2\_relax - \_edef\.alignment_generalskip{\_the\.a}% - % - %Now set \.alignment_firstskip to (\.size-13)-(\.k-2)*\.alignment_generalskip % - \.a = \.k\_relax - \_advance\.a by -2\_relax - \_multiply\.a by -\.alignment_generalskip\_relax - \_advance\.a by \.size\_relax - \_advance\.a by -13\_relax - \_edef\.alignment_firstskip{\_the\.a}% - % - % - % - % Our \.totaldatacodewords bytes of data are broken up as evenly as possible - % into \.numblocks datablocks; some may be one byte longer than others. - % We set \.shortblock_size to floor(\.totaldatacodewords / \.numblocks) - % and \.numlongblocks to mod(\.totaldatacodewords , \.numblocks). - \.a=\.totaldatacodewords\_relax - \_divide\.a by \.numblocks\_relax - \_edef\.shortblock_size{\_the\.a}% - \_multiply\.a by -\.numblocks\_relax - \_advance\.a by \.totaldatacodewords\_relax - \_edef\.numlongblocks{\_the\.a}% - % - %Set \.longblock_size to \.shortblock_size+1. - \.a=\.shortblock_size\_relax - \_advance\.a by 1\_relax - \_edef\.longblock_size{\_the\.a}% - % - %Set \.numshortblocks to \.numblocks - \.numlongblocks - \.b=\.numblocks\_relax - \_advance\.b by -\.numlongblocks\_relax - \_edef\.numshortblocks{\_the\.b}% -}% - -\_def\.settableix_int(#1,#2){% - \_edef\.numblocks{#1}% - \_edef\.numeccodewords{#2}% -}% - -\_def\.settableix{% -\_ea\_ifcase\.level\_relax - %00: Level 'M', medium error correction - \_edef\.tempdata{(% - \_ifcase\.version\_relax - \_relax %There is no version 0. - \_or1,10% - \_or1,16% - \_or1,26% - \_or2,18% - \_or2,24% - \_or4,16% - \_or4,18% - \_or4,22% - \_or5,22% - \_or5,26% - \_or5,30% - \_or8,22% - \_or9,22% - \_or9,24% - \_or10,24% - \_or10,28% - \_or11,28% - \_or13,26% - \_or14,26% - \_or16,26% - \_or17,26% - \_or17,28% - \_or18,28% - \_or20,28% - \_or21,28% - \_or23,28% - \_or25,28% - \_or26,28% - \_or28,28% - \_or29,28% - \_or31,28% - \_or33,28% - \_or35,28% - \_or37,28% - \_or38,28% - \_or40,28% - \_or43,28% - \_or45,28% - \_or47,28% - \_or49,28% - \_fi)}% -\_or - %01: Level 'L', low error correction - \_edef\.tempdata{% - (\_ifcase\.version\_relax - \_relax %There is no version 0. - \_or 1,7% - \_or 1,10% - \_or 1,15% - \_or 1,20% - \_or 1,26% - \_or 2,18% - \_or 2,20% - \_or 2,24% - \_or 2,30% - \_or 4,18% - \_or 4,20% - \_or 4,24% - \_or 4,26% - \_or 4,30% - \_or 6,22% - \_or 6,24% - \_or 6,28% - \_or 6,30% - \_or 7,28% - \_or 8,28% - \_or 8,28% - \_or 9,28% - \_or 9,30% - \_or 10,30% - \_or 12,26% - \_or 12,28% - \_or 12,30% - \_or 13,30% - \_or 14,30% - \_or 15,30% - \_or 16,30% - \_or 17,30% - \_or 18,30% - \_or 19,30% - \_or 19,30% - \_or 20,30% - \_or 21,30% - \_or 22,30% - \_or 24,30% - \_or 25,30% - \_fi)}% -\_or - %10: Level 'H', high error correction - \_edef\.tempdata{(% - \_ifcase\.version\_relax - \_relax %There is no version 0. - \_or1,17% - \_or1,28% - \_or2,22% - \_or4,16% - \_or4,22% - \_or4,28% - \_or5,26% - \_or6,26% - \_or8,24% - \_or8,28% - \_or11,24% - \_or11,28% - \_or16,22% - \_or16,24% - \_or18,24% - \_or16,30% - \_or19,28% - \_or21,28% - \_or25,26% - \_or25,28% - \_or25,30% - \_or34,24% - \_or30,30% - \_or32,30% - \_or35,30% - \_or37,30% - \_or40,30% - \_or42,30% - \_or45,30% - \_or48,30% - \_or51,30% - \_or54,30% - \_or57,30% - \_or60,30% - \_or63,30% - \_or66,30% - \_or70,30% - \_or74,30% - \_or77,30% - \_or81,30% - \_fi)}% -\_or - %11: Level 'Q', quality error correction - \_edef\.tempdata{(% - \_ifcase\.version\_relax - \_relax %There is no version 0. - \_or1,13% - \_or1,22% - \_or2,18% - \_or2,26% - \_or4,18% - \_or4,24% - \_or6,18% - \_or6,22% - \_or8,20% - \_or8,24% - \_or8,28% - \_or10,26% - \_or12,24% - \_or16,20% - \_or12,30% - \_or17,24% - \_or16,28% - \_or18,28% - \_or21,26% - \_or20,30% - \_or23,28% - \_or23,30% - \_or25,30% - \_or27,30% - \_or29,30% - \_or34,28% - \_or34,30% - \_or35,30% - \_or38,30% - \_or40,30% - \_or43,30% - \_or45,30% - \_or48,30% - \_or51,30% - \_or53,30% - \_or56,30% - \_or59,30% - \_or62,30% - \_or65,30% - \_or68,30% - \_fi)}% -\_fi -\_ea\.settableix_int\.tempdata -}% - -\_def\.qM{M}\_def\.qz{0}% -\_def\.qL{L}\_def\.qi{1}% -\_def\.qH{H}\_def\.qii{2}% -\_def\.qQ{Q}\_def\.qiii{3}% -\_def\.setlevel#1{% - \_edef\.level_selected{#1}% - \_ifx\.level_selected\.qM - \_edef\.desiredlevel{0}% - \_fi - \_ifx\.level_selected\.qL - \_edef\.desiredlevel{1}% - \_fi - \_ifx\.level_selected\.qH - \_edef\.desiredlevel{2}% - \_fi - \_ifx\.level_selected\.qQ - \_edef\.desiredlevel{3}% - \_fi - \_ifx\.level_selected\.qz - \_edef\.desiredlevel{0}% - \_fi - \_ifx\.level_selected\.qi - \_edef\.desiredlevel{1}% - \_fi - \_ifx\.level_selected\.qii - \_edef\.desiredlevel{2}% - \_fi - \_ifx\.level_selected\.qiii - \_edef\.desiredlevel{3}% - \_fi -}% - -% key-value pairs (OPmac trick 0069) -\_def\.kv#1{\_ifcsname _qr_kv:#1\_endcsname \_csname _qr_kv:#1\_ea\_endcsname - \_else \_ea\.kvunknown \_fi -} -\_def\.kvunknown{???} -\_def\.kvscan #1#2=#3,{\_ifx#1,\_else \_sdef{_qr_kv:#1#2}{#3}\_ea\.kvscan\_fi} - -\_def\.qrset#1{\_def\.tmpb{#1,}% - \_replstring\.tmpb{ =}{=}\_replstring\.tmpb{= }{=}% - \_replstring\.tmpb{tight,}{qr-border=0,}% - \_replstring\.tmpb{padding,}{qr-border=1,}% - \_replstring\.tmpb{verbose,}{qr-message=1,}% - \_replstring\.tmpb{silent,}{qr-message=0,}% - \_replstring\.tmpb{draft,}{qr-final=0,}% - \_replstring\.tmpb{final,}{qr-final=1,}% - \_replstring\.tmpb{nolink,}{qr-link=0,}% - \_replstring\.tmpb{link,}{qr-link=1,}% - \_ea\.kvscan\.tmpb,=,% - \.desiredheight=\.kv{height}\_relax - \.setlevel{\.kv{level}}% - \_edef\.desiredversion{\.kv{version}}% -} -\.qrset{height=2cm, version=0, level=M, tight, silent, final, nolink} - -\_def\.setcounter #1#2{\_global#1=#2\_relax} -\_def\.stepcounter #1{\_global\_advance#1 by1\_relax} -\_def\.addtocounter#1#2{\_global\_advance#1 by#2\_relax} - -\_def\.qrcode{\_begingroup - \_isnextchar[{\.qrcodeA}{\.qrcodeB}% -} -\_def\.qrcodeA[#1]{\.qrset{#1}\_ea\.qrcodeB\_romannumeral-`\.} -\_def\.qrcodeB#1{% - \_if1\.kv{qr-message}\_let\.message=\_message \_else \_def\.message##1{}\_fi - \_if1\.kv{qr-border}\_def\.padd{\_kern4\.modulesize}\_else\_def\.padd{}\_fi - \_bgroup - \_escapechar=-1 - \_xdef\.etext{\_detokenize{#1}}\_gdef\.text{#1}% - \_egroup - \.qrcode_int - \_endgroup -} -\_def\.qrcode_int{% - \.message{<QR code requested for "\.etext" in version - \.desiredversion-\.level_char{\.desiredlevel}.>^^J}% - %First, choose the version and level. - %Recall that \.choose_bestversion sets \.version and \.level. - \_ea\.choose_bestversion\_ea{\.etext}% - \_if1\.kv{qr-final}% - \.setversion{\.version}{\.level}% - \.qrcode_int_new - \_else - \.modulesize=\.desiredheight - \_divide\.modulesize by \.size\_relax - \_let\.d=\.desiredheight - \_vbox{\.padd\_hbox{\.padd\_vbox to\.d{\_hrule\_vss - \_hbox to\.d{\_vrule height.7\.d depth.3\.d \_hss ...QR...\_hss\_vrule}% - \_vss\_hrule}\.padd}\.padd}% - \_fi -}% - -\_nspublic \qrcode \qrset ; - -\_def\.qrcode_int_new{% - \.qrbeginhook - \.createsquareblankmatrix{newqr}{\.size}% - \.placefinderpatterns{newqr}% - \.placetimingpatterns{newqr}% - \.placealignmentpatterns{newqr}% - \.placedummyformatpatterns{newqr}% - \.placedummyversionpatterns{newqr}% - \.message{<Calculating QR code for "\.etext" in - version \.version-\.level_char{\.level}.>^^J}% - \_ea\.encode_binary\_ea{\.etext}% - \.splitcodetextintoblocks - \.createerrorblocks - \.interleave - \.message{<Writing data...}% - \.writedata_hex{newqr}{\.interleaved_text}% - \.message{done.>^^J}% - \.writeremainderbits{newqr}% - \.chooseandapplybestmask{newqr}% - \.decimaltobinary[2]{\.level_binary}{\.level}% - \.decimaltobinary[3]{\.mask_binary}{\.mask_selected}% - \_edef\.formatstring{\.level_binary\.mask_binary}% - \.message{<Encoding and writing format string...}% - \_ea\.encodeandmaskformat\_ea{\.formatstring}% - \.writeformatstring{newqr}{\.formatbitstring}% - \.message{done.>^^J}% - \.message{<Encoding and writing version information...}% - \.decimaltobinary[6]{\.version_binary}{\.version}% - \.Golaycode{\.version_binary}% - \.writeversionstring{newqr}{\.Golayresult}% - \.message{done.>^^J}% - \.message{<Printing QR code...}% - \.matrixtobinary{newqr}% - \.restore\.data - \.message{done.>^^J}% - \.qrendhook -}% - -\_def\.matrixtobinary#1{% - \_bgroup - \_gdef\.data{}% - \_def\.black{1}\_let\.blackfixed=\.black \_let\.blackformat=\.black - \_def\.white{0}\_let\.whitefixed=\.white \_let\.whiteformat=\.white - \.for \.iz = 1 to \.size by 1 - {\.for \.jz = 1 to \.size by 1 - {\_xdef\.data{\.data\.matrixentry{#1}{\_the\.iz}{\_the\.jz}}}}% - \_xdef\.data{{\.size}{\.data}}% - \_egroup -} - -\_def\.restore#1{\_ea\.restoreA#1} -\_def\.restoreA#1#2{% - \.modulesize=\.desiredheight \_divide\.modulesize by#1 - \_if1\.kv{qr-link}\_setbox0=\_fi - \_vbox\_bgroup\.padd \_offinterlineskip \_baselineskip=\.modulesize - \.i=0 \.j=0 \_let\.next=\.restoreB - \_hbox\_bgroup\.padd \.restoreB #2% - \_if1\.kv{qr-link}\.link{\.etext}{\_box0}\_fi -} -\_def\.restoreB#1{\_advance \.j by1 - \_ifx1#1\_vrule height\.modulesize width\.modulesize\_else \_kern\.modulesize\_fi - \_ifnum\.size=\.j \_vrule height\.modulesize width 0pt \.padd\_egroup \_advance\.i by1 - \_ifnum\.size=\.i \.padd\_egroup \_let\.next=\_relax \_else \_hbox\_bgroup\.padd \_fi - \_fi \.next -} - -\_def\.qrbeginhook{} -\_def\.qrendhook{} - -\_endnamespace -\_endcode - -This macro file is created for \OpTeX/. It is derived from: - -\begtt -% qrcode.tex -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Petr Olsak <petr@olsak.net> Jul. 2015 - -% This macro qrcode.tex is (roughly speaking) a copy of qrcode.sty -% macro by Anders Hendrickson <ahendric@cord.edu>, see -% http://www.ctan.org/tex-archive/macros/latex/contrib/qrcode - -% The main difference between qrcode.sty and qrcode.tex is, that -% the LaTeX ballast was removed from qrcode.sty by Petr Olsak. The result: -% The qrcode.tex macro can be used in plain TeX format too. -\endtt - -\secc Usage - -Load this macro file by `\load[qrcode]` and then the command -`\qrcode{<encoded text>}` or `\qrcode[<options>]{<encoded text>}` is ready to use. - -The parameter <encoded text> is used as is (without expanding). -It follows the same rules as in the `\code{<text>}` macro. -Use these rules if the encoded text includes a \TeX/ sensitive characters. - -The characters from all Unicode table are allowed in <encoded text>. - -\secc Options - -You can use `\qrset{<options>}` for global-like options and -`\qrcode[<options>]{<encoded text>}` for local options for one QR code. -The `\qrset{<options>}` is valid within a group (if exists) or in whole -document. - -Options are separated by comma and they are in two types: single -word or key=value format. Default options are: - -\begtt -\qrset{height=2cm, version=0, level=M, tight, silent, final, nolink} -\endtt - -The options are the same as described in `qrcode.pdf` at -\url{http://www.ctan.org/tex-archive/macros/latex/contrib/qrcode}. -In short: - -\begitems -* `height=dimen` ... The height of the QRcode without padding. - -* `version=number` ... Number 0 to 40 linearly depends on the density of QRcode. - The 0 means that the density is automatically selected. - -* `level=letter` ... L, M, Q o H (low, medium, quality, hight) sets the amount - of redundancy in the code in order of error recovering. - -* `tight` ... Code without margins. -* `padding` ... 4module blank margins around the code. - -* `verbose` ... Information about calculating in terminal and in the log. -* `silent` ... No information about calculating. - -* `final` ... The QR code is calculated and printed. -* `draft` ... Only empty rectangle in the same size as QR code is printed. - -* `nolink` ... The QR code is not active hyperlink. -* `link` ... The QR code is active hyperlink to <encoded text>. - -* `qrborder={R G B}` ... The color of the frame around active hypertext space - if link option is set. R G B (red green blue) are decimal - numbers from 0 to 1. The frame is visible only in - pdf viewers. Default: invisible frame. -\enditems - - -Example: - -\begtt -\qrset{silent} % ... all codes will be silent in the log and terminal. -\qrcode [height=3cm, link, padding, qrborder={1 0 0}] {http://petr.olsak.net} - % ... 3cm QRcode as hyperlink -\endtt - -Note: - -The saving/restoring pre-calculated QRcodes isn't supported by default. -If you are printing the same QR codes repeatedly, use \setbox/\copy -technique. For example: - -\begtt -\newbox\mybox -\setbox\mybox=\hbox{\qrcode{encoded text}} -\copy\mybox \copy\mybox \copy\mybox etc. -\endtt - -If you have a huge amount of different QR codes, you can use draft/final -options. - -The `\_qr_data` macro is saved after each \qrcode calculation in the format -`{size}{111101011...001}` where size is the number of columns or rows in QR -square and second parameter includes size^2 ones or zeros which means black -or white modules (scanned left to right, top to bottom). Another information -can be retrieved from `\_qr_text` macro (encoded text before expanding) and -`\_qr_etext` macro (raw encoded text, each charater is detokeinized). -The macros `\_qr_data`, `\_qr_text` and `\_qr_etext` are saved globally. - diff --git a/Master/texmf-dist/tex/luatex/optex/pkg/vlna.opm b/Master/texmf-dist/tex/luatex/optex/pkg/vlna.opm deleted file mode 100644 index 4db22aa0cc9..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/pkg/vlna.opm +++ /dev/null @@ -1,193 +0,0 @@ -% This is the macro package used by OpTeX, see http://petr.olsak.net/optex - -% vlna.opm, Petr Olšák <petr@olsak.net>, 2021 - -% Vlna prevents breaks in spaces after single-letter prepositions, after (or -% before) degrees, and between value and SI units. It enables or disables -% split hyphens too. All folks are done at the postprocessing phase before TeX splits -% the typesetting material into the paragraph lines. - -% vlna.opm is based on Lua code from the package `luavlna` (by Michal Hoftich -% and Miro Hrončok). See `texdoc luavlna` or end of this file for more information. - -\_namespace{vlna} - -\_codedecl \.singlechars {Preventing single-chars prepositions and more <2021-01-08>} - - \_doc ----------------------------- - We declare new attribute, register callbacks, and define Lua functions that - point to Lua functions from `luavlna.lua` package. - We need this package installed. - - We need not `require ltluatex` because `luatexbase.callbaks` are defined - in the `optex.lua` file and it is part of the OpTeX format. - \_cod ----------------------------- - -\_newattribute \.preventsinglestatus - -\_directlua{% - luavlna = require "luavlna" - - luatexbase.add_to_callback("pre_linebreak_filter", luavlna.preventsingle,"LuaVlna") - luatexbase.add_to_callback("hyphenate", luavlna.split_hyphens, "allow hyphen breaks") - luavlna.preventsingleid = \_the\_attributealloc - - set_singlechars = function(lang,chars) - if (lang == "") then return nil end - local utf_gmatch = unicode.utf8.gmatch - local chars = chars or "" - local singlechars = {} - for char in unicode.utf8.gmatch(chars,"(\_csstring\%a)") do - singlechars[char] = true - end - luavlna.singlechars(lang,singlechars) - end - - set_compounds = function(lang, compounds) - if (lang == "") then return nil end - local c = compounds:explode(",+") % match multiple colons as one - local compoundstable = {} - for _, compound in pairs(c) do - compoundstable[compound] = true - end - luavlna.initials(lang, compoundstable) - end - - set_main_language = function(lang) - if (lang == "") then return nil end - luavlna.set_main_language(tonumber(lang)) - end - - enable_split_hyphens = function(lang) - if (lang == "") then return nil end - luavlna.split_hyphen_langs[tonumber(lang)] = true - end - - disable_split_hyphens = function(lang) - if (lang == "") then return nil end - luavlna.split_hyphen_langs[tonumber(lang)] = nil - end -} - - \_doc ----------------------------- - We need not `require luavlna-langno` because of the conversion from - language name to the `\language` number is done by the macro - `\.langtonum``<sequence>={<langname>}` defined here. - It does `\def<sequence>{<langnumber>}` or `\def\sequence{}` if <langname> - is unknown. The <langname> is case insensitive and these names are - declared in the hyphen-lan.opm file, section 2.37.2 in OpTeX documentation. - \_cod ----------------------------- - -\_def\.langtonum#1=#2{\_lowercase{\_edef#1{\_trycs{_ulan:#2}{}}}% - \_ifx#1\_empty \_opwarning{vlna: unknown language "#2", ignored}% - \_else \_edef#1{\_the\_cs{_#1Patt}}\_fi} - - \_doc ----------------------------- - `\singlechars``{<langname>}{<prepositions>}` sets <prepositions> for - given language.\nl - `\compoundinitials``{<langname>}{<comma-separated-list>}` sets - compound characters from the list for given language. - \_cod ----------------------------- - -\_def\.singlechars#1#2{\.langtonum\.l={#1}\_directlua{set_singlechars("\.l","#2")}} -\_def\.compoundinitials#1#2{\.langtonum\.l={#1}\_directlua{set_compounds("\.l","#2")}} - - \_doc ----------------------------- - `\enablesplithyphens` and `\disablesplithyphens` are dependent on the language. - \_cod ----------------------------- - -\_def\.enablesplithyphens#1{\.langtonum\.l={#1}\_directlua{enable_split_hyphens("\.l")}} -\_def\.disablesplithyphens#1{\.langtonum\.l={#1}\_directlua{disable_split_hyphens("\.l")}} - - \_doc ----------------------------- - By default, the language-dependent features of the `luavlna` depend on - the current `\language` value, i.e. on the currently selected hyphenation. - `\preventsinglelang``{<langname>}` activates the language-dependent - features regardless of the current `\language` value. - \_cod ----------------------------- - -\_def\.preventsinglelang#1{\.langtonum\.l={#1}\_directlua{set_main_language("\.l")}} - - \_doc ----------------------------- - Switching on/off `luavlna` preposition features should be done using attribute - setting. It will allow you to switch them on/off in the middle of the paragraph. - \_cod ----------------------------- - -\_def\.preventsingleon{\.preventsinglestatus=2 } -\_def\.preventsingleoff{\.preventsinglestatus=1 } - - \_doc ----------------------------- - Switching on/off the other `luavlna` features is implemented only by - setting a special `luavlna` variable. - \_cod ----------------------------- - -\_def\.preventsingledebugon{\_directlua{luavlna.debug(true)}} -\_def\.preventsingledebugoff{\_directlua{luavlna.debug(false)}} - -\_def\.nopredegrees{\_directlua{luavlna.no_predegrees = true}} -\_def\.nosufdegrees{\_directlua{luavlna.no_sufdegrees = true}} -\_def\.nounits{\_directlua{luavlna.no_unit = true}} -\_def\.noinitials{\_directlua{luavlna.no_initials = true}} - -\_nspublic - \singlechars % declare single-letter prepositions per language - \compoundinitials % declare compound characters per language - \enablesplithyphens % enable split hyphens per language - \disablesplithyphens % disable split hyphens per language - \preventsinglelang % declare main language independent of current hyphenation - \preventsingleon % switch on the prepositions feature (default) - \preventsingleoff % switch off the prepositions feature - \nopredegrees % switch off pre-degrees feature (default is on) - \nosufdegrees % switch off post-degrees feature (default is on) - \nounits % switch off SI units feature (default is on) - \noinitials % switch off initials feature (default is on) - \preventsingledebugon % switch on debug printing (purple squares) - \preventsingledebugoff % switch off debug printing (default) - ; - -\_endnamespace - -% Default values: -\singlechars{Czech}{AIiVvOoUuSsZzKk} -\singlechars{Slovak}{AIiVvOoUuSsZzKk} -\compoundinitials{Czech}{Ch,CH} % doesn't work in version v0.1g of luavlna -\enablesplithyphens{Czech} -\enablesplithyphens{Slovak} -% + predegrees, sufdegrees, units, initials (they are independent of language value) - -\_endcode - -What should be done automatically after `\load[vlna]`: - - Prepositions feature: v lese -> v~lese, (A taky zde) -> (A~taky zde). - - Pre-degrees feature: Mgr. Bown -> Mgr.~Brown. - - Post-degrees feature: John Brown, PhD. -> John Brown,~PhD. - - SI units feature: 42 cm -> 42~cm (with thin space) - - Initials feature: J. Brown -> J.~Brown - - Split hyphens feature: propan-butan -> propan\discretionary{-}{-}{-}butan. - -The prepositions and split-hyphens features are language-dependent, the other -features are language-independent. - -A testing file: - -\begtt -\load[vlna] -\fontfam[LMfonts] -\cslang -\preventsingledebugon - -Mgr. J. Brown, PhD., zkusí v lese (A taky v závorce) zkontrolovat rozměr 42 m. -Obejde se bez propan-butanových lahví. -\bye -\endtt - -Note, that versinon v0.1g 2020-06-02 of the luavlna package is an -experimental code. It seems that `\compoundinitials` does not work in this -version and when you use `\hbox{-}` in a paragraph when -`\enablesplithyphens` then LuaTeX hangs. diff --git a/Master/texmf-dist/tex/optex/base/alloc.opm b/Master/texmf-dist/tex/optex/base/alloc.opm new file mode 100644 index 00000000000..5d874134d41 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/alloc.opm @@ -0,0 +1,173 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \newdimen {Allocators for registers <2021-02-15>} % loaded in format + + \_doc ----------------------------- + The limits are set first. + \_cod ----------------------------- + +\_chardef\_maicount = 65535 % Max Allocation Index for counts registers in LuaTeX +\_let\_maidimen = \_maicount +\_let\_maiskip = \_maicount +\_let\_maimuskip = \_maicount +\_let\_maibox = \_maicount +\_let\_maitoks = \_maicount +\_chardef\_mairead = 15 +\_chardef\_maiwrite = 15 +\_chardef\_maifam = 255 + + \_doc ----------------------------- + Each allocation macro needs its own counter. + \_cod ----------------------------- + +\_countdef\_countalloc=10 \_countalloc=255 +\_countdef\_dimenalloc=11 \_dimenalloc=255 +\_countdef\_skipalloc=12 \_skipalloc=255 +\_countdef\_muskipalloc=13 \_muskipalloc=255 +\_countdef\_boxalloc=14 \_boxalloc=255 +\_countdef\_toksalloc=15 \_toksalloc=255 +\_countdef\_readalloc=16 \_readalloc=-1 +\_countdef\_writealloc=17 \_writealloc=-1 +\_countdef\_famalloc=18 \_famalloc=3 + + \_doc ----------------------------- + The common allocation macro + \`\_allocator` `\<sequence> {<type>} \<primitive declarator>` + is defined. This idea was used in classical plain \TeX/ by + Donald Knuth too but the macro from plain \TeX/ seems to be + more complicated:). + \_cod ----------------------------- + +\_def\_allocator #1#2#3{% + \_incr{\_cs{_#2alloc}}% + \_ifnum\_cs{_#2alloc}>\_cs{_mai#2}% + \_errmessage{No room for a new \_ea\_string\_csname #2\_endcsname}% + \_else + \_global#3#1=\_cs{_#2alloc}% + \_wlog{\_string#1=\_ea\_string\_csname #2\_endcsname\_the\_cs{_#2alloc}}% + \_fi +} + + \_doc ----------------------------- + The allocation macros + \`\newcount`, \`\newdimen`, \`\newskip`, \`\newmuskip`, \`\newbox`, + \`\newtoks`, \`\newread`, \`\newwrite` and \`\newfam` + are defined here. + \_cod ----------------------------- + +\_def\_newcount #1{\_allocator #1{count}\_countdef} +\_def\_newdimen #1{\_allocator #1{dimen}\_dimendef} +\_def\_newskip #1{\_allocator #1{skip}\_skipdef} +\_def\_newmuskip #1{\_allocator #1{muskip}\_muskipdef} +\_def\_newbox #1{\_allocator #1{box}\_chardef} +\_def\_newtoks #1{\_allocator #1{toks}\_toksdef} +\_def\_newread #1{\_allocator #1{read}\_chardef} +\_def\_newwrite #1{\_allocator #1{write}\_chardef} +\_def\_newfam #1{\_allocator #1{fam}\_chardef} + +\_public \newcount \newdimen \newskip \newmuskip \newbox \newtoks \newread \newwrite \newfam ; + + \_doc ----------------------------- + The \`\newinsert` macro is defined differently than others. + \_cod ----------------------------- + +\_newcount\_insertalloc \_insertalloc=255 +\_chardef\_insertmin = 201 + +\_def\_newinsert #1{% + \_decr\_insertalloc + \_ifnum\_insertalloc <\_insertmin + \_errmessage {No room for a new \_string\insert}% + \_else + \_global\_chardef#1=\_insertalloc + \_wlog {\_string#1=\_string\_insert\_the\_insertalloc}% + \_fi +} +\_public \newinsert ; + + \_doc ----------------------------- + Other allocation macros \`\newattribute` and \`\newcatcodetable` + have their counter allocated by the `\newcount` macro. + \_cod ----------------------------- + +\_newcount \_attributealloc \_attributealloc=0 +\_chardef\_maiattribute=\_maicount +\_def\_newattribute #1{\_allocator #1{attribute}\_attributedef} + +\_newcount \_catcodetablealloc \_catcodetablealloc=10 +\_chardef\_maicatcodetable=32767 +\_def\_newcatcodetable #1{\_allocator #1{catcodetable}\_chardef} + +\_public \newattribute \newcatcodetable ; + + \_doc ----------------------------- + We declare public and private versions of `\tmpnum` and `\tmpdim` + registers separately. They are independent registers. + \_cod ----------------------------- + +\_newcount \tmpnum \_newcount \_tmpnum +\_newdimen \tmpdim \_newdimen \_tmpdim + + \_doc ----------------------------- + A few registers are initialized like in plain\TeX/. We absolutely + don't support the `@`category dance, so `\z@skip` + `\z@`, `\p@` etc. are not defined in \OpTeX/. If you need such + control sequences then you can initialize them by `\load[plain-at]`. + + Only the \`\_zo` and \`\_zoskip` (equivalents to `\z@` and `\z@skip`) + are declared here and used in some internal macros of \OpTeX/ + for improving speed. + \_cod ----------------------------- + +\_newdimen\_maxdimen \_maxdimen=16383.99999pt % the largest legal <dimen> +\_newdimen\_zo \_zo=0pt +\_newskip\_hideskip \_hideskip=-1000pt plus 1fill % negative but can grow +\_newskip\_centering \_centering=0pt plus 1000pt minus 1000pt +\_newskip\_zoskip \_zoskip=0pt plus0pt minus0pt +\_newbox\_voidbox % permanently void box register + +\_public \maxdimen \hideskip \centering \voidbox ; + +\_endcode %--------------------------------------------------- + +Like plain\TeX, the allocators `\newcount`, `\newwrite`, etc. are defined. +The registers are allocated from 256 to the `\_mai<type>` which is 65535 in +\LuaTeX/. + +Unlike in Plain\TeX/, the mentioned allocators are not `\outer`. + +User can use `\dimen0` to `\dimen200` and similarly for `\skip`, +`\muskip`, `\box`, and `\toks` directly. User can use +`\count20` to `\count200` directly too. This is the same +philosophy as in old plain\TeX/, but the range of directly used registers +is wider. + +Inserts are allocated from 254 to 201 using `\newinsert`. + +You can define your own allocation concept (for example for allocation of +arrays) from the top of the registers array. The example shows a definition of +the array-like declarator of counters. + +\nobreak +\begtt +\newcount \_maicount % redefine maximal allocation index as variable +\_maicount = \maicount % first value is top of the array + +\def\newcountarray #1[#2]{% \newcountarray \foo[100] + \global\advance\_maicount by -#2\relax + \ifnum \_countalloc > \_maicount + \errmessage{No room for a new array of \string\count}% + \else + \global\chardef#1=\_maicount + \fi +} +\def\usecount #1[#2]{% \usecount \foo[2] + \count\numexpr#1+#2\relax +} +\endtt + +\_endinput + +2021-02-15 \_advance -> \_incr, \_decr +2020-05-12 \newmath -> \newfam bug fixing +2020-01-23 released diff --git a/Master/texmf-dist/tex/optex/base/basic-macros.opm b/Master/texmf-dist/tex/optex/base/basic-macros.opm new file mode 100644 index 00000000000..4d465c30109 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/basic-macros.opm @@ -0,0 +1,130 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \sdef {Basic macros for OpTeX <2021-02-03>} % loaded in format + + \_doc ------------------------------ + \`\bgroup`, \`\egroup`, \`\empty`, \`\space`, \`\null` and \`\wlog` + are classical macros from plain \TeX/. + \_cod ------------------------------ + +\_let\_bgroup={ \_let\_egroup=} +\_def \_empty {} +\_def \_space { } +\_def \_null {\_hbox{}} +\_def \_wlog {\_immediate\_write-1 } % write on log file (only) +\_public \bgroup \egroup \empty \space \null \wlog ; + + \_doc ------------------------------ + \`\ignoreit` ignores next token or `{<text>}`, + \`\useit``{<text>}` expands to `<text>` (removes outer braces), + \`\ignoresecond` uses first, ignores second parameter and + \`\usesecond` ignores first, uses second parameter. + \_cod ------------------------------ + +\_long\_def \_ignoreit #1{} +\_long\_def \_useit #1{#1} +\_long\_def \_ignoresecond #1#2{#1} +\_long\_def \_usesecond #1#2{#2} +\_public \ignoreit \useit \ignoresecond \usesecond ; + + \_doc ------------------------------ + \`\bslash` is \"normal backslash" with category code 12. + \`\nbb` is double backslash + and \`\pcent` is normal~`%`. + They can be used in Lua codes, for example. + \_cod ------------------------------ + +\_edef \_bslash {\_csstring\\} +\_edef \_nbb {\_bslash\_bslash} +\_edef \_pcent{\_csstring\%} +\_public \bslash \nbb \pcent ; + + \_doc ------------------------------ + \`\sdef` `{<text>}` is equivalent to `\def\<text>`, where `\<text>` is a control + sequence. You can use arbitrary parameter mask after `\sdef{<text>}`, don't + put the (unwanted) space immediately after closing brace \code{\}}. + \nl + \`\sxdef` `{<text>}` is equivalent to `\xdef\<text>`. + \nl + \`\slet` `{<textA>}{<textB>}` is equivalent to `\let \<textA> = \<textB>`. + \_cod ------------------------------ + +\_def \_sdef #1{\_ea\_def \_csname#1\_endcsname} +\_def \_sxdef #1{\_ea\_xdef \_csname#1\_endcsname} +\_def \_slet #1#2{\_ea\_let \_csname#1\_ea\_endcsname \_csname#2\_endcsname} +\_public \sdef \sxdef \slet ; + + \_doc ------------------------------ + \`\adef` `{<char>}{<body>}` puts the <char> as active character and defines it + as `{<body>}`. You can declare a macro with parameters too. For example + `\adef @#1{...#1...}`. + \_cod ------------------------------ + +\_def \_adef #1{\_catcode`#1=13 \_begingroup \_lccode`\~=`#1\_lowercase{\_endgroup\_def~}} +\_public \adef ; + + \_doc ------------------------------ + \`\cs` `{<text>}` is only a shortcut to `\csname <text>\endcsname`, but you need + one more `\_ea` if you need to get the real control sequence `\<text>`. + \nl + \`\trycs` `{<csname>}{<text>}` expands to `\<csname>` + if it is defined else to the `<text>`. + \_cod ------------------------------ + +\_def \_cs #1{\_csname#1\_endcsname} +\_def \_trycs#1#2{\_ifcsname #1\_endcsname \_csname #1\_ea\_endcsname \_else #2\_fi} +\_public \cs \trycs ; + + \_doc ------------------------------ + \`\addto` `\macro{<text>}` adds `<text>` to your `\macro`, which must be defined. + \_cod ------------------------------ + +\_long\_def \_addto #1#2{\_ea\_def\_ea#1\_ea{#1#2}} +\_public \addto ; + + \_doc ----------------------------- + \`\incr``<counter>` increases `<counter>` by one globally. + \`\decr``<counter>` decreases `<counter>` by one globally. + \_cod ----------------------------- + +\_def\_incr #1{\_global\_advance#1by1 } +\_def\_decr #1{\_global\_advance#1by-1 } +\_public \incr \decr ; + + \_doc ------------------------------ + \`\opwarning` `{<text>}` prints warning on the terminal and to the log file. + \_cod ------------------------------ + +\_def \_opwarning #1{\_wterm{WARNING l.\_the\_inputlineno: #1.}} +\_public \opwarning ; + + \_doc ------------------------------ + \`\loggingall` and \`\tracingall` are defined similarly as in + plain \TeX/, but they print + more logging information to the log file and the terminal. + \_cod ------------------------------ + +\_def\_loggingall{\_tracingcommands=3 \_tracingstats=2 \_tracingpages=1 + \_tracingoutput=1 \_tracinglostchars=1 \_tracingmacros=2 + \_tracingparagraphs=1 \_tracingrestores=1 \_tracingscantokens=1 + \_tracingifs=1 \_tracinggroups=1 \_tracingassigns=1 } +\_def\_tracingall{\_tracingonline=1 \_loggingall} +\_public \loggingall \tracingall ; + + \_doc ------------------------------ + Write a warning if the user did not load a Unicode Font {\em or} + if there were unresolved references. \`\_byehook` is used in the \^`\bye` macro. + \_cod ------------------------------ + +\_def\_byehook{% + \_ifx\_initunifonts\_relax \_relax\_else \_opwarning{Unicode font was not loaded}\_fi + \_ifnum\_unresolvedrefs>0 \_opwarning{Try to rerun to get references right}\_fi +} + +\_endcode % ------------------------------------- + +2021-02-03: \useit defined. +2021-01-22: \trycs: \ea added in order to be able to use cs with parameters +2021-01-08: \opwarning format changed (secondly, hope that conclusively) +2020-10-12: \opwarning: line numbers added +2020-02-14: introduced diff --git a/Master/texmf-dist/tex/optex/base/bib-iso690.opm b/Master/texmf-dist/tex/optex/base/bib-iso690.opm new file mode 100644 index 00000000000..c58709ce835 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/bib-iso690.opm @@ -0,0 +1,906 @@ +% This is part of the OpTeX project, see http://petr.olsak.net/optex + +% bibliography style (iso690), version <2020-03-10>, loaded on demand by \usebib + +\_ifx\_optexbibstyle\_undefined \_errmessage + {This file can be read by: \_string\usebib/? (iso690) bibfiles command only} + \_endinput \_fi + + \_doc ----------------------------- + \`\_maybetod` (alias `\.` in the style file group) does not put the second dot. + \_cod ----------------------------- + +\_def\_maybedot{\_ifnum\_spacefactor=\_sfcode`\.\_relax\_else.\_fi} +\_tmpnum=\_sfcode`\. \_advance\_tmpnum by-2 \_sfcode`\.=\_tmpnum +\_sfcode`\?=\_tmpnum \_sfcode`\!=\_tmpnum +\_let\.=\_maybedot % prevents from double periods + + \_doc ----------------------------- + Option field. + \_cod ----------------------------- + +\_CreateField {option} +\_def\_isbiboption#1#2{\_edef\_tmp{\_noexpand\_isbiboptionA{#1}}\_tmp} +\_def\_isbiboptionA#1{\_def\_tmp##1 #1 ##2\_relax{% + \_if^##2^\_csname iffalse\_ea\_endcsname \_else\_csname iftrue\_ea\_endcsname \_fi}% + \_ea\_tmp\_biboptionsi #1 \_relax} +\_def\_bibopt[#1]#2#3{\_isbiboption{#1}\_iftrue\_def\_tmp{#2}\_else\_def\_tmp{#3}\_fi\_tmp} +\_def\_biboptionvalue#1#2{\_def\_tmp##1 #1:##2 ##3\_relax{\_def#2{##2}}% + \_ea\_tmp\_biboptionsi #1: \_relax} + +\_def\_readbiboptions{% + \_RetrieveFieldIn{option}\_biboptionsi + \_toks1=\_ea{\_biboptionsi}% + \_edef\_biboptionsi{\_space \_the\_toks1 \_space \_the\_biboptions \_space}% +} +\_newtoks\_biboptions +\_public \biboptions ; + + \_doc ----------------------------- + Formating of Author/Editor lists. + \_cod ----------------------------- + +\_def\_firstauthorformat{% + \_upper{\_Lastname}\_bprintc\_Firstname{, *}\_bprintc\_Von{ *}\_bprintc\_Junior{, *}% +} +\_def\_otherauthorformat{% + \_bprintc\_Firstname{* }\_bprintc\_Von{* }\_upper{\_Lastname}\_bprintc\_Junior{, *}% +} +\_def\_commonname{% + \_ifnum\_NameCount=1 + \_firstauthorformat + \_ifx\_dobibmark\_undefined \_edef\_dobibmark{\_Lastname}\_fi + \_else + \_ifnum0\_namecount=\_NameCount + \_ifx\_maybeetal\_empty \_bibconjunctionand\_else , \_fi + \_else , \_fi + \_otherauthorformat + \_fi +} +\_def\_authorname{% + \_ifnum\_NameCount>0\_namecount\_relax\_else \_commonname \_fi + \_ifnum\_NameCount=0\_namecount\_relax \_maybeetal \_fi +} +\_let\_editorname=\_authorname + +\_def\_prepareauedoptions#1{% + \_def\_mabyetal{}\_csname lb@abbreviatefalse\_endcsname + \_biboptionvalue{#1max}\_authormax + \_biboptionvalue{#1min}\_authormin + \_biboptionvalue{#1pre}\_authorpre + \_biboptionvalue{#1print}\_authorprint + \_isbiboption{#1etal}\_iftrue \_def\_maybeetal{\_Mtext{bib.etal}}\_fi + \_biboptionvalue{#1trim}\_autrim + \_let\_namecountraw=\_namecount + \_ifx\_authormax\_empty \_else + \_ifnum 0\_authormax<0\_namecount + \_edef\_namecount{\_ifx\_authormin\_empty\_authormax\_else\_authormin\_fi}% + \_def\_maybeetal{\_Mtext{bib.etal}}% + \_fi\_fi + \_ifx\_autrim\_empty \_def\_autrim{10000}\_fi + \_ifnum\_autrim=0 \_def\_autrim{10000}\_fi + \_ifnum 0\_namecount<\_autrim\_relax \_else \_AbbreviateFirstname \_fi +} +\_def\_maybeetal{} + +\_ifx\upper\_undefined + \_ifx\caps \_undefined \_def\upper{\_uppercase\_ea}\_else + \_def\upper#1{{\caps\_rm #1}}\_fi +\_fi +\_let\_upper=\upper + + \_doc ----------------------------- + Preparing bib-mark (used when `\nonumcitations` is set). + \_cod ----------------------------- + +\_def\_setbibmark{% + \_ifx\_dobibmark\_undefined \_def\_dobibmark{}\_fi + \_RetrieveFieldIn{bibmark}\_tmp + \_ifx\_tmp\_empty \_RetrieveFieldIn{year}\_tmp \_edef\_tmp{\_dobibmark, \_tmp}\_fi + \_bibmark=\_ea{\_tmp}% +} + + \_doc ----------------------------- + Setting phrases. + \_cod ----------------------------- + +\_def\_bibconjunctionand{\_Mtext{bib.and}} +\_def\_preurl{\_Mtext{bib.available}} +\_let\_predoi=\_preurl +\_def\_postedition{\_mtext{bib.edition}} +\_def\_Inclause{In:~} +\_def\_prevolume{\_mtext{bib.volume}} +\_def\_prenumber{\_mtext{bib.number}} +\_def\_prepages{\_mtext{bib.prepages}} +\_def\_posteditor{\_ifnum0\_namecountraw>1 \_Mtext{bib.editors}\_else\_Mtext{bib.editor}\_fi} + + \_doc ---------------------------- + \`\_Mtext``{<identifier>}` expands to a + phrase by outer document language (no entry language). + \_cod ----------------------------- + +\_chardef\_documentlanguage=\_language +\_def\_Mtext#1{\_csname _mt:#1:\_csname _lan:\_the\_documentlanguage\_endcsname\_endcsname} + +\_CreateField {lang} +\_def\_setlang#1{\_ifx#1\_empty \_else + \_ifcsname _mt:bib.and:#1\_endcsname \_language=\_csname _#1Patt\_endcsname \_relax + \_else \_opwarning{No phrases for "#1" used by [\EntryKey] in .bib}% + \_fi\_fi +} + + \_doc ----------------------------- + Non-standard field names. + \_cod ----------------------------- + +\_CreateField {ednote} +\_CreateField {citedate} +\_CreateField {numbering} +\_CreateField {isbn} +\_CreateField {issn} +\_CreateField {doi} +\_CreateField {url} +\_CreateField {bibmark} + + \_doc ----------------------------- + Sorting. + \_cod ----------------------------- + +\_SortingOrder{name,year}{lfvj} +\_SpecialSort {key} + + \_doc ----------------------------- + Supporting macros. + \_cod ----------------------------- + +\_def\_bibwarninga{\_bibwarning} +\_def\_bibwarningb{\_bibwarning} + +\_def\_docitedate #1/#2/#3/#4\_relax{[\_Mtext{bib.citedate}% + \_if^#2^#1\_else + \_if^#3^#1/#2\_else + \_cs{_\_cs{_lan:\_the\_documentlanguage}dateformat}#1/#2/#3\relax + \_fi\_fi ]% +} +\_def\_doyear#1{ + \_biboptionvalue{yearprint}\_yearprint + \_ifx\_yearprint\_empty#1\_else\_def\YEAR{#1}\_yearprint\_fi +} +\_def\_preparenumbering{% + \_def\VOL{\_RetrieveField{volume}}% + \_def\NO{\_RetrieveField{number}}% + \_def\PP{\_RetrieveField{pages}}% +} +\_def\_prepareednote{% + \_def\EDN{\_RetrieveField{edition}}% + \_def\ADDR{\_RetrieveField{address}}% + \_def\PUBL{\_RetrieveField{publisher}}% + \_def\YEAR{\_RetrieveField{year}}% + \_def\AU{\_bprintb[!author]{\_doauthor0{####1}}{}}% + \_def\ED{\_bprintb[!editor]{\_doeditor0{####1}}{}}% + \_preparenumbering +} +\_def\_doedition#1{% + \_biboptionvalue{editionprint}\_editionprint + \_ifx\_editionprint\_empty#1\_postedition\_else\_def\ED{#1}\_editionprint\_fi +} +\_def\_doauthor#1#2{\_prepareauedoptions{au}\_let\_iseditorlist=\_undefined + \_if1#1\_def\AU{#2}\_else\_let\_authorprint=\_empty\_fi + \_ifx\_authorprint\_empty #2\_else \_authorprint\_fi +} +\_def\_doeditor#1#2{\_prepareauedoptions{ed}\_let\_firstauthorformat=\_otherauthorformat + \_if1#1\_def\ED{#2}\_else\_let\_authorprint=\_empty\_fi + \_ifx\_authorprint\_empty #2\_posteditor\_else \_authorprint\_fi +} + + \_doc ----------------------------- + Entry types. + \_cod ----------------------------- + +\_sdef{_print:BEGIN}{% + \_readbiboptions + \_biboptionvalue{titlepost}\_titlepost + \_isbiboption{unpublished}\_iftrue \_let\_bibwarninga=\_relax \_let\_bibwarningb=\_relax \_fi + \_isbiboption{nowarn}\_iftrue \_let\_bibwarning=\_relax \_fi + \_isbiboption{urlalso}\_iftrue \_def\_preurl{\_Mtext{bib.availablealso}}\_fi + \_RetrieveFieldIn{lang}\_langentry \_setlang\_langentry +} +\_sdef{_print:END}{% + \_bprinta [note] {*.}{}% + \_setbibmark +} +\_def\_bookgeneric#1{% + \_bprinta [howpublished] {[*].\ }{}% + \_bprintb [edition] {\_doedition{##1}\.\ }{}% + \_bprinta [ednote] {*.\ }{}% + \_bprinta [address] {*\_bprintv[publisher]{:}{\_bprintv[year]{,}{.}}\ }{\_bibwarninga}% + \_bprinta [publisher] {*\_bprintv[year]{,}{.}\ }{\_bibwarninga}% + \_bprintb [year] {\_doyear{##1}\_bprintv[citedate]{\_bprintv[numbering]{.}{}}{.}\ }% + {\_bibwarning}% + \_bprinta [numbering] {\_preparenumbering*\_bprintv[citedate]{}{\.}\ }{}% + \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}% + #1% + \_bprinta [series] {*.\ }{}% + \_bprinta [isbn] {ISBN~*.\ }{\_bibwarningb}% + \_bprinta [issn] {ISSN~*.\ }{}% + \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} +\_sdef{_print:book}{% + \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }% + {\_bibwarning}% + \_bookgeneric{}% +} +\_sdef{_print:article}{% + \_biboptionvalue{journalpost}\_journalpost + \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}% + \_bprinta [title] {*.\ \_bprintc\_titlepost{*.\ }}{\_bibwarning}% + \_bprintb [journal] {{\_em##1}\_bprintc\_journalpost{\.\ *}\_bprintv[howpublished]{}{\.}\ }% + {\_bibwarninga}% + \_bprinta [howpublished] {[*].\ }{}% + \_bprinta [address] {*\_bprintb[publisher]{:}{,}\ }{}% + \_bprinta [publisher] {*, }{}% + \_bprinta [month] {*, }{}% + \_bprintb [year] {\_doyear{##1}\_bprintv[volume,number,pages]{,}{\.}\ }{}% + \_bprinta [numbering] {\_preparenumbering*\_bprintv[citedate]{}{\.}\ } + {\_bprinta [volume] {\_prevolume*\_bprintv[number,pages]{,}{\.}\ }{}% + \_bprinta [number] {\_prenumber*\_bprintv[pages]{,}{\.}\ }{}% + \_bprintb [pages] {\_prepages\_hbox{##1}\_bprintv[citedate]{}{\.}\ }% + {\_bibwarninga}}% + \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}% + \_bprinta [issn] {ISSN~*.\ }{}% + \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} +\_sdef{_print:inbook}{% + \_let\_bibwarningb=\_relax + \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}% + \_bprinta [title] {*.\ }{\_bibwarning}% + \_Inclause + \_bprintb [!editor] {\_doeditor1{##1}\.\ }{}% + \_bprintb [booktitle] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }% + {\_bibwarning}% + \_bookgeneric{\_bprintb [pages] {\_prepages\_hbox{##1}. }{}}% +} +\_slet{_print:inproceedings}{_print:inbook} +\_slet{_print:conference}{_print:inbook} + +\_sdef{_print:thesis}{% + \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }% + {\_bibwarning}% + \_bprinta [howpublished] {[*].\ }{}% + \_bprinta [address] {*\_bprintv[school]{:}{\_bprintv[year]{,}{.}}\ }{\_bibwarning}% + \_bprinta [school] {*\_bprintv[year]{,}{.}\ }{\_bibwarning}% + \_bprinta [month] {*, }{}% + \_bprintb [year] {\_doyear{##1}\_bprintv[citedate]{}{.}\ }{\_bibwarninga}% + \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}% + \_bprinta [type] {*\_bprintv[ednote]{,}{.}\ }% + {\_ifx\_thesistype\_undefined\_bibwarning + \_else\_thesistype\_bprintv[ednote]{,}{.}\ \_fi}% + \_bprinta [ednote] {*.\ }{}% + \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} +\_sdef{_print:phdthesis}{\_def\_thesistype{\_Mtext{bib.phdthesis}}\_cs{_print:thesis}} +\_sdef{_print:mastershesis}{\_def\_thesistype{\_Mtext{bib.masthesis}}\_cs{_print:thesis}} +\_sdef{_print:bachelorsthesis}{\_def\_thesistype{\_Mtext{bib.bachthesis}}\_cs{_print:thesis}} + +\_sdef{_print:generic}{% + \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }% + {\_bibwarning}% + \_bprinta [howpublished] {[*].\ }{}% + \_bprinta [ednote] {\_prepareednote*\_bprintv[citedate]{}{.}\ }{\_bibwarning}% + \_bprinta [year] {}{\_bibwarning}% + \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}% + \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} +\_slet{_print:booklet}{_print:generic} +\_slet{_print:incolleciton}{_print:generic} +\_slet{_print:manual}{_print:generic} +\_slet{_print:proceedings}{_print:generic} +\_slet{_print:techreport}{_print:generic} +\_slet{_print:unpublished}{_print:generic} + +\_sdef{_print:misc}{\_let\_bibwarning=\_relax \_cs{_print:generic}} + +\_endcode + + +This is the iso690 bibliographic style used by \OpTeX/. + +See `op-biblist.bib` for an example of the `.bib` input. You can try it by: + +\begtt +\fontfam[LMfonts] +\nocite[*] +\usebib/s (iso690) op-biblist +\end +\endtt + +\seccc Common rules in \code{.bib} files + +There are entries of type `@FOO{...}` in the `.bib` file. Each entry consists of +fields in the form `name = "value"`, or `name = {value}`. No matter which form is +used. If the value is pure numeric then you can say simply `name = value`. +Warning: the comma after each field value is mandatory! If it is missing then the +next field is ignored or badly interpreted. + +The entry names and field names are case insensitive. If there exists a data +field no mentioned here then it is simply ignored. You can use it to store +more information (abstract, for example). + +There are \"standard fields" used in ancient bib\TeX/ (author, title, editor, edition, +etc., see \url{http://en.wikipedia.org/wiki/BibTeX}). The `iso690` style introduces +several \"non-standard" fields: ednote, numbering, isbn, issn, doi, url, +citedate, key, bibmark. They are documented here. + +Moreover, there are two optional special fields: + +\begitems +* lang = language of the entry. The hyphenation plus autogenerated phrases and + abbreviations will be typeset by this language. +* option = options by which you can control a special printing of various fields. +\enditems + +There can be only one option field per each entry with (maybe) more options +separated by spaces. You can declare the global option(s) in your document +applied for each entry by `\biboptions={...}`. + + +\seccc The author field + +All names in the author list have to be separated by \"\code{ and }". +Each author can be written in various formats (the `von` part is typically missing): + +\begtt +Firstname(s) von Lastname +or +von Lastname, Firstname(s) +or +von Lastname, After, Firstname(s) +\endtt +Only the Lastname part is mandatory. Examples: +\begtt +Petr Olšák +or +Olšák, Petr + +Leonardo Piero da Vinci +or +da Vinci, Leonardo Piero +or +da Vinci, painter, Leonardo Piero +\endtt +The separator \"\code{ and }" between authors +will be converted to comma during +printing, but between the semifinal and final author the word \"and" (or something +different depending on the current language) is printed. + +The first author is printed in reverse order: \"LASTNAME, Firstname(s) von, +After" and the other authors are printed in normal order: \"Firstname(s) +von LASTNAME, After". This feature follows the ISO 690 norm. The Lastname +is capitalized using uppercase letters. But if the `\caps` font modifier is defined, +then it is used and printed `{\caps\_rm Lastname}`. + +You can specify the option `aumax:<number>`. The `<number>` denotes the +maximum authors to be printed. The rest of the authors are ignored and the +`et~al.` is appended to the list of printed authors. This text is +printed only if the `aumax` value is less than the real number of authors. +If you have the same number of authors in the .bib file as you need to print +but you want to append `et~al.` then you can use `auetal` option. + +There is an `aumin:<number>` option which denotes the definitive number of +printed authors if the author list is not fully printed due to `aumax`. +If `aumin` is unused then `aumax` authors are printed in this case. + +All authors are printed if `aumax:<number>` option isn't given. +There is no internal limit. But you can set the global options in +your document by setting the `\biboptions` tokens list. For example: + +\begtt +\biboptions={aumax:7 aumin:1} +% if there are 8 or more authors then only the first author is printed. +\entdd + +Examples: +\begtt +author = "John Green and Bob Brown and Alice Black", +\endtt +output: GREEN, John, Bob BROWN, and Alice BLACK. + +\begtt +author = "John Green and Bob Brown and Alice Black", +option = "aumax:1", +\endtt +output: GREEN, John~et~al. + +\begtt +author = "John Green and Bob Brown and Alice Black", +option = "aumax:2", +\endtt +output: GREEN, John, Bob BROWN~et~al. + +\begtt +author = "John Green and Bob Brown and Alice Black", +option = "aumax:3", +\endtt +output: GREEN, John, Bob BROWN, and Alice BLACK. + +\begtt +author = "John Green and Bob Brown and Alice Black", +option = "auetal", +\endtt +output: GREEN, John, Bob BROWN, Alice BLACK~et~al. + +If you need to add a text before or after the author's list, you can use +the `auprint:{<value>}` option. The <value> will be printed instead of the +authors list. The <value> can include `\AU` macro which expands to the authors +list. Example: + +\begtt +author = "Robert Calbraith", +option = "auprint:{\AU\space [pseudonym of J. K. Rowling]}", +\endtt +output: CALBRAITH Robert [pseudonym of J. K. Rowling]. + +You can use the `autrim:<number>` option. All Firstnames of all authors +are trimmed (i. e. reduced to initials) iff the number of authors in the +author field is greater than or equal to `<number>`. There is an exception: +`autrim:0` means that no Firstnames are trimmed. This is the default behavior. +Another example: `autrim:1` means that all Firstnames are trimmed. + +\begtt +author = "John Green and Bob Brown and Alice Black", +option = "auetal autrim:1", +\endtt +output: GREEN, J., B. BROWN, A. BLACK~et~al. + +If you need to write a team name or institution instead of authors, replace all +spaces by `\ ` in this name. Such text is interpreted as Lastname. You +can add the secondary name (interpreted as Firstname) after the comma. Example: + +\begtt + author = "Czech\ Technical\ University\ in\ Prague, + Faculty\ of\ Electrical\ Engeneering", +\endtt +output: CZECH TECHNICAL UNIVERSITY IN PRAGUE, Faculty of Electrical Engeneering. + + +\seccc The editor field + +The editor field is used for the list of the authors of the collection. The +analogous rules as in author field are used here. It means that the +authors are separated by \"\code{ and }", the Firstnames, Lastnames, etc. are +interpreted and you can use the options `edmax:<number>`, `edmin:<number>`, +`edetal`, `edtrim:<number>` and `edprint:{<value>}` (with `\ED` macro). +Example: +\begtt +editor = "Jan Tomek and Petr Karas", +option = "edprint:{\ED, editors.} edtrim:1", +\endtt +Output: J. TOMEK and P. KARAS, editors. + +If `edprint` option is not set then `{\ED, eds.}` or `{\ED, ed.}` is used +depending on the entry language and on the singular or plural of +the editor(s). + + +\seccc The ednote field + +The ednote field is used as the secondary authors and more editional info. The +value is read as raw data without any interpretation of Lastname, Firstname +etc. +\begtt +ednote = "Illustrations by Robert \upper{Agarwal}, edited by Tom \upper{Nowak}", +\endtt +output: Illustrations by Robert AGARWAL, edited by Tom NOWAK. + +The `\upper` command has to be used for Lastnames in the ednote field. + + +\seccc The title field + +This is the title of the work. It will be printed (in common entry types) by +italics. The ISO 690 norm declares, that the title plus optional subtitle +are in italics and they are separated by a colon. Next, the optional secondary +title has to be printed in an upright font. This can be added by +`titlepost:{<value>}`. Example: + +\begtt +title = "The Simple Title of The Work", +or +title = "Main Title: Subtitle", +or +title = "Main Title: Subtitle", +option = "titlepost:{Secondary title}", +\endtt +The output of the last example: +{\it Main Title: Subtitle}. Secondary title. + + +\seccc The edition field + +This field is used only for second or more edition of cited work. Write +only the number without the word "edition". The shortcut "ed." (or something +else depending on the current language) is added automatically. Examples: + +\begtt +edition = "Second", +edition = "2nd", +edition = "2$^{\rm nd}$", +edition = "2.", +\endtt +Output of the last example: 2. ed. + +\begtt +edition = "2." +lang = "cs", +\endtt +Output: 2. vyd. + +Note, that the example `edition = "Second"` may cause problems. If you are +using language "cs" then the output is bad: Second vyd. +But you can use `editionprint:{<value>}` option. The the <value> is printed +instead of edition field and shortcut. The edition field must be set. Example: + +\begtt +edition = "whatever", +option = "editionprint:{Second full revised edition}", +\endtt +Output: Second full revised edition. + +You can use `\EDN` macro in `editionprint` value. This macro is expanded +to the edition value. Example: + +\begtt +edition = "Second", +option = "editionprint:{\EDN\space full revised edition}", +or +edition = "Second full revised edition", +option = "editionprint:{\EDN}", +\endtt + + +\seccc The address, publisher, year fields + +This is an anachronism from ancient Bib\TeX/ (unfortunately no exclusive) that +the address field includes only the city of the publisher's residence. No more +data are here. The publisher field includes the name of the publisher. + +\begtt +address = "Berlin", +publisher = "Springer Verlag", +year = 2012, +\endtt +Output: Berlin: Springer Verlag, 2012. + +Note, that the year needn't to be inserted into quotes because it is pure +numeric. + +The letter a, b, etc. are appended to the year automatically if two or more +subsequent entries in the bibliography list are not distinct by the first +author and year fields. If you needn't this feature, you can use the +`noautoletters` option. + +You can use "yearprint:{<value>}" option. If it is set then the <value> +is used for printing year instead the real field value. The reason: year is +sort sensitive, maybe you need to print something else than only sorting key. +Example: + +\begtt +year = 2000, +option = "yearpint:{© 2000}", +\endtt +Output: © 2000, sorted by: 2000. + +\begtt +year = "2012a", +option = "yearprint:{2012}", +\endtt +Output: 2012, sorted by: 2012a. + +The address, publisher, and year are typically mandatory fields. If they are +missing then the warning occurs. But you can set `unpublished` +option. Then this warning is suppressed. There is no difference in the +printed output. + + +\seccc The url field + +Use it without `\url` macro, but with `http://` prefix. Example: + +\begtt +url = "http://petr.olsak.net/opmac.html", +\endtt + +The ISO 690 norm recommends to add the text \"Available from" (or +something else if a different current language is used) before URL. +It means, that the output of the previous example is: + +Available from \url{http://petr.olsak.net/opmac.html}. + +If the `cs` language is the current one than the output is: + +Dostupné z: \url{http://petr.olsak.net/opmac.html}. + +If the `urlalso` option is used, then the added text has the form +\"Available also from" or \"Dostupné také z:" (if `cs` language is +current). + + +\seccc The citedate field + +This is the citation date. The field must be in the form year/month/day. It +means, that the two slashes must be written here. The output depends on the +current language. Example: + +\begtt +citedate = "2004/05/21", +\endtt +Output when `en` is current: [cit. 2004-05-21].\nl +Output when `cs` is current: [vid. 21.~5.~2004]. + + +\seccc The howpublished field + +This declares the available medium for the cited document if it is not in printed +form. Alternatives: online, CD, DVD, etc. Example: + +\begtt +howpublished = "online", +\endtt +Output: [online]. + + +\seccc The volume, number, pages and numbering fields + +The volume is the \"big mark" of the journal issue and the number is the +\"small mark" of the journal issue and pages includes the page range of +the cited article in the journal. The volume is prefixed by Vol.~, +the number by No.~, and the pages by pp.~. But these prefixes depends on the +language of the entry. + +Example: + +\begtt +volume = 31, +number = 3, +pages = "37--42", +\endtt +Output: Vol.~31, No.~3, pp.~37--42. + +\begtt +volume = 31, +number = 3, +pages = "37--42", +lang = "cs", +\endtt +Output: ročník~31, č.~3, s.~37--42. + +If you disagree with the default prefixes, you can use the numbering field. +When it is set then it is used instead of volume, number, pages fields +and instead of any mentioned prefixes. The numbering can include macros +`\VOL`, `\NO`, `\PP`, which are expanded to the respective values of fields. Example: + +\begtt +volume = 31, +number = 3, +pages = "37--42" +numbering = "Issue~\VOL/\NO, pages~\PP", +\endtt +Output: Issue~31/3, pages~37--42 + +Note: The volume, numbers, and pages fields are printed without numbering +filed only in the `@ARTICLE` entry. It means, that if you need to visible them +in the `@INBOOK`, `@INPROCEEDINGS` etc. entries, then you must use the numbering field. + + +\seccc Common notes about entries + +The order of the fields in the entry is irrelevant. We use the printed order +in this manual. The exclamation mark (!) denotes the mandatory field. If +the field is missing then a warning occurs during processing. + +If the `unpublished` option is set then the fields address, publisher, year, +isbn, and pages are not mandatory. If the `nowarn` option is set then no +warnings about missing mandatory fields occur. + +If the field is used but not mentioned in the entry documentation below then +it is silently ignored. + +\secccc The `@BOOK` entry + +This is used for book-like entries. + +Fields: author(!), title(!), howpublished, edition, ednote, address(!), +publisher(!), year(!), citedate, series, isbn(!), doi, url, note. + +The ednote field here means the secondary authors (illustrator, cover design +etc.). + +\secccc The `@ARTICLE` entry + +This is used for articles published in a journal. + +Fields: author(!), title(!), journal(!), howpublished, address, publisher, +month, year, [numbering or volume, number, pages(!)], citedate, issn, +doi, url, note. + +If the numbering is used then it is used instead volume, number, pages. + + +\secccc The `@INBOOK` entry + +This is used for the part of a book. + +Fields: author(!), title(!), booktitle(!), howpublished, edition, ednote, +address(!), publisher(!), year(!), numbering, citedate, series, isbn or +issn, doi, url, note. + +The author field is used for author(s) of the part, the editor field +includes author(s) or editor(s) of the whole document. The pages field specifies +the page range of the part. The series field can include more information +about the part (chapter numbers etc.). + +The `@INPROCEEDINGS` and `@CONFERENCE` entries are equivalent to `@INBOOK` entry. + +\secccc The `@THESIS` entry + +This is used for the student's thesis. + +Fields: author(!), title(!), howpublished, address(!), school(!), +month, year(!), citedate, type(!), ednote, doi, url, note. + +The type field must include the text \"Master's Thesis" or something +similar (depending on the language of the outer document). + +There are nearly equivalent entries: `@BACHELORSTHESIS`, `@MASTERSTHESIS` and +`@PHDTHESIS`. These entries set the type field to an appropriate value +automatically. The type field is optional in this case. If it is used then +it has precedence before the default setting. + +\secccc The @MISC entry + +It is intended for various usage. + +Fields: author, title, howpublished, ednote, citedate, doi, url, note. + +You can use `\AU`, `\ED`, `\EDN`, `\VOL`, `\NO`, `\PP`, `\ADDR`, `\PUBL`, +`\YEAR` macros in ednote field. These macros print authors list, editors list, +edition, volume, number, pages, address, publisher, and year field values +respectively. + +The reason for this entry is to give to you the possibility to set the format of +entry by your own decision. The most of data are concentrated in the ednote field. + +\secccc The `@BOOKLET`, `@INCOLLECION`, `@MANUAL`, `@PROCEEDINGS`, `@TECHREPORT`, `@UNPUBLISHED` entries + +These entries are equivalent to `@MICS` entry because we need to save the +simplicity. They are implemented only for (almost) backward compatibility +with the ancient Bib\TeX/. But the ednote is mandatory field here, so you +cannot use these entries from the old databases without warnings and without +some additional work with the `.bib` file. + +\seccc The cite-marks (bibmark) used when \code{\\nonumcitations} is set + +When `\nonumcitations` is set then `\cite` prints text-oriented +bib-marks instead of numbers. This style file auto-generates these marks in the +form \"Lastname of the first author, comma, space, the year" if the bibmark field +isn't declared. If you need to set an exception from this common format, +then you can use bibmark field. + +The OPmac trick \url{http://petr.olsak.net/opmac-tricks-e.html\#bibmark} +describes how to redefine the algorithm for bibmark auto-generating when you +need the short form of the type [Au13]. + + +\seccc Sorting + +If `\usebib/c` is used then entries are sorted by citation order in the text. +If `\usebib/s` is used then entries are sorted by \"Lastname, Firstname(s)" of +the first author and if more entries have this value equal, then the year is +used (from older to newer). This feature follows the recommendation of the +ISO 690 norm. + +If you have the same authors and the same year, you can control the sorting +by setting years like 2013, 2013a, 2013b, etc. You can print something +different to the list using `yearprint{<value>}` option, see the section about +address, publisher, and year above. The real value of year field (i.e.\ not +yearprint value) is also used in the text-oriented bib-marks when +`\nonumcitations` is set. + +If you have some problems with name sorting, you can use the hidden field +`key`, which is used for sorting instead of the \"Lastname Firstname(s)" +of authors. If the `key` field is unset then the \"Lastname Firstname(s)" +is used for sorting normally. Example: + +\begtt +author = "Světla Čmejrková", +key = "Czzmejrkova Svetla", +\endtt + +This entry is now sorted between C and D. + +The norm recommends placing the auto-citations at the top of the list of +references. You can do this by setting `key = "@"`, to each entry with your +name because the `@` character is sorted before `A`. + + +\seccc Languages + +There is the language of the outer document and the languages of each entry. +The ISO 690 norm recommends that the technical notes (the prefix before URL, +the media type, the \"and" conjunction between the semifinal and final author) +maybe printed in the language of the outer document. The data of the entry +have to be printed in the entry language (edition ed./vyd., Vol./ročník, +No./č. etc.). Finally, there are the phrases independent of the language +(for example In:). Unfortunately, the bib\TeX/ supposes that the entry data +are not fully included in the fields so the automaton has to add some +text during processing (\"ed.", \"Vol.", \"see also", etc.). +But what language has to be chosen? + +The current value of the `\language` register at the start of the `.bib` +processing is described as the language of the outer document. This language +is used for technical notes regardless of the entry language. Moreover, +each entry can have the `lang` field (short name of the language). This +language is used for ed./vyd., vol./ročník, etc. and it is used for +hyphenation too. If the `lang` is not set then the outer document +language is used. + +You can use \^`\_Mtext{bib.<identifier>}` if you want to use a phrase +dependent on outer document language (no on entry language). +Example: + +\begtt +howpublished = "\_Mtext{bib.blue-ray}" +\endtt + +Now, you can set the variants of `bib.blue-ray` phrase for various +languages: + +\begtt +\_sdef{_mt:bib.blue-ray:en} {Blue-ray disc} +\_sdef{_mt:bib.blue-ray:cs} {Blue-ray disk} +\endtt + + +\seccc Summary of non-standard fields + +This style uses the following fields unknown by bib\TeX/: + +\begtt +option ... options separated by spaces +lang ... the language two-letter code of one entry +ednote ... edition info (secondary authors etc.) or + global data in @MISC-like entries +citedate ... the date of the citation in year/month/day format +numbering ... format for volume, number, pages +isbn ... ISBN +issn ... ISSN +doi ... DOI +url ... URL +\endtt + + +\seccc Summary of options + +\begtt \catcode`\<=13 +aumax:<number> ... maximum number of printed authors +aumin:<number> ... number of printed authors if aumax exceeds +autrim:<number> ... full Firstnames iff number of authors are less than this +auprint:{<value>} ... text instead authors list (\AU macro may be used) +edmax, edmin, edtrim ... similar as above for editors list +edprint:{<value>} ... text instead editors list (\ED macro may be used) +titlepost:{<value>} ... text after title +yearprint:{<value>} ... text instead real year (\YEAR macro may be used) +editionprint:{<value>} .. text instead of real edition (\EDN macro may be used) +urlalso ... the ``available also from'' is used instead ``available from'' +unpublished ... the publisher etc. fields are not mandatory +nowarn ... no mandatory fields +\endtt + +Other options in the option field are silently ignored. diff --git a/Master/texmf-dist/tex/optex/base/bib-simple.opm b/Master/texmf-dist/tex/optex/base/bib-simple.opm new file mode 100644 index 00000000000..dff747bd57b --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/bib-simple.opm @@ -0,0 +1,164 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +% bibliography style (simple), version <2020-03-10>, loaded on demand by \usebib + +\_ifx\_optexbibstyle\_undefined \_errmessage + {This file can be read by: \_string\usebib/? (simple) bibfiles command only} + \_endinput \_fi + +% misc: + +\_def\_maybedot{\_ifnum\_spacefactor=\_sfcode`\.\_relax\_else.\_fi} +\_tmpnum=\_sfcode`\. \_advance\_tmpnum by-2 \_sfcode`\.=\_tmpnum +\_sfcode`\?=\_tmpnum \_sfcode`\!=\_tmpnum +\_let\.=\_maybedot % prevents from double periods + +% Formatting of Author/Editor lists: + +\_def\_authorname{% + \_ifnum\_NameCount>1 + \_ifnum0\_namecount=\_NameCount \_mtext{bib.and}\_else , \_fi + \_else + \_ifx\_dobibmark\_undefined \_edef\_dobibmark{\_Lastname}\_fi + \_fi + \_bprintc\_Firstname{* }\_bprintc\_Von{* }\_Lastname\_bprintc\_Junior{, *}% +} +\_let\_editorname=\_authorname + +% Preparing bib-mark (used when \nonumcitations is set): + +\_def\_setbibmark{% + \_ifx\_dobibmark\_undefined \_def\_dobibmark{}\_fi + \_RetrieveFieldIn{bibmark}\_tmp + \_ifx\_tmp\_empty \_RetrieveFieldIn{year}\_tmp \_edef\_tmp{\_dobibmark, \_tmp}\_fi + \_bibmark=\_ea{\_tmp}% +} + +\_def\_preurl{\_hfil\_break} + +% Non-standard fieldnames: + +\_CreateField {isbn} +\_CreateField {doi} +\_CreateField {url} +\_CreateField {bibmark} + +% Sorting: + +\_SortingOrder{name,year}{lfvj} +\_SpecialSort {key} + +% Entry types: + +\_sdef{_print:END}{% + \_bprinta [note] {*.}{}% + \_setbibmark +} +\_sdef{_print:book}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}.\ }{\_bibwarning}% + \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{}% + \_bprinta [address] {*: }{\_bibwarning}% + \_bprinta [publisher] {*, }{\_bibwarning}% + \_bprinta [year] {*.\ }{\_bibwarning}% + \_bprinta [isbn] {ISBN~*.\ }{\_bibwarning}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} +\_sdef{_print:article}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprinta [title] {*.\ }{\_bibwarning}% + \_bprintb [journal] {{\_em##1}.\ }{\_bibwarning}% + \_bprinta [year] {*, }{}% + \_bprinta [volume] {* }{}% + \_bprinta [number] {(*), }{}% + \_bprinta [pages] {*.\ }{}% + \_bprintb [doi] {DOI~\_ulink[http://dx.doi.org/##1]{##1}.\ }{}% +} +\_sdef{_print:inbook}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1.}\ }{\_bibwarning}% + In:~% + \_bprinta [!editor] {*,~eds.\ }{}% + \_bprintb [booktitle] {{\_em##1}.\ }{\_bibwarning}% + \_bprinta [address] {*: }{\_bibwarning}% + \_bprinta [publisher] {*, }{\_bibwarning}% + \_bprinta [year] {*.\ }{\_bibwarning}% + \_bprinta [chapter] {*.\ }{% + \_bprinta [pages] {*.\ }{}}% + \_bprinta [isbn] {ISBN~*.\ }{}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} +\_slet{_print:inproceedings}{_print:inbook} + +\_sdef{_print:incolection}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}.\ }{\_bibwarning}% + \_bprinta [crossreff] {In~\_cite[*]. }{% + \_bprinta [booktitle] {*. }{\_bibwarning}% + \_bprinta [!editor] {*,~eds.\ }{\_bibwarning}% + \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{\_bibwarning}% + \_bprinta [address] {*: }{\_bibwarning}% + \_bprinta [publisher] {*, }{\_bibwarning}% + \_bprinta [year] {*.\ }{\_bibwarning}% + \_bprinta [pages] {*.\ }{}% + \_bprintb [url] {\_preurl\_url{####1}. }{}}% +} +\_sdef{_print:conference}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% + \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{}% + \_bprinta [address] {*: }{\_bibwarning}% + \_bprinta [publisher] {*, }{\_bibwarning}% + \_bprinta [year] {*.\ }{\_bibwarning}% + \_bprinta [isbn] {ISBN~*.\ }{}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} +\_sdef{_print:thesis}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% + \_bprinta [type] {*,\ }{\_bibwarning}% + \_bprinta [school] {*.\ }{}% + \_bprinta [address] {*, }{}% + \_bprinta [year] {*.\ }{}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} +\_sdef{_print:proceedings}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% + \_bprinta [publisher] {*.\ }{% + \_bprinta [organization] {*.\ }{\_bibwarning}}% +} +\_sdef{_print:techreport}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% + \_mtext{bib.techreport}. + \_bprinta [institution] {*.\ }{}% +} +\_sdef{_print:booklet}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% + \_bprinta [howpublished] {*.\ }{\_bibwarning}% +} +\_sdef{_print:manual}{% + \_bprinta [!author] {*\.\ }{}% + \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% + \_bprinta [year] {*.\ }{}% + \_bprinta [institution] {*.\ }{}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} +\_sdef{_print:misc}{% + \_bprinta [!author] {*\.\ }{}% + \_bprintb [title] {{\_em##1}\.\ }{}% + \_bprinta [howpublished] {*.\ }{}% + \_bprinta [institution] {*.\ }{}% + \_bprinta [series] {*.\ }{}% + \_bprinta [year] {*.\ }{}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} + +%%% end of the style file + +\_endcode + +You can copy this file to bib-yourname.opm and modify it by your +needs... diff --git a/Master/texmf-dist/tex/optex/base/cite-bib.opm b/Master/texmf-dist/tex/optex/base/cite-bib.opm new file mode 100644 index 00000000000..26a5b17bd44 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/cite-bib.opm @@ -0,0 +1,271 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \cite {Cite, Biblioraphy <2020-03-09>} % loaded in format + + \_doc ----------------------------- + Registers used by `\cite`, `\bib` macros are declared here. + The \`\bibnum` counts the bibliography items from one. + The \`\bibmark` is used when `\nonumcitations` is set. + \_cod ----------------------------- + +\_newcount\_bibnum % the bibitem counter +\_newtoks\_bibmark % the bibmark used if \nonumcitations +\_newcount\_lastcitenum \_lastcitenum=0 % for \shortcitations +\_public \bibnum \bibmark ; + + \_doc ----------------------------- + \`\cite` `[<label>,<label>,...,<label>]` manages <labes> using `\_citeA` + and prints `[<bib-marks>]` using `\_printsavedcites`. + \nl + \`\nocite` `[<label>,<label>,...,<label>]` only manages <labels> but prints nothing. + \nl + \`\rcite` `[<label>,<label>,...,<label>]` behaves like `\cite` but prints + <bib-marks> without brackets. + \nl + \`\ecite` `[<label>]{<text>}` behaves like `\rcite [<label>]` but prints + <text> instead <bib-mark>. The <text> is hyperlinked like <bib-marks> + when `\cite` or `\rcite` is used. + The empty internal macro \`\_savedcites` will include the `<bib-marks>` list to + be printed. This list is set by `\_citeA` inside a group and it is used by + `\_printsavedcites` in the same group. Each `\cite`/`\rcite`/`\ecite` macro + starts from empty list of <bib-marks> because new group is opened. + \_cod ----------------------------- + +\_def\_cite[#1]{{\_citeA#1,,,[\_printsavedcites]}} +\_def\_nocite[#1]{{\_citeA#1,,,}} +\_def\_rcite[#1]{{\_citeA#1,,,\_printsavedcites}} +\_def\_ecite[#1]{\_bgroup\_citeA#1,,,\_ea\_eciteB\_savedcites;} +\_def\_eciteB#1,#2;#3{\_if?#1\_relax #3\_else \_ilink[cite:#1]{#3}\_fi\_egroup} +\_def\_savedcites{} + +\_public \cite \nocite \rcite \ecite ; + + \_doc ----------------------------- + `<bib-marks>` may be numbers or a special text related to cited bib-entry. + It depends on \`\nonumcitations` and on used bib-style. The mapping from + <label> to <bib-mark> is done when `\bib` or `\usebib` is processed. + These macros store the information to + \`\_Xbib``{<label>}{<number>}{<nonumber>}` where <number> and <nonumber> are + two variants of <bib-mark> (numbered or text-like). This information is + read from `.ref` file and it is saved to macros + `\_bib:<label>` and `\_bibm:<number>`. First one includes number and second + one includes <nonumber>. The `\_lastbibnum` macro includes last number of + bib-entry used in the document. A designer can use it to set appropriate + indentation when printing the list of all bib-entries. + \_cod ----------------------------- + +\_def\_Xbib#1#2#3{\_sdef{_bib:#1}{\_bibnn{#2}&}% + \_if^#3^\_else\_sdef{_bim:#2}{#3}\_fi\_def\_lastbibnum{#2}} + + \_doc ----------------------------- + \`\_citeA` `<label>,` processes one label from the list of labels given in the + parameter of `\cite`, `\nocite`, `\rcite` or `\ecite` macros. It adds the + <label> to global list `\_citelist` which will be used by `\usebib` (it + must know what <labels> are used in the document to pick-up + only relevant bib-entries from the database. Because we want to save + space and not to save the same <label> to `\_citelist` twice, we + distinguish four cases: + \begitems + * `<label>` was not declared by \^`\_Xbib` and it is first such <label> in the + document: Then `\_bib:<label>` is undefined and we save label using + `\_addcitlist`, write warning on the terminal and define + `\_bib:<label>` as empty. + * `<label>` was not declared by \^`\_Xbib` but it was used previously in the + document: Then `\_bib:<label>` is empty and we do nothing (only data to + `\_savedcites` are saved). + * `<label>` was declared by \^`\_Xbib` and it is first such <label> in the + document: Then `\_bin:<label>` includes `\_bibnn{<number>}&` and we + test this case by `\if &\_bibnn{<number>}&`. This is true when `\_bibnn{<number>}` + expands to empty. The <label> is saved by `\_addcitelist` and + `\_bib:<label>` is re-defined directly as <number>. + * `<label>` was declared by \^`\_Xbib` and it was used previously in the + document. Then we do nothing (only data to `\_savedcites` are saved. + \enditems + The `\_citeA` macro runs repeatedly over the whole list of <labels>. + \_cod ----------------------------- + +\_def\_citeA #1#2,{\_if#1,\_else + \_if *#1\_addcitelist{*}\_ea\_skiptorelax \_fi + \_ifcsname _bib:#1#2\_endcsname \_else + \_addcitelist{#1#2}% + \_opwarning{\_noexpand\cite [#1#2] unknown. Try to TeX me again}\_openref + \_incr\_unresolvedrefs + \_addto\_savedcites{?,}\_def\_sortcitesA{}\_lastcitenum=0 + \_ea\_gdef \_csname _bib:#1#2\_endcsname {}% + \_ea\_skiptorelax \_fi + \_ea\_ifx \_csname _bib:#1#2\_endcsname \_empty + \_addto\_savedcites{?,}\_def\_sortcitesA{}\_lastcitenum=0 + \_ea\_skiptorelax \_fi + \_def\_bibnn##1{}% + \_if &\_csname _bib:#1#2\_endcsname + \_def\_bibnn##1##2{##1}% + \_addcitelist{#1#2}% + \_sxdef{_bib:#1#2}{\_csname _bib:#1#2\_endcsname}% + \_fi + \_edef\_savedcites{\_savedcites \_csname _bib:#1#2\_endcsname,}% + \_relax + \_ea\_citeA\_fi +} +\_def\_addcitelist#1{\_global\_addto\_citelist{\_citeI[#1]}} +\_def\_citelist{} + + \_doc ----------------------------- + The `<bib-marks>` (in numeric or text form) are saved in \^`\_savedcites` + macro separated by commas. + The \`\_printsavedcites` prints them by normal order or sorted if + \`\sortcitations` is specified or condensed if \`\shordcitations` is + specified.\nl + The `\sortcitations` appends the dummy number 300000 and we suppose that normal + numbers of bib-entries are less than this constant. + This constant is removed after the sorting algorithm. + The \`\shortcitations` sets simply `\_lastcitenum=1`. + The macros for <bib-marks> printing follows (sorry, without detail + documentation). They are documented in `opmac-d.pdf` (but only in Czech). + \_cod ----------------------------- + +\_def\_printsavedcites{\_sortcitesA + \_chardef\_tmpb=0 \_ea\_citeB\_savedcites,% + \_ifnum\_tmpb>0 \_printdashcite{\_the\_tmpb}\_fi +} +\_def\_sortcitesA{} +\_def\_sortcitations{% + \_def\_sortcitesA{\_edef\_savedcites{300000,\_ea}\_ea\_sortcitesB\_savedcites,% + \_def\_tmpa####1300000,{\_def\_savedcites{####1}}\_ea\_tmpa\_savedcites}% +} +\_def\_sortcitesB #1,{\_if $#1$% + \_else + \_mathchardef\_tmpa=#1 + \_edef\_savedcites{\_ea}\_ea\_sortcitesC \_savedcites\_end + \_ea\_sortcitesB + \_fi +} +\_def\_sortcitesC#1,{\_ifnum\_tmpa<#1\_edef\_tmpa{\_the\_tmpa,#1}\_ea\_sortcitesD + \_else\_edef\_savedcites{\_savedcites#1,}\_ea\_sortcitesC\_fi} +\_def\_sortcitesD#1\_end{\_edef\_savedcites{\_savedcites\_tmpa,#1}} + +\_def\_citeB#1,{\_if$#1$\_else + \_if?#1\_relax??% + \_else + \_ifnum\_lastcitenum=0 % only comma separated list + \_printcite{#1}% + \_else + \_ifx\_citesep\_empty % first cite item + \_lastcitenum=#1\_relax + \_printcite{#1}% + \_else % next cite item + \_advance\_lastcitenum by1 + \_ifnum\_lastcitenum=#1\_relax % cosecutive cite item + \_mathchardef\_tmpb=\_lastcitenum + \_else % there is a gap between cite items + \_lastcitenum=#1\_relax + \_ifnum\_tmpb=0 % previous items were printed + \_printcite{#1}% + \_else + \_printdashcite{\_the\_tmpb}\_printcite{#1}\_chardef\_tmpb=0 + \_fi\_fi\_fi\_fi\_fi + \_ea\_citeB\_fi +} +\_def\_shortcitations{\_lastcitenum=1 } + +\_def\_printcite#1{\_citesep\_ilink[cite:#1]{\_citelinkA{#1}}\_def\_citesep{,\_hskip.2em\_relax}} +\_def\_printdashcite#1{\_ifmmode-\_else\_hbox{--}\_fi\_ilink[cite:#1]{\_citelinkA{#1}}} +\_def\_citesep{} + +\_def\_nonumcitations{\_lastcitenum=0\_def\_sortcitesA{}\_def\_etalchar##1{$^{##1}$}% + \_def\_citelinkA##1{\_isdefined{_bim:##1}\_iftrue \_csname _bim:##1\_endcsname + \_else ##1\_opwarning{\_noexpand\nonumcitations + empty bibmark. Maybe bad bib-style}\_fi}% +} +\_def\_citelinkA{} + +\_public \nonumcitations \sortcitations \shortcitations ; + + \_doc ----------------------------- + The \`\bib` `[<label>] {<optional bib-mark>}` prints one bib-entry + without reading any database. The bib-enty follows after this command. + This command counts the used `\bib`s from one by `\bibnum` counter and + saves \^`\_Xbib``{<label>}{\_the\_bibnum}{\_the\_bibmark}` into `.ref` file + immediately using `\_wbib`. This is the core of creation of mapping from + `<labels>` to `<bib-marks>`. + \_cod ----------------------------- + +\_def\_bib[#1]{\_def\_tmp{\_isnextchar={\_bibA[#1]}{\_bibmark={}\_bibB[#1]}}% + \_ea\_tmp\_romannumeral-`\.} % ignore optional space +\_def\_bibA[#1]=#2{\_bibmark={#2}\_bibB[#1]} +\_def\_bibB[#1]{\_par \_bibskip + \_advance\_bibnum by1 + \_noindent \_def\_tmpb{#1}\_wbib{#1}{\_the\_bibnum}{\_the\_bibmark}% + \_printlabel{#1}% + \_printbib \_ignorespaces +} +\_def\_wbib#1#2#3{\_dest[cite:\_the\_bibnum]% + \_ifx\_wref\_wrefrelax\_else \_immediate\_wref\_Xbib{{#1}{#2}{#3}}\_fi} + +\_public \bib ; + + \_doc ----------------------------- + The \`\_printbib` prints the bib-entry itself. You can re-define it if you + want a different design. The `\_pritbib` starts in horizontal mode after + `\noindent` and after the eventual hyperlink destination is inserted. + By default, the `\_printbib` sets the indentation + by `\hangindent` and prints numeric <bib-marks> by + `\llap{[\the\bibnum]}` If `\nonumcitations` then the `\_citelinkA` is not + empty and <bib-marks> (`\the\bibnum` nor `\the\bibmark`) are not printed. + The text of bib-entry follows. User can create this text manually + using `\bib` command or it is generated automatically from a `.bib` database + by `\usebib` command. + + The vertical space between bib-entries is controlled by \`\_bibskip` macro. + \_cod ----------------------------- + +\_def \_printbib {\_hangindent=\_iindent + \_ifx\_citelinkA\_empty \_hskip\_iindent \_llap{[\_the\_bibnum] }\_fi +} +\_def \_bibskip {\_ifnum\_bibnum>0 \_smallskip \_fi} + + \_doc ----------------------------- + The \`\usebib` command is implemented in `usebib.opm` file which is loaded + when the `\usebib` command is used first. + The `usebib.opm` file loads the `librarian.tex` for scanning the `.bib` + files. See the section~\ref[usebib], where the file `usebib.opm` is + documented. + \_cod ----------------------------- + +\_def\_usebib{\_par \_opinput {usebib.opm} \_usebib} +\_def\usebib{\_usebib} + + \_doc ------------------------------ + \_forwardlink\`\nobibwarning` `[<list of bib-labels>]` + declares a list of bib labels + which are not fully declared in `.bib` file but we want to suppress the + warning about it. List of bib labels are comma-separated case sensitive + list without spaces. + \_cod ------------------------------ + +\_def\_nobibwarnlist{,} +\_def\_nobibwarning[#1]{\_global\_addto\_nobibwarnlist{#1,}} +\_public \nobibwarning ; + + \_doc ----------------------------- + The macros above works if all `\cite` (or similar) commands are used + before the `\usebib` command is used because `\usebib` prints only such + bib-entries their <labels> are saved in the `\_citelist`. But if some + `\cite` is used after `\usebib`, then `\usebib` sets `\_addcitelist` to + \`\_writeXcite`, so such `\cite` saves the information to the + `.ref`file in the format \`\_Xcite``{<label>}`. Such information are copied + to `\_citelistB` during reading `.ref` file and `\usebib` concats two + lists of <labels> from `\_citelist` and `\_citelistB` and + uses this concatenated list. + \_cod ----------------------------- + +\_def\_Xcite#1{\_addto\_citelistB{\_citeI[#1]}} +\_def\_writeXcite#1{\_openref\_immediate\_wref\_Xcite{{#1}}} +\_def\_citelistB{} + +\_endcode % ------------------------------------- + +See end of the `usebib.opm` file for documentation about creating style +files `bib-<style>.opm`. + +See end of the `bib-iso690.opm` file for large documentation about `.bib` files +structure and about the usage of `iso690` bib-style. + diff --git a/Master/texmf-dist/tex/optex/base/colors.opm b/Master/texmf-dist/tex/optex/base/colors.opm new file mode 100644 index 00000000000..bbda496761e --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/colors.opm @@ -0,0 +1,394 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \colordef {Colors <2020-03-18>} % loaded in format + + \_doc ----------------------------- + We declare internal boolean value \`\_iflocalcolor` ad do + \`\localcolor` as default. + \_cod ----------------------------- + +\_newifi \_iflocalcolor \_localcolortrue +\_protected\_def \_localcolor {\_localcolortrue} +\_protected\_def \_nolocalcolor {\_localcolorfalse} +\_public \localcolor \nolocalcolor ; + + \_doc ----------------------------- + The basic colors in CMYK + \`\Blue` \`\Red` \`\Brown` \`\Green` \`\Yellow` \`\Cyan` \`\Magenta` + \`\Grey` \`\LightGrey` \`\White` and \`\Black` + are declared here. + \_cod ----------------------------- + +\_def\Blue {\_setcmykcolor{1 1 0 0}} +\_def\Red {\_setcmykcolor{0 1 1 0}} +\_def\Brown {\_setcmykcolor{0 0.67 0.67 0.5}} +\_def\Green {\_setcmykcolor{1 0 1 0}} +\_def\Yellow {\_setcmykcolor{0 0 1 0}} +\_def\Cyan {\_setcmykcolor{1 0 0 0}} +\_def\Magenta {\_setcmykcolor{0 1 0 0}} +\_def\Grey {\_setcmykcolor{0 0 0 0.5}} +\_def\LightGrey {\_setcmykcolor{0 0 0 0.2}} +\_def\White {\_setgreycolor{1}} +\_def\Black {\_setgreycolor{0}} + + \_doc ----------------------------- + By default, the \`\setcmykcolor` \`\setrgbcolor` and \`\setgreycolor` + macros with `{<componetns>}` parameter + expand to `\_setcolor{<pdf-primitive>}` using \`\_formatcmyk` + or \`\_formatrgb` or \`\_formatgrey` expandable macros. + For example `\setrgbcolor{1 0 0}` expands to `\_setcolor{1 0 0 rg 1 0 0 RG}`.\nl + We set both types of colors (for lines (`K` or `RG` or `G`) and for fills + (`r` or `rg` or `g`) together in the <pdf-primitive> command. + This is the reason why the \`\_fillstroke` uses both its parameters. + If only fills are needed you can do `\def\_fillstroke#1#2{#1}`. + If only strokes are needed you can do `\def\_fillstroke#1#2{#2}`. + \_cod ----------------------------- + +\_def\_setcmykcolor#1{\_setcolor{\_formatcmyk{#1}}} +\_def\_setrgbcolor#1{\_setcolor{\_formatrgb{#1}}} +\_def\_setgreycolor#1{\_setcolor{\_formatgrey{#1}}} +\_def\_formatcmyk#1{\_fillstroke{#1 k}{#1 K}} +\_def\_formatrgb#1{\_fillstroke{#1 rg}{#1 RG}} +\_def\_formatgrey#1{\_fillstroke{#1 g}{#1 G}} +\_def\_fillstroke#1#2{#1 #2} +\_public \setcmykcolor \setrgbcolor \setgreycolor ; + + \_doc ----------------------------- + The \`\onlyrgb` declaration redefines \^`\_formatcmyk` in order it expands + to its conversion to RGB <pdf-primitive>. This conversion is done by + the \^`\_cmyktorgb` macro. Moreover, `\onlyrgb` re-defines three basic RGB + colors for RGB color space and re-declares \^`\colordef` as \^`\rgbcolordef`. + The \hbox{\`\onlycmyk`} macro does similar work, it re-defines \^`\_formatrgb` + macro. The Grey color space is unchanged and works in both main + settings (RGB or CMYK) without collisions. + \_cod ----------------------------- + +\_def\_onlyrgb{\_def\Red{\_setrgbcolor{1 0 0}}% + \_def\Green{\_setrgbcolor{0 1 0}}\_def\Blue{\_setrgbcolor{0 0 1}}% + \_let\_colordef=\_rgbcolordef + \_def\_formatrgb##1{\_fillstroke{##1 rg}{##1 RG}}% + \_def\_formatcmyk##1{\_fillstroke{\_cmyktorgb ##1 ; rg}{\_cmyktorgb ##1 ; RG}}} +\_def\_onlycmyk{\_def\_formatcmyk##1{\_fillstroke{##1 k}{##1 K}}% + \_def\_formatrgb##1{\_fillstroke{\_rgbtocmyk ##1 ; k}{\_rgbtocmyk ##1 ; K}}} +\_public \onlyrgb \onlycmyk ; + + \_doc ----------------------------- + The \`\_setcolor` macro redefines empty `\_ensureblack` macro (used in + output routine for headers and footers) to `\_ensureblackA` which sets + Black at the start of its parameter and returns to the current color at the + end of its parameter. + + The current color is saved into `\_currentcolor` macro and colorstack is pushed. + Finally, the `\_colorstackpop` is initialized by `\aftergroup` if + `\localcolor` is declared. + + You can save the current color to your macro by `\let\yourmacro=\_currentcolor` + and you can return to this color by the command `\_setcolor\yourmacro`. + \_cod ----------------------------- + +\_protected\_def \_setcolor #1{\_global\_let\_ensureblack=\_ensureblackA + \_iflocalcolor \_edef\_currentcolor{#1}\_colorstackpush\_currentcolor + \_aftergroup\_colorstackpop + \_else \_xdef\_currentcolor{#1}\_colorstackset\_currentcolor \_fi +} +\_def\_pdfblackcolor{0 g 0 G} +\_edef\_currentcolor{\_pdfblackcolor} +\_def\_ensureblackA#1{\_global\_let\_openfnotestack=\_openfnotestackA + \_colorstackpush\_pdfblackcolor #1\_colorstackpop} + + \_doc ----------------------------- + The colorstack is initialized here and the basic macros + \`\_colorstackpush`, \`\_colorstackpop` and \`\_colorstackset` + are defined here. + \_cod ----------------------------- + +\_mathchardef\_colorstackcnt=0 % Implicit stack usage +\_def\_colorstackpush#1{\_pdfcolorstack\_colorstackcnt push{#1}} +\_def\_colorstackpop{\_pdfcolorstack\_colorstackcnt pop} +\_def\_colorstackset#1{\_pdfcolorstack\_colorstackcnt set{#1}} + + \_doc ----------------------------- + We need to open a special color stack for footnotes because footnotes + can follow on the next pages and their colors are independent of colors + used in the main page-body. The \`\_openfnotestack` is defined as + \`\_openfnotestackA` when the \^`\_setcolor` is used first. + The \`\_fnotestack` is initialized in in `\everyjob` because the + initialization is not saved to the format. + \_cod ----------------------------- + +%\_mathchardef\_fnotestack=\_pdfcolorstackinit page {0 g 0 G} % must be in \everyjob +\_def \_openfnotestackA {\_pdfcolorstack\_fnotestack current} + + \_doc ----------------------------- + We use Lua codes for RGB to CMYK or CMYK to RGB conversions and for + addition color components in the \^`\colordef` macro. + The \`\_rgbtocmyk` `<R> <G> <B> ;` expands to `<C> <M> <Y> <K>` and + the \`\_cmyktorgb` `<C> <M> <Y> <K> ;` expands to `<R> <G> <B>`. + The \`\_colorcrop`, \`\_colordefFin` and \`\_douseK` are auxiliary macros + used in the \^`\colordef`. The `\_colorcrop` rescales color components in order + to they are in $[0,1]$ interval. The `\colordefFin` expands to the values + accumulated in Lua code `color_C`, `color_M`, `color_Y` and `color_K`. + The `\_douseK` applies \^`\useK` to CMYK components. + \_cod ----------------------------- + +\_def\_rgbtocmyk #1 #2 #3 ;{% + \_ea \_stripzeros \_detokenize \_ea{\_directlua{ + local kr = math.max(#1,#2,#3) + if (kr==0) then + tex.print('0. 0. 0. 1 ;') + else + tex.print(string.format('\_pcent.3f \_pcent.3f \_pcent.3f \_pcent.3f ;', + (kr-#1)/kr, (kr-#2)/kr, (kr-#3)/kr, 1-kr)) + end +}}} +\_def\_cmyktorgb #1 #2 #3 #4 ;{% + \_ea \_stripzeros \_detokenize \_ea{\_directlua{ + local kr = 1-#4 + tex.print(string.format('\_pcent.3f \_pcent.3f \_pcent.3f ;', + (1-#1)*kr, (1-#2)*kr, (1-#3)*kr)) +}}} +\_def\_colorcrop{\_directlua{ + local m=math.max(color_C, color_M, color_Y, color_K) + if (m>1) then + color_C=color_C/m color_M=color_M/m color_Y=color_Y/m color_K=color_K/m + end +}} +\_def\_colordefFin{\_colorcrop \_ea \_stripzeros \_detokenize \_ea{\_directlua{ + tex.print(string.format('\_pcent.3f \_pcent.3f \_pcent.3f \_pcent.3f ;', + color_C, color_M, color_Y, color_K)) +}}} +\_def\_douseK{\_colorcrop \_directlua{ + kr=math.min(color_C, color_M, color_Y) + if (kr>=1) then + color_C=0 color_M=0 color_Y=0 color_K=1 + else + color_C=(color_C-kr)/(1-kr) color_M=(color_M-kr)/(1-kr) + color_Y=(color_Y-kr)/(1-kr) color_K=math.min(color_K+kr,1) + end +}} + + \_doc ----------------------------- + We have a problem with the `%.3f` directive in Lua code. It prints trailed + zeros: (0.300 instead desired 0.3) but we want to save PDF file space. The macro + \`\_stripzeros` removes these trailing zeros at the expand processor + level. So `\_stripzeros 0.300 0.400 0.560 ;` expands to `.3 .4 .56`. + \_cod ----------------------------- + +\_def\_stripzeros #1.#2 #3{\_ifx0#1\_else#1\_fi.\_stripzeroA #2 0 :% + \_ifx;#3\_else \_space \_ea\_stripzeros\_ea#3\_fi} +\_def\_stripzeroA #10 #2:{\_ifx^#2^\_stripzeroC#1:\_else \_stripzeroB#1 0 :\_fi} +\_def\_stripzeroB #10 #2:{\_ifx^#2^\_stripzeroC#1:\_else #1\_fi} +\_def\_stripzeroC #1 #2:{#1} + + \_doc ----------------------------- + The \`\rgbcolordef` and \`\cmykcolordef` use common macro + \`\_commoncolordef` with different first four parameters. + The `\_commoncolordef <selector><K><R><G><what-define>{<data>}` does the + real work. It initializes the Lua variables for summation. + It expands <data> in the group where color selectors have + special meaning, then it adjusts the resulting string by \^`\replstring` + and runs it. Example shows how the <data> are processed: + \begtt \catcode`\<=13 + input <data>: ".3\Blue + .6^\KhakiC \useK -\Black" + expanded to: ".3 !=K 1 1 0 0 +.6^!=R .804 .776 .45 \_useK -!=G 0" + adjusted to: "\_addcolor .3!=K 1 1 0 0 \_addcolor .6!^R .804 .776 .45 + \_useK \_addcolor -1!=G 0" + and this is processed. + \endtt + \`\_addcolor` `<coef.>!<mod><type>` expands to `\_addcolor:<mod><type> <coef>` + for example it expands to `\_addcolor:=K <coef>` followed by one or three or four + numbers (depending on <type>). <mod> is `=` (use as is) or `^` (use + complementary color). <type> is `K` for CMYK, `R` for RGB and `G` for + GREY color space. Uppercase <type> informs that `\cmykcolordef` is + processed and lowercase <type> informs that `\rgbcolordef` is processed. + All variants of commands `\_addcolor:<mod><type>` are defined. All of + them expand to `\_addcolorA <v1> <v2> <v3> <v4>` which adds the values of Lua + variables. The `\rgbcolordef` uses `\_addcolorA <R> <G> <B> 0` and + `\cmkykcolordef` uses `\_addcolorA <C> <M> <Y> <K>`. So the Lua variable + names are a little confusing when `\rgbcolordef` is processed. + + Next, `\_commoncolordef` saves resulting values from Lua to `\_tmpb` + using `\_colordefFin`. If `\rgbcolordef` is processed, then we must to + remove the last <K> component which is in the format `.0` in such case. + The `\_stripK` macro does it. + Finally, the `<what-define>` is defined as `<selector>{<expanded _tmpb>}`, + for example `\_setcmykclor{1 0 .5 .3}`. + \_cod ----------------------------- + +\_def\_rgbcolordef {\_commoncolordef \_setrgbcolor krg} +\_def\_cmykcolordef {\_commoncolordef \_setcmykcolor KRG} +\_def\_commoncolordef#1#2#3#4#5#6{% + \_begingroup + \_directlua{color_C=0 color_M=0 color_Y=0 color_K=0}% + \_def\_setcmykcolor##1{!=#2 ##1 }% + \_def\_setrgbcolor ##1{!=#3 ##1 }% + \_def\_setgreycolor##1{!=#4 ##1 }% + \_let\_useK=\_relax + \_edef\_tmpb{+#6}% + \_replstring\_tmpb{+ }{+}\_replstring\_tmpb{- }{-}% + \_replstring\_tmpb{+}{\_addcolor}\_replstring\_tmpb{-}{\_addcolor-}% + \_replstring\_tmpb{^!=}{!^}\_replstring\_tmpb{-!}{-1!}% + \_ifx K#2\_let\_useK=\_douseK \_fi + \_tmpb + \_edef\_tmpb{\_colordefFin}% + \_ifx k#2\_edef\_tmpb{\_ea\_stripK \_tmpb;}\_fi + \_ea\_endgroup + \_ea\_def\_ea#5\_ea{\_ea#1\_ea{\_tmpb}}% +} +\_def\_addcolor#1!#2#3{\_cs{addcolor:#2#3}#1} +\_def\_addcolorA #1 #2 #3 #4 #5 {% + \_def\_tmpa{#1}\_ifx\_tmpa\_empty \_else \_edef\_tmpa{\_tmpa*}\_fi + \_directlua{color_C=math.max(color_C+\_tmpa#2,0) + color_M=math.max(color_M+\_tmpa#3,0) + color_Y=math.max(color_Y+\_tmpa#4,0) + color_K=math.max(color_K+\_tmpa#5,0) +}} +\_sdef{addcolor:=K}#1 #2 #3 #4 #5 {\_addcolorA #1 #2 #3 #4 #5 } +\_sdef{addcolor:^K}#1 #2 #3 #4 #5 {\_addcolorA #1 (1-#2) (1-#3) (1-#4) #5 } +\_sdef{addcolor:^G}#1 #2 {\_addcolorA #1 0 0 0 #2 } +\_sdef{addcolor:=G}#1 #2 {\_addcolorA #1 0 0 0 (1-#2) } +\_sdef{addcolor:=R}#1 #2 #3 #4 {% + \_edef\_tmpa{\_noexpand\_addcolorA #1 \_rgbtocmyk #2 #3 #4 ; }\_tmpa +} +\_sdef{addcolor:^R}#1 #2 #3 #4 {\_cs{addcolor:=R}#1 (1-#2) (1-#3) (1-#4) } + +\_sdef{addcolor:=k}#1 #2 #3 #4 #5 {% + \_edef\_tmpa{\_noexpand\_addcolorA #1 \_cmyktorgb #2 #3 #4 #5 ; 0 }\_tmpa +} +\_sdef{addcolor:^k}#1 #2 #3 #4 #5 {\_cs{addcolor:=k}#1 (1-#2) (1-#3) (1-#4) #5 } +\_sdef{addcolor:^g}#1 #2 {\_addcolorA #1 (1-#2) (1-#2) (1-#2) 0 } +\_sdef{addcolor:=g}#1 #2 {\_addcolorA #1 #2 #2 #2 0 } +\_sdef{addcolor:=r}#1 #2 #3 #4 {\_addcolorA #1 #2 #3 #4 0 } +\_sdef{addcolor:^r}#1 #2 #3 #4 {\_addcolorA #1 (1-#2) (1-#3) (1-#4) 0 } +\_def\_stripK#1 .0;{#1} +\_let\_colordef=\_cmykcolordef % default \_colordef is \_cmykcolordef + + \_doc ----------------------------- + Public versions of \`\colordef` and \`\useK` macros are declared using + `\_def`, because the internal versions `\_colordef` and `\_useK` are + changed during processing. + \_cod ----------------------------- + +\_def \useK{\_useK} +\_def \colordef {\_colordef} +\_public \cmykcolordef \rgbcolordef ; + + \_doc ----------------------------- + The \LaTeX/ file `x11nam.def` is read by \`\morecolors`. The numbers + 0,1,2,3,4 are transformed to letters O, <none>, B, C, D in the name of the + color. Colors defined already are not re-defined. The empty \`\_showcolor` + macro should be re-defined for color catalog printing. For example: + \begtt + \def\vr{\vrule height10pt depth2pt width20pt} + \def\_showcolor{\hbox{\tt\_bslash\_tmpb: \csname\_tmpb\endcsname \vr}\space\space} + \begmulti 4 \typosize[11/14] + \morecolors + \endmulti + \endtt + \_cod ----------------------------- + +\_def\_morecolors{% + \_long\_def\_tmp##1\preparecolorset##2##3##4##5{\_tmpa ##5;,,,;} + \_def\_tmpa##1,##2,##3,##4;{\_ifx,##1,\_else + \_def\_tmpb{##1}\_replstring\_tmpb{1}{}\_replstring\_tmpb{2}{B}% + \_replstring\_tmpb{3}{C}\_replstring\_tmpb{4}{D}\_replstring\_tmpb{0}{O}% + \_ifcsname \_tmpb\_endcsname \_else + \_sdef{\_tmpb}{\_setrgbcolor{##2 ##3 ##4}}\_showcolor\_fi + \_ea\_tmpa\_fi + } + \_ea\_tmp\_input x11nam.def +} +\_let\_showcolor=\_relax % re-define it if you want to print a color catalog +\_public \morecolors ; + +\_endcode % ------------------------------------- + +The colors have different behavior than fonts. Marks (whatsits) with color +information are stored into PDF output and \TeX/ doesn't interpret them. +The PDF viewer (or PDF interpreter in a printer) reads these marks +and switches colors according to them. This +is independent of \TeX/ group mechanism. You can declare +`\nolocalcolor` at the beginning of the document, if you want this behavior. +In this case, if you set a color then you must return to the black color +using `\Black` manually. + +By default, \OpTeX/ sets `\localcolor`. It means that the typesetting +returns to a previous color at the end of the current group, so you cannot +write `\Black` explicitly. This is implemented using the `\aftergroup` feature. +There is a limitation of this feature: when a color selector is used in a +group of a box, which is saved by `\setbox`, then the activity or +reconstruction of the previous color is processed at `\setbox` time, no in the +box itself. You must correct it by double group: +\begtt +\setbox0=\hbox{\Red text} % bad: \Black is done after \setbox +\setbox0=\hbox{{\Red text}} % good: \Black is done after group inside the box +\endtt + +The implementation of colors is based on colorstack, so the current color +can follow across more pages. It is not so obvious because PDF viewer (or PDF +interpreter) manipulates with colors locally at each PDF page and it +initializes each PDF page with black on white color. + +Macros \^`\setcmykcolor``{<C> <M> <Y> <K>}` or \^`\setrgbcolor``{<R> <G> <B>}` +or\nl \^`\setgreycolor``{<Grey>}` should be used in color selectors or user can +specify these macros explicitly. + +The color mixing processed by the \^`\colordef` is done in the subtractive color +model CMYK. If the result has a component greater than 1 then all +components are multiplied by a coefficient in order to the maximal component is +equal to 1. + +You can move a shared amount of CMY components (i.e. their minimum) to the +$K$ component. This saves the color tonners and the result is more true. +This should be done by \^`\useK` command at the end of a linear combination +used in `\colordef`. For example +\begtt +\colordef \myColor {.3\Green + .4\Blue \useK} +\endtt +The `\useK` command exactly does: +$$ + \displaylines{ + k' =\min(C,M,Y), \cr \ C=(C-k')/(1-k'), \ M=(M-k')/(1-k'), \ Y=(Y-k')/(1-k'), \cr + K = \min(1,K+k'). +} +$$ + +You can use minus instead of plus in the linear combination in `\colordef`. The +given color is substracted in such case and the negative components are +rounded to zero immediately. For example +\begtt +\colordef \Color {\Brown-\Black} +\endtt +can be used for removing the black component from the color. You can use +the `-\Black` trick after `\useK` command to remove grey components +occurred during color mixing. + +Finally, you can use `^` immediately preceded before the macro name of the +color. Then the complementary color is used here. +\begtt +\colordef\mycolor{\Grey+.6^\Blue} % the same as \colordef\mycolor{\Grey+.6\Yellow} +\endtt + +The \^`\rgbcolordef` can be used to mix colors in additive color model RGB. +If \^`\onlyrgb` is declared, then \^`\colordef` works as \^`\rgbcolordef`. + +If a CMYK to RGB or RGB to CMYK conversion is needed then +the following simple formulae are used +(ICC profiles are not supported): +$$ +\displaylines{ + \hbox{CMYK to RGB:}\cr + R = (1-C)(1-K), \ G = (1-M)(1-K), \ B = (1-Y)(1-K). \cr + \hbox{RGB to CMYK:}\cr + K'=\max(R,G,B), \ C=(K'-R)/K', \ M=(K'-G)/K', \ Y=(K'-B)/K', \ K=1-K'. +} +$$ +The RGB to CMYK conversion is invoked when a color is declared using `\setrgbcolor` +and it is used in \^`\colordef` or if it is printed when \^`\onlycmyk` is declared. +The CMYK to RGB conversion is invoked when a color is declared using \^`\setcmykcolor` +and it is used in \^`\rgbcolordef` or if it is printed when \^`\onlyrgb` is declared. + +\_endinput + +2020-04-22 \replstring\tmpb{+ }{+}, {- }{-} added in \colordef, bug fixed +2020-03-18 introduced diff --git a/Master/texmf-dist/tex/optex/base/doc.opm b/Master/texmf-dist/tex/optex/base/doc.opm new file mode 100644 index 00000000000..ce571a9e812 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/doc.opm @@ -0,0 +1,276 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \printdoc {Macros for documentation printing <2020-04-28>} + + \_doc ----------------------------- + General decalarations. + \_cod ----------------------------- + +\_fontfam[lmfonts] +\_hyperlinks \Green \Green +\_enlang +\_enquotes + + \_doc ----------------------------- + Maybe, somebody needs `\seccc` or `\secccc`? + \_cod ----------------------------- + +\_eoldef\seccc#1{\_medskip \_noindent{\_bf#1}\_par\_nobreak\_firstnoindent} +\_def\secccc{\_medskip\_noindent $\_bullet$ } + + \_doc ----------------------------- + `\enddocument` can be redefined. + \_cod ----------------------------- + +\_let\enddocument=\_bye + + \_doc ----------------------------- + A full page of listing causes underfull `\vbox` in output routine. + We need to add a small tolerance. + \_cod ----------------------------- + +\_pgbottomskip=0pt plus10pt minus2pt + + \_doc ----------------------------- + The listing mode is implemented here. The \`\maxlines` + is maximal lines of code printed in the listing mode. + \_cod ----------------------------- + +\_newcount \_maxlines \_maxlines=100000 +\_public \maxlines ; + +\_eoldef\_cod#1{\_par \_wipeepar + \_vskip\_parskip \_medskip \_ttskip + \_begingroup + \_typosize[8/10] + \_let\_printverbline=\_printcodeline + \_ttline=\_inputlineno + \_setverb + \_ifnum\_ttline<0 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi + \_adef{ }{\ }\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt + \_relax \_ttfont + \_endlinechar=`^^J + \_def\_tmpb{\_start}% + \_readverbline +} +\_def\_readverbline #1^^J{% + \_def\_tmpa{\_empty#1}% + \_let\_next=\_readverbline + \_ea\_isinlist\_ea\_tmpa\_ea{\_Doc}\_iftrue \_let\_next=\_processinput \_fi + \_ea\_isinlist\_ea\_tmpa\_ea{\_Endcode}\_iftrue \_endinput \_let\_next=\_processinput \_fi + \_ifx\_next\_readverbline \_addto\_tmpb{#1^^J}\_fi + \_next +} +{\_catcode`\ =13 \_gdef\_aspace{ }}\_def\_asp{\_ea\_noexpand\_aspace} +\_edef\_Doc{\_asp\_asp\_bslash _doc} +\_edef\_Endcode{\_noexpand\_empty\_bslash _endcode} + + \_doc ----------------------------- + The scanner of the control sequences in the listing mode. + \_cod ----------------------------- + +\_def\_makecs{\_def\_tmp{}\_futurelet\_next\_makecsA} +\_def\_makecsA{\_ifcat a\_noexpand\_next \_ea\_makecsB \_else \_ea\_makecsF \_fi} +\_def\_makecsB#1{\_addto\_tmp{#1}\_futurelet\_next\_makecsA} +\_def\_makecsF{\_ifx\_tmp\_empty \_csstring\\% + \_else \_ifcsname ,\_tmp\_endcsname \_link[cs:\_tmp]{\Blue}{\_csstring\\\_tmp}% + \_else \_let\_next=\_tmp \_remfirstunderscore\_next + \_ifx\_next\_empty \_let\_next=\_tmp \_fi + \_ifcsname ,\_next\_endcsname \_link[cs:\_next]{\Blue}{\_csstring\\\_tmp}% + \_else \_csstring\\\_tmp \_fi\_fi\_fi +} +\_def\_processinput{% + \_let\_start=\_relax + \_ea\_replstring\_ea\_tmpb\_ea{\_aspace^^J}{^^J} + \_addto\_tmpb{\_end}% + \_isinlist\_tmpb{\_start^^J}\_iftrue \_advance\_ttline by1\_fi + \_replstring\_tmpb{\_start^^J}{\_start}% + \_replstring\_tmpb{\_start}{}% + \_replstring\_tmpb{^^J\_end}{\_end}% + \_replstring\_tmpb{^^J\_end}{}% + \_replstring\_tmpb{\_end}{}% + \_ea\_prepareverbdata\_ea\_tmpb\_ea{\_tmpb^^J}% + \_replthis{\_csstring\\}{\_noexpand\_makecs}% + \_ea\_printverb \_tmpb\_end + \_par + \_endgroup \_ttskip + \_isnextchar\_par{}{\_noindent}% +} +\_def\_remfirstunderscore#1{\_ea\_remfirstunderscoreA#1\_relax#1} +\_def\_remfirstunderscoreA#1#2\_relax#3{\_if _#1\_def#3{#2}\_fi} + + \_doc ----------------------------- + The lines in the listing mode have a yellow background. + \_cod ----------------------------- + +\_def\Yellow{\_setcmykcolor{0.0 0.0 0.3 0.03}} + +\_def\_printcodeline#1{\_advance \_maxlines by-1 + \_ifnum \_maxlines<0 \_ea \_endverbprinting \_fi + \_ifx\_printfilename\_relax \_penalty \_ttpenalty \_fi \_vskip-4pt + \_noindent\_rlap{\Yellow \_vrule height8pt depth5pt width\_hsize}% + \_printfilename + \_indent \_printverblinenum #1\par} + +\_def\_printfilename{\_hbox to0pt{% + \_hskip\_hsize\vbox to0pt{\_vss\_llap{\Brown\docfile}\_kern7.5pt}\_hss}% + \_let\_printfilename=\_relax +} +\_everytt={\_let\_printverblinenum=\_relax} + +\_long\_def\_endverbprinting#1\_end#2\_end{\_fi\_fi \_global\_maxlines=100000 + \_noindent\_typosize[8/]\_dots etc. (see {\_tt\Brown\docfile})} + + \_doc ----------------------------- + `\docfile` is currently documented file.\nl + \`\printdoc` and \`\printdoctail` macros are defined here. + \_cod ----------------------------- + +\_def\docfile{} +\_def\_printdoc #1 {\_par \_def\docfile{#1}% + \_everytt={\_ttshift=-15pt \_let\_printverblinenum=\_relax}% + \_ea\_cod \input #1 + \_everytt={\_let\_printverblinenum=\_relax}% + \_def\docfile{}% +} +\_def\_printdoctail #1 {\_bgroup + \_everytt={}\_ttline=-1 \_ea\_printdoctailA \_input #1 \_egroup} +{\_long\_gdef\_printdoctailA#1\_endcode{}} + +\_public \printdoc \printdoctail ; + + \_doc ----------------------------- + You can do `\verbinuput \vitt{<filename>} (<from>-<to>) <filename>` + if you need analogical design like in listing mode. + \_cod ----------------------------- + +\_def\_vitt#1{\_def\docfile{#1}\_ttline=-1 + \_everytt={\_typosize[8/10]\_let\_printverbline=\_printcodeline \_medskip}} + +\_public \vitt ; + + \_doc ----------------------------- + The Index entries are without the trailing backslash. We must add it + when printing Index. + \_cod ----------------------------- + +\_addto \_ignoredcharsen {_} % \foo, \_foo is the same in the fist pass of sorting +\_def\_printii #1#2&{% + \_ismacro\_lastii{#1}\_iffalse \_newiiletter{#1}{#2}\_def\_lastii{#1}\_fi + \_gdef\_currii{#1#2}\_the\_everyii\_noindent + \_hskip-\_iindent \_ignorespaces\_printiiA\bslash#1#2//} + +\_def\_printiipages#1&{\_let\_pgtype=\_undefined \_tmpnum=0 + {\_rm\_printpages #1,:,\_par}} + +\_sdef{_tocl:1}#1#2#3{\_nofirst\_bigskip + \_bf\_llaptoclink{#1}{#2}\_hfill \_pgn{#3}\_tocpar\_medskip} + + \_doc ----------------------------- + The \code{<something>} will be print as <something>. + \_cod ----------------------------- + +\_let\lt=< +\_catcode`\<=13 + +\_def<#1>{$\langle\hbox{\it#1\/}\rangle$} +\_everyintt{\_catcode`\<=13 } + + \_doc ----------------------------- + If this macro is loaded by \^`\load` then we need to initialize + catcodes using the `\_afteroad` macro. + \_cod ----------------------------- + +\_def\_afterload{\_catcode`\<=13 \_catcode`\`=13 } + + \_doc ----------------------------- + Main documentation points and hyperlinks to/from it. + Main documentation point: \code{\\`\\foo`}. + User-level documentation point: \code{\\^`\\foo}, first occurence only. + The next occurrences are only links to the main documentation point. + Link to user-level documentation point: \code{\\~`\\foo}. + If user-level documentation point follows the main documentation point + then use \code{\\_forwardlink\\`\\foo`}. + \_cod ----------------------------- + +\_verbchar` + +\_def\`#1`{\_leavevmode\_edef\_tmp{\_csstring#1}\_iindex{\_tmp}% + \_ifcsname cs:\_tmp\_endcsname\_else \_dest[cs:\_tmp]\_fi + \_sxdef{cs:\_tmp}{}% + \_hbox{\_ifcsname cs:^\_tmp\_endcsname + \_link[cs:^\_tmp]{\Red}{\_tt\_csstring\\\_tmp}\_else + {\_tt\Red\_csstring\\\_tmp}\_fi}% +} +\_def\_forwardlink\`#1`{{\_slet{cs:^\_csstring#1}{relax}\`#1`}} + +\_def\^`#1{\_leavevmode\_edef\_tmp{\_csstring#1}\_iindex{\_tmp}% + \_hbox{\_ifcsname cs:^\_tmp\_endcsname \_else \_dest[cs:^\_tmp]\_sxdef{cs:^\_tmp}{}\_fi + \_link[cs:\_tmp]{\Blue}{\_tt\_string#1}}% + \_futurelet\_next\_cslinkA +} +\_def\_cslinkA{\_ifx\_next`\_ea\_ignoreit \_else \_ea\_ea\_ea`\_ea\_string\_fi} + +\_def\~`#1{\_leavevmode\_edef\_tmp{\_csstring#1}\_iindex{\_tmp}% + \_hbox{\_link[cs:^\_tmp]{\Blue}{\_tt\_string#1}}% + \_futurelet\_next\_cslinkA +} + +\_endcode %------------------------------------------- + +\noindent +The \^`\printdoc` `<filename><space>` and \^`\printdoctail` `<filename><space>` +commands are defined after the file `doc.opm` is load by \^`\load`~`[doc]`. + +The `\printcoc` starts reading of given `<filename>` from the second line. +The file is read in {\em the listing mode}. +The `\prindoctail` starts reading given `<filename>` from the +first occurrence of the `\_encode`. The file is read +in normal mode (like `\input <filename>`). + +The {\em listing mode} prints the lines as a listing of a code. This mode is +finished when first {\visiblesp` \_doc`} occurs or first `\_endcode` +occurs. At least two spaces must precede before such `\_doc`. On the other +hand, the `\_encode` must be at the left edge of the line without spaces. +If this rule is not met then the listing mode continues. + +If the first line or the last line of the listing mode is empty then such +lines are not printed. The maximal number of printed lines in the listing +mode is \^`\maxlines`. It is set to almost infinity (100000). You can set it +to a more sensible value. Such a setting is valid only for the first following +listing mode. + +When the listing mode is finished by `\_doc` then the next lines are read in the +normal way, but the material between `\begtt` ... `\endtt` pair +is shifted by three letters left. The reason is that the three spaces of +indentation is recommended in the `\_doc` ... `\_cod` pair and this shifting +is compensation for this indentation. + +The `\_cod` macro ignores the rest of the current line and starts the listing +mode again. + +When the listing mode is finished by the `\_endcode` then the `\endinput` is +applied, the reading of the file opened by `\printdoc` is finished. + +You cannot reach the end of the file (without `\_endcode`) in the listing +mode. + +The listing mode creates all control sequences which are listed in the +index as an active link to the main documentation point of such control sequence +and prints them in blue. Another text is printed in black. + +The main documentation point is denoted by \code{\\`\\}`<sequence>`\code{`} +in red, for example \code{\\`\\foo`}. +The user documentation point is the first occurrence of +\code{\\^`\\}`<sequence>`\code{`}, for example \code{\\^`\\foo`}. +There can be more such markups, all of them are hyperlinks to the main +documentation point. +And main documentation point is a hyperlink to the user documentation point +if this point exists. Finally, the +\code{\\~`\\}`<sequence>`\code{`} (for example \code{\\~`\\foo`}) are +hyperlinks to the user documentation point. + +\endinput + +2020-04-28 \levevmode in \^ macros added (bug fixed) +2020-04-22 released \ No newline at end of file diff --git a/Master/texmf-dist/tex/optex/base/f-adventor.opm b/Master/texmf-dist/tex/optex/base/f-adventor.opm new file mode 100644 index 00000000000..df22be1130a --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-adventor.opm @@ -0,0 +1,22 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Adventor] \Adventor {TeX Gyre Adventor based on Avantgarde Book} + {\caps} {\rm \bf \it \bi} {} + {[texgyreadventor-regular]} + {\_def\_fontnamegen {[texgyreadventor-\_currV]:\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifier:^^J + \caps ...... caps & small caps^^J +}} + +\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } + +\_initfontfamily % new font family must be initialized + +\_endcode + +See the file `f-heros.opm` for information about principles of such +font-macro-files. + diff --git a/Master/texmf-dist/tex/optex/base/f-antt.opm b/Master/texmf-dist/tex/optex/base/f-antt.opm new file mode 100644 index 00000000000..39d3d011ea3 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-antt.opm @@ -0,0 +1,32 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Antykwa Torunska] \Antt {Traditional Polish font family} + {\cond \medium \light \caps} {\rm \bf \it \bi} {Pagella} + {[AntykwaTorunska-Regular]} + {\_def\_fontnamegen {[AntykwaTorunska\_sfamxV\_sfamyV-\_currV]:script=latn;\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers:^^J + \caps ...... caps & small caps^^J + \cond ...... condensed^^J + \medium .... medium weight^^J + \light ..... light weight^^J + \cond ...... condensed^^J +}} + +\_moddef \resetmod {\_fsetV sfamx={},sfamy={},caps={} \_fvars Regular Bold Italic BoldItalic } +\_moddef \cond {\_fsetV sfamx=Cond \_fvars Regular . Italic . + \_onlyif sfamy={}: {\_fvars Regular Bold Italic BoldItalic }} +\_moddef \medium {\_fsetV sfamy=Med \_fvars Regular . Italic . } +\_moddef \light {\_fsetV sfamy=Light \_fvars Regular . Italic . } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } + +\_initfontfamily % new font family must be initialized + +\_loadmath{[texgyrepagella-math]} + +\_endcode + +See the file `f-heros.opm` for information about principles of such +font-macro-files. + diff --git a/Master/texmf-dist/tex/optex/base/f-baskerville.opm b/Master/texmf-dist/tex/optex/base/f-baskerville.opm new file mode 100644 index 00000000000..4e6027d7032 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-baskerville.opm @@ -0,0 +1,22 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Baskerville] \Baskerville {Free vaiants of classical Baskerville} + {\caps} {\rm \bf \it \bi} {} + {[BaskervilleF-Regular]} + {\_def \_fontnamegen {[BaskervilleF-\_currV]:script=latn;\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifier:^^J + \caps ...... caps & small caps^^J +}} + +\_moddef \resetmod {\_fsetV caps={} \_fvars Regular Bold Italic BoldItalic } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } + +\_initfontfamily % new font family must be initialized + +\_endcode + +See the file `f-heros.opm` for information about principles of such +font-macro-files. + diff --git a/Master/texmf-dist/tex/optex/base/f-bonum.opm b/Master/texmf-dist/tex/optex/base/f-bonum.opm new file mode 100644 index 00000000000..a285021b2ed --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-bonum.opm @@ -0,0 +1,24 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Bonum] \Bonum {TeX Gyre Bonum fonts based on Bookman} + {\caps} {\rm \bf \it \bi} {Bonum} + {[texgyrebonum-regular]} + {\_def\_fontnamegen {[texgyrebonum-\_currV]:\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifier:^^J + \caps ...... caps & small caps^^J +}} + +\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } + +\_initfontfamily % new font family must be initialized + +\_loadmath {[texgyrebonum-math]} + +\_endcode + +See the file `f-heros.opm` for information about principles of such +font-macro-files. + diff --git a/Master/texmf-dist/tex/optex/base/f-comicneue.opm b/Master/texmf-dist/tex/optex/base/f-comicneue.opm new file mode 100644 index 00000000000..a7b9f8e0028 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-comicneue.opm @@ -0,0 +1,23 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [ComicNeue] \Comicneue {Comic Neue sans serif} + {\angular} {\lf \li \rm \it \bf \bi} {} + {[ComicNeue-Regular]} + {\_def\_fontnamegen {[ComicNeue\_anguV-\_currV]:\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifier:^^J + \angular ...... Angular ends of curves^^J +Variants:^^J + \lf (Light) \rm \bf \li (LightItalic) \it \bi^^J +}} + +\_moddef \resetmod {\_fsetV angu={} \_fvars Regular Bold RegularItalic Bolditalic } +\_moddef \angular {\_fsetV angu=Angular } +\_famvardef \lf {\_fsetV curr=Light \_rm} +\_famvardef \li {\_fsetV curr=LightItalic \_rm} + +\_initfontfamily % new font family must be initialized + +\_endcode + diff --git a/Master/texmf-dist/tex/optex/base/f-cursor.opm b/Master/texmf-dist/tex/optex/base/f-cursor.opm new file mode 100644 index 00000000000..80b2a294574 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-cursor.opm @@ -0,0 +1,22 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Cursor] \Cursor {TeX Gyre Cursor fonts based on Courier} + {\caps} {\rm \bf \it \bi} {} + {[texgyrecursor-regular]} + {\_def \_fontnamegen {[texgyrecursor-\_currV]:\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifier:^^J + \caps ...... caps & small caps^^J +}} + +\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } + +\_initfontfamily % new font family must be initialized + +\_endcode + +See the file `f-heros.opm` for information about principles of such +font-macro-files. + diff --git a/Master/texmf-dist/tex/optex/base/f-dejavu.opm b/Master/texmf-dist/tex/optex/base/f-dejavu.opm new file mode 100644 index 00000000000..76fd90c0db0 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-dejavu.opm @@ -0,0 +1,31 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [DejaVu] \Dejavu {Derived from the Vera fonts} + {\sans \mono \cond \light \caps} {\rm \bf \it \bi} {TG-DejavuMath} + {[DejaVuSerif]} + {\_def\_fontnamegen {[DejaVu\_subfamV\_typfamV\_currV]:\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers:^^J + \sans ...... sans serif^^J + \serif ..... serif (default)^^J + \mono ...... non-proportional, only \sans^^J + \light ..... extra-light, only \sans, only \rm, others (\bf\it\bi) unchanged^^J + \cond ...... condensed (\sans or \serif, not \mono) +}} + +\_def\_BIfvars{\_fvars {} -Bold -Italic -BoldItalic } +\_def\_BOfvars{\_fvars {} -Bold -Oblique -BoldOblique } +\_moddef \resetmod {\_fsetV subfam=Serif,typfam={} \_BIfvars } +\_moddef \sans {\_fsetV subfam=Sans \_BOfvars } +\_moddef \serif {\_fsetV subfam=Serif,typfam={} \_BOfvars } +\_moddef \mono {\_fsetV subfam=Sans,typfam=Mono \_BOfvars } +\_moddef \light {\_fsetV subfam=Sans,typfam={} \_fvars -ExtraLight -Bold -Oblique -BoldOblique } +\_moddef \cond {\_fsetV typfam=Condensed } + +\_initfontfamily % new font family must be initialized + +\_loadmath {[texgyredejavu-math]} + +\_endcode + diff --git a/Master/texmf-dist/tex/optex/base/f-ebgaramond.opm b/Master/texmf-dist/tex/optex/base/f-ebgaramond.opm new file mode 100644 index 00000000000..63502c9b08a --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-ebgaramond.opm @@ -0,0 +1,37 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [EB Garamond] \EBGaramond {Based on Garamond} + {\medium \semibold \caps \swash} {\rm \bf \it \bi \initials} {Garamond-Math} + {[EBGaramond-Regular]} + {\_def\_fontnamegen {[EBGaramond-\_currV]:\_capsV\_swaV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers:^^J + \caps ...... caps & small caps^^J + \swash ..... alternative capitals for \it, \bi, only non-accented letters^^J + \medium .... medium weight^^J + \semibold .. semibold weight (only \bf, \bi are changed)^^J +Variant:^^J + \initials .. Initials, only letters ADFGLNOQT^^J +}} + +\_moddef \resetmod {\_fsetV caps={},swa={} \_fvars Regular Bold Italic BoldItalic } +\_moddef \medium {\_fvars Medium ExtraBold MediumItalic ExtraBoldItalic } +\_moddef \semibold {\_fvars Regular SemiBold Italic SemiBoldItalic } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } +\_moddef \nocaps {\_fsetV caps={} } +\_moddef \swash {\_fsetV swa=+swsh; } +\_moddef \noswash {\_fsetV swa={} } + +\_famvardef \initials {\_fvars Initials . . . \rm} + + +\_initfontfamily % new font family must be initialized + +\_loadmath {[Garamond-Math]} + +\_endcode + +See the file `f-heros.opm` for information about principles of such +font-macro-files. + diff --git a/Master/texmf-dist/tex/optex/base/f-garamondl.opm b/Master/texmf-dist/tex/optex/base/f-garamondl.opm new file mode 100644 index 00000000000..d642aac98c7 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-garamondl.opm @@ -0,0 +1,26 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Garamond Libre] \Garamondl {Free, derived from old style font family} + {\caps \swash} {\rm \bf \it \bi} {Garamond-Math} + {[GaramondLibre-Regular]} + {\_def\_fontnamegen + {[GaramondLibre-\_currV]:script=latn;\_capsV\_swaV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers:^^J + \caps ...... caps & small caps, only non-accented letters^^J + \swash ..... alternative capitals for \it, \bi, only non-accented letters^^J +}} + +\_moddef \resetmod {\_fsetV caps={},swa={} \_fvars Regular Bold Italic Bolditalic } +\_moddef \caps {\_fsetV caps=+smcp;+onum;-liga; } +\_moddef \nocaps {\_fsetV caps={} } +\_moddef \swash {\_fsetV swa=+swsh; } +\_moddef \noswash {\_fsetV swa={} } + +\_initfontfamily % new font family must be initialized + +\_loadmath {[Garamond-Math]} + +\_endcode + diff --git a/Master/texmf-dist/tex/optex/base/f-gfsbodoni.opm b/Master/texmf-dist/tex/optex/base/f-gfsbodoni.opm new file mode 100644 index 00000000000..d7d3494a9d7 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-gfsbodoni.opm @@ -0,0 +1,22 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [GFS Bodoni] \GFSBodoni {Based on Bodoni with greek letters} + {} {\rm \bf \it \bi} {} + {[GFSBodoni]} + {\_def\_fontnamegen{[GFSBodoni\_currV]:script=latn;\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifier:^^J + \caps ...... Caps & Small caps (only \rm)^^J +}} + +\_moddef \resetmod {\_fsetV caps={} \_fvars {} Bold It BoldIt } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } + +\_initfontfamily % new font family must be initialized + +\_endcode + +See the file `f-heros.opm` for information about principles of such +font-macro-files. + diff --git a/Master/texmf-dist/tex/optex/base/f-heros.opm b/Master/texmf-dist/tex/optex/base/f-heros.opm new file mode 100644 index 00000000000..767052cc45e --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-heros.opm @@ -0,0 +1,244 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Heros] \Heros {TeX Gyre Heros fonts based on Helvetica} + {\caps \cond} {\rm \bf \it \bi} {FiraMath} + {[texgyreheros-regular]} + {\_def\_fontnamegen{[texgyreheros\_condV-\_currV]:\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers:^^J + \caps ...... caps & small caps^^J + \cond ...... condensed variants^^J +}} + +\_moddef \resetmod {\_fsetV caps={},cond={} \_fvars regular bold italic bolditalic } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } +\_moddef \nocaps {\_fsetV caps={} } +\_moddef \cond {\_fsetV cond=cn } +\_moddef \nocond {\_fsetV cond={} } + +\_initfontfamily % new font family must be initialized + +\_ifmathloading + \_loadmath {[FiraMath-Regular]} + \_addto\_normalmath{\_loadumathfamily 5 {xitsmath-regular}{} } + \_addto\_boldmath {\_loadumathfamily 5 {xitsmath-bold}{} } + \_addto\frak{\_fam5 }\_addto\cal{\_fam5 } + \_normalmath + \_wterm{MATH-FONT(5): "[XITSMath-Regular/Bold]" -- used for \_string\cal, \_string\frak} + % \bf, \bi from FiraMath: + \_let\_bsansvariables=\_bfvariables + \_let\_bsansGreek=\_bfGreek + \_let\_bsansgreek=\_bfgreek + \_let\_bsansdigits=\_bfdigits + \_let\_bisansvariables=\_bivariables + \_let\_bisansgreek=\_bigreek +\_fi + +\_endcode + +The font family file declares the font family for selecting fonts from this +family at the arbitrary size and with various shapes. Unicode fonts (OTF) +are preferred. The following example declares the Heros family: + +\printdoc f-heros.opm + +If you want to write such a font family file, you need to keep the following rules. + +\begitems +* Use the \^`\_famdecl` command first. It has the following syntax: +\begtt \catcode`\<=13 +\_famdecl [<Name of family>] \<Familyselector> {<comments>} + {<modifiers>} {<variant selectors>} {<comments about math fonts>} + {<font-for-testing>} + {\_def\_fontnamegen{<font name or font file name generated>}} +\endtt + This writes information about font family at the + terminal and prevents loading such file twice. Moreover, it probes + existence of `<font-for-testing>` in your system. If it doesn't exist, the + file loading is skipped with a warning on the terminal. + The \^`\_ifexistfam` macro returns false in this case. + The \^`\_fontnamegen` macro must be defined in the last parameter of the + \^`\_famdecl`. More about it is documented below. +* You can use `\_wlog{\_detokenize{...` to write additional information into a log file. +* You can declare optical sizes using \~`\_regoptsizes` if there are more font files + with different optical sizes (like in Latin Modern). See `f-lmfonts.opm` + file for more information about this special feature. +* Declare font modifiers using \~`\moddef` if they are present. The \`\resetmod` + must be declared in each font family. +* Check if all your declared modifiers do not produce any space in + horizontal mode. For example check: `X\caps Y`, the letters `XY` must + be printed without any space. +* Optionally, declare new variants by the \^`\famvardef` macro. +* Run `\_initfontfamily` to start the family (it is mandatory). +* If math font should be loaded, use `\_loadmath{<math font>}`. +\enditems + +{\noindent \bf The \`\_fontnamegen` macro} +(declared in the last parameter of the \^`\_famdecl`) +must expand (at the expand processor level only) to a file name of the loaded font (or to its font +name) and to optional font features appended. The Font Selection +System uses this macro at the primitive level in the following sense: + +\begtt \catcode`\<=13 +\font \<selector> {\_fontnamegen} \_sizespec +\endtt +% +Note that the extended `\font` syntax +`\font\<selector> {<font name>:<font features>} <size spec.>` or +`\font\<selector> {[<font file name>]:<font features>} <size spec.>` +is expected here. + +\seccc Example 1 + +Assume an abstract font family with fonts `xx-Regular.otf`, +`xx-Bold.otf`, `xx-Italic.otf` and `xx-BoldItalic.otf`. Then you can declare +the \^`\resetmod` (for initializing the family) by: +\begtt +\_moddef\resetmod{\_fvars Regular Bold Italic BoldItalic } +\endtt +and define the \^`\_fontnamegen` in the last parameter of the \^`\_famdecl` by: +\begtt +\_famdecl ... + {\def\_fontnamegen{[xx-\_currV]}} +\endtt +The following auxiliary macros are used here: +\begitems +* \^`\moddef` declares the family dependent modifier. The \^`\resetmod` saves + initial values for the family. +* \^`\_fvars` saves four names to the memory, they are used by the \^`\_currV` macro. +* \^`\_currV` expands to one of the four names dependent on `\rm` or `\bf` or + `\it` or `\bi` variant is required. +\enditems +Assume that the user needs `\it` variant in this family. Then the +`\_fontnamegen` macro expands to `[xx-\_currV]` and it expands to +`[xx-Italic]`. The Font Selection System uses `\font {[xx-Italic]}`. +This command loads the `xx-Italic.otf` font file. + +See more advanced examples are in `f-<family>.opm` files. + +\seccc Example 2 + +The `f-heros.opm` is listed here. Look at it. +When Heros family is selected and `\bf` is asked then +`\font {[texgyreheros-bold]:+tlig;} at10pt` +is processed. + +You can use any expandable macros or expandable primitives in the `\_fontnamegen` +macro. The simple macros in our example with names `\_<word>V` are preferred. They +expand typically to their content. The macro \^`\_fsetV` `<word>=<content>` +(terminated by a space) is equivalent to `\def\_<word>V{<content>}` and you +can use it in font modifiers. You can use the \^`\_fsetV` macro in more +general form: + +\begtt \catcode`\<=13 + \_fsetV <word-a>=<value-a>,<word-b>=<value-b> ...etc. terminated by a space +\endtt +% +with obvious result `\def\_<word-a>V {<value-a>}\def\_<word-b>V {<value-b>}` etc. + +\seccc Example 3 + +If both font modifiers `\caps`, `\cond` were applied in Heros +family, then `\def\_capsV{+smcp;+onum}` and `\def\_condV{cn}` were processed +by these font modifiers. If a user needs the `\bf` variant at 11\,pt now then +the + +\begtt + \font {[texgyreheroscn-bold]:+smcp;+onum;+tlig;} at11pt +\endtt +% +is processed. We assume that a font file `texgyreheroscn-bold.otf` is present +in your \TeX/ system. + +\seccc The \code{\\_onlyif} macro + +has the syntax \^`\_onlyif` `<word>=<value-a>,<value-b>,...<value-n>: {<what>}`. It can +be used inside `\moddef` as simple IF statement: the `<what>` is processed only +if `<word>` has `<value-a>` or `<value-b>` \dots or `<value-n>`. See +`f-roboto.opm` for examples of usage of many `\_onlyif`'s. + +Recommendation: use the \^`\_fontfeatures` macro at the end of the `\_fontnamegen` +macro in order to the \^`\setff`, \^`\setfontcolor`, \^`\setletterspace` +macros can work. + +\seccc The \code{\\moddef} macro + +has the syntax \^`\moddef\<modifier>{<what to do>}`. It does more things than simple `\_def`: + +\begitems +* The modifier macros are defined as `\_protected`. +* The modifier macros are defined as family-dependent. +* If the declared control sequence is defined already (and it is not a font + modifier) then it is re-defined with a warning. +\enditems +\noindent +The \^`\famvardef` macro has the same features. + +\bigskip +{\noindent\bf The `\<Familyselector>`} +is defined by the \^`\_famdecl` macro as: +\begtt \catcode`<=13 +\protected\def\<Familyselector> {% + \_def\_currfamily {<Familyselector>}% + \_def\_fontnamegen {...}% this is copied from 7-th parameter of \_famdecl + \resetmod + <run all family-dependent font modifiers used before Familyselector without warnings> +\endtt + +{\noindent\bf The \^`\_initfontfamily`}\nl +must be run after modifier's decaration. +It runs the `\<Familyselector>` and it runs `\_rm`, +so the first font from the new family is loaded and it is ready to use it. + +\seccc Name conventions + +Create font modifiers, new variants, and the `\<Familyselector>` only as public, i.e. +in user namespace without `_` prefix. We assume that if a user re-defines them then he/she needs +not them, so we have no problems. If the user's definition was done before loading +the font family file then it is re-defined and \OpTeX/ warns about it. See the end of +section~\ref[fontcommands]. + +The name of `\<Familyselector>` should begin with an uppercase letter. + +Please, look at +\ulink[http://petr.olsak.net/ftp/olsak/optex/op-catalog.pdf]{\OpTeX/ font catalogue} +before you will create your font family file and use the same names for +analogical font modifiers (like `\cond`, `\caps`, `\sans`, `\mono` etc.)\ +and for extra variant selectors (like `\lf`, `\li`, `\kf`, `\ki` etc.\ used in +Roboto font family). + +If you are using the same font modifier names to analogical font shapes then +such modifiers are kept when the family is changed. For example: + +\begtt +\fontfam [Termes] \fontfam[Heros] +\caps\cond\it Caps+Cond italic in Heros \Termes\currvar Caps italic in Termes. +\endtt +% +The family selector first resets all modifiers data by +\^`\resetmod` and then it tries to run all currently used family-dependent modifiers +before the family switching (without warnings if such modifier is +unavailable in the new family). +In this example, `\Termes` does `\resetmod` followed by `\caps\cond`. +The `\caps` is applied and `\cond` is silently ignored in Termes family. + +If you need to declare your private modifier (because it is used in other +modifiers or macros, for example), use the name `\_wordM`. You can be +sure that such a name does not influence the private namespace used by \OpTeX/. + +\seccc Additional notes + +See the font family file `f-libertine-s.opm` which is another example where no +font files but font names are used. + +See the font family file `f-lmfonts.opm` or `f-poltawski.opm` where you can find the +the example of the optical sizes declaration including documentation about +it. + +If you need to create a font family file with a non-Unicode font, you can do it. +The `\_fontnamegen` must expand to the name of TFM file in this case. But we +don't prefer such font family files, because they are usable only with +languages with alphabet subset to ISO-8859-1 (Unicodes are equal to letter's +codes of such alphabets), but middle or east Europe use languages where +such a condition is not true. diff --git a/Master/texmf-dist/tex/optex/base/f-kerkis.opm b/Master/texmf-dist/tex/optex/base/f-kerkis.opm new file mode 100644 index 00000000000..4bc31ead65d --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-kerkis.opm @@ -0,0 +1,32 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Kerkis] \Kerkis {Free Bookman alternative with Greek letters} + {\semibold \sans \sanssemi \caps} {\rm \bf \it \bi \calli} {} + {[Kerkis]} + {\_def\_fontnamegen {[Kerkis\_currV]:script=latn;\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers:^^J + \semibold .. semibold weight (changed only \bf, \bi)^^J + \caps ...... caps & small caps (only \rm \bf, bad accents in \bf)^^J + \sans ...... sans serif^^J + \sanssemi .. semibold sans serif (only \rm, accented letters not available)^^J +Variant:^^J + \calli ..... Calligraphic (only upercase, lowercase letters equal to Italic)^^J +}} + +\_moddef \resetmod {\_fvars {} -Bold -Italic -BoldItalic } +\_moddef \semibold {\_fvars {} -SemiBold -Italic -SemiBold-Italic } +\_moddef \caps {\_fvars -SmallCaps.otf -BoldSmallCaps . . } +\_moddef \sans {\_fvars Sans Sans-Bold Sans-Italic Sans-BoldItalic } +\_moddef \sanssemi {\_fvars Sans-SmallCaps . . . } + +\_famvardef \calli {\_fvars -Calligraphic . . . \rm} + + +\_initfontfamily % new font family must be initialized + +\_endcode + +See the file `f-heros.opm` for information about principles of such +font-macro-files. diff --git a/Master/texmf-dist/tex/optex/base/f-kpfonts.opm b/Master/texmf-dist/tex/optex/base/f-kpfonts.opm new file mode 100644 index 00000000000..c030bea8e84 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-kpfonts.opm @@ -0,0 +1,45 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [KP Fonts] \Kpfonts {KP fonts -- Johannes Kepler project} + {\sans \mono \light \caps \swash} {\rm \bf \it \bi} {KpMath} + {[KpRoman-Regular]} + {\_def\_fontnamegen {[Kp\_subfamV-\_currV]:\_capsV\_swaV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers:^^J + \sans ...... sans serif^^J + \mono ...... non-proportional^^J + \light ..... light (\rm, \it) + semibold (\bf, \bi) variants^^J + \caps ...... caps & small caps^^J + \swash ..... alternative Q letter^^J +}} + +\_def\_RBIfvars{\_fvars Regular Bold Italic BoldItalic } +\_moddef \resetmod {\_fsetV subfam=Roman,caps={},swa={} \_RBIfvars } +\_moddef \sans {\_fsetV subfam=Sans \_RBIfvars } +\_moddef \mono {\_fsetV subfam=Mono \_RBIfvars } +\_moddef \light {\_fsetV subfam=Roman \_fvars Light Semibold LightItalic SemiboldItalic } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } +\_moddef \nocaps {\_fsetV caps={} } +\_moddef \swash {\_fsetV swa=+swsh; } +\_moddef \noswash {\_fsetV swa={} } + +\_initfontfamily % new font family must be initialized + +\_loadmath {[KpMath-Regular]} +\_loadboldmath {[KpMath-Bold]} \to {[KpMath-Regular]} + +\_endcode + +The KP fonts family includes more variants of Math fonts. +Only Regular / Bold pair is loaded as default. + +There are alternatives: + +\doloadmath \loadmath {KpMath-Light} +\loadboldmath {[KpMath-Semibold]} \to {[KpMath-Light]} + +or + +\doloadmath \loadmath {KpMath-Sans} + diff --git a/Master/texmf-dist/tex/optex/base/f-libertine-s.opm b/Master/texmf-dist/tex/optex/base/f-libertine-s.opm new file mode 100644 index 00000000000..3cdc0893129 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-libertine-s.opm @@ -0,0 +1,50 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Linux Libertine] \Libertine {Free Linux Libertine fonts} + {\sans \mono \caps} {\rm \bf \it \bi \initials \displ \keybr} {} + {Linux Libertine O} + {\_def\_fontnamegen {Linux \_mainfamV\_V\_subfamV O/\_currV:\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers^^J + \sans ...... smaller serifs^^J + \caps ...... caps & small caps^^J +Special variants:^^J + \initials .. special initials (only uppercase letters)^^J + \displ ..... display variant, suitable at big sizes^^J + \mono ...... non-proportional^^J + \keybr ..... keyboard, emulates keyboard buttons^^J +}} + +\_moddef \resetmod {\_fsetV mainfam=Libertine,subfam={},caps={} \_fvars {} B I BI } +\_moddef \sans {\_fsetV mainfam=Biolinum,subfam={} } +\_moddef \mono {\_fsetV mainfam=Libertine,subfam={Mono } \_fvars {} . . . } +\_moddef \caps {\_fsetV caps=+smcp; } +\_moddef \nocaps {\_fsetV caps={} } + +\_famvardef \initials {\_fsetV mainfam=Libertine,subfam={Initials } \_fvars {} . . . \rm} +\_famvardef \displ {\_fsetV mainfam=Libertine,subfam={Display } \_fvars {} . . . \rm} +\_famvardef \keybr {\_fsetV mainfam=Biolinum,subfam={Keyboard } \_fvars {} . . . \rm} + +\_initfontfamily % new font family must be initialized + +\_endcode + +This is another example where the font names (no font files) are declared. +Linux Libertine font is typically installed on Linux systems. +The \_V macro generates a space. We provide following fonts: + +normal: "Linux Libertine O:\_fontfeatures" + "Linux Libertine O/B:\_fontfeatures" + "Linux Libertine O/I:\_fontfeatures" + "Linux Libertine O/BI:\_fontfeatures" +mono : "Linux Libertine Mono O:\_fontfeatures" +sans: "Linux Biolinum O:\_fontfeatures" + "Linux Biolinum O/B:\_fontfeatures" + "Linux Biolinum O/I:\_fontfeatures" + "Linux Biolinum O/BI:\_fontfeatures" +special: "Linux Libertine Initials O:\_fontfeatures" + "Linux Libertine Display O:\_fontfeatures" + "Linux Biolinum Keyboard O:\_fontfeatures" + +Another file f-libertine.opm declares Linux Libertine family from font files. \ No newline at end of file diff --git a/Master/texmf-dist/tex/optex/base/f-libertine.opm b/Master/texmf-dist/tex/optex/base/f-libertine.opm new file mode 100644 index 00000000000..b25c2fc4f9a --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-libertine.opm @@ -0,0 +1,60 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Linux Libertine] \Libertine {Free Linux Libertine fonts} + {\sans \mono \caps \semibold} {\rm \bf \it \bi \initials \displ \keybr} {Libertinus} + {[LinLibertine_R]} + {\_def\_fontnamegen {[Lin\_subfamV _\_currV]:\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers:^^J + \sans ...... smaller serifs^^J + \mono ...... non-proportional^^J + \semibold .. semi-bold variants (changed only \bf, \bi)^^J + \caps ...... caps & small caps^^J% +Special variants:^^J + \initials .. special initials (only uppercase letters)^^J + \displ ..... display variant, suitable at big sizes^^J + \keybr ..... keyboard, emulates keyboard buttons^^J +}} + +\_moddef \resetmod {\_fsetV subfam=Libertine,caps={} \_fvars R RB RI RBI } +\_moddef \sans {\_fsetV subfam=Biolinum \_fvars R RB RI RBO } +\_moddef \mono {\_fsetV subfam=Libertine \_fvars M MB MO MBO } +\_moddef \semibold {\_fsetV subfam=Libertine \_fvars R RZ RI RZI } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } +\_moddef \nocaps {\_fsetV caps={} } + +\_famvardef \initials {\_fsetV subfam=Libertine \_fvars I . . . \rm} +\_famvardef \displ {\_fsetV subfam=Libertine \_fvars DR . . . \rm} +\_famvardef \keybr {\_fsetV subfam=Biolinum \_fvars K . . . \rm} + +\_initfontfamily % new font family must be initialized + +\_loadmath {[LibertinusMath-Regular]} + +\_endcode + +This file declares Linux Libertine font family from font files. The +following fonts are provided: + +normal: "[LinLibertine_R]:\_fontfeatures" + "[LinLibertine_RB]:\_fontfeatures" + "[LinLibertine_RI]:\_fontfeatures" + "[LinLibertine_RBI ]:\_fontfeatures" + "[LinLibertine_RZI]:\_fontfeatures" + "[LinLibertine_RZ]:\_fontfeatures" +mono: "[LinLibertine_M]:\_fontfeatures" + "[LinLibertine_MB]:\_fontfeatures" + "[LinLibertine_MO]:\_fontfeatures" + "[LinLibertine_MBO]:\_fontfeatures" +sans: "[LinBiolinum_RB]:\_fontfeatures" + "[LinBiolinum_RBO]:\_fontfeatures" + "[LinBiolinum_R]:\_fontfeatures" + "[LinBiolinum_RI]:\_fontfeatures" +special: "[LinLibertine_I]:\_fontfeatures" + "[LinLibertine_DR]:\_fontfeatures" + "[LinBiolinum_K]:\_fontfeatures" + +See an alternative `f-libertine-s.opm` where the same font family is +declared using font names used in operating system. + diff --git a/Master/texmf-dist/tex/optex/base/f-libertinus.opm b/Master/texmf-dist/tex/optex/base/f-libertinus.opm new file mode 100644 index 00000000000..5f1329d2864 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-libertinus.opm @@ -0,0 +1,36 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Libertinus] \Libertinus {Free fonts derived from Linux Libertine} + {\semibold \sans \caps} {\rm \bf \it \bi \mono \initials \displ \keybr} {Libertinus} + {[LibertinusSerif-Regular]} + {\_def\_fontnamegen {[Libertinus\_subfamV-\_currV]:\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers:^^J + \semibold .. semi-bold variants, changed only \bf, \bi^^J + \sans ...... smaller serifs, only \rm, \bf \it^^J + \caps ...... caps & small caps^^J% +Special variants:^^J + \mono ..... non-proportional + \initials .. special initials (only uppercase letters)^^J + \displ ..... display variant, suitable at big sizes^^J + \keybr ..... keyboard, emulates keyboard buttons^^J +}} + +\_moddef \resetmod {\_fsetV subfam=Serif,caps={} \_fvars Regular Bold Italic BoldItalic } +\_moddef \semibold {\_fsetV subfam=Serif \_fvars Regular Semibold Italic SemiboldItalic } +\_moddef \sans {\_fsetV subfam=Sans \_fvars Regular Bold Italic . } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } +\_moddef \nocaps {\_fsetV caps={} } + +\_famvardef \mono {\_fsetV subfam=Mono \_fvars Regular . . . \_rm} +\_famvardef \initials {\_fsetV subfam=SerifInitials \_fvars Regular . . . \_rm} +\_famvardef \displ {\_fsetV subfam=SerifDisplay \_fvars Regular . . . \_rm} +\_famvardef \keybr {\_fsetV subfam=Keyboard \_fvars Regular . . . \_rm} + +\_initfontfamily % new font family must be initialized + +\_loadmath {[LibertinusMath-Regular]} + +\_endcode + diff --git a/Master/texmf-dist/tex/optex/base/f-librecaslon.opm b/Master/texmf-dist/tex/optex/base/f-librecaslon.opm new file mode 100644 index 00000000000..53f61834f1d --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-librecaslon.opm @@ -0,0 +1,22 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [LibreCaslon] \Librecaslon {Libre Caslon Text, inspired by Caslon} + {\onum} {\rm \bf \it \bi} {Termes} + {[LibreCaslonText-Regular]} + {\_def\_fontnamegen {[Libre\_currV]:\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifier:^^J + \onum ...... oldstyle figures^^J +}} + +\_moddef \resetmod {\_fsetV caps={},csl={CaslonText} + \_fvars \_cslV-Regular \_cslV-Bold \_cslV-Italic Csln-Bolditalic } +\_moddef \onum {\_fsetV caps=+onum; } + +\_initfontfamily % new font family must be initialized + +\_loadmath {[texgyretermes-math]} + +\_endcode + diff --git a/Master/texmf-dist/tex/optex/base/f-lido.opm b/Master/texmf-dist/tex/optex/base/f-lido.opm new file mode 100644 index 00000000000..13b4cb76286 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-lido.opm @@ -0,0 +1,48 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Lido] \Lido {by StormType Foundry designed for "lidove noviny"} + {\cond} {\rm \bf \mf \mi \it \bi} {Termes} + {[LidoSTF]} + {\_def\_fontnamegen {[LidoSTF\_condV\_currV]:script=latn;\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Variants:^^J + \rm \bf \it \bi ... classical variants^^J + \mf \mi .... medium regular and medium italics (between normal and bold)^^J +Modifiers:^^J + \cond ...... condensed (italic is not avalable for \cond variants)^^J + \medium .... sets \mf \bf \mi \bi family +}} + +\_moddef \resetmod {\_fsetV caps={},cond={},ital=Italic \_fvars {} Bold {\_italV} {Bold\_italV} } +\_moddef \medium {\_fvars Medium Bold {Medium\_italV} {Bold\_italV} } +\_moddef \cond {\_fsetV cond=Condensed,ital={} } + +\_famvardef \mf {\_fvars Medium . . . \_rm} +\_famvardef \mi {\_fvars . . {Medium\_italV} . \_it} + + +\_initfontfamily % new font family must be initialized + +\_loadmath {[texgyretermes-math]} + +\_endcode + +This font family Lido by Storm Type Foundry was designed for Lidove noviny +newspaper. It is similar to Times but it is not Times. + +The Lido font family supports 6 standard selectors + +\rm Regular \it Italics +\mf Medium-Regular \mi Medium-Italics +\bf Bold-Regular \bi Bold-Italics + +and three Condensed variants: + +\cond \rm Condensed + \mf Condensed-Medium + \bf Condensed-Bold + +The italic variants are missing when \cond is selected. This means that +\cond\it does the same as \cond\rm etc. + diff --git a/Master/texmf-dist/tex/optex/base/f-lmfonts.opm b/Master/texmf-dist/tex/optex/base/f-lmfonts.opm new file mode 100644 index 00000000000..13865890e2e --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-lmfonts.opm @@ -0,0 +1,186 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Latin Modern] \LMfonts {TeX Gyre fonts based on Coputer Modern} + {\roman \sans \quotset \ttset \ttprop \ttlight \ttcond \upital + \dunhill submods:\caps \slant \nbold \bolder} {\rm \bf \it \bi \tt} {LM} + {[lmroman10-regular]} + {\_def\_fontnamegen {[\_optname{lm\_subfamV.\_currV}]:\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers (selects subfamily):^^J + \modreset .. implicit values (serif, bold extended, nocaps)^^J + \sans ...... sans serif subfamily^^J + \quotset ... quotation subfamily^^J + \ttset ..... typewriter subfamily^^J + \ttprop .... proportional typewriter-like subfamily^^J + \ttlight ... light typewriter subfamily^^J + \ttcond .... condensed typewriter subfamily^^J + \upital .... upright italic (only \rm)^^J + \dunhill ... dunhill roman subfamily (only \rm, \it)^^J% +Sub-modifiers (selects special variants of given subfamily):^^J + \caps ...... caps & small caps (available only at limited shapes)^^J + \slant ..... slanted (default in some subfamilies)^^J + \nbold ..... normal bold (extended bold is default)^^J + \bolder .... extended bold^^J +}} + +\_def\_LMregfont #1 #2 #3{% + \_edef\_tmp {\_noexpand\_regoptsizes #1 #2 \_ea\_detokenize\_ea{#3}}% + \_lowercase\_ea{\_tmp}% OTF file names are lowercase +} +\_def \_regoptFS {5 <5.5 6 <6.5 7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <15 17 <*} +\_def \_regoptFT {5 <5.5 6 <6.5 7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <*} +\_def \_regoptST {7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <*} +\_def \_regoptES {8 <8.5 9 <9.5 10 <11.1 12 <15 17 <*} +\_def \_regoptET {8 <8.5 9 <9.5 10 <11.1 12 <*} +\_def \_regoptT {10 <*} +\_def \_regoptE {8 <*} + +\_LMregfont lmrm.r LMRoman?-Regular \_regoptFS % 5-17 +\_LMregfont lmrm.bx LMRoman?-Bold \_regoptFT % 5-12 +\_LMregfont lmrm.i LMRoman?-Italic \_regoptST % 7-12 +\_LMregfont lmrm.bxi LMRoman?-BoldItalic \_regoptT % 10 +\_LMregfont lmrm.isl LMRomanSlant?-Regular \_regoptES % 8-17 +\_LMregfont lmrm.bxisl LMRomanSlant?-Bold \_regoptT % 10 +\_LMregfont lmrm.b LMRomanDemi?-Regular \_regoptT % 10 +\_LMregfont lmrm.bi LMRomanDemi?-Oblique \_regoptT % 10 + +\_LMregfont lmss.r LMSans?-Regular \_regoptES % 8-17 +\_LMregfont lmss.bx LMSans?-Bold \_regoptT % 10 +\_LMregfont lmss.i LMSans?-Oblique \_regoptES % 8-17 +\_LMregfont lmss.bxi LMSans?-BoldOblique \_regoptT % 10 +\_LMregfont lmss.b LMSansDemiCond?-Regular \_regoptT % 10 +\_LMregfont lmss.bi LMSansDemiCond?-Oblique \_regoptT % 10 + +\_LMregfont lmsq.r LMSansQuot?-Regular \_regoptE % 8 +\_LMregfont lmsq.b LMSansQuot?-Bold \_regoptE % 8 +\_LMregfont lmsq.i LMSansQuot?-Oblique \_regoptE % 8 +\_LMregfont lmsq.bi LMSansQuot?-BoldOblique \_regoptE % 8 + +\_LMregfont lmtt.r LMMono?-Regular \_regoptET % 8-12 +\_LMregfont lmtt.b LMMonoLt?-Bold \_regoptT % 10 +\_LMregfont lmtt.i LMMono?-Italic \_regoptT % 10 +\_LMregfont lmtt.bi LMMonoLt?-BoldOblique \_regoptT % 10 +\_LMregfont lmtt.isl LMMonoSlant?-Regular \_regoptT % 10 +\_optfontalias {lmtt.bisl} {lmtt.bi} + +\_LMregfont lmtp.r LMMonoPropLt?-Regular \_regoptT % 10 +\_LMregfont lmtp.bx LMMonoPropLt?-Bold \_regoptT % 10 +\_LMregfont lmtp.i LMMonoPropLt?-Oblique \_regoptT % 10 +\_LMregfont lmtp.bxi LMMonoPropLt?-BoldOblique \_regoptT % 10 +\_LMregfont lmtp.b LMMonoProp?-Regular \_regoptT % 10 +\_LMregfont lmtp.bi LMMonoProp?-Oblique \_regoptT % 10 + +\_LMregfont lmtl.r LMMonoLt?-Regular \_regoptT % 10 +\_LMregfont lmtl.i LMMonoLt?-Oblique \_regoptT % 10 + +\_LMregfont lmtc.r LMMonoLtCond?-Regular \_regoptT % 10 +\_LMregfont lmtc.i LMMonoLtCond?-Oblique \_regoptT % 10 + +\_LMregfont lmrm.rc LMRomanCaps?-Regular \_regoptT % 10 +\_LMregfont lmrm.ic LMRomanCaps?-Oblique \_regoptT % 10 +\_LMregfont lmtt.rc LMMonoCaps?-Regular \_regoptT % 10 +\_LMregfont lmtt.ic LMMonoCaps?-Oblique \_regoptT % 10 + +\_LMregfont lmmu.r LMRomanUnsl?-Regular \_regoptT % 10 +\_LMregfont lmdu.r LMRomanDunh?-Regular \_regoptT % 10 +\_LMregfont lmdu.sl LMRomanDunh?-Oblique \_regoptT % 10 + +% main modifiers (they select a subfamily) +\_moddef \resetmod {\_fsetV subfam=rm \_fvars r bx i bxi } +\_moddef \sans {\_fsetV subfam=ss \_fvars r bx i bxi } +\_moddef \quotset {\_fsetV subfam=sq \_fvars r b i bi } +\_moddef \ttset {\_fsetV subfam=tt \_fvars r b i bi } +\_moddef \ttprop {\_fsetV subfam=tp \_fvars r b i bi } +\_moddef \ttlight {\_fsetV subfam=tl \_fvars r . i . } +\_moddef \ttcond {\_fsetV subfam=tc \_fvars r . i . } +\_moddef \upital {\_fsetV subfam=mu \_fvars r . . . } +\_moddef \dunhill {\_fsetV subfam=du \_fvars r . sl . } + +% submodifiers (they select special vaiants in a subfamily) +\_moddef \nbold {\_onlyif subfam=rm,ss,tp: {\_fvars r b i bi }} +\_moddef \bolder {\_onlyif subfam=rm,ss,tp: {\_fvars r bx i bxi }} +\_moddef \slant {\_onlyif subfam=rm: {\_fvars r bx isl bxisl }% + \_onlyif subfam=tt: {\_fvars r b isl bisl }} +\_moddef \caps {\_onlyif subfam=rm,tt: {\_fvars rc . ic . }} + +\_def \_tryloadtt {\_fontdef\_tentt{\_LMfonts \_addto\_fontfeatures{-tlig;}\_ttset \_rm}} +\_private \LMfonts \ttset ; % used in \_tryloadtt + +\_initfontfamily % new font family must be initialized + +\_loadmath {[latinmodern-math]} + +\_endcode + +\secc How to write the font family file with optical sizes + +You can use \^`\_optname` macro when `\_fontnamegen` in expanded. This macro is fully +expandable and its input is `<internal-template>` and its output is a +part of the font file name `<size-dependent-template>` with respect to given +optical size. + +You can declare a collection of `<size-dependent-template>`s for one +given `<internal-template>` by the \^`\_regoptsizes` macro. +The syntax is shown for one real case: + +\begtt +\_regoptsizes lmr.r lmroman?-regular + 5 <5.5 6 <6.5 7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <15 17 <* +\endtt + +In general: + +\begtt \catcode`\<=13 +\_regoptsizes <internal-template> <general-ouput-template> <resizing-data> +\endtt + +Suppose our example above. Then `\_optname{lmr.r}` expands to +lmroman?-regular where the question mark is substituted by a number +depending on current `\_optsize`. If the `\_optsize` lies between two boundary +values (they are prefixed by \code{<} character) then the number written between +them is used. For example if $11.1 \lt `\_optsize` \le 15$ then 12 is +substituted instead question mark. The <resizing-data> virtually begins +with zero \code{<0}, but it is not explicitly written. The right part of +<resizing-data> must be terminated by \code{<*} which means "less than infinity". + +If `\_optname` gets an argument which is not registered <internal-template> +then it expands to `\_failedoptname` which typically ends with an error message +about missing font. You can redefine `\_failedoptname` macro to some +existing font if you find it useful. + +We are using a special macro `\_LMregfont` in `f-lmfonts.opm`. +It sets the file names to +lowercase and enables us to use shortcuts instead of real <resizing-data>. +There are shortcuts `\_regoptFS`, `\_regoptT`, etc. here. The collection of +`<internal-templates>` are declared, each of them covers a collection of real +file names. + +The \^`\_optfontalias` `{<new-template>} {<internal-template>}` declares +`<new-template>` with the same meaning as previously declared +`<internal-template>`. + +The `\_optname` macro can be used even if no otical sizes are provided by +a font family. Suppose that font file names are much more chaotic (because +artists are very creative people), so you need to declare more systematic +`<internal-templates>` and do an alias from each `<internal-template>` to +`<real-font-name>`. For example, you can do it as follows: + +\begtt +\def\fontalias #1 #2 {\_regoptsizes #1 ?#2 {} <*} +% alias name real font name +\fontalias crea-a-regular {Creative Font} +\fontalias crea-a-bold {Creative FontBold} +\fontalias crea-a-italic {Creative olique} +\fontalias crea-a-bolditalic {Creative Bold plus italic} +\fontalias crea-b-regular {Creative Regular subfam} +\fontalias crea-b-bold {Creative subfam bold} +\fontalias crea-b-italic {Creative-subfam Oblique} +\fontalias crea-b-bolditalic {Creative Bold subfam Oblique} +\endtt + +Another example of a font family with optical sizes is Antykwa Półtawskiego. +The optical sizes feature is deactivated by default and it is switched on by +`\osize` font modifier: + +\printdoc f-poltawski.opm diff --git a/Master/texmf-dist/tex/optex/base/f-merriweather.opm b/Master/texmf-dist/tex/optex/base/f-merriweather.opm new file mode 100644 index 00000000000..f2972aaafd9 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-merriweather.opm @@ -0,0 +1,33 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Merriweather] \Merriweather {Modern shapes, sharp serifs} + {\caps \sans \serif} {\lf \li \rm \bf \it \bi \kr \ki} {} + {[Merriweather-Regular]} + {\_def\_fontnamegen {[Merriweather\_sansV-\_currV]:\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers:^^J + \sans ...... sans serif^^J + \serif ..... variants with serifs (default)^^J + \caps ...... caps & small caps^^J + \nocaps .... no \caps^^J% +Extended variants:^^J + \lf \li .... Light, LightItalic^^J + \kf \ki .... Black, BlackItalic^^J +}} + +\_moddef \resetmod {\_fsetV caps={},sans={} \_fvars Regular Bold Italic BoldItalic } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } +\_moddef \nocaps {\_fsetV caps={} } +\_moddef \sans {\_fsetV sans=Sans } +\_moddef \serif {\_fsetV sans={} } + +\_famvardef \lf {\_fsetV curr=Light \_rm} +\_famvardef \li {\_fsetV curr=LightItalic \_rm} +\_famvardef \kf {\_fsetV curr=ExtraBold \_onlyif sans={}: {\_fsetV curr=Black }\_rm} +\_famvardef \ki {\_fsetV curr=ExtraBoldItalic \_onlyif sans={}: {\_fsetV curr=BlackItalic }\_rm} + +\_initfontfamily % new font family must be initialized + +\_endcode + diff --git a/Master/texmf-dist/tex/optex/base/f-pagella.opm b/Master/texmf-dist/tex/optex/base/f-pagella.opm new file mode 100644 index 00000000000..a0e4eb8e308 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-pagella.opm @@ -0,0 +1,24 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Pagella] \Pagella {TeX Gyre Pagella fonts based on Palatino} + {\caps} {\rm \bf \it \bi} {Pagella} + {[texgyrepagella-regular]} + {\_def\_fontnamegen {[texgyrepagella-\_currV]:\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifier:^^J + \caps ...... caps & small caps^^J +}} + +\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } + +\_initfontfamily % new font family must be initialized + +\_loadmath {[texgyrepagella-math]} + +\_endcode + +See the file `f-heros.opm` for information about principles of such +font-macro-files. + diff --git a/Master/texmf-dist/tex/optex/base/f-poltawski.opm b/Master/texmf-dist/tex/optex/base/f-poltawski.opm new file mode 100644 index 00000000000..ffc7e8474d8 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-poltawski.opm @@ -0,0 +1,34 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Poltawski] \Poltawski {Antykwa Poltawskiego, Polish traditional font family} + {\light \noexpd \expd \eexpd \cond \ccond \osize \caps} {\rm \bf \it \bi} {} + {[antpolt-regular]} + {\_def\_fontnamegen {[antpolt\_liV\_condV-\_currV]\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers:^^J + \light ..... light weight, \bf,\bi=semibold^^J + \noexpd .... no expanded, no condensed, designed for 10pt size (default)^^J + \eexpd ..... expanded, designed for 6pt size^^J + \expd ...... semi expanded, designed for 8pt size^^J + \cond ...... semi condensed, designed for 12pt size^^J + \ccond ..... condensed, designed for 17pt size^^J + \osize ..... auto-sitches between \ccond \cond \noexpd \expd \eexpd by size^^J + \caps ...... caps & small caps^^J +}} + +\_moddef \resetmod {\_fsetV li={},cond={},caps={} \_fvars regular bold italic bolditalic } +\_moddef \light {\_fsetV li=lt } +\_moddef \noexpd {\_fsetV cond={} } +\_moddef \eexpd {\_fsetV cond=expd } +\_moddef \expd {\_fsetV cond=semiexpd } +\_moddef \cond {\_fsetV cond=semicond } +\_moddef \ccond {\_fsetV cond=cond } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } +\_moddef \nocaps {\_fsetV caps={} } +\_moddef \osize {\_def\_fontnamegen{[antpolt\_liV\_optname{x}-\_currV]:\_capsV\_fontfeatures}% + \_regoptsizes x ? expd <7 semiexpd <9 {} <11.1 semicond <15 cond <*} + +\_initfontfamily % new font family must be initialized + +\_endcode diff --git a/Master/texmf-dist/tex/optex/base/f-roboto.opm b/Master/texmf-dist/tex/optex/base/f-roboto.opm new file mode 100644 index 00000000000..51dfffff252 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-roboto.opm @@ -0,0 +1,59 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Roboto] \Roboto {Geometric grotesk, thin variants included} + {\cond \mono \ttset \thin \light \normal \bolder \caps} + {\tf \ti \lf \li \rm \it \mf \mi \bf \bi \kf \ki} {} + {[Roboto-Regular]} + {\_def\_fontnamegen {[Roboto\_subV-\_currV]:\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers (subfamilies):^^J + \cond ...... Condensed variants (no Thin, Medium, Black)^^J + \mono ...... Monospaced variants [Mono] (no Black)^^J + \ttset ..... Typewriter-like variants [Slab] (no Italic, no Medium, Black)^^J% +Modifiers (face weight):^^J + \thin ...... \rm, \it = Thin, \bf, \bi = Normal^^J + \light ..... \rm, \it = Light, \bf, \bi = Medium^^J + \normal .... \rm, \it = Normal, \bf, \bi = Bold^^J + \bolder .... \rm, \it = Medium, \bf, \bi = Black^^J% +Modifiers (Caps):^^J + \caps ...... Caps & small Caps^^J + \nocaps .... no \caps^^J% +Extended variants:^^J + \tf \ti .... Thin, ThinItalic^^J + \lf \li .... Light, LightItalic^^J + \mf \mi .... Medium, MediumItalic^^J + \kf \ki .... Black, BlackItalic^^J +}} + +\_moddef \resetmod {\_fsetV caps={},sub={},w=n \_fvars Regular Bold Italic BoldItalic } +\_moddef \mono {\_fsetV sub=Mono \_onlyif w=b: {\normal}} +\_moddef \cond {\_fsetV sub=Condensed \_onlyif w=b: {\normal}\_onlyif w=t: {\light}} +\_moddef \ttset {\_fsetV sub=Slab \_fvars Regular Bold . . } + +\_moddef \thin {\_onlyif sub={},Mono: {\_fsetV w=t \_fvars Thin Regular ThinItalic Italic }% + \_onlyif sub=Slab: {\_fsetV w=t \_fvars Thin Regular . . }} +\_moddef \light {\_onlyif sub={},Mono: {\_fsetV w=l \_fvars Light Medium LightItalic MediumItalic }% + \_onlyif sub=Condensed: {\_fsetV w=l \_fvars Light Regular LightItalic Italic }% + \_onlyif sub=Slab: {\_fsetV w=l \_fvars Light Bold . . }} +\_moddef \normal {\_fsetV w=n \_fvars Regular Bold Italic BoldItalic + \_onlyif sub=Slab: {\_fvars Regular Bold . . }} +\_moddef \bolder {\_onlyif sub={}: {\_fsetV w=b \_fvars Medium Black MediumItalic BlackItalic }} + +\_moddef \caps {\_fsetV caps=+smcp;+onum; } +\_moddef \nocaps {\_fsetV caps={} } + +\_famvardef \tf {\_thinM \_rm} +\_famvardef \ti {\_thinM \_it} +\_famvardef \lf {\_lightM \_rm} +\_famvardef \li {\_lightM \_it} +\_famvardef \mf {\_bolderM \_rm} +\_famvardef \mi {\_bolderM \_it} +\_famvardef \kf {\_bolderM \_bf} +\_famvardef \ki {\_bolderM \_bi} +\_let\_thinM=\thin \_let\_lightM=\light \_let\_bolderM=\bolder + +\_initfontfamily % new font family must be initialized + +\_endcode + diff --git a/Master/texmf-dist/tex/optex/base/f-schola.opm b/Master/texmf-dist/tex/optex/base/f-schola.opm new file mode 100644 index 00000000000..067a6d0ce2f --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-schola.opm @@ -0,0 +1,24 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Schola] \Schola {TeX Gyre Schola fonts based on New Century} + {\caps} {\rm \bf \it \bi} {Schola} + {[texgyreschola-regular]} + {\_def\_fontnamegen {[texgyreschola-\_currV]:\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifier:^^J + \caps ...... caps & small caps^^J +}} + +\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } + +\_initfontfamily % new font family must be initialized + +\_loadmath {[texgyreschola-math]} + +\_endcode + +See the file `f-heros.opm` for information about principles of such +font-macro-files. + diff --git a/Master/texmf-dist/tex/optex/base/f-sourcepro.opm b/Master/texmf-dist/tex/optex/base/f-sourcepro.opm new file mode 100644 index 00000000000..a8e847104e0 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-sourcepro.opm @@ -0,0 +1,39 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Source Pro] \Sourcepro {SourceSerifPro,SourceSansPro,SourceCodePro} + {\serif \sans \mono \light \elight \bolder \medium \caps} {\rm \bf \it \bi} {Termes} + {[SourceSerifPro-Regular]} + {\_def\_fontnamegen {[Source\_typfV Pro-\_currV]:\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers:^^J + \serif ..... Serif family (default)^^J + \sans ...... Sans family^^J + \mono ...... Code family^^J + \light ..... \rm=Light, \bf=Semibold^^J + \elight .... \rm=Extra light, \bf=Regular^^J + \bolder .... \rm=Semibold, \bf=Black^^J + \medium .... \rm=Medium, \bf=Bold (only for \mono family)^^J + \caps ...... caps & small caps, only for \sans (\serif: only \rm,\bf)^^J +}} + +\_moddef \resetmod {\_fsetV typf=Serif,caps={} \_fvars Regular Bold RegularIt BoldIt } +\_moddef \serif {\_fsetV typf=Serif } +\_moddef \sans {\_fsetV typf=Sans } +\_moddef \mono {\_fsetV typf=Code } +\_moddef \light {\_fvars Light Semibold LightIt SemiboldIt } +\_moddef \elight {\_fvars ExtraLight Regular ExtraLightIt RegularIt } +\_moddef \bolder {\_fvars Semibold Black SemiboldIt BlackIt } +\_moddef \medium {\_fsetV typf=Code \_fvars Medium Bold MediumIt BoldIt } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } +\_moddef \nocaps {\_fsetV caps={} } + +\_initfontfamily % new font family must be initialized + +\_loadmath {[texgyretermes-math]} + +\_endcode + +See the file `f-heros.opm` for information about principles of such +font-macro-files. + diff --git a/Master/texmf-dist/tex/optex/base/f-technika.opm b/Master/texmf-dist/tex/optex/base/f-technika.opm new file mode 100644 index 00000000000..77b894e53b2 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-technika.opm @@ -0,0 +1,31 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Technika] \Technika {Fonts from visual style of CTU in Prague} + {\caps \light} {\rm \bf \it \bi \stencil} {} + {[Technika-Regular]} + {\_def\_fontnamegen {[Technika\_stencilV-\_currV]:\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers:^^J + \light ..... ligher variants: \rm\bf=light \bf\bi=normal^^J + \book ...... semi-ligher variants: \rm\bf=book \bf\bi=bold^^J + \caps ...... caps & small caps^^J% +Special variant:^^J + \stencil ... dashed leters (only uppercase)^^J +}} + +\_moddef \resetmod {\_fsetV stencil={},caps={} \_fvars Regular Bold Italic BoldItalic } +\_moddef \light {\_fsetV stencil={} \_fvars Light Regular LightItalic Italic } +\_moddef \book {\_fsetV stencil={} \_fvars Book Bold BookItalic BoldItalic } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } + +\_famvardef \stencil {\_fsetV stencil=Stencil \_fvars Bold . Bold . \rm} + + +\_initfontfamily % new font family must be initialized + +\_endcode + +See the file `f-heros.opm` for information about principles of such +font-macro-files. + diff --git a/Master/texmf-dist/tex/optex/base/f-termes.opm b/Master/texmf-dist/tex/optex/base/f-termes.opm new file mode 100644 index 00000000000..8cd6ee6d8ab --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-termes.opm @@ -0,0 +1,24 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [Termes] \Termes {TeX Gyre Termes fonts based on Times} + {\caps} {\rm \bf \it \bi} {Termes} + {[texgyretermes-regular]} + {\_def\_fontnamegen {[texgyretermes-\_currV]:\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifier:^^J + \caps ...... caps & small caps^^J +}} + +\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } + +\_initfontfamily % new font family must be initialized + +\_loadmath {[texgyretermes-math]} + +\_endcode + +See the file `f-heros.opm` for information about principles of such +font-macro-files. + diff --git a/Master/texmf-dist/tex/optex/base/f-xcharter.opm b/Master/texmf-dist/tex/optex/base/f-xcharter.opm new file mode 100644 index 00000000000..9ad886d47f1 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/f-xcharter.opm @@ -0,0 +1,24 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_famdecl [XCharter] \XCharter {An extension of Bitstream Charter} + {\caps \slant} {\rm \bf \it \bi} {} + {[XCharter-Roman]} + {\_def\_fontnamegen {[XCharter-\_currV]:script=latn;\_capsV\_fontfeatures}} + +\_wlog{\_detokenize{% +Modifiers:^^J + \caps ...... caps & small caps^^J + \slant ..... slanted variants used in \it, \bi^^J +}} + +\_moddef \resetmod {\_fsetV caps={} \_fvars Roman Bold Italic BoldItalic } +\_moddef \slant {\_fvars Roman Bold Slanted BoldSlanted } +\_moddef \caps {\_fsetV caps=+smcp;+onum; } + +\_initfontfamily % new font family must be initialized + +\_endcode + +See the file `f-heros.opm` for information about principles of such +font-macro-files. + diff --git a/Master/texmf-dist/tex/optex/base/fams-ini.opm b/Master/texmf-dist/tex/optex/base/fams-ini.opm new file mode 100644 index 00000000000..3c8ded975e6 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/fams-ini.opm @@ -0,0 +1,214 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +% Version <2020-02-28>. Loaded in format and secondly on demand by \fontfam[catalog] + +\_famtext {Special name for printing a catalog :} + +\_faminfo [Catalogue] {Catalogue of all registered font families} {fonts-catalog} {} +\_famalias [Catalog] + +\_famtext {Computer Modern like family:} + +\_famfrom {GUST} +\_faminfo [Latin Modern] {TeX Gyre fonts based on Coputer Modern} {f-lmfonts} + { -,\nbold,\sans,\sans\nbold,\slant,\ttset,\ttset\slant,\ttset\caps,% + \ttprop,\ttprop\bolder,\quotset: {\rm\bf\it\bi} + \caps: {\rm\it} + \ttlight,\ttcond,\dunhill: {\rm\it} \upital: {\rm} } +\_famalias [LMfonts] \_famalias [Latin Modern Fonts] \_famalias [lm] + +\_famtext {TeX Gyre fonts based on Adobe 35:} + +\_faminfo [Termes] {TeX Gyre Termes fonts based on Times} {f-termes} + { -,\caps: {\rm\bf\it\bi} } +\_famalias [Times] + +\_faminfo [Heros] {TeX Gyre Heros fonts based on Helvetica} {f-heros} + { -,\caps,\cond,\caps\cond: {\rm\bf\it\bi} } +\_famalias [Helvetica] + +\_faminfo [Adventor] {TeX Gyre Adventor based on Avantgarde Book} {f-adventor} + { -,\caps: {\rm\bf\it\bi} } +\_famalias [Avantgarde Book] + +\_faminfo [Bonum] {TeX Gyre Bonum fonts based on Bookman} {f-bonum} + { -,\caps: {\rm\bf\it\bi} } +\_famalias [Bookman] + +\_faminfo [Pagella] {TeX Gyre Pagella fonts based on Palatino} {f-pagella} + { -,\caps: {\rm\bf\it\bi} } +\_famalias [Palatino] + +\_faminfo [Schola] {TeX Gyre Schola fonts based on New Century} {f-schola} + { -,\caps: {\rm\bf\it\bi} } +\_famalias [New Century] + +\_faminfo [Cursor] {TeX Gyre Cursor fonts based on Courier} {f-cursor} + { -,\caps: {\rm\bf\it\bi} } +\_famalias [Courier] + +\_famtext {Other fonts:} + +\_famfrom {Philipp H. Poll} +\_faminfo [Linux Libertine] {Free fonts typically installed on systems} {f-libertine} + { -: {\rm\bf\it\bi} \semibold: {\bf\bi} + \caps,\sans,\mono,\caps\sans: {\rm\bf\it\bi} -: {\initials\displ\keybr} } +\_famalias [Libertine] \_famalias [LinLibertine] + +\_famfrom {Philipp H. Poll, Khaled Hosny} +\_faminfo [Libertinus] {Free fonts derived from Linux Libertine} {f-libertinus} + { -: {\rm\bf\it\bi} \semibold: {\bf\bi} \sans: {\rm\bf\it} + \caps: {\rm\bf\it\bi} \caps\semibold: {\bf\bi} \caps\sans: {\rm\bf\it} + -: {\mono\initials\displ\keybr} } + +\_famfrom {Daniel Flipo} +\_faminfo [KP fonts] {KP fonts -- Johannes Kepler project} {f-kpfonts} + { -,\light,\sans,\mono, \caps, \caps\light, \caps\sans,\caps\mono,\swash: {\rm\bf\it\bi} } +\_famalias [KP] + +\_famfrom {DejaVu fonts team} +\_faminfo [DejaVu] {Derived from the Vera fonts} {f-dejavu} + { -,\cond,\sans,\sans\cond,\mono: {\rm\bf\it\bi} \light: {\rm} } + +\_famfrom {Zygfryd Gardzielewski, Janusz M. Nowacki} +\_faminfo [Antykwa Torunska] {Traditional Polish font family} {f-antt} + { -,\cond,\caps, \caps\cond: {\rm\bf\it\bi} + \medium,\cond\medium, \light, \cond\light:{\rm\it} } +\_famalias [Antt] + +\_famfrom {Adam Półtawski, Janusz M. Nowacki, Bogusław Jackowski and Piotr Strzelczyk} +\_faminfo [Poltawski] {Antykwa Poltawskiego, Polish traditional font family} {f-poltawski} + { \ccond,\cond,-,\expd,\eexpd, + \light\ccond,\light\cond,\light,\light\expd,\light\eexpd, + \caps: {\rm\bf\it\bi} } +\_famalias [Antykwa Poltawskiego] \_famalias [Poltawskiego] \_famalias [APoltawskiego] + +\_famfrom {Michael Sharpe} +\_faminfo [Baskerville] {Free variants of classical Baskerville} {f-baskerville} + { -,\caps: {\rm\bf\it\bi} } +\_famalias [BaskervilleF] + +\_famfrom {Georg Duffner, Octavio Pardo} +\_faminfo [EB Garamond] {Free variants of classical Garamond} {f-ebgaramond} + { -,\caps,\medium,\medium\caps,\semibold,\semibold\caps: {\rm\bf\it\bi} + \swash: {\it\bi} -: {\initials} } +\_famalias [Garamond] + +\_famfrom {George Douros, Benjamin Miller} +\_faminfo [Garamond Libre] {Free, derived from old style font family} {f-garamondl} + { -,\caps: {\rm\bf\it\bi} \swash: {\it\bi} } +\_famalias [GaramondL] + +\_famfrom {Pablo Impallari, Rodrigo Fuenzalida} +\_faminfo [LibreCaslon] {Libre Caslon Text, inspired by Caslon} {f-librecaslon} + { -,\onum: {\rm\bf\it\bi} } +\_famalias [Caslon] + +\_famfrom {Adobe, Paul D. Hunt} +\_faminfo [Source Pro] {Adobe SourceSerifPro, SourceSansPro, SourceCodePro} {f-sourcepro} + { \elight,\light,-,\bolder: {\rm\it} -,\bolder: {\bf\bi} + \sans\elight,\sans\light,\sans,\sans\bolder: {\rm\it} \sans,\sans\bolder: {\bf\bi} + \elight\caps,\light\caps,\caps,\bolder\caps: {\rm} \caps,\bolder\caps: {\bf} + \sans\elight\caps,\sans\light\caps,\sans\caps,\sans\bolder\caps: {\rm\it} + \sans\caps,\sans\bolder\caps: {\bf\bi} + \mono\elight,\mono\light,\mono,\mono\medium,\mono\bolder: {\rm\it} \mono,\mono\bolder: {\bf\bi} + } +\_famalias [AdobeSource] \_famalias [AdobeSourcePro] + +\_famfrom {Uni. of the Aegean} +\_faminfo [Kerkis] {Free Bookman alternative with Greek letters} {f-kerkis} + { -,\sans: {\rm\bf\it\bi} \caps: {\rm\bf} \semibold: {\bf\bi} + \sanssemi: {\rm} -:{\calli} } + +\_famfrom {Craig Rozynski} +\_faminfo [ComicNeue] {Comic Neue sans serif} {f-comicneue} + { -,\angular: {\lf\li\rm\it\bf\bi} } + +\_famfrom {Eben Sorkin} +\_faminfo [Merriweather] {Modern shapes, sharp serifs} {f-merriweather} + { -,\sans: {\lf\li\rm\it\bf\bi\kf\ki} \caps,\sans\caps: {\rm\it} } + +\_famfrom {Google, Christian Robertson} +\_faminfo [Roboto] {Geometric grotesk, thin variants included} {f-roboto} + { -: {\tf\ti\lf\li\rm\it\mf\mi\bf\bi\kf\ki} + \cond: {\lf\li\rm\it\bf\bi} + \mono: {\tf\ti\lf\li\rm\it\mf\mi\bf\bi} + \ttset: {\tf\lf\rm\bf} + \caps, \caps\cond: {\rm\bf\it\bi} \caps\ttset: {\rm\bf} + } + +\_famfrom {CTU in Prague, Roman Cernohous} +\_faminfo [Technika] {Fonts from visual style of CTU in Prague} {f-technika} + { -,\light,\book, \caps, \caps\book: {\rm\bf\it\bi} -:{\stencil} } +\_famalias [CTU Technika] + +\_famfrom {Bitstream, Andrey V. Panov, Michael Sharpe} +\_faminfo [XCharter] {An extension of Bitstream Charter} {f-xcharter} + { -,\slant,\caps,\caps\slant: {\rm\bf\it\bi} } + +\_famfrom {George Matthiopoulos, Greek Font Society} +\_faminfo [GFSBodoni] {Based on Bodoni with greek letters} {f-gfsbodoni} + { -: {\rm\bf\it\bi} \caps: {\rm} } + +\_endcode + +Once you have prepared a font family file with the name `f-<famname>.opm` and +\TeX/can see it in your filesystem then you can type \^`\fontfam``[<famname>]` and +the file is read, so the information about the font family is loaded. The name +`<famname>` must be lowercase and without spaces in the file name +`f-<famname>.opm`. On the other hand, the `\fontfam` command is more tolerant: +you can write uppercase letters and spaces here. The spaces are ignored and +uppercase letters are converted to lowercase. +For example `\fontfam [LM Fonts]` is equivalent to `\fontfam [LMfonts]` and both +commands load the file `f-lmfonts.opm`. + +You can use your font file in sense of the previous paragraph without +registering it. But problem is that such families are not listed when +`\fontfam[?]` is used and it is not included in the font catalog when +`\fontfam[catalog]` is printed. The list of families taken in the catalog and +listed on the terminal is declared in two files: `fams-ini.opm` and +`fams-local.opm`. The second file is optional. Users can create it and write to +it the information about user-defined families using the same syntax as in +existed file `fams-ini.opm`. + +The information from the user's `fams-local.opm` file has precedence. +For example `fams-ini.opm` declares aliases Times$\to$Termes etc. If you +have the original Times purchased from Adobe then you can register your +declaration of Adobe's Times family in `fams-local.opm`. When a user writes +`\fontfam[Times]` then the original Times (not Termes) is used. + +The `fams-ini.opm` and `fams-local.opm` files use the macros +`\_famifo`, `\_famalias` and `\_famtext`. See the example from +`fams-ini.tex`: + +{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip} + \def\docfile{fams-ini.opm} +\verbinput (3-28) fams-ini.opm +... etc. +} +\medskip + +The \^`\_faminfo` commad has the syntax: +\begtt \catcode`\<=13 +\_faminfo [<Family Name>] {<comments>} {<file-name>} + { <mod-plus-vars> } +\endtt +% +The `<mod-plus-vars>` data is used only when printing the catalog. It consists of +one or more pairs `<mods>: {<vars>}`. +For each pair: each modifier (separated by comma) is applied to each +variant selector in <vars> +and prepared samples are printed. The `-` character means no modifiers +should be applied. + +The \^`\_famalias` declares an alias to the last +declared family. + +The \^`\_famtext` writes a line to the terminal and the log file when all +families are listed. + +The \^`\_famfrom` saves the information about font type foundry or +manufacturer or designer or license owner. You can use it before `\_faminfo` +to print `\_famfrom` info into the catalog. +The `\_famfrom` data is applied to each following declared families until new +`\_famfrom` is given. Use `\_famfrom {}` if the information is not known. diff --git a/Master/texmf-dist/tex/optex/base/fnotes.opm b/Master/texmf-dist/tex/optex/base/fnotes.opm new file mode 100644 index 00000000000..612b32a17d7 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/fnotes.opm @@ -0,0 +1,191 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \fnote {Footnotes, marginal notes OpTeX <2020-05-26>} % loaded in format + + \_doc ----------------------------- + \`\_gfnotenum` is a counter which counts footnotes globally in the whole document.\nl + \`\_lfnotenum` is a counter which counts footnotes at each chapter from one. + It is used for local page footnote counters too.\nl + \`\_ifpgfnote` says that footnote numbers are counted on each page from + one. We need to run `\openref` in this case.\nl + \`\fnotenum` is a macro that expands to footnote number counted in declared part.\nl + \`\fnotenumchapters` declares footnotes numbered in each chapter from one + (default), \`\fnotenumglobal` declares footnotes numbered in whole + document from one and \`\fnotenumpages` declares footnotes numbered + at each page from one. + \_cod ----------------------------- + +\_newcount\_gfnotenum \_gfnotenum=0 +\_newcount\_lfnotenum + +\_newifi \_ifpgfnote +\_def \_fnotenumglobal {\_def\_fnotenum{\_the\_gfnotenum}\_pgfnotefalse} +\_def \_fnotenumchapters {\_def\_fnotenum{\_the\_lfnotenum}\_pgfnotefalse} +\_def \_fnotenumpages {\_def\_fnotenum{\_trycs{_fn:\_the\_gfnotenum}{?}}\_pgfnotetrue} +\_fnotenumchapters % default are footnotes counted from one in each chapter +\_def \fnotenum{\_fnotenum} +\_public \fnotenumglobal \fnotenumchapters \fnotenumpages ; +\_let \runningfnotes = \fnotenumglobal % for backward compatibility + + \_doc ----------------------------- + The \`\_printfnotemark` prints the footnote mark. You can re-define this + macro if you want another design of footnotes. For example + \begtt + \fnotenumpages + \def \_printfnotemark {\ifcase 0\fnotenum\or + *\or**\or***\or$^\mathbox{†}$\or$^\mathbox{‡}$\or$^\mathbox{††}$\fi} + \endtt + This code gives footnotes* and ** and*** and$^\mathbox{†}$ etc.\ + and it supposes that there are no more than 6 footnotes at one page. + + If you want to distinguish between footnote marks in the text and in the front of + the footnote itself, then you can define `\_printfnotemarkA` and `\_printfnotemarkB`. + + The \`\fnotelinks``<colorA><colorB>` implements the hyperlinked footnotes + (from text to footnote and backward). + \_cod ----------------------------- + +\_def \_printfnotemark {$^{\_fnotenum}$} % default footnote mark +\_def \_printfnotemarkA {\_printfnotemark} % footnote marks used in text +\_def \_printfnotemarkB {\_printfnotemark} % footnote marks used in front of footnotes + +\_def \_fnotelinks#1#2{% <inText color> <inFootnote color> + \_def\_printfnotemarkA{\_link[fnt:\_the\_gfnotenum]{\_localcolor#1}{\_printfnotemark}% + \_dest[fnf:\_the\_gfnotenum]}% + \_def\_printfnotemarkB{\_link[fnf:\_the\_gfnotenum]{\_localcolor#2}{\_printfnotemark}% + \_dest[fnt:\_the\_gfnotenum]}% +} +\public \fnotelinks ; + + \_doc ---------------------------- + Each footnote saves the \`\_Xfnote` (without parameter) to the `.ref` + file (if `\openref`). We can create the mapping from `<gfnotenum>` to`<pgfnotenum>` + in the macro `\_fn:<fnotenum>`. Each \^`\_Xpage` macro sets the + `\_lfnotenum` to zero. + \_cod ---------------------------- + +\_def \_Xfnote {\_incr\_lfnotenum \_incr\_gfnotenum + \_sxdef{_fn:\_the\_gfnotenum}{\_the\_lfnotenum}} + + \_doc ---------------------------- + The \`\fnote` `{<text>}` macro is simple, \`\fnotemark` and \^`\fnotetext` + does the real work. + \_cod ---------------------------- + +\_def\_fnote{\_fnotemark1\_fnotetext} +\_def\_fnotemark#1{{\_advance\_gfnotenum by#1\_advance\_lfnotenum by#1\_relax \_printfnotemarkA}} + + \_doc ---------------------------- + The \`\fnotetext` calls \^`\_opfootnote` which is equivalent to plain \TeX/ + \^`\vfootnote`. It creates new data to Insert \^`\footins`. The only + difference is that we can propagate a macro parameter into the Insert group + before the text is printed (see section \ref[output]). + This propagated macro is \`\_fnset` which sets smaller fonts. + + Note that \^`\vfootnote` and \^`\_opfootnote` don't read the text as a + parameter but during the normal horizontal mode. This is the reason why catcode + changes (for example in-line verbatim) can be used here. + \_cod ---------------------------- + +\_def\_fnotetext{\_incr\_gfnotenum \_incr\_lfnotenum % global increment + \_ifpgfnote \_openref \_fi + \_wref \_Xfnote{}% + \_ifpgfnote \_ifcsname _fn:\_the\_gfnotenum \_endcsname \_else + \_opwarning{unknown \_noexpand\fnote mark. TeX me again}% + \_incr\_unresolvedrefs + \_fi\_fi + \_opfootnote\_fnset\_printfnotemarkB +} +\_def\_fnset{\_everypar={}\_scalemain \_typoscale[800/800]} + +\_public \fnote \fnotemark \fnotetext ; + + \_doc ----------------------------- + By default \`\mnote``{<text>}` are in right margin at odd pages and they are in left + margin at even pages. The `\mnote` macro saves its position to `.ref` + file as \`\_Xmnote` without parameter. We define `\_mn:<mnotenum>` as + `\right` or `\left` when the `.ref` file is read. + The `\ifnum 0`$\le$`0#2` trick returns true if `<pageno>` has a numeric type and false + if it is a non-numeric type (Roman numeral, for example). We prefer to use + `<pageno>`, but only if it has the numeric type. We use `<gpageno>` in other cases. + \_cod ----------------------------- + +\_newcount\_mnotenum \_mnotenum=0 % global counter of mnotes +\_def \_Xmnote {\_incr\_mnotenum \_ea \_XmnoteA \_currpage} +\_def \_XmnoteA #1#2{% #1=<gpageno> #2=<pageno> + \_sxdef{_mn:\_the\_mnotenum}{\_ifodd\_numtype{#2}{#1} \_right \_else \_left \_fi}} +\_def \_numtype #1#2{\_ifnum 0<0#1 #1\_else #2\_fi} + + \_doc ----------------------------- + User can declare \`\fixmnotes``\left` or \^`\fixmnotes``\right`. It defines + \`\_mnotesfixed` as `\_left` or `\_right` which declares the placement + of all marginal notes and such declaration has a precedence. + \_cod ----------------------------- + +\_def \_fixmnotes #1{\_edef\_mnotesfixed{\_cs{_\_csstring #1}}} +\_public \fixmnotes ; + + \_doc ----------------------------- + The \`\_mnoteD``{<text>}` macro sets the position of the marginal note. + The outer box of marginal note has zero width and zero depth and it is appended + after current line using `\vadjust` primitive or it is inverted to vertical mode + as a box with `\vskip-\baselineskip` followed. + \_cod ----------------------------- + +\_def\_mnote #1#{\_ifx^#1^\_else \_mnoteC#1\_end \_fi \_mnoteD} +\_def\_mnoteC up#1\_end{\_mnoteskip=#1\_relax} % \mnote up<dimen> {<text>} syntax +\_long\_def\_mnoteD#1{\_ifvmode {\_mnoteA{#1}}\_nobreak\_vskip-\_baselineskip \_else + \_lower\_dp\_strutbox\_hbox{}\_vadjust{\_kern-\_dp\_strutbox \_mnoteA{#1}\_kern\_dp\_strutbox}% + \_fi +} +\_public \mnote ; + + \_doc ----------------------------- + The \`\mnoteskip` is a dimen value that denotes the vertical shift of marginal + note from its normal position. A positive value means shift up, negative + down. The `\mnoteskip` register is set to zero + after the marginal note is printed. The new syntax `\mnote up<dimen>{<text>}` + is possible too, but public `\mnoteskip` is kept for backward compatibility. + \_cod ----------------------------- + +\_newdimen\_mnoteskip +\_public \mnoteskip ; + + \_doc ----------------------------- + The \`\_mnoteA` macro does the real work. The \`\_lrmnote``{<left>}{<right>}` + uses only first or only second parameter depending on the left or right + marginal note. + \_cod ----------------------------- + +\_long\_def\_mnoteA #1{\_incr\_mnotenum + \_ifx\_mnotesfixed\_undefined + \_ifcsname _mn:\_the\_mnotenum \_endcsname + \_edef\_mnotesfixed{\_cs{_mn:\_the\_mnotenum}}% + \_else + \_opwarning{unknown \_noexpand\mnote side. TeX me again}\_openref + \_incr\_unresolvedrefs + \_def\_mnotesfixed{\_right}% + \_fi\_fi + \_hbox to0pt{\_wref\_Xmnote{}\_everypar={}% + \_lrmnote{\_kern-\_mnotesize \_kern-\_mnoteindent}{\_kern\_hsize \_kern\_mnoteindent}% + \_vbox to0pt{\_vss \_setbox0=\_vtop{\_hsize=\_mnotesize + \_lrmnote{\_leftskip=0pt plus 1fill \_rightskip=0pt} + {\_rightskip=0pt plus 1fil \_leftskip=0pt}% + {\_the\_everymnote\_noindent#1\_endgraf}}% + \_dp0=0pt \_box0 \_kern\_mnoteskip \_global\_mnoteskip=0pt}\_hss}% +} +\_def \_lrmnote#1#2{\_ea\_ifx\_mnotesfixed\_left #1\_else #2\_fi} + + \_doc ----------------------------- + We don't want to process `\fnote`, `\fnotemark`, `\mnote` in TOC, headlines + nor outlines. + \_cod ----------------------------- + +\_regmacro {\_def\fnote#1{}} {\_def\fnote#1{}} {\_def\fnote#1{}} +\_regmacro {\_def\fnotemark#1{}} {\_def\fnotemark#1{}} {\_def\fnotemark#1{}} +\_regmacro {\_def\mnote#1{}} {\_def\mnote#1{}} {\_def\mnote#1{}} + +\_endcode % ------------------------------------- + +2020-05-26 \mnote up<dimen> implemented +2020-03-20 released diff --git a/Master/texmf-dist/tex/optex/base/fonts-catalog.opm b/Master/texmf-dist/tex/optex/base/fonts-catalog.opm new file mode 100644 index 00000000000..3cd02e7b277 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/fonts-catalog.opm @@ -0,0 +1,136 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \_undefined {Font catalogue <2020-02-26>} % loaded on demand by \fontfam[catalog] + +\_tracinglostchars=1 % only to log file +\_initunifonts +\_begingroup + +\_istoksempty\_catalogmathsample \_iftrue \_noloadmath \_fi +\_font\_ttfixed=[LMMono10-Regular]\_relax +\_fontlet\_smalltt=\_ttfixed at7pt +\_suppressfontnotfounderror=1 + +\_lowercase\_ea{\_ea\_def\_ea\_cataloglist\_ea{\_the\_catalogonly}} +\_lowercase\_ea{\_ea\_def\_ea\_catalognolist\_ea{\_the\_catalogexclude}} + +\_ifx\_cataloglist\_empty \_else + \_addto\_cataloglist{ } + \_edef\_cataloglist{\_ea\_removespaces\_cataloglist{} } +\_fi +\_ifx\_catalognolist\_empty \_else + \_addto\_catalognolist{ } + \_edef\_catalognolist{\_ea\_removespaces\_catalognolist{} } +\_fi + +\_def\_faminfo [#1]#2#3#4{% + \_bgroup + \_lowercase{\_edef\_famname{\_ea\_removespaces #1 {} }}% + \_edef\_act{\_noexpand\_isinlist{,\_cataloglist,}{,\_famname,}}\_act + \_iftrue \def\_cataloglist{}\_fi + \_edef\_act{\_noexpand\_isinlist{,\_catalognolist,}{,\_famname,}}\_act + \_iftrue \def\_cataloglist{.}\_fi + \_ifx\_cataloglist\_empty + \_ifx^#4^\_else + \_bigskip {\_ttfixed\_string\fontfam [#1] -- (#2)\_par} + \_input #3.opm + \_ifexistfam \_nobreak\_medskip \_dosamples #4:{} + \_ifx\_mathfaminfo\_empty + \_else \_istoksempty\_catalogmathsample + \_iftrue {\_ttfixed \$Default math font\$: \_mathfaminfo \_par} + \_else Default math font (\_mathfaminfo): \_the\_catalogmathsample \_par + \_fi\_fi + \_else {\_qquad\_ttfixed ... family skipped, fonts not found in your system.} + \_fi\_fi\_fi + \_egroup +} +\_def\_dosamples #1:#2{\_ifx^#2^\_else + \_def\_printvars{#2}% + \_ea\_dosamplesA\_romannumeral-`\.#1,,% + \_ea\_dosamples\_fi +} +\_def\_dosamplesA#1,{% + \_ifx^#1^\_else + \_ifx-#1\_def\_usemodifiers{}\_else \_def\_usemodifiers{#1}\_fi + \_ea \_dosamplesB \_printvars \_relax + \_ea \_dosamplesA \_fi +} +\_def\_dosamplesB#1{% + \_ifx\_relax#1 \_else + {\_ttfixed \_detokenize\_ea{\_usemodifiers}\_detokenize{#1}\_unskip:} + {\_usemodifiers #1\_ea\_ifx\_the\_font \_nullfont + \_ttfixed ... This font isn't available in your system.% + \_else \_the\_catalogsample \_fi }\_par + \_ea \_dosamplesB \_fi +} + +\_def\_wlog#1{\_nobreak\_smallskip + \_hbox to\_hsize{\_hskip25pt + \_edef\_tmp{#1}\_replstring\_tmp{^^J}{\_par}% + \_smalltt \_noindent \_ea \string \_csname \_currfamily\_endcsname + \_vtop{\leftskip=1em \_baselineskip=9pt \_tmp \_par}\_hss + \_if\_relax\_the\_famfrom\_relax \_else from: \_the\_famfrom \_fi + } +} + +\_def\0#1{\_ifnum#1<10 0\_fi\_the#1} +\_footline={\_hfil\_ttfixed\_the\_pageno\_hfil} +\_headline={\_ttfixed Font Catalogue generated by \_OpTeX/ \_hfill \_the\_year-\0\_month-\0\_day} +\_parindent=0pt +\_ttfixed + +\_input fams-ini.opm + +\_isfile {fams-local.opm}\_iftrue \_famfrom{}\_input fams-local.opm \_fi + +\_endgroup + +\parindent=0pt + +\nonum\sec Customization of the catalog + + +You can redeclare the printed sample of each font by: + +\begtt +\catalogsample={Hello world!} +\endtt + +before \code{\\fontfam[catalog]} command is used. You can specify +\code{\\catalogmathsample} if you want to show default math fonts too, for example + +\begtt +\catalogmathsample={Gamma function is defined as + $$ + \Gamma(z) = \int_0^\infty x^{z-1} e^{-x}{\rm d}x, \quad \Re(z)>0. + $$} +\endtt +% +The \code{\\catalogmathsample} is empty by default, so math fonts are not loaded, +only the family of default math font is listed. + +\bigskip +You can restrict the families to be printed in the catalog by: + +\begtt +\catalogonly={Termes, Latin Modern, Heros} +\endtt + +If the \code{\\catalogonly} is empty (this is default value) then all families are +printed but families listed in the \code{\\catalogexclude} are excluded. For example + +\begtt +\catalogexclude={Latin Modern, XCharter} +\endtt + +The \code{\\cataogexclude} is empty by default. + +\bigskip The font families printed in the catalogue must be declared by the +\code{\\_faminfo} command in the file \code{fams-ini.opm} (declarations used +as default for \OpTeX/) or in the file \code{fams-local.opm}. The second file +does not exist by default but users can create it. The syntax rules are +described in the \code{fams-ini.opm} file. + + +\_endcode % ------------------------------------- + diff --git a/Master/texmf-dist/tex/optex/base/fonts-opmac.opm b/Master/texmf-dist/tex/optex/base/fonts-opmac.opm new file mode 100644 index 00000000000..3ae2f0c5e1c --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/fonts-opmac.opm @@ -0,0 +1,226 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \typosize {Font managing macros from OPmac <2021-03-10>} % loaded in format + + \_doc ----------------------------- + \`\typosize` `[<font-size>/<baselineskip>]` sets given parameters. + It sets text font size by the \^`\setfontsize` macro and math font sizes + by setting internal macros \^`\_sizemtext`, \^`\_sizemscript` and + \^`\_sizemsscript`. It uses common concept font sizes: 100\,\%, + 70\,\% and 50\,\%. + The \^`\_setmainvalues` sets the parameters as main values when + the `\_typosize` is called first. + \_cod ----------------------------- + +\_protected\_def \_typosize [#1/#2]{% + \_textfontsize{#1}\_mathfontsize{#1}\_setbaselineskip{#2}% + \_setmainvalues \_ignorespaces +} +\_protected\_def \_textfontsize #1{\_if$#1$\_else \_setfontsize{at#1\_ptunit}\_fi} + +\_def \_mathfontsize #1{\_if$#1$\_else + \_tmpdim=#1\_ptunit + \_edef\_sizemtext{\_ea\_ignorept \_the\_tmpdim \_ptmunit}% + \_tmpdim=0.7\_tmpdim + \_edef\_sizemscript{\_ea\_ignorept \_the\_tmpdim \_ptmunit}% + \_tmpdim=#1\_ptunit \_tmpdim=0.5\_tmpdim + \_edef\_sizemsscript{\_ea\_ignorept \_the\_tmpdim \_ptmunit}% + \_fi +} +\_public \typosize ; + + \_doc ----------------------------- + \`\typoscale` `[<font-factor>/<baseline-factor>]` scales + font size and baselineskip by given factors in respect to current values. + It calculates the \^`\typosize` parameters and runs the \^`\typosize`. + \_cod ----------------------------- + +\_protected\_def \_typoscale [#1/#2]{% + \_ifx$#1$\_def\_tmp{[/}\_else + \_settmpdim{#1}\_optsize + \_edef\_tmp{[\_ea\_ignorept\_the\_tmpdim/}\_fi + \_ifx$#2$\_edef\_tmp{\_tmp]}\_else + \_settmpdim{#2}\_baselineskip + \_edef\_tmp{\_tmp \_ea\_ignorept\_the\_tmpdim]}\_fi + \_ea\_typosize\_tmp +} +\_def\_settmpdim#1#2{% + \_tmpdim=#1pt \_divide\_tmpdim by1000 + \_tmpdim=\_ea\_ignorept \_the#2\_tmpdim +} +\_public \typoscale ; + + \_doc ----------------------------- + \`\_setbaselineskip` `{<baselineskip>}` sets new `\baselineskip` and + more values of registers which are dependent on the `<baselineskip>` + including the \^`\strutbox`. + \_cod ----------------------------- + +\_def \_setbaselineskip #1{\_if$#1$\_else + \_tmpdim=#1\_ptunit + \_baselineskip=\_tmpdim \_relax + \_bigskipamount=\_tmpdim plus.33333\_tmpdim minus.33333\_tmpdim + \_medskipamount=.5\_tmpdim plus.16666\_tmpdim minus.16666\_tmpdim + \_smallskipamount=.25\_tmpdim plus.08333\_tmpdim minus.08333\_tmpdim + \_normalbaselineskip=\_tmpdim + \_jot=.25\_tmpdim + \_maxdepth=.33333\_tmpdim + \_setbox\_strutbox=\_hbox{\_vrule height.709\_tmpdim depth.291\_tmpdim width0pt}% + \_fi +} + + \_doc ----------------------------- + \`\_setmainvalues` sets the current font size and `\baselineskip` + values to the \`\mainfosize` and \hbox{\`\mainbaselineskip`} registers + and loads fonts at given sizes. + It redefines itself as \`\_setmainvaluesL` + to set the main values only first. The \^`\_setmainvaluesL` does only + fonts loading. + \nl + \`\scalemain` returns to these values if they were set. Else they are set + to 10/12\,pt. + \nl + \`\mfontsrule` gives the rule how math fonts are loaded when \^`\typosize` + or \^`\typoscale` are used. The value of \^`\mfontsrule` can be: + \begitems + * 0: no math fonts are loaded. User must use \^`\normalmath` or \^`\boldmath` explicitly. + * 1: `\_normalmath` is run if \^`\typosize`/\^`\typoscale` are used + first or they are run at outer group level. No + `\everymath`/`\everydisplay` are set in this case. If + \^`\typosize`/\^`\typoscale` are run repeatedly in a group then `\_normalmath` is + run only when math formula occurs. This is done using + `\everymath`/`\everydisplay` and \^`\_setmathfonts`. + \^`\mfontsrule=1` is default. + * 2: `\_normalmath` is run whenever \^`\typosize`/\^`\typoscale` are used. + `\everymath`/`\everydisplay` registers are untouched. + \enditems + \_cod ----------------------------- + +\_newskip \_mainbaselineskip \_mainbaselineskip=0pt \_relax +\_newdimen \_mainfosize \_mainfosize=0pt +\_newcount \_mfontsrule \_mfontsrule=1 + +\_def\_setmainvalues {% + \_mainbaselineskip=\_baselineskip + \_mainfosize=\_optsize + \_topskip=\_mainfosize \_splittopskip=\_topskip + \_ifmmode \_else \_bf \_it \_bi \_rm \_fi % load all basic variants of the family + \_ifnum \_mfontsrule>0 \_normalmath \_fi % load math fonts first + \_let \_setmainvalues =\_setmainvaluesL +} +\_def\_setmainvaluesL {\_relax \_ifmmode \_else \_rm \_fi % load text font + \_ifcase \_mfontsrule % load math fonts + \_or \_ifnum\_currentgrouplevel=0 \_normalmath + \_else \_everymath={\_setmathfonts}\_everydisplay={\_normalmath}% + \_let\_runboldmath=\_relax \_fi + \_or \_normalmath \_fi} +\_def\_scalemain {% + \_ifdim \_mainfosize=\_zo + \_mainfosize=10pt \_mainbaselineskip=12pt + \_let \_setmainvalues=\_setmainvaluesL + \_fi + \_optsize=\_mainfosize \_baselineskip=\_mainbaselineskip +} +\_public \scalemain \mainfosize \mainbaselineskip \mfontsrule ; + + \_doc ----------------------------- + Suppose following example: + `{\typosize[13/15] Let $M$ be a subset of $R$ and $x\in M$...}` + If \^`\mfontsrule=1` then \^`\typosize` does not load math fonts + immediatelly but at the first math formula. It is done by `\everymath` + register, but the contents of this register is processed inside the math + group. If we do `\everymath={\_normalmath}` then this complicated macro + will be processed three times in your example above. We want only one + pocessing, so we do `\everymath={`\`\_setmathfonts``}` and + this macro closes math mode first, loads fonts and opens math mode again. + \_cod ----------------------------- + +\_def\_setmathfonts{$\_normalmath\_everymath{}\_everydisplay{}$} + + \_doc ----------------------------- + \`\thefontsize` `[<size>]` and \`\thefontscale` `[<factor>]` + do modification of the size of the current font. They are implemented by the + \^`\newcurrfontsize` macro. + \_cod ----------------------------- + +\_protected\_def\_thefontsize[#1]{\_if$#1$\_else + \_tmpdim=#1\_ptunit + \_newcurrfontsize{at\_tmpdim}% + \_fi + \_ignorespaces +} +\_protected\_def\_thefontscale[#1]{\_ifx$#1$\_else + \_tmpdim=#1pt \_divide\_tmpdim by1000 + \_tmpdim=\_ea\_ea\_ea\_ignorept \_pdffontsize\_font \_tmpdim + \_newcurrfontsize{at\_tmpdim}% + \_fi + \_ignorespaces +} +\_public \thefontsize \thefontscale ; + + \_doc ----------------------------- + \`\em` keeps the weight of the current variant and switches + roman $\leftrightarrow$ italic. It adds the italic correction by + the \`\_additcorr` and \`\_afteritcorr` macros. The second does not + add italic correction if the next character is dot or comma. + \_cod ----------------------------- + +\_protected\_def\_em {% + \_ea\_ifx \_the\_font \_tenit \_additcorr \_rm \_else + \_ea\_ifx \_the\_font \_tenbf \_bi\_aftergroup\_afteritcorr\_else + \_ea\_ifx \_the\_font \_tenbi \_additcorr \_bf \_else + \_it \_aftergroup\_afteritcorr\_fi\_fi\_fi +} +\_def\_additcorr{\_ifdim\_lastskip>\_zo + \_skip0=\_lastskip \_unskip\_italcorr \_hskip\_skip0 \_else\_italcorr \_fi} +\_def\_afteritcorr{\_futurelet\_next\_afteritcorrA} +\_def\_afteritcorrA{\_ifx\_next.\_else\_ifx\_next,\_else \_italcorr \_fi\_fi} +\_let\_italcorr=\/ + + \_doc ----------------------------- + The \`\boldify` macro does `\let\rm\bf`, `\let\it\bi` and + `\let\normalmath=\boldmath`. All following text will be in bold. + If should be used after \^`\typosize` or \^`\typoscale` macros.\nl + The internal \`\_runboldmath` macro runs `\_boldmath` immediatelly + if no delay of the math font loading is set by \^`\_setmainvaluesL`.\nl + The `\rm`, `\it` in math mode must keep its original meaning. + \_cod ----------------------------- + +\_protected\_def \_boldify {% + \_let \_setmainvalues=\_setmainvaluesL + \_let\it =\_bi \_let\rm =\_bf \_let\_normalmath=\_boldmath \_bf + \_runboldmath + \_ifx\_ncharrmA\_undefined \_protected\_addto\rm{\_fam0 }\_protected\_addto\it{\_fam1 }% + \_else \_protected\_def\rm {\_tryloadbf \_tenbf \_inmath{\_rmvariables \_rmdigits}}% + \_protected\_def\it {\_tryloadbi \_tenbi \_inmath{\_itvariables}}% + \_fi +} +\_def\_runboldmath{\_boldmath} + +\_public \em \boldify ; + + \_doc ----------------------------- + We need to use a font selector for default pagination. Because we don't + know what default font size will be selected by the user, we use this + \`\_rmfixed` macro. It sets the `\rm` font from the default font size + (declared by first \^`\typosize` command and redefines itself be only + the font switch for the next pages. + \_cod ----------------------------- + +\_def \_rmfixed {% used in default \footline + {\_ifdim\_mainfosize=0pt \_mainfosize=10pt \_fi + \_fontdef\_tenrm{\_setfontsize{at\mainfosize}\_resetmod\_rm}% + \_global\_let\_rmfixed=\_tenrm}% next use will be font switch only + \_rmfixed +} +\_let \rmfixed = \_tenrm % user can redefine it + +\_endcode % ------------------------------------- + +History: +2021-03-10 \boldify corrected +2021-03-09 \mfontsrule and \_setmathfonts introduced +2020-12-12 \_rmfixed fixed +2020-04-28 \boldify: removed \let\_rm=\_bf +2020-04-14 \_setmainvaluesL: \_ifmmode test added +2020-03-27 \_setmainvalues: \_splittopskip=\_topskip added diff --git a/Master/texmf-dist/tex/optex/base/fonts-preload.opm b/Master/texmf-dist/tex/optex/base/fonts-preload.opm new file mode 100644 index 00000000000..712730436c9 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/fonts-preload.opm @@ -0,0 +1,36 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \tenrm {Latin Modern fonts (EC) preloaded <2020-01-23>} % loaded in format + +% Only few text fonts are preloaded: + +\_font\_tenrm=ec-lmr10 % roman text +\_font\_tenbf=ec-lmbx10 % boldface extended +\_font\_tenit=ec-lmri10 % text italic +\_font\_tenbi=ec-lmbxi10 % bold italic +\_font\_tentt=ec-lmtt10 % typewriter +\_tenrm + +\_public \tenrm \tenbf \tenit \tenbi \tentt ; + +\_endcode %--------------------------------------------------- + +The format in lua\TeX/ can download only non-Unicode fonts. Latin Modern EC is +loaded here. These fonts are totally unusable in LuaTeX when languages with out +of ASCII or ISO-8859-1 alphabets are used (for example Czech). We load only +a few 8bit fonts here especially for simple testing the format. +But, if the user needs to do more serious work, he/she can +use `\fontfam` macro to load a selected font family of Unicode fonts. + +We have a dilemma: when the Unicode fonts cannot be preloaded in the format then the basic +font set can be loaded by `\everyjob`. But why to load a set of fonts at the +beginning of every job when it is highly likely that the user will +load something completely different. Our decision is: there is a basic 8bit +font set in the format (for testing purposes only) and the user should load +a Unicode font family at beginning of the document. + +The fonts selectors \`\tenrm`, \`\tenbf`, \`\tenit`, \`\tenbi`, \`\tentt` +are declared as `\public` here but only for backward compatibility. We don't +use them in the Font Selection System. But the protected versions of these +control sequences are used in the Font Selection System. + diff --git a/Master/texmf-dist/tex/optex/base/fonts-resize.opm b/Master/texmf-dist/tex/optex/base/fonts-resize.opm new file mode 100644 index 00000000000..ac0064df105 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/fonts-resize.opm @@ -0,0 +1,354 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \setfontsize {Font resizing macros <2020-04-17>} % preloaded in format + + \_doc ----------------------------- + The \`\setfontsize` `{<sizespec>}` saves the `<sizespec>` to the \`\_sizespec` macro. + The \`\_optsize` value is calculated from the `<sizespec>`. + If the `<sizepec>` is in the `mag<number>` format then the contents of + the `\_sizespec` macro is re-calculated to the `at<dimen>` format using + previous `\_optsize` value. + \par \goodbreak + \_cod ----------------------------- + +\_newdimen \_optsize \_optsize=10pt +\_newdimen \_defaultoptsize \_defaultoptsize=10pt +\_newdimen\_lastmagsize + +\_def\_setfontsize #1{% + \_edef\_sizespec{#1}% + \_ea \_setoptsize \_sizespec\_relax + \_reloading +} +\_def\_setoptsize {\_isnextchar a{\_setoptsizeA} + {\_isnextchar m{\_setoptsizeC}{\_setoptsizeB}}} +\_def\_setoptsizeA at#1\_relax{\_optsize=#1\_relax\_lastmagsize=\_optsize} % at<dimen> +\_def\_setoptsizeB scaled#1\_relax{\_optsize=\_defaultoptsize\_relax} % scaled<scalenum> +\_def\_setoptsizeC mag#1\_relax{% + \_ifdim\_lastmagsize>\_zo \_optsize=\_lastmagsize \_else \_optsize=\_pdffontsize\_font \_fi + \_optsize=#1\_optsize + \_lastmagsize=\_optsize + \_edef\_sizespec{at\_the\_optsize}% +} +\_public \setfontsize \defaultoptsize ; + + \_doc ----------------------------- + \`\_resizefont` `{<variant-name>}\<font switch>`, + for example `\resizefont{bf}\_tenbf` resizes the font given by the + variant. The variant `XX` have its font switch `\_tenXX`. + The \`\_doresizefont``\fontswitch` is used. It works in + TFM mode (\`\_doresizetfmfont`) or OTF mode (\^`\_doresizeunifont`). + In both modes, it does + \begtt \catcode`\<=13 + \_font \_tenXX = <fontname> \_sizespec + \endtt + The `<fontname>` is generated by the `\fontname` \TeX/ primitive where + \`\_rfontskipat` removes the `at<dimen>` part of the `\_fontname` output. + The `<fontname>` is generated differently in OTF mode, see + \^`\_doresizeunifont` macro.\nl + The \`\_whatresize` is defined as `<variant-name>`. + \_cod ----------------------------- + +\_def\_resizefont#1#2{% + \_edef\_whatresize{#1}% + \_ifx \_fontselector \_undefined \_doresizefont#2% + \_else \_ea \_doresizefont \_fontselector \_fi + \_lastmagsize=\_zo + \_slet{_tryload#1}{_relax}% +} +\_def\_doresizetfmfont#1{\_logfont{#1}% + \_ea\_font\_ea#1\_ea\_rfontskipat + \_fontname \_cs{_ten\_whatresize} \_relax\_space \_sizespec \_relax +} +\_let\_doresizefont=\_doresizetfmfont +\_def\_logfont#1{} % default is no logging of used fonts + +\_def\_rfontskipat#1{\_ifx#1"\_ea\_rfskipatX \_else\_ea\_rfskipatN\_ea#1\_fi} +\_def\_rfskipatX #1" #2\_relax{"\_whichtfm{#1}"} +\_def\_rfskipatN #1 #2\_relax{\_whichtfm{#1}} + + \_doc ----------------------------- + \`\fontdef` `<font switch>{<modifiers><variant selector>}` + opens group, runs `<modifiers><variant selector>` (i.e.\ it runs `#2` parameter). + The font switch `#1` saved in the \`\_fontselector` macro is re-declared + because the variant selector runs the \^`\_resizefont`. Now, we need to + keep the current meaning of the font switch `#1` but we must leave the + opened group. This is done by the \`\_keepmeaning` macro. + \nl + \`\fontlet` `<font switch A> <font switch B> <size spec>` does + \begtt \catcode`\<=13 + \font <font switch A> = <fontname> <sizespec> + \endtt + The `<fontname>` is extracted using the primitive command `\_fontname <font switch B>`. + \_cod ----------------------------- + +\_def \_fontdef #1#2{\_begingroup + \_ifx\_fontselector\_undefined \_def\_fontselector{#1}\_fi + \_reloading #2% + \_ea \_keepmeaning \_fontselector \_endgroup +} +\_def\_fontlet#1#2{\_ifx #2=\_ea\_fontlet \_ea#1\_else + \_ea\_font\_ea#1\_ea\_rfontskipat\_fontname#2 \_relax\_space \_fi +} +\_def \_keepmeaning #1#2{\_global\_let\_keepmeaningdata=#1% + #2\_let#1=\_keepmeaningdata \_global\_let\_keepmeaningdata=\_undefined +} +\_public \fontdef \fontlet ; + + \_doc ----------------------------- + \`\newcurrfontsize` `<size spec>` sets current font size to the `<size spec>` + It is implemented by \^`\fontlet`. + The font switch of the current font is extracted by `\_the\_font`. + We must re-create the control sequence `\_the\_font` because + its original meaning is set to \"inaccessible" by \TeX/ when `\font` + primitive is started. + \nl + \`\resizethefont` is implemented by `\newcurrfontsize` using data from + the \^`\_sizespec` macro. + \_cod ----------------------------- + +\_def \_newcurrfontsize #1{% \newcurrfontsize{at25pt} + \_edef\_tmp{\_ea\_csstring \_the\_font}% + \_ea \_fontlet \_csname \_tmp\_ea\_endcsname \_the\_font \_space #1\_relax + \_csname \_tmp\_endcsname +} +\_protected\_def \_resizethefont{\_newcurrfontsize\_sizespec} + + \_public \newcurrfontsize \resizethefont ; + + \_doc ----------------------------- + The variant selector is defined by `\protected\def\XX{\_tryloadXX \_tenXX}` + The `\_tryloadXX` can be in `\_relax` state if no font modifiers were + declared. But normally it does \^`\_resizefont``{XX}\tenXX`. This meaning + is activated by the \`\_reloading` macro. + \_cod ----------------------------- + +\_def\_reloading{\_loadf{rm}\_tenrm \_loadf{bf}\_tenbf + \_loadf{it}\_tenit \_loadf{bi}\_tenbi +} +\_def\_loadf#1#2{\_sdef{_tryload#1}{\_ifmmode \_else \_resizefont{#1}#2\_fi}} +\_def\_tryloadtt{\_resizefont{tt}\_tentt} + +\_let\_tryloadrm=\_relax +\_let\_tryloadbf=\_relax +\_let\_tryloadit=\_relax +\_let\_tryloadbi=\_relax + + \_doc ---------------------------- + The font selection system allows to use \`\currvar` + instead explicitly specified variant selector. The current variant + is extracted from `\the\font` output which could be `\_tenXX` control + sequence. Then `\currvar` expands to `\_rm` or `\_it` etc. + \_cod ---------------------------- + +\_protected \_def \_currvar{\_cs{_currvar:\_ea \_csstring \_the\_font}} +\_sdef{_currvar:_tenrm}{\_rm} +\_sdef{_currvar:_tenbf}{\_bf} +\_sdef{_currvar:_tenit}{\_it} +\_sdef{_currvar:_tenbi}{\_bi} +\_sdef{_currvar:_tentt}{\_tt} +\_public \currvar ; + + \_doc ----------------------------- + The \`\_regtfm` `<font id> <optical size data>` + saves the <optical size data> concerned to `<font id>`. + The `<optical size data>` is in the form as shown below in the code where + `\_regtfm` is used. + \nl + The \`\_wichtfm` `<fontname>` expands to the `<fontname>` or to the corrected + `<fontname>` read from the `<optical size data>`. It is used in the + \^`\_rfontskipat` macro and it is used in \^`\fontlet` macro. + It means that each `<fontname>` generated by the `\fontname` primitive in the + `\fontlet` macro is processed by the `\_whichtfm`. The real `<fontname>` or + corrected `<fontname>` (depending on the optical data does not exist or exist) + is the output of the expansion before `\font` primitive takes this output + as its parameter. + + The implementation detail: The `\_<font id>:reg` is defined as the + `<optical size data>` and all control sequences `\_<fontname>:reg` + from this data line have the same meaning because of the + \`\_reversetfm` macro. The `\_whichtfm` expands this data line and apply + \`\_dowhichtfm`. This macro selects the right result from the data line + by testing with the current `\_optsize` value. + \_cod ----------------------------- + +\_def\_regtfm #1 0 #2 *{\_ea\_def \_csname _#1:reg\_endcsname{#2 16380 \_relax}% + \_def\_tmpa{#1}\_reversetfm #2 * % +} +\_def\_reversetfm #1 #2 {% we need this data for \_setmathfamily + \_ea\_let\_csname _#1:reg\_ea\_endcsname + \_csname _\_tmpa:reg\_endcsname + \_if*#2\_else \_ea\_reversetfm \_fi +} +\_def\_whichtfm #1{% + \_ifcsname _#1:reg\_endcsname + \_ea\_ea\_ea \_dowhichtfm + \_csname _#1:reg\_ea\_endcsname + \_else + #1% + \_fi +} +\_def\_dowhichtfm #1 #2 {% + \_ifdim\_optsize<#2pt #1\_ea\_ignoretfm\_else \_ea\_dowhichtfm +\_fi +} +\_def\_ignoretfm #1\_relax{} + + \_doc ----------------------------- + Optical sizes data for preloaded 8bit Latin Modern fonts: + \_cod ----------------------------- + +\_regtfm lmr 0 ec-lmr5 5.5 ec-lmr6 6.5 ec-lmr7 7.5 ec-lmr8 8.5 ec-lmr9 9.5 + ec-lmr10 11.1 ec-lmr12 15 ec-lmr17 * +\_regtfm lmbx 0 ec-lmbx5 5.5 ec-lmbx6 6.5 ec-lmbx7 7.5 ec-lmbx8 8.5 ec-lmbx9 9.5 + ec-lmbx10 11.1 ec-lmbx12 * +\_regtfm lmri 0 ec-lmri7 7.5 ec-lmri8 8.5 ec-lmri9 9.5 ec-lmri10 11.1 ec-lmri12 * +\_regtfm lmtt 0 ec-lmtt8 8.5 ec-lmtt9 9.5 ec-lmtt10 11.1 ec-lmtt12 * + +\_setfontsize {at10pt} % default font size + +\_endcode %--------------------------------------------------- + + +\sec[setfontsize] Scaling fonts in text mode (low-level macros) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\secc The `\setfontsize` macro + +The \^`\setfontsize` `{<size spec>}` +saves the information about `<size spec>`. This information is taken into +account when a variant selector (for example `\rm`, `\bf`, `\it`, `\bi`) +or `\resizethefont` is used. The `<size spec>` can be: +\begitems +* `at<dimen>`, for example `\setfontsize{at12pt}`. It gives the desired font size directly. +* `scaled<scale factor>`, for example `\setfontsize{scaled1200}`. The font is + scaled in respect to its native size (which is typically 10\,pt). It + behaves like `\font\... scaled<number>`. +* `mag<decimal number>`, for example `\setfontsize{mag1.2}`. The font is + scaled in respect to the current size of the fonts given by the previous + \^`\setfontsize` command. +\enditems +The initialization value in \OpTeX/ is given by `\setfontsize{at10pt}`. + +The \^`\resizethefont` resizes the currently selected font to the size given by previous +\^`\setfontsize`. For example + +\begtt + The 10 pt text is here, +\setfontsize{at12pt} the 10 pt text is here unchanged... +\resizethefont and the 12 pt text is here. +\endtt +% +The \^`\setfontsize` command acts like {\em font modifier}. It means that it +saves information about fonts but does not change the font actually until +variant selector or \^`\resizethefont` is used. + +The following example demonstrates the `mag` format of \^`\setfontsize` +parameter. It is only a curious example probably not used in practical +typography. + +\begtt +\def\smaller{\setfontsize{mag.9}\resizethefont} +Text \smaller text \smaller text \smaller text. +\endtt + +\secc[fontprimitive] The `\font` primitive + +If you load a font directly by `\font` primitive and you want to +create a size-dependent selector for such font then you can use +\~`\resizethefont`: + +\begtt +\font\tencomfortaa=Comfortaa-Regular-T1 at10pt +\def\comfortaa{\tencomfortaa\resizethefont} + +\comfortaa The 10 pt text is here +\setfontsize{at12pt} +\comfortaa The 12 pt text is here +\endtt +% +The example above uses the 8\,bit `tfm` font. You can use Unicode font too, of +course. The \^`\fontfam` macro initializes the extended `\font` primitive +features for \LuaTeX/ (see section \ref[exfont]). +If you didn't use this command, you must initialize +these features by the \^`\initunifonts` command explicitly, for example: + +\begtt +\initunifonts +\font\tencyklop=[cyklop-regular] at10pt % the font cyklop-regular.otf is loaded +\def\cyklop{\tencyklop\resizethefont} + +\cyklop The 10 pt text is here +\setfontsize{at12pt} +\cyklop The 12 pt text is here +\endtt + +\secc[fontdef] The \code{\\fontdef} declarator + +You can declare `\<newfont>` by the \~`\fontdef` command. + +\begtt \catcode`\<=13 + \fontdef \<newfont> {<font modifiers> \<variant-selector>} + example: + \fontdef \bigfont {\setfontsize{at15pt}\bf} +\endtt +% +This command runs `<font modifiers> \<variant-selector>` in an internal group and sets the +resulting selected font as `\<newfont>`. + +The resulting `\<newfont>` declared by \~`\fontdef` is \"fixed font switch" +independent of \^`\setfontsize` and other font modifiers. More exactly, it is +a fixed font switch when it is used but it can depend on the current font +modifiers and font family and given font modifiers when it is declared. + +The parameter of the \~`\fontdef` macro must be exactly finished by the +variant selector. More information about font modifiers +and variant selectors are in the section~\ref[fontsystem]. + +\secc[fontlet] The \code{\\fontlet} declarator + +We have another command for scaling: \^`\fontlet` which can resize +arbitrary font given by its font switch. +This font switch was declared by the +`\font` primitive or the \~`\fontdef` macro. + +\begtt \catcode`\<=13 + \fontlet \<newfont> = \<fontswitch> <sizespec> + example: + \fontlet \bigfont = \_tenbf at15pt +\endtt + +The resulted `\bigfont` is the same as in the previous example where \~`\fontdef` +was used. The advantage of \~`\fontdef` macro will be more clear when you load +font families by `\fontfam` and you are using more font modifiers declared +in such families. + +Summary: you can declare font switches: +\begitems +* by the `\font` primitive if you know the font file, +* by the \^`\fontlet` command if you know the font switch and the size, or +* by the \~`\fontdef` command if you know the variant and modifiers. +\enditems + +\secc Optical sizes + +There are font families with more font files where almost the same font is +implemented in various design sizes: `cmr5`, `cmr6`, `cmr7`, `cmr8`, `cmr9`, +`cmr10`, `cmr12`, `cmr17` for example. This feature is called \"optical +sizes". \OpTeX/ chooses a font with an optical size closest to desired size +specified by the \^`\setfontsize`, when `at<dimen>` or `mag<coefficient>` is used. +When `scaled<scale factor>` is used then optical size is chosen using the value +of the `\defaultoptsize` register and such font is scaled by the specified +`<scale factor>`. There is `\defaultoptsize=10pt` by default. + +Font collections with optical sizes must be registered by the +\^`\_regtfm` for `tfm` files or \^`\_regoptsizes` for Unicode fonts. +\OpTeX/ registers 8bit Latin Moder fonts in the format (`fonts-resize.opm` file) +and OTF Latin Modern fonts in the `f-lmfonts.opm` file. + +\secc Implementation notes + +\_endinput + +2020-04-17 \resizethefont introduced +2020-03-17 released diff --git a/Master/texmf-dist/tex/optex/base/fonts-select.opm b/Master/texmf-dist/tex/optex/base/fonts-select.opm new file mode 100644 index 00000000000..740b311a677 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/fonts-select.opm @@ -0,0 +1,846 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \fontfam {Fonts selection system <2021-02-25>} % preloaded in format + + \_doc ----------------------------- + \`\initunifonts` macro extends \LuaTeX's font capabalities, + in order to be able to load Unicode fonts. Unfortunately, this part of + \OpTeX/ depends on `luaotfload` package, which adapts Con\TeX/t's generic + font loader for plain \TeX/ and \LaTeX. `luaotfload` uses Lua functions + from \LaTeX's `luatexbase` namespace, we provide our own replacements. + Moreover, `\initunifont` switches with + the \^`\_doresizefont` macro to OTF mode which is represented by the + macro \`\_doresizeunifont`. This mode includes + a fallback to TFM mode if \^`\_fontnamegen` is not defined. + Finally, `\initunifonts` sets itself to relax because we don't want to do + this work twice.\nl + \`\_ttunifont` is default font for `\tt` variant if + `f-lmfonts.opm` (or another font file where `\tt` is declared) is not loaded. + \_cod ----------------------------- + +\_def\_initunifonts {% + \directlua{% + require('luaotfload-main') + luaotfload.main() + }% + \_gdef\_rfskipatX ##1" ##2\_relax{"##1"}% + \_global\_let \_doresizefont=\_doresizeunifont + \_gdef\_tryloadtt {\_fontdef\_tentt{\_let\_fontnamegen=\_ttunifont\_rm}}% + \_global\_let \_initunifonts=\_relax % we need not to do this work twice + \_global\_let \initunifonts=\_relax +} +\_gdef\_doresizeunifont #1{\_logfont{#1}% + \_ifx\_fontnamegen\_undefined \_doresizetfmfont#1\_else + \_font#1={\_fontnamegen} \_sizespec \_relax \_setwsp#1\_relax + \_fi +} +\_def\_ttunifont{[lmmono10-regular]:\_fontfeatures-tlig;} + +\_public \initunifonts ; + + \_doc ----------------------------- + The \`\_famdecl` `[<Family Name>] \<Famselector> {<comment>} {<modifiers>} {<variants>} {<math>}`\nl + `{<font for testing>} {\def`\^`\_fontnamegen``{<data>}}` runs \^`\initunifonts`, then + checks if `\<Famselector>` is defined. If it is true, then closes the file by + `\endinput`. Else it defines `\<Famselector>` and saves it to the + internal `\_f:<currfamily>:main.fam` command. + The macro \`\_initfontfamily` needs it. The \`\_currfamily` is set + to the `<Famselector>` because the following \^`\moddef` commands need to + be in the right font family context. The `\_currfamily` is set to the + `<Famselector>` by the `\<Famselector>` too, because `\<Famselector>` + must set the right font family context. The font family context is given by the current + `\_currfamily` value and by the actual meaning of the \^`\_fontnamegen` macro. + The \`\_mathfaminfo` is saved for usage in the catalog. + \_cod ----------------------------- + +\_def\_famdecl [#1]#2#3#4#5#6#7#8{% + \_initunifonts \_uniaccents + \_unless\_ifcsname _f:\_csstring#2:main.fam\_endcsname + \_isfont{#7}\_iffalse + \_opwarning{Family [#1] skipped, font "#7" not found}\_ea\_ea\_ea\_endinput \_else + \_edef\_currfamily {\_csstring #2}\_def\_mathfaminfo{#6}% + \_wterm {FONT: [#1] -- \_string#2 \_detokenize{(#3)^^J mods:{#4} vars:{#5} math:{#6}}}% + \_unless \_ifx #2\_undefined + \_opwarning{\_string#2 is redefined by \_string\_famdecl\_space[#1]}\_fi + \_protected\_edef#2{\_def\_noexpand\_currfamily{\_csstring #2}\_unexpanded{#8\_resetfam}}% + \_ea \_let \_csname _f:\_currfamily:main.fam\_endcsname =#2% + \_fi + \_else \_csname _f:\_csstring#2:main.fam\_endcsname \_reloading \_rm \_ea \_endinput \_fi +} +\_def\_initfontfamily{% + \_csname _f:\_currfamily:main.fam\_endcsname \_reloading \_rm +} + + \_doc ----------------------------- + \`\_regoptsizes` `<internal-template> <left-output>?<right-output> <resizing-data>` + prepares data for using by the \`\_optname` `<internal-template>` macro. + The data are saved to the `\_oz:<internal-template>` macro. + When the `\_optname` is expanded then the data are scanned by the macro + \`\_optnameA` `<left-output>?<right-output> <mid-output> `\code{<}`<size>` + in the loop.\nl + \`\_optfontalias` `{<template A>}{<template B>}` is defined as + `\let\_oz:<templateA>=\_oz:<templateB>`. + \_cod ----------------------------- + +\_def\_regoptsizes #1 #2?#3 #4*{\_sdef{_oz:#1}{#2?#3 #4* }} +\_def\_optname #1{\_ifcsname _oz:#1\_endcsname + \_ea\_ea\_ea \_optnameA \_csname _oz:#1\_ea\_endcsname + \_else \_failedoptname{#1}\_fi +} +\_def\_failedoptname #1{optname-fails:(#1)} +\_def\_optnameA #1?#2 #3 <#4 {\_ifx*#4#1#3#2\_else + \_ifdim\_optsize<#4pt #1#3#2\_optnameC + \_else \_afterfifi \_optnameA #1?#2 \_fi\_fi +} +\_def\_optnameC #1* {\_fi\_fi} +\_def\_afterfifi #1\_fi\_fi{\_fi\_fi #1} +\_def\_optfontalias #1#2{\_slet{_oz:#1}{_oz:#2}} + + \_doc ----------------------------- + \`\_fvars` `<rm-template> <bf-template> <it-template> <bi-template>` + saves data for usage by the `\_currV` macro. If a template is only dot + then previous template is used (it can be used if the font family doesn't + dispose with all standard variants). + \nl + \`\_currV` expands to a template declared by `\_fvars` depending on the + `<variant name>`. Usable only of standard four variants. Next variants + can be declared by the \^`\famvardef` macro. + \nl + \`\_fsetV` `<key>=<value>,...,<key>=<value>` expands to + `\def\_<key>V{<value>}` in the loop. + \nl + \`\_onlyif` `<key>=<value-a>,<value-b>...,<value-z>: {<what>}` + runs <what> only if the `\_<key>V` is defined as `<value-a>` or + `<value-b>` or ... or `<value-z>`. + \nl + \`\_prepcommalist` `ab,{},cd,\_end,` expands to `ab,,cd,` (auxiliary macro + used in `\_onlyif`). + \_cod ----------------------------- + +\_def\_fvars #1 #2 #3 #4 {% + \_sdef{_fvar:rm}{#1}% + \_sdef{_fvar:bf}{#2}% + \_ifx.#2\_slet{_fvar:bf}{_fvar:rm}\_fi + \_sdef{_fvar:it}{#3}% + \_ifx.#3\_slet{_fvar:it}{_fvar:rm}\_fi + \_sdef{_fvar:bi}{#4}% + \_ifx.#4\_slet{_fvar:bi}{_fvar:it}\_fi +} +\_def\_currV{\_cs{_fvar:\_whatresize}} +\_def\_V{ } +\_def \_fsetV #1 {\_fsetVa #1,=,} +\_def \_fsetVa #1=#2,{\_isempty{#1}\_iffalse + \_ifx,#1\_else\_sdef{_#1V}{#2}\_ea\_ea\_ea\_fsetVa\_fi\_fi +} +\_def \_onlyif #1=#2:#3{% + \_edef\_act{\_noexpand\_isinlist{,\_prepcommalist #2,\_end,}{,\_cs{_#1V},}}\_act + \_iftrue #3\_fi +} +\_def\_prepcommalist#1,{\_ifx\_end#1\_empty\_else #1,\_ea\_prepcommalist\_fi} + + \_doc ----------------------------- + The \`\moddef` `\<modifier> {<data>}` simply speaking does + `\def\<modifier>{<data>}`, but we need to respect + the family context. In fact, `\protected\def\_f:<current family>:<modifier>{<data>}` is + performed and the `\<modifier>` is defined as + \`\_famdepend``\<modifier>{_f:\_currfamily:<modifier>}`. It expands to + `\_f:\_currfamily:<modifier>` value if it is defined or it prints + the warning. When the `\_currfamily` value is + changed then we can declare the same `\<modifier>` with a different meaning. + + When a user declares a prefixed variant of the `\<modifier>` then unprefixed + modifier name is used in internal macros, this is the reason why we are using + the \`\_remifirstunderscore``\_tmp` (where `\_tmp` expands to + `_<something>` or to `<something>`. The `\_remifirstunderscore` + redefines `\_tmp` in the way that it + expands only to `<something>` without the first `_`. + + \`\_setnewmeaning` `<cs-name>=\_tmpa <by-what>` does exactly `\_let <csname>=\_tmpa` + but warning is printed if <cs-name> is defined already and it is not a variant + selector or font modifier. + + \`\_addtomodlist` `<font modifier>` adds given modifier to \`\_modlist` + macro. This list is used after `\resetmod` when a new family is selected by + a family selector, see \`\_resetfam` macro. + This allows reinitializing the same current modifiers in the font context + after the family is changed. + \_cod ----------------------------- + +\_def \_moddef #1#2{\_edef\_tmp{\_csstring#1}% + \_sdef{_f:\_currfamily:\_tmp}{\_addtomodlist#1#2\_reloading}% + \_protected \_edef \_tmpa{\_noexpand\_famdepend\_noexpand#1{_f:\_noexpand\_currfamily:\_tmp}}% + \_setnewmeaning #1=\_tmpa \moddef +} +\_protected \_def\_resetmod {\_cs{_f:\_currfamily:resetmod}} % private variant of \resetmod +\_def \_resetfam{\_def\_addtomodlist##1{}\_resetmod + \_edef \_modlist{\_ea}\_modlist + \_let\_addtomodlist=\_addtomodlistb +} +\_def \_currfamily{} % default current family is empty +\_def \_modlist{} % list of currently used modifiers + +\_def \_addtomodlist#1{\_addto\_modlist#1} +\_let \_addtomodlistb=\_addtomodlist + +\_def\_famdepend#1#2{\_ifcsname#2\_endcsname \_csname#2\_ea\_endcsname \_else + \_ifx\_addtomodlist\_addtomodlistb + \_opwarning{\_string#1 is undeclared in family "\_currfamily", ignored}\_fi\_fi +} +\_def\_setnewmeaning #1=\_tmpa#2{% + \_ifx #1\_undefined \_else \_ifx #1\_tmpa \_else + \_opwarning{\_string#1 is redefined by \_string#2}% + \_fi\_fi + \_let#1=\_tmpa +} +\_public \moddef ; + + \_doc ----------------------------- + The \`\famvardef` `\<XX> {<data>}` + uses analogical trick like \^`\moddef` with + the \^`\_famdepend` macro. The auxiliary + \`\_famvardefA` `\<XX> \_ten<XX> \_tryload<XX> {<data>}` is used. + It does: + \begitems + * `\def \_tryload:<currfam>:<XX> {`\^`\fontdef`` \_ten<XX> {<data>}}` loads font `\_ten<XX>`, + * `\protected\def \<XX> {\_famdepend \<XX> {_f:<currfam>:<XX>}}`, + * `\def \_f:<currfam>:<XX> {\_tryload:<currfam>:<XX>\_ten<XX>}` keeps family dependent definition, + * `\def \_currvar:_ten<XX> {\<XX>}` in order to the \^`\currvar` macro work correctly. + \enditems + `\famvardef\tt` behaves somewhat differently: it doesn't re-define the + `\tt` macro which is defined as `\_tryloadtt \_tentt` in sections~\ref[math-preload] + and~\ref[unimath-codes]. It only re-defines the internal `\_tryloadtt` macro. + \_cod ----------------------------- + +\_def\_famvardef#1{\_edef\_tmp{\_csstring#1}% + \_ea\_famvardefA \_ea#1\_csname _ten\_tmp\_ea\_endcsname + \_csname _tryload:\_currfamily:\_tmp\_endcsname +} +\_def\_famvardefA #1#2#3#4{% #1=\XX #2=\_tenXX #3=\_tryload:currfam:XX #4=data + \_isinlist{.\_rm\_bf\_it\_bi\currvar\_currvar}#1\_iftrue + \_opwarning{\_string\famvardef: + You cannot re-declare standard variant selector \_string#1}% + \_else + \_def#3{\_fontdef#2{#4}}% + \_protected\_edef\_tmpa{\_noexpand\_famdepend\_noexpand#1{_f:\_noexpand\_currfamily:\_tmp}}% + \_ifx #1\_tt \_let\_tryloadtt=#3\_else \_setnewmeaning #1=\_tmpa \famvardef \_fi + \_sdef{_f:\_currfamily:\_tmp}{#3#2}% + \_sdef{_currvar:\_csstring#2}{#1}% + \_fi +} +\_public \famvardef ; + + \_doc ----------------------------- + The \`\fontfam` `[<Font Family>]` does: + \begitems + * Convert its parameter to lower case and without spaces, e.g.\ `<fontfamily>`. + * If the file `f-<fontfamily>.opm` exists read it and finish. + * Try to load user defined `fams-local.opm`. + * If the `<fontfamily>` is declared in `fams-local.opm` or `fams-ini.opm` + read relevant file and finish. + * Print the list of declared families. + \enditems + The `fams-local.opm` is read by the \`\_tryloadfamslocal` macro. It sets + itself to `\_relax` because we need not load this file twice. + The \`\_listfamnames` macro prints registered font families to the + terminal and to the log file. + \_cod ----------------------------- + +\_def\_fontfam[#1]{% + \_lowercase{\_edef\_famname{\_ea\_removespaces #1 {} }}% + \_isfile {f-\_famname.opm}\_iftrue \_opinput {f-\_famname.opm}% + \_else + \_tryloadfamslocal + \_edef\_famfile{\_trycs{_famf:\_famname}{}}% + \_ifx\_famfile\_empty \_listfamnames + \_else \_opinput {\_famfile.opm}% + \_fi\_fi +} +\_def\_tryloadfamslocal{% + \_isfile {fams-local.opm}\_iftrue + \_opinput {fams-local.opm}\_famfrom={}% + \_fi + \_let \_tryloadfamslocal=\_relax % need not to load fams-local.opm twice +} +\_def\_listfamnames {% + \_wterm{===== List of font families ======} + \_begingroup + \_let\_famtext=\_wterm + \_def\_faminfo [##1]##2##3##4{% + \_wterm{ \_space\_noexpand\fontfam [##1] -- ##2}% + \_let\_famalias=\_famaliasA}% + \_opinput {fams-ini.opm}% + \_isfile {fams-local.opm}\_iftrue \_opinput {fams-local.opm}\_fi + \_message{^^J}% + \_endgroup +} +\_def\_famaliasA{\_message{ \_space\_space\_space\_space -- alias:} + \_def\_famalias[##1]{\_message{[##1]}}\_famalias +} +\_public \fontfam ; + + \_doc ----------------------------- + When the `fams-ini.opm` or `fams-local.opm` files are read then we need + to save only a mapping from family names or alias names to the font family file + names. All other information is ignored in this case. But if these files + are read by the `\_listfamnames` macro or when printing a catalog then more + information is used and printed.\nl + \`\_famtext` does nothing or prints the text on the terminal. + \nl + \`\_faminfo` `[<Family Name>] {<comments>} {<file-name>} {<mod-plus-vars>}` + does\nl `\_def \_famf:<familyname> {<file-name>}` or prints information on + the terminal. + \nl + \`\_famalias` `[<Family Alias>]` does `\def \_famf:<familyalias> {<file-name>}` + where `<file-name>` is stored from the previous `\_faminfo` command. Or + prints information on the terminal. + \nl + \`\_famfrom` declares type foundry or owner or designer of the font family. + It can be used in `fams-ini.opm` or `fams-local.opm` and it is printed + in the font catalog. + \_cod ----------------------------- + +\_def\_famtext #1{} +\_def\_faminfo [#1]#2#3#4{% + \_lowercase{\_edef\_tmp{\_ea\_removespaces #1 {} }}% + \_sdef{_famf:\_tmp}{#3}% + \_def\_famfile{#3}% +} +\_def\_famalias [#1]{% + \_lowercase{\_edef\_tmpa{\_ea\_removespaces #1 {} }}% + \_sdef{_famf:\_tmpa\_ea}\_ea{\_famfile}% +} +\_newtoks\_famfrom +\_input fams-ini.opm +\_let\_famfile=\_undefined +\_famfrom={} + + \_doc ----------------------------- + When the \^`\fontfam``[catalog]` is used then the file + `fonts-catalog.opm` is read. The macro \^`\_faminfo` is redefined here + in order to print catalog samples of all declared modifiers/variant + pairs. The user can declare different samples and different behavior of + the catalog, see the end of catalog listing for more information. + The default parameters + \`\catalogsample`, \`\catalogmathsample`, \`\catalogonly` and + \`\catalogexclude` of the catalog are declared here. + \_cod ----------------------------- + +\_newtoks \_catalogsample +\_newtoks \_catalogmathsample +\_newtoks \_catalogonly +\_newtoks \_catalogexclude +\_catalogsample={ABCDabcd Qsty fi fl áéíóúüů řžč ÁÉÍÓÚ ŘŽČ 0123456789} + +\_public \catalogonly \catalogexclude \catalogsample \catalogmathsample ; + + \_doc ----------------------------- + The font features are managed in the \`\_fontfeatures` macro. + They have their implicit values saved in the \`\_defaultfontfeatures` + and the \`\setff` `{<features>}` + can add next font features. If there is the same font feature as the newly + added one then the old value is removed from the `\_fontfeatures` list. + \_cod ----------------------------- + +\_def \_defaultfontfeatures {+tlig;} +\_def \_setff #1{% + \_ifx^#1^\_let \_fontfeatures=\_defaultfontfeatures + \_else \_edef\_fontfeatures{\_fontfeatures #1;}\_fi + \_reloading +} +\_setff {} % default font features: +tlig; +\_def\_removefeature #1{% + \_isinlist\_fontfeatures{#1}\_iftrue + \_def\_tmp ##1#1##2;##3\_relax{\_def\_fontfeatures{##1##3}}% + \_ea \_tmp \_fontfeatures \_relax + \_fi +} +\_public \setff ; + + \_doc ----------------------------- + The \`\setfontcolor` and \`\setletterspace` are macros based on the + special font features provided by \LuaTeX/ (and by \XeTeX/ too but it is not + our business). The \`\setwordspace` recalulates the `\fontdimen2,3,4` + of the font using the \`\setwsp` macro which is used by the + \^`\_doresizeunifont` macro. It activates a dummy font feature `+Ws` too in + order the font is reloded by the `\font` primitive (with independent + `\fontdimen` registers). + \_cod ----------------------------- + +\_def\_savedfontcolor{} +\_def\_savedletterspace{} +\_def\_savedwsp{} + +\_def \_setfontcolor #1{\_removefeature{color=}% + \_edef\_tmp{\_calculatefontcolor{#1}}% + \_ifx\_tmp\_empty \_else \_edef\_fontfeatures{\_fontfeatures color=\_tmp;}\_fi + \_reloading +} +\_def \_setletterspace #1{\_removefeature{letterspace=}% + \_if^#1^\_else \_edef\_fontfeatures{\_fontfeatures letterspace=#1;}\_fi + \_reloading +} +\_def \_setwordspace #1{% + \_if^#1^\_def\_setwsp##1{}\_removefeature{+Ws}% + \_else \_def\_setwsp{\_setwspA{#1}}\_setff{+Ws}\_fi + \_reloading +} +\_def\_setwsp #1{} +\_def\_setwspA #1#2{\_fontdimen2#2=#1\_fontdimen2#2% + \_fontdimen3#2=#1\_fontdimen3#2\_fontdimen4#2=#1\_fontdimen4#2} + +\_def\_calculatefontcolor#1{\_trycs{_fc:#1}{#1}} % you can define more smart macro ... +\_sdef{_fc:red}{FF0000FF} \_sdef{_fc:green}{00FF00FF} \_sdef{_fc:blue}{0000FFFF} +\_sdef{_fc:yellow}{FFFF00FF} \_sdef{_fc:cyan}{00FFFFFF} \_sdef{_fc:magenta}{FF00FFFF} +\_sdef{_fc:white}{FFFFFFFF} \_sdef{_fc:grey}{00000080} \_sdef{_fc:lgrey}{00000025} +\_sdef{_fc:black}{} % ... you can declare more colors... + +\_public \setfontcolor \setletterspace \setwordspace ; + +\_endcode %--------------------------------------------------- + + +\sec[fontsystem] The Font Selection System +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +The basic principles of the Font Selection System used in \OpTeX/ +was documented in the section~\ref[fontfam]. + +\secc Terminology + +We distinguish between +\begitems +* {\em font switchers}, they are declared by the `\font` primitive or by + \^`\fontlet` or \~`\fontdef` macros, they select given font. +* {\em variant selectors}, there are four basic variant selectors + \^`\rm`, \^`\bf`, \^`\it`, \^`\bi`, there is a special selector \^`\currvar`. + More variant selectors can be declared by the \~`\famvardef` macro. + They select the font depending on the given variant and on the {\em font context} + (i.e.\ on current family and on more features given by font modifiers). + In addition, \OpTeX/ defines \~`\tt` as variant selector + independent of chosen font family. It selects typewriter-like font. +* {\em font modifiers} are declared in a family (`\cond`, `\caps`) or are + \"build in" (\^`\setfontsize``{<size spec>}`, \~`\setff{<features>}`). + They do appropriate change in the {\em font context} but do not select + the font. +* {\em family selectors} (for example `\Termes`, `\LMfonts`), + they are declared typically in the {\em font family files}. + They enable to switch between font families, they do appropriate + change in the {\em font context} but do not select + the font. +\enditems + +These commands set their values locally. When the \TeX/ group is +left then the selected font and the {\em font context} are returned back to the values +used when the group was opened. They have the following features: + +The {\em font context} is a set of macro values that will affect the +selection of real font when the variant selector is processed. It includes the +value of {\em current family}, current font size, and +more values stored by font modifiers. + +The {\em family context} is the current family value stored in the font +context. The variant selectors declared by \~`\famvardef` and +font modifiers declared by \~`\moddef` are dependent on the {\em family context}. +They can have the same names but different behavior in different families. + +The fonts registered in \OpTeX/ have their macros in the {\em font family files}, +each family is declared in one font family file with the name `f-famname.opm`. +All families are collected in `fams-ini.opm` and users can give more +declarations in the file `fams-local.opm`. + +\secc Font families, selecting fonts + +The \^`\fontfam` `[<Font Family>]` opens the relevant font family file where +the `<Font Family>` is declared. The family selector is defined here by rules +described in the section~\ref[fontfamfiles]. Font modifiers and variant +selectors may be declared here. +The loaded family is set as current and `\rm` variant selector is processed. + +The available declared font modifiers and declared variant selectors are +listed in the log file when the font family is load. Or you can print +`\fontfam[catalog]` to show available font modifiers and variant selectors. + +The font modifiers can be independent, like `\cond` and `\light`. They can +be arbitrarily combined (in arbitrary order) and if the font family disposes +of all such sub-variants then the desired font is selected (after variant +selector is used). On the other hand, there are font modifiers that negates +the previous font modifier, for example: `\cond`, `\extend`. You can reset +all modifiers to their initial value by the \^`\resetmod` command. + +You can open more font families by more \^`\fontfam` commands. Then the +general method to selecting the individual font is: + +\begtt \catcode`\<=13 +<family selector> <font modifiers> <variant selector> +\endtt +For example: +\begtt +\fontfam [Heros] % Heros family is active here, default \rm variant. +\fontfam [Termes] % Termes family is active here, default \rm variant. +{\Heros \caps \cond \it The caps+condensed italics in Heros family is here.} +The Termes roman is here. +\endtt + +There is one special command \^`\currvar` which acts as a variant selector. +It keeps the current variant and the font of such variant is +reloaded with respect to the current font context by the previously given family +selector and font modifiers. + +You can use the \^`\setfontsize` `{<sizespec>}` command in the same sense as +other font modifiers. It saves information about font size to the font +context. See section~\ref[setfontsize]. Example: + +\begtt +\rm default size \setfontsize{at14pt}\rm here is 14pt size \it italic is +in 14pt size too \bf bold too. +\endtt + +A much more comfortable way to resize fonts is using OPmac-like commands +\~`\typosize` and \~`\typoscale`. +These commands prepare the right sizes for math +fonts too and they re-calculate many internal parameters like `\baselineskip`. +See section~\ref[opmac-fonts] for more information. + + +\secc Math Fonts +%--------------- + +Most font families are connected with a preferred Unicode-math font. This +Unicode-math is activated when the font family is loaded. If you don't prefer +this and you are satisfied with 8bit math CM+AMS fonts preloaded in the +\OpTeX/ format then you can use command \^`\noloadmath` before you load a first +font family. + +If you want to use your specially selected Unicode-math font then use +\^`\loadmath` `{[<font_file>]}` or \^`\loadmath` `{<font_name>}` before first +`\fontfam` is used. + + +\secc[fontcommands] Declaring font commands +%---------------------------- + +Font commands can be font switches, variant selectors, font modifiers, +family selectors and defined font macros doing something with fonts. + +\begitems +* Font switches can be decared by `\font` primitive (see + section~\ref[fontprimitive]) or by \^`\fontlet` command (see + section~\ref[fontlet]) or by \~`\fontdef` command (see + sections~\ref[fontdef2] and~\ref[fontdef]). + When the font switches are used then they select the given font independently + of the current font context. They can be used + in `\output` routine (for example) because we need to set fixed fonts + in headers and footers. +* Variant selectors are \^`\rm`, \^`\bf`, \^`\it`, \^`\bi`, \~`\tt` and \^`\currvar`. More + variant selectors can be declared by \~`\famvardef` command. They select a + font dependent on the current font context, see section~\ref[famvardef]. + The `\tt` selector is documented in section~\ref[tt]. +* Font modifiers are \"build in" or declared by \~`\moddef` command. + They do modifications in the font context but don't select any font. + \begitems + * \"build-in" font modifiers are \^`\setfontsize` (see + section~\ref[setfontsize]), \~`\setff` (see section~\ref[setff]), + \~`\setfontcolor`, \~`\setletterspace` and \~`\setwordspace` + (see section~\ref[specff]). They are independent of font family. + * Font modifiers declared by \~`\moddef` depend on the font family and they + are typically declared in font family files, see + section~\ref[fontfamfiles]. + \enditems +* Family selectors set the given + font family as current and re-set data used by the family-dependent font + modifiers to initial values and to the currently used modifiers. + They are declared in font family files + by \~`\_famdecl` macro, see section~\ref[fontfamfiles]. +* Font macros can be defined arbitrarily by `\def` primitive by users. + See an example in section~\ref[fontmacros]. +\enditems + +All declaration commands mentioned here: `\font`, `\fontlet`, `\fontdef`, `\famvardef`, +`\moddef`, `\_famdecl` and `\def` make local assignment. + +\secc[fontdef2] The `\fontdef` declarator in detail + +The general format for \^`\fontdef` usage is +\begtt \catcode`\<=13 +\fontdef\<font switch> {\<family selector> <font modifiers> \<variant selector>} +\endtt +% +where `\<family selector>` and `<font modifiers>` are optional and +`\<variant selector>` is mandatory. + +The \^`\fontdef` does the following steps. +It pushes the current font context to a stack, it does modifications of the font +context by given `\<family selector>` and/or `<font modifiers>` and it +finds the real font by `\<variant selector>`. This font is not selected but +it is assigned to the declared `\<font switch>` (like `\font` primitive does +it). Finally, `\fontdef` pops the font context stack, so the current +font context is the same as it was before `\fontdef` is used. + +More about `\fontdef` command including examples is written in +section~\ref[fontdef]. + + +\secc[famvardef] The `\famvardef` declarator + +You can declare a new variant selector by the \^`\famvardef` macro. This +macro has similar syntax as \^`\fontdef`: +\begtt \catcode`\<=13 +\famvardef\<new variant selector> {\<family selector> <font modifiers> \<variant selector>} +\endtt +% +where `\<family selector>` and `<font modifiers>` are optional and +`\<variant selector>` is mandatory. +The `\<new variant selector>` should be used in the same sense as `\rm`, +`\bf` etc. It can be used as the final command in next +\^`\fontdef` or \^`\famvardef` declarators +too. When the `\<new variant selector>` is used in the normal text then it does +the following steps: pushes current font context to a stack, modifies font +context by declared `\<family selector>` and/or `<font modifiers>`, +runs following `\<variant selector>`. +This last one selects a real font. Then pops the font context stack. +The new font is selected but the font context has its original values. +This is main difference between `\famvardef\foo{...}` and `\def\foo{...}`. + +Moreover, the \^`\famvardef` creates the `\<new variant selector>` family dependent. +When the selector is used in another family context than it is defined then a warning is +printed on the terminal \"<var selector> is undeclared in the current family" +and nothing happens. But you can declare the same variant selector by +\^`\famvardef` macro in the context of a new family. Then the same command +may do different work depending on the current font family. + +Suppose that the selected font family provides the font modifier `\medium` for +mediate weight of fonts. Then you can declare: +\begtt +\famvardef \mf {\medium\rm} +\famvardef \mi {\medium\it} +\endtt +Now, you can use six independent variant selectors `\rm`, `\bf`, `\it`, +`\bi`, `\mf` and `\mi` in the selected font family. + +A `\<family selector>` can be written before `<font modifiers>` in the +`\famvardef` parameter. Then the `\<new variant selector>` is declared in +the current family but it can use fonts from another family represented by +the `\<family selector>`. + +When you are mixing fonts from more families then you probably run +into a problem with incompatible ex-heights. This problem can be solved using +\^`\setfontsize` and \^`\famvardef` macros: +\begtt +\fontfam[Heros] \fontfam[Termes] + +\def\exhcorr{\setfontsize{mag.88}} +\famvardef\rmsans{\Heros\exhcorr\rm} +\famvardef\itsans{\Heros\exhcorr\it} + +Compare ex-height of Termes \rmsans with Heros \rm and Termes. +\endtt + +The variant selectors (declared by \~`\famvardef`) or font +modifiers (declared by \~`\moddef`) are (typically) control sequences in user name +space (`\mf`, `\caps`). They are most often declared in font family files and +they are loaded by \^`\fontfam`. A conflict with such names in +user namespace can be here. For example: if `\mf` is defined by a user and then +`\fontfam[Roboto]` is used then `\famvardef\mf` is performed for Roboto +family and the original meaning of `\mf` is lost. But \OpTeX/ prints warning +about it. There are two cases: + +\begtt +\def\mf{Metafont} +\fontfam[Roboto] % warning: "The \mf is redefined by \famvardef" is printed + or +\fontfam[Roboto] +\def\mf{Metafont} % \mf variant selector redefined by user, we suppose that \mf + % is used only in the meaning of "Metafont" in the document. +\endtt + +\secc[tt] The `\tt` variant selector + +\^`\tt` is an additional special variant selector which is defined as \"select typewriter +font independently of the current font family". By default, the typewriter font-face +from LatinModern font family is used. + +The \^`\tt` variant selector is used in \OpTeX/ internal macros +\^`\_ttfont` (verbatim texts) and \^`\_urlfont` (printing URL's). + +You can redefine the behavior of `\tt` by \^`\famvardef`. For example: + +\begtt +\fontfam[Cursor] +\fontfam[Heros] +\fontfam[Termes] +\famvardef\tt{\Cursor\setff{-liga;-tlig}\rm} + +Test in Termes: {\tt text}. {\Heros\rm Test in Heros: {\tt text}}. +Test in URL \url{http://something.org}. +\endtt +% +You can see that `\tt` stay family independent. This is a special feature only +for `\tt` selector. New definition is used in \^`\_ttfont` and \^`\_urlfont` too. +It is recommended to use `\setff{-liga;-tlig}` to suppress the +ligatures in typewriter fonts. + +If Unicode math font is loaded then the `\tt` macro selects typewriter +font-face in math mode too. This face +is selected from used Unicode math font and it is independent of +`\famvardef\tt` declaration. + + +\secc[fontmacros] Font commands defined by `\def` + +Such font commands can be used as fonts selectors for titles, footnotes, +citations, etc. Users can define them. + +The following example shows how to define a \"title-font selector". +Titles are not only bigger but they are typically in the bold variant. When a user puts +`{\it...}` into the title text then he/she expects bold italic here, no normal +italic. You can remember the great song by John Lennon \"Let It Be" and +define: + +\begtt +\def\titlefont{\setfontsize{at14pt}\bf \let\it\bi} +... +{\titlefont Title in bold 14pt font and {\it bold 14pt italics} too} +\endtt + +\OpTeX/ defines similar internal commands \^`\_titfont`, \^`\_chapfont`, \^`\_secfont` and +\^`\_seccfont`, see section~\ref[sections]. The commands \^`\typosize` and +\^`\boldify` are used in these macros. They set the math fonts to given size too and they +are defined in section~\ref[opmac-fonts]. + + +\secc[setff] Modifying font features +%---------------------------- + +Each OTF font provides \"font features". You can list these font features +by `otfinfo -f font.otf`. For example, LinLibertine fonts provide `frac` font +feature. If it is active then fractions like 1/2 are printed in a special +form. + +The font features are part of the font context data. +The macro \^`\setff` `{<feature>}` acts like family independent font modifier and +prepares a new <feature>. You must use a variant selector in order to +reinitialize the font with the new font feature. For example +\^`\setff``{+frac}\rm` or \^`\setff``{+frac}`\^`\currvar`. You can declare a new variant +selector too: + +\begtt +\fontfam[LinLibertine] +\famvardef \fraclig {\setff{+frac}\currvar} +Compare 1/2 or 1/10 \fraclig to 1/2 or 1/10. +\endtt + +If the used font does not support the given font feature then the font is reloaded +without warning nor error, silently. The font feature is not activated. + +The `onum` font feature (old-style digits) is connected to `\caps` macro for +Caps+SmallCaps variant in \OpTeX/ font family files. So you need not +create a new modifier, just use `{\caps`\^`\currvar`` 012345}`. + + +\secc[specff] Special font modifiers +%--------------------------- + +Despite the font modifiers declared in the font family file (and dependent on +the font family), we have following font modifiers (independent of font +family): + +\begtt \catcode`\<=13 +\setfontsize{<sizespec>} % sets the font size +\setff{<font feature>} % adds the font feature +\setfontcolor{<color>} % sets font color +\setletterspace{<number>} % sets letter spacing +\setwordspace{<scaling>} % modifies word spacing +\endtt + +The \^`\setfontsize` command is described in the section \ref[setfontsize]. +The \^`\setff` command was described in previous subsection. + +\^`\setfontcolor` `{<color>}` specifies the color and the opacity of the text. +The <color> parameter should be in the hexadecimal format of four bytes +`<red><green><blue><opacity>`, for example `FF0080FF` means full red, zero +green, half blue and full opacity. You can use names `red`, `green`, `blue`, +`yellow`, `cyan`, `magenta`, `white`, `grey`, `lgrey` (without the backslash) +instead of the hexadecimal specification. +The empty parameter `<color>` means default black color. + +These colors of fonts are implemented using \LuaTeX/ internal font feature. This +is different approach than using colors in section \ref[colors]. + +\^`\setletterspace` `{<number>}` specifies the letter spacing of the font. The +`<number>` is a decimal number without unit. The unit is supposed as 1/100 of +the font size. I.e. `2.5` means 0.25 pt when the font is at 10 pt size. The +empty parameter `<number>` means no letter spacing which is the default. + +\^`\setwordspace` `{<scaling>}` scales the default interword space (defined in the +font) and its stretching and shrinking parameters by given `<scaling>` +factor. For example `\setwordspace{2.5}` multiplies interword space by 2.5. + +If you need another font transformations, you can use `\setff` +with following font features provided by Lua\TeX/: + +\begtt +\setff{embolden=1.5}\rm % font is bolder because outline has nonzero width +\setff{slant=0.2}\rm % font is slanted by a linear transformation +\setff{extend=1.2}\rm % font is extended by a linear transformation. +\setff{colr=yes}\rm % if the font includes colored characters, use colors +\setff{upper}\rm % to uppercase (lower=lowecase) conversion at font level +\endtt + +Use font transformations mentioned above and \^`\setletterspace`, +\^`\setwordspace` with care. The best setting of these values is the default +setting in every font, of course. If you really need to set a different +letter spacing then it is strongly recommended to add `\setff{-liga}` +to disable ligatures. And setting a positive letter spacing probably +needs to scale interword spacing too. + +All mentioned font modifiers (except for `\setfontsize`) work only +with Unicode fonts loaded by \^`\fontfam`. + +\secc[fontfamfiles] How to create the font family file +%------------------------------------------------------ + +\printdoctail f-heros.opm + +\printdoctail f-lmfonts.opm + +\secc How to register the font family in the Font Selection System +%--------------------------------------------------------------- + +\printdoctail fams-ini.opm + +\secc[exfont] Notices about extension of `\font` primitive +%--------------------------------------------------------- + +Unicode fonts are loaded by extended `\font` primitive. This extension is +not activated in \OpTeX/ by default, \^`\initunifonts` macro activates it. +You need not use \^`\initunifonts` explicitly if \^`\fontfam` macro is +used because \^`\fontfam` runs it internally. + +The \^`\initunifonts` loads the Lua code from the Luaotfload package which +implements the `\font` primitive extension. See its +documentation `luaotfload-latex.pdf` for information about +all possibilities of extended `\font` primitive. + +The \OpTeX/ format is initialized by `luatex` engine by default but +you can initialize it by `luahbtex` engine too. Then the harfbuzz library is +ready to use for font rendering as an alternative to build-in font renderer +from Luaotfload. The harfbuzz library gives more features for rendering +Indic and Arabic scripts. But it is not used as default, you need to specify +`mode=harf` in the fontfeatures field when `\font` is used. Moreover, when +`mode=harf` is used, then you must specify `script` too. For example + +\begtt +\font\devafont=[NotoSansDevanagari-Regular]:mode=harf;script=dev2 +\endtt +% +If the `luahbtex` engine is not used then `mode=harf` is ignored. See +Luaotfload documentation for more information. + +\endinput + +2021-02-25 \_ttunifont introduced +2021-01-27 lua hack (print function) removed because luaotfload 3.17 removes bug. +2020-12-12 \_modlist added, doc improved +2020-04-18 \_tryloadfamslocal introduced + \_fontdecl -> \_famdecl with different concept +2020-03-18 released diff --git a/Master/texmf-dist/tex/optex/base/graphics.opm b/Master/texmf-dist/tex/optex/base/graphics.opm new file mode 100644 index 00000000000..afff1c12843 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/graphics.opm @@ -0,0 +1,445 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \inspic {Graphics <2020-04-12>} % preloaded in format + + \_doc ----------------------------- + \`\inspic` accepts old syntax `\inspic <filename><space>` + or new syntax `\inspic{<filename>}`. So, we need to define + two auxiliary macros \`\_inspicA` and \`\_inspicB`. + + You can include more `\pdfximage` parameters (like `page<number>`) + in the \`\_picparams` macro. + + All `\inspic` macros are surrounded in `\hbox` in order user can + write `\moveright\inspic ...` or something similar. + \_cod ----------------------------- + +\_def\_inspic{\_hbox\_bgroup\_isnextchar\_bgroup\_inspicB\_inspicA} +\_def\_inspicA #1 {\_inspicB {#1}} +\_def\_inspicB #1{% + \_pdfximage \_ifdim\_picwidth=\_zo \_else width\_picwidth\_fi + \_ifdim\_picheight=\_zo \_else height\_picheight\_fi + \_picparams {\_the\_picdir#1}% + \_pdfrefximage\_pdflastximage\_egroup} + +\_def\_picparams{} + +\_public \inspic ; + + \_doc ----------------------------- + Inkscape can save a picture to `*.pdf` file and labels for the picture + to `*.pdf_tex` file. The second file is in \LaTeX/ format (unfortunately) + and it is intended to read immediately after `*.pdf` is included + in order to place labels of this picture in the same font as the document is printed. + We need to read this \LaTeX/ file by plain \TeX/ macros when \`\inkinspic` is used. + These macros are stored in the \`\_inkdefs` tokens list and it is used + locally in the group. The solution is borrowed from OPmac trick 0032. + \_cod ----------------------------- + +\_def\_inkinspic{\_hbox\_bgroup\_isnextchar\_bgroup\_inkinspicB\_inkinspicA} +\_def\_inkinspicA #1 {\_inkinspicB {#1}} +\_def\_inkinspicB #1{% + \_ifdim\_picwidth=0pt \_setbox0=\_hbox{\_inspic{#1}}\_picwidth=\_wd0 \_fi + \_the\_inkdefs + \_opinput {\_the\_picdir #1_tex}% file with labels + \_egroup} + +\_newtoks\_inkdefs \_inkdefs={% + \_def\makeatletter#1\makeatother{}% + \_def\includegraphics[#1]#2{\_inkscanpage#1,page=,\_end \_inspic{#2}\_hss}% + \_def\_inkscanpage#1page=#2,#3\_end{\_ifx,#2,\_else\_def\_picparams{page#2}\_fi}% + \_def\put(#1,#2)#3{\_nointerlineskip\_vbox to\_zo{\_vss\_hbox to\_zo{\_kern#1\_picwidth + \_pdfsave\_hbox to\_zo{#3}\_pdfrestore\_hss}\_kern#2\_picwidth}}% + \_def\begin#1{\_csname _begin#1\_endcsname}% + \_def\_beginpicture(#1,#2){\_vbox\_bgroup + \_hbox to\_picwidth{}\_kern#2\_picwidth \_def\end##1{\_egroup}}% + \_def\_begintabular[#1]#2#3\end#4{% + \_vtop{\_def\\{\_cr}\_tabiteml{}\_tabitemr{}\_table{#2}{#3}}}% + \_def\color[#1]#2{\_scancolor #2,}% + \_def\_scancolor#1,#2,#3,{\_pdfliteral{#1 #2 #3 rg}}% + \_def\makebox(#1)[#2]#3{\_hbox to\_zo{\_csname _mbx:#2\_endcsname{#3}}}% + \_sdef{_mbx:lb}#1{#1\_hss}\_sdef{_mbx:rb}#1{\_hss#1}\_sdef{_mbx:b}#1{\_hss#1\_hss}% + \_sdef{_mbx:lt}#1{#1\_hss}\_sdef{_mbx:rt}#1{\_hss#1}\_sdef{_mbx:t}#1{\_hss#1\_hss}% + \_def\rotatebox#1#2{\_pdfrotate{#1}#2}% + \_def\lineheight#1{}% + \_def\setlength#1#2{}% +} +\_public \inkinspic ; + + \_doc ---------------------------- + \`\pdfscale``{<x-scale>}{<y-scale>}` and \`\pdfrotate``{<degrees>}` + macros are implemented by `\pdfsetmatrix` + primitive. We need to know the values of sin, cos function in + the `\pdfrotate`. We use Lua code for this. + \_cod ---------------------------- + +\_def\_pdfscale#1#2{\_pdfsetmatrix{#1 0 0 #2}} + +\_def\_gonfunc#1#2{% + \_directlua{tex.print(string.format('\_pcent.4f',math.#1(3.14159265*(#2)/180)))}% +} +\_def\_sin{\_gonfunc{sin}} +\_def\_cos{\_gonfunc{cos}} + +\_def\_pdfrotate#1{\_pdfsetmatrix{\_cos{#1} \_sin{#1} \_sin{(#1)-180} \_cos{#1}}} + +\_public \pdfscale \pdfrotate ; + + \_doc ----------------------------- + The \`\transformbox``{<transformation>}{<text>}` + is copied from OPmac trick 0046.\nl + The \`\rotbox``{<degrees>}{<text>}` is a combination of + `\rotsimple` from OPmac trick 0101 and the `\transformbox`. + Note, that `\rotbox{-90}` puts the rotated text to the height of the outer + box (depth is zero) because code from `\rotsimple` is processed. + But `\rotbox{-90.0}` puts the rotated text to + the depth of the outer box (height is zero) because `\transformbox` is + processed. + \_cod ----------------------------- + +\_def\_multiplyMxV #1 #2 #3 #4 {% matrix * (vvalX, vvalY) + \_tmpdim = #1\_vvalX \_advance\_tmpdim by #3\_vvalY + \_vvalY = #4\_vvalY \_advance\_vvalY by #2\_vvalX + \_vvalX = \_tmpdim +} +\_def\_multiplyMxM #1 #2 #3 #4 {% currmatrix := currmatrix * matrix + \_vvalX=#1pt \_vvalY=#2pt \_ea\_multiplyMxV \_currmatrix + \_edef\_tmpb{\_ea\_ignorept\_the\_vvalX\_space \_ea\_ignorept\_the\_vvalY}% + \_vvalX=#3pt \_vvalY=#4pt \_ea\_multiplyMxV \_currmatrix + \_edef\_currmatrix{\_tmpb\_space + \_ea\_ignorept\_the\_vvalX\_space \_ea\_ignorept\_the\_vvalY\_space}% +} +\_def\_transformbox#1#2{\_hbox{\_setbox0=\_hbox{{#2}}% + \_dimendef\_vvalX 11 \_dimendef\_vvalY 12 % we use these variables + \_dimendef\_newHt 13 \_dimendef\_newDp 14 % only in this group + \_dimendef\_newLt 15 \_dimendef\_newRt 16 + \_preptransform{#1}% + \_kern-\_newLt \_vrule height\_newHt depth\_newDp width\_zo + \_setbox0=\_hbox{\_box0}\_ht0=\_zo \_dp0=\_zo + \_pdfsave#1\_rlap{\_box0}\_pdfrestore \_kern\_newRt}% +} +\_def\_preptransform #1{\_def\_currmatrix{1 0 0 1 }% + \_def\_pdfsetmatrix##1{\_edef\_tmpb{##1 }\_ea\_multiplyMxM \_tmpb\_unskip}% + \_let\pdfsetmatrix=\_pdfsetmatrix #1% + \_setnewHtDp 0pt \_ht0 \_setnewHtDp 0pt -\_dp0 + \_setnewHtDp \_wd0 \_ht0 \_setnewHtDp \_wd0 -\_dp0 + \_protected\_def \_pdfsetmatrix {\_pdfextension setmatrix}% + \_let\pdfsetmatrix=\_pdfsetmatrix +} +\_def\_setnewHtDp #1 #2 {% + \_vvalX=#1\_relax \_vvalY=#2\_relax \_ea\_multiplyMxV \_currmatrix + \_ifdim\_vvalX<\_newLt \_newLt=\_vvalX \_fi \_ifdim\_vvalX>\_newRt \_newRt=\_vvalX \_fi + \_ifdim\_vvalY>\_newHt \_newHt=\_vvalY \_fi \_ifdim-\_vvalY>\_newDp \_newDp=-\_vvalY \_fi +} + +\_def\_rotbox#1#2{% + \_isequal{90}{#1}\_iftrue \_rotboxA{#1}{\_kern\_ht0 \_tmpdim=\_dp0}{\_vfill}{#2}% + \_else \_isequal{-90}{#1}\_iftrue \_rotboxA{#1}{\_kern\_dp0 \_tmpdim=\_ht0}{}{#2}% + \_else \_transformbox{\_pdfrotate{#1}}{#2}% + \_fi \_fi +} +\_def\_rotboxA #1#2#3#4{\_hbox{\_setbox0=\_hbox{{#4}}#2% + \_vbox to\_wd0{#3\_wd0=\_zo \_dp0=\_zo \_ht0=\_zo + \_pdfsave\_pdfrotate{#1}\_box0\_pdfrestore\vfil}% + \_kern\_tmpdim +}} +\_public \transformbox \rotbox ; + + \_doc --------------------------- + \`\_scantwodimens` scans two objects with the syntactic rule `<dimen>` + and returns `{<number>}{<number>}` in `sp` unit. + \nl + \`\puttext` `<right> <up>{<text>}` puts the `<text>` to desired place: + From current point moves <down> and <right>, puts the <text> and returns + back. The current point is unchanged after this macro ends. + \nl + \`\putpic` `<right> <up> <width> <height> {<image-file>}` + does `\puttext` with the image scaled to desired <width> and <height>. + If <with> or <height> is zero, natural dimension is used. + The \`\nospec` is a shortcut to such a natural dimension. + \nl + \`\backgroundpic``{<image-file>}` puts the image to + the background of each page. It is used in the \~`\slides` style, for example. + \_cod --------------------------- + +\_def\_scantwodimens{% + \_directlua{tex.print(string.format('{\_pcent d}{\_pcent d}', + token.scan_dimen(),token.scan_dimen()))}% +} + +\_def\_puttext{\_ea\_ea\_ea\_puttextA\_scantwodimens} +\_def\_puttextA#1#2#3{{\_setbox0=\_hbox{{#3}}\_dimen1=#1sp \_dimen2=#2sp \_puttextB}} +\_def\_puttextB{% + \_ifvmode + \_ifdim\_prevdepth>\_zo \_vskip-\_prevdepth \_relax \_fi + \_nointerlineskip + \_fi + \_wd0=\_zo \_ht0=\_zo \_dp0=\_zo + \_vbox to\_zo{\_kern-\_dimen2 \_hbox to\_zo{\_kern\_dimen1 \_box0\_hss}\_vss}} + +\_def\_putpic{\_ea\_ea\_ea\_putpicA\_scantwodimens} +\_def\_putpicA#1#2{\_dimen1=#1sp \_dimen2=#2sp \_ea\_ea\_ea\_putpicB\_scantwodimens} +\_def\_putpicB#1#2#3{{\_setbox0=\_hbox{\_picwidth=#1sp \_picheight=#2sp \_inspic{#3}}\_puttextB}} + +\_newbox\_bgbox +\_def\_backgroundpic#1{% + \_setbox\_bgbox=\_hbox{\_picwidth=\_pdfpagewidth \_picheight=\_pdfpageheight \_inspic{#1}}% + \_pgbackground={\_copy\_bgbox} +} +\_def\nospec{0pt} +\_public \puttext \putpic \backgroundpic ; + + \_doc ----------------------------- + \`\_circle``{<x>}{<y>}` creates an ellipse with `<x>` axis and `<y>` axis. + The origin is in the center. + \nl + \`\_oval``{<x>}{<y>}{<roundness>}` creates an oval with `<x>`, `<y>` size and with + the given `<roundness>`. The real size is bigger by 2`<roundness>`. The + origin is at the left bottom corner. + \nl + \`\_mv``{<x>}{<y>}{<curve>}` moves current point to `<x>`, `<y>`, creates the + `<curve>` and returns the current point back. + All these macros are fully expandable and they can be used in the + `\pdfliteral` argument. + \_cod ----------------------------- + +\def\_circle#1#2{\_expr{.5*(#1)} 0 m + \_expr{.5*(#1)} \_expr{.276*(#2)} \_expr{.276*(#1)} \_expr{.5*(#2)} 0 \_expr{.5*(#2)} c + \_expr{-.276*(#1)} \_expr{.5*(#2)} \_expr{-.5*(#1)} \_expr{.276*(#2)} \_expr{-.5*(#1)} 0 c + \_expr{-.5*(#1)} \_expr{-.276*(#2)} \_expr{-.276*(#1)} \_expr{-.5*(#2)} 0 \_expr{-.5*(#2)} c + \_expr{.276*(#1)} \_expr{-.5*(#2)} \_expr{.5*(#1)} \_expr{-.276*(#2)} \_expr{.5*(#1)} 0 c h} + +\def\_oval#1#2#3{0 \_expr{-(#3)} m \_expr{#1} \_expr{-(#3)} l + \_expr{(#1)+.552*(#3)} \_expr{-(#3)} \_expr{(#1)+(#3)} \_expr{-.552*(#3)} + \_expr{(#1)+(#3)} 0 c + \_expr{(#1)+(#3)} \_expr{#2} l + \_expr{(#1)+(#3)} \_expr{(#2)+.552*(#3)} \_expr{(#1)+.552*(#3)} \_expr{(#2)+(#3)} + \_expr{#1} \_expr{(#2)+(#3)} c + 0 \_expr{(#2)+(#3)} l + \_expr{-.552*(#3)} \_expr{(#2)+(#3)} \_expr{-(#3)} \_expr{(#2)+.552*(#3)} + \_expr{-(#3)} \_expr{#2} c + \_expr{-(#3)} 0 l + \_expr{-(#3)} \_expr{-.552*(#3)} \_expr{-.552*(#3)} \_expr{-(#3)} 0 \_expr{-(#3)} c h} + +\def\_mv#1#2#3{1 0 0 1 \_expr{#1} \_expr{#2} cm #3 1 0 0 1 \_expr{-(#1)} \_expr{-(#2)} cm} + + \_doc ----------------------------- + The \`\inoval``{<text>}` is an example of \^`\_oval` usage.\nl + The \`\incircle``{<text>}` is an example of \^`\_circle` usage.\nl + The \`\ratio`, \`\lwidth`, \`\fcolor`, \`\lcolor`, \`\shadow` and \`\overlapmargins` + are parameters, they can be set by user in optional brackets `[...]`. + For example `\fcolor=\Red` does `\_let\_fcolorvalue=\Red` and it means + filling color.\nl + The \`\_setflcolor` uses the \^`\_fillstroke` macro to separate filling + color and drawing color. + \_cod ----------------------------- + +\_newdimen \_lwidth +\_def\_fcolor{\_let\_fcolorvalue} +\_def\_lcolor{\_let\_lcolorvalue} +\_def\_shadow{\_let\_shadowvalue} +\_def\_overlapmargins{\_let\_overlapmarginsvalue} +\_def\_ratio{\_isnextchar ={\_ratioA}{\_ratioA=}} +\_def\_ratioA =#1 {\_def\_ratiovalue{#1}} +\_def\_touppervalue#1{\_ifx#1n\_let#1=N\_fi} + +\_def\_setflcolors#1{% use only in a group + \_def\_setcolor##1{##1}% + \_def\_fillstroke##1##2{##1}% + \_edef#1{\_fcolorvalue}% + \_def\_fillstroke##1##2{##2}% + \_edef#1{#1\_space\_lcolorvalue\_space}% +} +\_optdef\_inoval[]{\_vbox\_bgroup + \_roundness=2pt \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp + \_shadow=N \_overlapmargins=N \_hhkern=0pt \_vvkern=0pt + \_the\_ovalparams \_relax \_the\_opt \_relax + \_touppervalue\_overlapmarginsvalue \_touppervalue\_shadowvalue + \_ifx\_overlapmarginsvalue N% + \_advance\_hsize by-2\_hhkern \_advance\_hsize by-2\_roundness \_fi + \_setbox0=\_hbox\_bgroup\_bgroup \_aftergroup\_inovalA \_kern\_hhkern \_let\_next=% +} +\_def\_inovalA{\_isnextchar\_colorstackpop\_inovalB\_inovalC} +\_def\_inovalB#1{#1\_isnextchar\_colorstackpop\_inovalB\_inovalC} +\_def\_inovalC{\_egroup % of \setbox0=\hbox\bgroup + \_ifdim\_vvkern=\_zo \_else \_ht0=\_dimexpr\_ht0+\_vvkern \_relax + \_dp0=\_dimexpr\_dp0+\_vvkern \_relax \_fi + \_ifdim\_hhkern=\_zo \_else \_wd0=\_dimexpr\_wd0+\_hhkern \_relax \_fi + \_ifx\_overlapmarginsvalue N\_dimen0=\_roundness \_dimen1=\_roundness + \_else \_dimen0=-\_hhkern \_dimen1=-\_vvkern \_fi + \_setflcolors\_tmp + \_hbox{\_kern\_dimen0 + \_vbox to\_zo{\_kern\_dp0 + \_ifx\_shadowvalue N\_else + \_edef\_tmpb{{\_bp{\_wd0+\_lwidth}}{\_bp{\_ht0+\_dp0+\_lwidth}}{\_bp{\_roundness}}}% + \_doshadow\_oval + \_fi + \_pdfliteral{q \_bp{\_lwidth} w \_tmp + \_oval{\_bp{\_wd0}}{\_bp{\_ht0+\_dp0}}{\_bp{\_roundness}} B Q}\_vss}% + \_ht0=\_dimexpr\_ht0+\_dimen1 \_relax \_dp0=\_dimexpr\_dp0+\_dimen1 \_relax + \_box0 + \_kern\_dimen0}% + \_egroup % of \vbox\bgroup +} +\_optdef\_incircle[]{\_vbox\_bgroup + \_ratio=1 \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp + \_shadow=N \_overlapmargins=N \_hhkern=3pt \_vvkern=3pt + \_ea\_the \_ea\_circleparams \_space \_relax + \_ea\_the \_ea\_opt \_space \_relax + \_touppervalue\_overlapmarginsvalue \_touppervalue\_shadowvalue + \_setbox0=\_hbox\_bgroup\_bgroup \_aftergroup\_incircleA \_kern\_hhkern \_let\_next=% +} +\_def\_incircleA {\_isnextchar\_colorstackpop\_incircleB\_incircleC} +\_def\_incircleB #1{#1\_isnextchar\_colorstackpop\_incircleB\_incircleC} +\_def\_incircleC {\_egroup % of \setbox0=\hbox\bgroup + \_wd0=\_dimexpr \_wd0+\_hhkern \_relax + \_ht0=\_dimexpr \_ht0+\_vvkern \_relax \_dp0=\_dimexpr \_dp0+\_vvkern \_relax + \_ifdim \_ratiovalue\_dimexpr \_ht0+\_dp0 > \_wd0 + \_dimen3=\_dimexpr \_ht0+\_dp0 \_relax \_dimen2=\_ratiovalue\_dimen3 + \_else \_dimen2=\_wd0 \_dimen3=\_expr{1/\_ratiovalue}\_dimen2 \_fi + \_setflcolors\_tmp + \_ifx\_overlapmarginsvalue N\_dimen0=\_zo \_dimen1=\_zo + \_else \_dimen0=-\_hhkern \_dimen1=-\_vvkern \_fi + \_hbox{\_kern\_dimen0 + \_ifx\_shadowvalue N\_else + \_edef\_tmpb{{\_bp{\_dimen2+\_lwidth}}{\_bp{\_dimen3+\_lwidth}}{}}% + \_doshadow\_circlet + \_fi + \_pdfliteral{q \_bp{\_lwidth} w \_tmp \_mv{\_bp{.5\_wd0}}{\_bp{(\_ht0-\_dp0)/2}} + {\_circle{\_bp{\_dimen2}}{\_bp{\_dimen3}} B} Q}% + \_ifdim\_dimen1=\_zo \_else + \_ht0=\_dimexpr \_ht0+\_dimen1 \_relax \_dp0=\_dimexpr \_dp0+\_dimen1 \_relax \_fi + \_box0 + \_kern\_dimen0} + \_egroup % of \vbox\bgroup +} +\_def\_circlet#1#2#3{\_circle{#1}{#2}} + +\_public \inoval \incircle \ratio \lwidth \fcolor \lcolor \shadow \overlapmargins ; + + \_doc ----------------------------- + A shadow effect is implemented here. The shadow is equal to the + silhouette of the given path in a gray-transparent color shifted by + \`\_shadowmoveto` vector and with blurred boundary. + A waistline with the width 2*\`\_shadowb` around the boundary is blurred. + The \`\shadowlevels` levels of transparent shapes is used for creating + this effect. The `\shadowlevels+1/2` level is equal to the shifted given path. + \_cod ----------------------------- + +\_def\_shadowlevels{9} % number of layers for blurr effect +\_def\_shadowdarknessA{0.025} % transparency of first shadowlevels/2 layers +\_def\_shadowdarknessB{0.07} % transparency of second half of layers +\_def\_shadowmoveto{1.8 -2.5} % vector defines shifting layer (in bp) +\_def\_shadowb{1} % 2*shadowb = blurring area thickness + + \_doc ----------------------------- + The `\_pdfpageresources` primitive is used to define transparency. + It does not work when used in a box. So, we use it at the beginning of + the output routine. The modification of the output routine is done + using \`\_insertshadowresources` only once when the shadow effect is used first. + \_cod ----------------------------- + +\_def\_insertshadowresources{% + \_global\_addto\_begoutput{\_setshadowresources}% + \_xdef\_setshadowresources{% + \_pdfpageresources{/ExtGState + << + /op1 <</Type /ExtGState /ca \_shadowdarknessA>> + /op2 <</Type /ExtGState /ca \_shadowdarknessB>> + \_morepgresources + >> + }% + }% + \_global\_let\_insertshadowresources=\_relax +} +\_def\_morepgresources{} + + \_doc ----------------------------- + The \`\_doshadow``{<curve>}` does the shadow effect. + \_cod ----------------------------- + +\_def\_doshadow#1{\_vbox{% + \_insertshadowresources + \_tmpnum=\_numexpr (\_shadowlevels-1)/2 \_relax + \_edef\_tmpfin{\_the\_tmpnum}% + \_ifnum\_tmpfin=0 \_def\_shadowb{0}\_def\_shadowstep{0}% + \_else \_edef\_shadowstep{\_expr{\_shadowb/\_tmpfin}}\_fi + \_def\_tmpa##1##2##3{\_def\_tmpb + {#1{##1+2*\_the\_tmpnum*\_shadowstep}{##2+2*\_the\_tmpnum*\_shadowstep}{##3}}}% + \_ea \_tmpa \_tmpb + \_def\_shadowlayer{% + \_ifnum\_tmpnum=0 /op2 gs \_fi + \_tmpb\_space f + \_immediateassignment\_advance\_tmpnum by-1 + \_ifnum-\_tmpfin<\_tmpnum + \_ifx#1\_oval 1 0 0 1 \_shadowstep\_space \_shadowstep\_space cm \_fi + \_ea \_shadowlayer \_fi + }% + \_pdfliteral{q /op1 gs 0 g 1 0 0 1 \_shadowmoveto\_space cm + \_ifx#1\_circlet 1 0 0 1 \_expr{\_bp{.5\_wd0}} \_expr{\_bp{(\_ht0-\_dp0)/2}} cm + \_else 1 0 0 1 -\_shadowb\_space -\_shadowb\_space cm \_fi + \_shadowlayer Q} +}} + + \_doc ----------------------------- + A generic macro \`\_clipinpath``<x> <y> <curve> <text>` declares + a clipping path by the `<curve>` shifted by the `<x>`, `<y>`. The `<text>` is typeset + when such clipping path is active. Dimensions are given by bp without the unit here. + The macros \`\clipinoval` `<x> <y> <width> <height> {<text>}` and + \`\clipincircle` `<x> <y> <width> <height> {<text>}` are defined here. + These macros read normal \TeX/ dimensions in their parameters. + \_cod ----------------------------- + +\_def\_clipinpath#1#2#3#4{% #1=x-pos[bp], #2=y-pos[bp], #3=curve, #4=text + \_hbox{\_setbox0=\_hbox{{#4}}% + \_tmpdim=\_wd0 \_wd0=\_zo + \_pdfliteral{q \_mv{#1}{#2}{#3 W n}}% + \_box0\_pdfliteral{Q}\_kern\_tmpdim + }% +} + +\_def\_clipinoval {\_ea\_ea\_ea\_clipinovalA\_scantwodimens} +\_def\_clipinovalA #1#2{% + \_def\_tmp{{#1/65781.76}{#2/65781.76}}% + \_ea\_ea\_ea\_clipinovalB\_scantwodimens +} +\_def\_clipinovalB{\_ea\_clipinovalC\_tmp} +\_def\_clipinovalC#1#2#3#4{% + \_ea\_clipinpath{#1-(#3/131563.52)+(\_bp{\_roundness})}{#2-(#4/131563.52)+(\_bp{\_roundness})}% + {\_oval{#3/65781.76-(\_bp{2\_roundness})}{#4/65781.76-(\_bp{2\_roundness})}{\_bp{\_roundness}}}% +} +\_def\_clipincircle {\_ea\_ea\_ea\_clipincircleA\_scantwodimens} +\_def\_clipincircleA #1#2{% + \_def\_tmp{{#1/65781.76}{#2/65781.76}}% + \_ea\_ea\_ea\_clipincircleB\_scantwodimens +} +\_def\_clipincircleB#1#2{% + \_ea\_clipinpath\_tmp{\_circle{#1/65781.76}{#2/65781.76}}% +} +\_public \clipinoval \clipincircle ; + + +\_endcode % ------------------------------------- + +The \^`\inspic` is defined by `\pdfximage` and `\pdfrefximage` primitives. +If you want to use one picture more than once in your document, then the +following code is recommended: +\begtt \catcode`\<=13 +\newbox\mypic +\setbox\mypic = \hbox{\picw=3cm \inspic{<picture>}} + +My picture: \copy\mypic, again my picture: \copy\mypic, etc. +\endtt +This code downloads the picture data to the PFD output only once (when +`\setbox` is processed). Each usage of `\copy\mypic` puts only a pointer to +the picture data in the PDF. + +If you want to copy the same picture in different sizes, then choose +a \"basic size" used in `\setbox` and all different sizes can be realized by +the \^`\transformbox{<transformation>}{\copy\mypic}`. + +\_endinput + +2020-12-21: \puttext: \box0 in goup, bugfix +2020-04-12: \_public \clipinoval \clipincircle ; added, bug fixed + diff --git a/Master/texmf-dist/tex/optex/base/hi-syntax.opm b/Master/texmf-dist/tex/optex/base/hi-syntax.opm new file mode 100644 index 00000000000..eb6d747914e --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/hi-syntax.opm @@ -0,0 +1,223 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \hisyntax {Syntax highlithing of verbatim listings <2020-04-04>} % preloaded in format + + \_doc ----------------------------- + The following macros `\replfromto` and `\replthis` manipulate with the + verbatim text which has been read already and stored in the `\_tmpb` macro. + + The \`\replfromto` `{<from>}{<to>}{<what>}` finds first `<from>` then the + first `<to>` following by `<from>` pattern and the + `<text>` between them is packed to `#1`. + Then `<from><text><to>` is replaced by `<what>`. The `<what>` parameter + can use `#1` which is replaced by the `<text>`. + + The `\replfromto` continues by finding next `<from>`, then, next `<to>` + repeatedly over the whole verbatim text. If the verbatim text is ended by + opened `<from>` but not closing by `<to>` then `<to>` is appended to the + verbatim text automatically and the last part of the verbatim text is replaced too. + + First two parameters are expanded before usage of `\replfromto`. You can + use `\csstring\%` or something else here. + \_cod ----------------------------- + +\_def\_replfromto #1#2{\_edef\_tmpa{{#1}{#2}}\_ea\_replfromtoE\_tmpa} +\_def\_replfromtoE#1#2#3{% #1=from #2=to #3=what to replace + \_def\_replfrom##1#1##2{\_addto\_tmpb{##1}% + \_ifx\_end##2\_ea\_replstop \_else \_afterfi{\_replto##2}\_fi}% + \_def\_replto##1#2##2{% + \_ifx\_end##2\_afterfi{\_replfin##1}\_else + \_addto\_tmpb{#3}% + \_afterfi{\_replfrom##2}\_fi}% + \_def\_replfin##1#1\_end{\_addto\_tmpb{#3}\_replstop}% + \_edef\_tmpb{\_ea}\_ea\_replfrom\_tmpb#1\_end#2\_end\_end\_relax +} +\_def\_replstop#1\_end\_relax{} +\_def\_finrepl{} + + \_doc ----------------------------- + The \`\replthis` `{<pattern>}{<what>}` replaces each `<pattern>` by `<what>`. + Both parameters of `\replthis` are expanded first. + \_cod ----------------------------- + +\_def\_replthis#1#2{\_edef\_tmpa{{#1}{#2}}\_ea\_replstring\_ea\_tmpb \_tmpa} + +\_public \replfromto \replthis ; + + \_doc ----------------------------- + The patterns `<from>`, `<to>` and `<pattern>` are not found when they are + hidden in braces `{...}`. Example: + \begtt + \replfromto{/*}{*/}{\x C{/*#1/*}} + \endtt + replaces all C comments by `\x C{...}`. The patterns inside `{...}` are + not used by next usage of `\replfromto` or `\replthis` macros. + + The \`\_xscan` macro does replacing `\x` by `\z` in the post-processing + phase. The `\x <letter>{<text>}` expands to `\_xscan {<letter>}<text>^^J^`. + If `#3` is `\_end` then it signals that something wrong happens, the + `<from>` was not terminated by legal `<to>` when `\replfromto` did work. + We must to fix it by the \`\_xscanR` macro. + \_cod ----------------------------- + +\_def\_xscan#1#2^^J#3{\_ifx\_end#3 \_ea\_xscanR\_fi + \z{#1}{#2}% + \_ifx^#3\_else ^^J\_afterfi{\_xscan{#1}#3}\_fi} +\_def\_xscanR#1\_fi#2^{^^J} + + \_doc ----------------------------- + The \`\hicolor` `<letter> <color>` defines `\_z<letter>{<text>}` + as `{<color><text>}`. It should be used in the context of + `\x <letter>{<text>}` macros. + \_cod ----------------------------- + +\_def\_hicolor #1#2{\_sdef{_z:#1}##1{{#2##1}}} + + \_doc ----------------------------- + The \`\hisyntax``{<name>}` re-defines default \^`\_prepareverbdata``<macro><verbtext>` + in order to it does more things: + It saves `<verbtext>` to `\_tmpb`, appends `\n` around spaces and + `^^J` characters in pre-processing phase, it opens `hisyntax-<name>.opm` + file if `\_hisyntax<name>` is not defined. Then `\_the\_isyntax<name>` + is processed. Finally, the post-processing phase is realized by setting + appropriate values to `\x` and `\y` macros and doing + `\_edef\_tmpb{\_tmpb}`. + \_cod ----------------------------- + +\_def\_hisyntax#1{\_def\_prepareverbdata##1##2{% + \_let\n=\_relax \_let\b=\_relax \_def\t{\n\_noexpand\t\n}\_let\_start=\_relax + \_adef{ }{\n\_noexpand\ \n}\_edef\_tmpb{\_start^^J##2\_end}% + \_replthis{^^J}{\n^^J\b\n}\_replthis{\b\n\_end}{\_end}% + \_let\x=\_relax \_let\y=\_relax \_let\z=\_relax \_let\t=\_relax + \_hicomments % keeps comments declared by \commentchars + \_endlinechar=`\^^M + \_lowercase{\_def\_tmpa{#1}}% + \_ifcsname _hialias:\_tmpa\_endcsname \_edef\_tmpa{\_cs{_hialias:\_tmpa}}\_fi + \_ifx\_tmpa\_empty \_else + \_unless \_ifcsname _hisyntax\_tmpa\_endcsname + \_isfile{hisyntax-\_tmpa.opm}\_iftrue \_opinput {hisyntax-\_tmpa.opm} \_fi\_fi + \_ifcsname _hisyntax\_tmpa\_endcsname + \_ifcsname hicolors\_tmpa\_endcsname + \_cs{_hicolors\_tmpa}=\_cs{hicolors\_tmpa}% + \_else + \_if^\_the\_hicolors^\_else + \_ifcsname _hicolors\_tmpa\_endcsname + \_global\_cs{_hicolors\_tmpa}=\_hicolors \_global\_hicolors={}% + \_fi\_fi\_fi + \_ea\_the \_csname _hisyntax\_tmpa\_endcsname % \_the\_hisyntax<name> + \_else\_opwarning{Syntax "\_tmpa" undeclared (no file hisyntax-\_tmpa.opm)} + \_fi\_fi + \_replthis{\_start\n^^J}{}\_replthis{^^J\_end}{^^J}% + \_def\n{}\_def\b{}\_adef{ }{\_dsp}% + \_bgroup \_lccode`\~=`\ \_lowercase{\_egroup\_def\ {\_noexpand~}}% + \_def\w####1{####1}\_def\x####1####2{\_xscan{####1}####2^^J^}% + \_def\y####1{\_ea \_noexpand \_csname ####1\_endcsname}% + \_edef\_tmpb{\_tmpb}% + \_def\z####1{\_cs{_z:####1}}% + \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}% + \_localcolor +}} +\_public \hisyntax \hicolor ; + + \_doc ----------------------------- + Aliases for languages can be declared like this. + When `\hisyntax{xml}` is used then this is the same as `\hisyntax{html}`. + \_cod ----------------------------- + +\_sdef{_hialias:xml}{html} +\_sdef{_hialias:json}{c} + +\_endcode % ------------------------------------------- + +The user can write + +\begtt \adef/{\_csstring\\} +\begtt \hisytnax{C} +... +/endtt +\endtt +and the code is colorized by C syntax. +The user can write `\everytt={\hisyntax{C}}` and all verbatim listings are +colorized. + +The \^`\hisyntax``{<name>}` reads the file `hisyntax-<name>.opm` where the +colorization is declared. The parameter `<name>` is case insensitive and the +file name must include it in lowercase letters. For example, the file +`hisyntax-c.opm` looks like this: + +\printdoc hisyntax-c.opm + +\OpTeX/ provides `hisyntax-{c,python,tex,html}.opm` files. +You can take inspiration from these files and declare more languages. + +User can re-declare colors by `\hicolors={...}` This value has precedence +before `\_hicolors<name>` values declared in the `hicolors-<name>.opm` file. +What exactly to do: copy `\_hicolors<name>={...}` +from `hicolors-<name>.opm` to your document, +rename it as `\hicolors={...}` and do you own colors modifications. + +Another way to set non-default colors is to declare +`\newtoks\hicolors<name>` (without the `_` prefix) and set the colors palette here. +It has precedence before `\_hicolors<name>` (with the `_` prefix) declared in +the `hicolors-<name>.opm` file. +This is useful when there are more hi-syntax languages used in one document. + +\secl4 Notes for hi-syntax macro writers +The file `hisyntax-<name>.opm` is read only once in the \TeX/ group. +If there are definitions then they must be declared as global. + +The `hisyntax-<name>.opm` file must (globally) declare `\_hisyntax<name>` tokens string +where the action over verbatim text is declared typically by `\replfromto` or +`\replthis` macros. + +The verbatim text is prepared by {\em pre-processing phase}, then the +`\_hisyntax<name>` is applied and then {\em post-processing phase} does final +corrections. Finally, the verbatim text is printed line by line. + +The pre-processing phase does: + +\begitems +* Each space is replaced by {\visiblesp`\n\ \n`}, so `\n<word>\n` should be a pattern to + finding whole words (no subwords). The `\n` control sequence is removed in + the post-processing phase. +* Each end of line is represented by `\n^^J\n`. +* The `\_start` control sequence is added before the verbatim text and the `\_end` control + sequence is appended to the end of the verbatim text. These control + sequences are removed in the post-processing phase. +\enditems + +Special macros are working only in a group when processing the verbatim +text. + + +\begitems +* `\n` means noting but it should be used as a boundary of words as mentioned above. +* `\t` means a tabulator. It is prepared as `\n\t\n` because it can be at + the boundary of a word. +* `\x <letter>{<text>}` can be used as replacing text. Suppose the example + \begtt + \replfromto{/*}{*/}{\x C{/*#1*/}} + \endtt + This replaces all C comments `/*...*/` by `\x C{/*...*/}`. But the + C comments may span more lines, i.e. the `^^J` should be inside it. + + The macro `\x <letter>{<text>}` is replaced by one or more + `\z <letter>{<text>}` in post-processing phase where each parameter `<text>` of + `\z` keeps inside one line. Inside-line parameters are represented + by `\x C{<text>}` and they are replaced to `\z C{<text>}` without any change. + But: + \begtt \catcode`\<=13 + \x C{<text1>^^J<text3>^^J<text3>} + is replaced by + \z C{<text1>}^^J\z C{<text2>}^^J\z C{<text3>} + \endtt + The `\z <letter>{<text>}` is expanded to `\_z:<letter>{<text>}` and if + `\hicolor <letter> <color>` is declared then + `\_z:<letter>{<text>}` expands to `{<color><text>}`. So, required color is + activated at all lines (separately) where C comment spans. +* `\y {<text>}` is replaced by `\<text>` in the post processing phase. It should + be used for macros without a parameter. You cannot use unprotected macros + as replacement text before the post-processing phase, because the post-processing + phase is based on expansion whole verbatim text. +\enditems + diff --git a/Master/texmf-dist/tex/optex/base/hisyntax-c.opm b/Master/texmf-dist/tex/optex/base/hisyntax-c.opm new file mode 100644 index 00000000000..3c1f228f88c --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/hisyntax-c.opm @@ -0,0 +1,66 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \_hisyntaxc {Syntax highlighting for C sources <2020-04-03>} + +\_newtoks \_hisyntaxc \_newtoks \_hicolorsc + +\_global\_hicolorsc={% colors for C language + \_hicolor K \Red % Keywords + \_hicolor S \Magenta % Strings + \_hicolor C \Green % Comments + \_hicolor N \Cyan % Numbers + \_hicolor P \Blue % Preprocessor + \_hicolor O \Blue % Non-letters +} +\_global\_hisyntaxc={% + \_the\_hicolorsc + \_let\c=\_relax \_let\e=\_relax \_let\o=\_relax + \_replfromto {/*}{*/} {\x C{/*#1*/}}% /*...*/ + \_replfromto {//}{^^J} {\z C{//#1}^^J}% //... + \_replfromto {\_string#}{^^J} {\z P{\##1}^^J}% #include ... + \_replthis {\_string\"} {{\_string\"}}% \" protected inside strings + \_replfromto {"}{"} {\x S{"#1"}}% "..." + % + \_edef\_tmpa {()\_string{\_string}+-*/=[]<>,:;\_pcent\_string&\_string^|!?}% non-letters + \_ea \_foreach \_tmpa + \_do {\_replthis{#1}{\n\o#1\n}} + \_foreach % keywords + {auto}{break}{case}{char}{continue}{default}{do}{double}% + {else}{entry}{enum}{extern}{float}{for}{goto}{if}{int}{long}{register}% + {return}{short}{sizeof}{static}{struct}{switch}{typedef}{union}% + {unsigned}{void}{while} + \_do {\_replthis{\n#1\n}{\z K{#1}}} + \_replthis{.}{\n.\n} % numbers + \_foreach 0123456789 + \_do {\_replfromto{\n#1}{\n}{\c#1##1\e}} + \_replthis{\e.\c}{.} + \_replthis{\e.\n}{.\e} + \_replthis{\n.\c}{\c.} + \_replthis{e\e\o+\c}{e+}\_replthis{e\e\o-\c}{e-} + \_replthis{E\e\o+\c}{E+}\_replthis{E\e\o-\c}{E-} + \_def\o#1{\z O{#1}} + \_def\c#1\e{\z N{#1}} +} + +\_endcode %------------------------------------------------ + + +Each `hisyntax-<name>.opm` file must declare the token list +`\_hisyntax<name>` using `\newtoks` and must declare the syntax declaration +in it. The second token list `\_hicolors<name>` is optional but recommended. +User can re-declare his/her own colors by `\hicolors` which has precedence +before `\_hicolors<name>`. + +The public variants can be declared if you want to give these token lists to +the user namespace. But it is not explicitly needed. + +All settings must be global here because the file is typically read inside +a group and we need not read it repeatedly before each code chunk +again and again. + +Note that `\foreach` is used for each non-letters (expanded via \string +because we needn't treat with active or special TeX characters). The +keyword is applied in the `\foreach` loop too. + +See `hi-sytax.opm` for more information about `\hicolor`, `\replfromto` and +`\replthis` macros. diff --git a/Master/texmf-dist/tex/optex/base/hisyntax-html.opm b/Master/texmf-dist/tex/optex/base/hisyntax-html.opm new file mode 100644 index 00000000000..3f0be6a23e8 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/hisyntax-html.opm @@ -0,0 +1,31 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl\_hisyntaxhtml {Syntax highlighting for html or xml sources <2020-04-03>} + +\_newtoks\_hisyntaxhtml \_newtoks\_hicolorshtml + +\_global\_hicolorshtml={% colors in html codes + \_hicolor A \Cyan % <, > and parameters + \_hicolor T \Red % tag names + \_hicolor C \Green % comments + \_hicolor E \Blue % HTML entities + \_hicolor S \Magenta % strings in parameters +} +\_global\_hisyntaxhtml={ + \_the\_hicolorshtml + \_replfromto{<!--}{-->}{\x C{<!--#1-->}} + \_replthis{<}{\y{_hitaghtml}} + \_replthis{\_string&}{\y{_hientityhtml}} +} +\_gdef\_hitaghtml#1>{\_hitaghtmlA#1\ >} +\_gdef\_hitaghtmlA#1\ #2>{\z A{<}\z T{#1}\_def\_tmpb{#2^}% + \_if^\_tmpb + \_else \_space + \_replthis{\ ^}{}\_replfromto{"}{"}{\_histringhtml{"##1"}}\z A{\_tmpb}\_fi + \z A{>}% +} +\_gdef\_histringhtml#1{\_visiblesp \z S{#1}} +\_gdef\_hientityhtml#1;{\z E{\}} + +\_endcode %------------------------------------------------ + diff --git a/Master/texmf-dist/tex/optex/base/hisyntax-python.opm b/Master/texmf-dist/tex/optex/base/hisyntax-python.opm new file mode 100644 index 00000000000..6250eed0e38 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/hisyntax-python.opm @@ -0,0 +1,82 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \_hisyntaxpython {Syntax highlighting for Python sources <2020-04-04>} + +\_newtoks \_hisyntaxpython \_newtoks \_hicolorspython + +\_global\_hicolorspython={% colors for Python language + \_hicolor M \Orange % Multi line strings + \_hicolor S {\_visiblesp \Grey} % Single line strings + \_hicolor C \Green % Comments + \_hicolor K \LightBlue % Keywords + \_hicolor O \Blue % Operators + \_hicolor N \Red % Numbers + \_hicolor D \Magenta % def names + \_hicolor L \Black % class names + \_hicolor R \Magenta % Decorators +} +\_global\_hisyntaxpython={% + \_the\_hicolorspython + \_let\s=\_relax \_let\c=\_relax \_let\e=\_relax \_let\o=\_relax + \_replthis{\_string\"}{{\_string\"}} % protect \", \' + \_replthis{\_string\'}{{\_string\'}} + % + \_replfromto{\_string#}{^^J}{\z C{\##1}^^J} % comments + % + \_replthis{'''}{\_noexpand\_hipystr0{'''}M} % search string marks + \_replthis{"""}{\_noexpand\_hipystr1{"""}M} + \_replthis{"}{\_noexpand\_hipystr2{"}S} + \_replthis{'}{\_noexpand\_hipystr3{'}S} + \_edef\_tmpb{\_tmpb} % realize string marks + % + \_foreach {br}{Br}{bR}{BR}{rb}{rB}{Rb}{RB}uUrRbB % string prefixes + \_do {\_replthis{#1\s}{\_noexpand\_hipystrpre#1}} + \_def\s{} + \_edef\_tmpb{\_tmpb} + % + \_edef \_tmpa {+-*./=<>()[]:,;!|\_pcent % operators + \_string{\_string}@\_string&\_string~\_string^} + \_ea\_foreach \_tmpa + \_do {\_replthis{#1}{\n\o#1\n}} + % + \_foreach % keywords + {and}{as}{assert}{async}{await}{break}{continue}{del}{elif}{else}{except}% + {exec}{False}{finally}{for}{from}{global}{if}{import}{in}{is}{lambda}{None}% + {nonlocal}{not}{or}{pass}{print}{raise}{return}{True}{try}{while}{with}{yield}% + \_do {\_replthis{\n#1\n}{\z K{#1}}} + \_replfromto{\n def\n}{\n\o(\n}{\z K{def}\x D{#1}\n\o(\n} + \_replfromto{\n class\n}{\n\o(\n}{\z K{class}\x L{#1}\n\o(\n} + % + \_foreach 0123456789 % numbers + \_do {\_replfromto{\n#1}{\n}{\c#1##1\e}} + % + \_replthis{\e\o.\c}{.} + \_replthis{\e\o.\n}{.\e} + \_replthis{\n\o.\c}{\c.} + \_replthis{e\e\o+\c}{e+}\_replthis{e\e\o-\c}{e-} + \_replthis{E\e\o+\c}{E+}\_replthis{E\e\o-\c}{E-} + \_replthis{\e j}{j\e} + % + \_replfromto{\n\o@\n}{^^J}{\z R{#1}^^J} % decorators + % + \_def\o#1{\z O{#1}} + \_def\c#1\e{\z N{#1}} +} + +\_gdef\_hipystr#1#2#3#4\_hipystr#5#6#7{% + \_ifx#1#5\s\x#3{#2#4#2}% + \_else \_afterfi{\_hipystr#1{#2}#3#4#6}\_fi +} +\_gdef\_hipystrpre#1\x#2{\x#2{#1}\x#2} + +\_ifx\LightBlue\_undefined \_gdef\LightBlue {\_setcmykcolor{1 0.43 0 0}}\_fi +\_ifx\Orange\_undefined \_gdef\Orange {\_setcmykcolor{0 0.64 1 0}}\_fi + +\_endcode %------------------------------------------------ + +This code was greatly inspired by the OPMac hisyntax macros for Python: + + https://gitlab.fit.cvut.cz/krajnpet/PySyntax + +created by Petr Krajnik. + diff --git a/Master/texmf-dist/tex/optex/base/hisyntax-tex.opm b/Master/texmf-dist/tex/optex/base/hisyntax-tex.opm new file mode 100644 index 00000000000..583676a2ca4 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/hisyntax-tex.opm @@ -0,0 +1,38 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl\_hisyntaxtex {Syntax highlighting for TeX sources <2020-04-03>} + +\_newtoks\_hisyntaxtex \_newtoks\_hicolorstex + +\_global\_hicolorstex={% colors in TeX codes + \_hicolor S \Blue % control sequences + \_hicolor B \Magenta % {, }, $ + \_hicolor C \Green % comments +} +\_global\_hisyntaxtex={ + \_the\_hicolorstex + \_replthis{\_string\%}{\y{_createcs}{\_csstring\%}} + \_replfromto{\_csstring\%}{^^J}{\x C{\_csstring\%#1}^^J} + \_replthis{\_string\\}{\y{_createcs}{\_csstring\\}} + \_replthis{\_string\{}{\y{_createcs}{\_csstring\{}} + \_replthis{\_string\}}{\y{_createcs}{\_csstring\}}} + \_replthis{\_string\$}{\y{_createcs}{\_csstring\$}} + \_replthis{\_csstring\\}{\y{_createcs}} + \_replthis{\_csstring\{}{\x B{\_csstring\{}} + \_replthis{\_csstring\}}{\x B{\_csstring\}}} + \_replthis{\_csstring\$}{\x B{\_csstring\$}} +} +\_gdef\_createcs#1{\_def\_csletters{#1}% + \_ifcat a\_noexpand#1\_afterfi{\_futurelet\_next\_createcsA}% + \_else \_ea\_createcsF \_fi +} +\_gdef\_createcsA{\_ifcat a\_noexpand\_next \_ea\_createcsB \_else \_ea\_createcsF \_fi} +\_gdef\_createcsB#1{\_addto\_csletters{#1}\_futurelet\_next\_createcsA} +\_gdef\_createcsF{\z S{\_csstring\\\_csletters}} +\_gdef\_createbb{\_ea\_createcs\_csstring\\} + +\_endcode %------------------------------------------------ + +The `\_createcs` reads next tokens as the tokenizer does it until the name +of a control sequence is read. It is saved to the `\_csletters` macro and +the macro \_createcsF prints it. diff --git a/Master/texmf-dist/tex/optex/base/hyperlinks.opm b/Master/texmf-dist/tex/optex/base/hyperlinks.opm new file mode 100644 index 00000000000..5fc8a32233b --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/hyperlinks.opm @@ -0,0 +1,157 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \ulink {Hyperlinks <2021-01-27>} % preloaded in format + + \_doc ---------------------------- + \`\dest``[<type>:<spec>]` creates a destination of internal links. The + destination is declared in the format `<type>:<spec>`. If the \^`\hyperlinks` + command in not used, then `\dest` does nothing else it is set to `\_destactive`. + The \`\_destactive` is implemented by `\_pdfdest` primitive. It creates a box + in which the destination is shifted by \`\_destheight`. The reason is that + the destination is exactly at the top border of the PDF viewer but we want to see + the line where the destination is. The destination box is positioned by a + different way dependent on the current vertical or horizontal mode. + \_cod ---------------------------- + +\_def\_destheight{1.4em} +\_def\_destactive[#1:#2]{\_if$#2$\_else\_ifvmode + \_tmpdim=\_prevdepth \_prevdepth=-1000pt + \_destbox[#1:#2]\_prevdepth=\_tmpdim + \_else \_destbox[#1:#2]% + \_fi\_fi +} +\_def\_destbox[#1]{\_vbox to\_zo{\_kern-\_destheight \_pdfdest name{#1} xyz\_vss}} +\_def\_dest[#1]{} +\_public \dest ; + + \_doc ---------------------------- + \`\link``[<type>:<spec>]{<color>}{<text>}` creates an internal link to \^`\dest` + with the same `<type>:<spec>`. You can have more links with the same + `<type>:<spec>` but only one `\dest` in the document. If \^`\hyperlinks` + command is not used, then `\link` only prints `<text>` else it is set to + `\_linkactive`. + The \`\_linkactive` is implemented by `\_pdfstartlink...\_pdfendlink` + primitives. + \nl + \`\ilink``[<type>:<spec>]{<text>}` is equivalent to `\_link` but + the `<color>` is used from \^`\hyperlinks` declaration. + \_cod ---------------------------- + +\_protected\_def\_linkactive[#1:#2]#3#4{\_leavevmode\_pdfstartlink height.9em depth.3em + \_pdfborder{#1} goto name{#1:#2}\_relax {#3#4}\_pdfendlink +} +\_protected\_def\_link[#1]#2#3{\_leavevmode{#3}} +\_protected\_def\_ilink[#1]#2{\_leavevmode{#2}} +\_public \ilink \link ; + + \_doc ---------------------------- + \`\ulink``[<url>]{<text>}` creates external link. It prints only the `<text>` by default but + the \^`\hyperlinks` declaration defines it as \`\_urlactive``[url:<url>]{<text>}`. + The external link is created by the `\_pdfstartlink...\pdfendlink` primitives. + The `<url>` is detokenized with `\escapechar=-1` before it is used, so + `\%`, `\#` etc. can be used in the `<url>`. + \_cod ---------------------------- + +\_protected\_def\_urlactive[#1:#2]#3#4{\_leavevmode{\_escapechar=-1 + \_pdfstartlink height.9em depth.3em \_pdfborder{#1}% + user{/Subtype/Link/A <</Type/Action/S/URI/URI(\_detokenize{#2})>>}\_relax + {#3#4}\_pdfendlink}% +} +\_def\_ulink[#1]#2{\_leavevmode{#2}} +\_def\_urlcolor{} +\_public \ulink ; + + \_doc ---------------------------- + The `\_pdfstartlink` primitive uses `\_pdfborder{<type>}` in its parameter + (see \^`\_linkactive` or \^`\_urlactive` macros). The \`\_pdfborder``{<type>}` + expands to `attr{/C[? ? ?] /Border[0 0 .6]}` if the + `\_<type>border` (i.e.\ \`\_refborder`, \`\_citeborder`, \`\_tocborder`, + \`\_pgborder`, \`\_urlborder`, \`\_fntborder` or \`\_fnfborder`) + is defined. Users can define it in + order to create colored frames around active links. For example + `\def\_tocborder{1 0 0}` causes red frames in TOC (not printed, only visible + in PDF viewers). + \_cod ---------------------------- + +\_def\_pdfborder#1{\_ifcsname _#1border\_endcsname + attr{/C[\_csname _#1border\_endcsname] /Border[0 0 .6]}% + \_else attr{/Border[0 0 0]}\_fi +} + + \_doc ---------------------------- + \`\hyperlinks``{<ilink_color>}{<ulink_color>}` activates `\dest`, `\link`, + `\ilink`, `\ulink` in order they create links. These macros are redefined + here to their \"active" version. + \_cod ---------------------------- + +\_def\_hyperlinks#1#2{% + \_let\_dest=\_destactive \_let\_link=\_linkactive + \_def\_ilink[##1]##2{\_link[##1]{\_localcolor#1}{##2}}% + \_def\_ulink[##1]##2{\_urlactive[url:##1]{\_localcolor#2}{##2}}% + \_public \dest \ilink \ulink \link ;% +} +\_public \hyperlinks ; + + \_doc ---------------------------- + \`\url``{<url>}` does approximately the same as \^`\ulink``[<url>]{<url>}`, but + more work is done before the `\ulink` is processed. The link-version of <url> + is saved to `\_tmpa` and the printed version in `\_tmpb`. The printed + version is modified in order to set breakpoints to special places of the + `<url>`. For example `//` is replaced by `\_urlskip/\_urlskip/\_urlbskip` + where `\urlskip` adds a small nonbreakable glue between these two slashes and + before them and `\_urlbskip` adds a breakable glue after them. + \nl + The text version of the `<url>` is printed in \`\_urlfont`. + \_cod ---------------------------- + +\_def\_url#1{{% + \_def\_tmpa{#1}\_replstring\_tmpa {\|}{}% + {\_escapechar=-1 \_ea}\_ea\_edef\_ea\_tmpa\_ea{\_detokenize\_ea{\_tmpa}}% + \_def\_tmpb{#1}\_replstring\_tmpb {\|}{\_urlbskip}% + \_replstring\_tmpb {//} {{\_urlskip\_urlslashslash\_urlbskip}}% + \_replstring\_tmpb {/} {{\_urlskip/\_urlbskip}}% + \_replstring\_tmpb {.} {{\_urlskip.\_urlbskip}}% + \_replstring\_tmpb {?} {{\_urlskip?\_urlbskip}}% + \_replstring\_tmpb {=} {{\_urlskip=\_urlbskip}}% + \_ea\_replstring\_ea\_tmpb \_ea{\_string &} {{\_urlbskip\_char`\& \_urlskip}}% + \_ea\_replstring\_ea\_tmpb \_ea{\_bslash|} {{\_penalty0}}% + \_ea\_ulink \_ea[\_tmpa] {\_urlfont\_tmpb\_null}% +}} +\_def\_urlfont{\_tt} +\_def\_urlskip{\_null\_nobreak\_hskip0pt plus0.05em\_relax} +\_def\_urlbskip{\_penalty100 \_hskip0pt plus0.05em\_relax} +\_def\_urlslashslash{/\_urlskip/} + +\_public \url ; + +\_endcode % ---------------------------------------- + + +There are four types of internal links and one type of external link: + +\begitems +* `ref:<label>` -- the destination is created when `\label[<label>]` is used, + see also the section \ref[references]. +* `toc:<tocrefnum>` -- the destination is created at chap/sec/secc titles, + see also the section \ref[maketoc]. +* `pg:<gpageno>` -- the destination is created at beginning of each page, + see also the section \ref[output]. +* `cite:<bibnum>` -- the destination is created in bibliography reference, + see also the section \ref[bib]. +* `url:<url>` -- used by `\url` or `\ulink`, + see also the end of this section. +\enditems + +The `<tocrefnum>`, `<gpageno>`, and `<bibnum>` are numbers starting from one and +globally incremented by one in the whole document. The registers \^`\tocrefnum`, +\^`\gpageno` and \^`\bibnum` are used for these numbers. + +When a chap/sec/secc title is prefixed by `\label[<label>]`, then both types +of internal links are created at the same destination place: +`toc:<tocrefnum>` and `ref:<label>`. + +\_endinput + +2021-01-27 \public \link added to \hyperlinks, bug fixed. +2020-04-22 \| in \url: bug fixed +2020-03-15 introduced \ No newline at end of file diff --git a/Master/texmf-dist/tex/optex/base/hyphen-lan.opm b/Master/texmf-dist/tex/optex/base/hyphen-lan.opm new file mode 100644 index 00000000000..dad0b26657e --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/hyphen-lan.opm @@ -0,0 +1,245 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \langlist {Initialization of hypenation patterns <2020-03-10>} % preloaded in format + + \_doc ----------------------------- + The <iso-code> means a shortcut of language name (mostly by ISO 639-1). + The following control sequences are used for language switching: + \begitems + * `\_lan:<number>` expands to `<iso-code>` of the language. + The <number> is an internal number of languages used as a value of + `\language` register. + * `\_ulan:<long-lang>` expands to `<iso-code>` too. This is transformation + from long name of language (lowercase letters) to <iso-code>. + * `\_<iso-code>Patt` (for example `\_csPatt`) is the language `<number>` declared by `\chardef`. + * `\<iso-code>lang` + (for example \`\enlang`, \`\cslang`, \`\sklang`, \`\delang`, \`\pllang`) + is language selector. It exists in two states + \begitems + * Initialization state: when `\<iso-code>lang` is used first then it + must load the patterns into memory using Lua code. If it is done then + the `\<iso-code>lang` re-defines itself to the processing state. + * Processing state: it only sets `\language=\_<iso-code>Patt`, i.e it + selects the hyphenation patterns. It does a little more + language-dependent work, as mentioned below. + \enditems + * `\_langspecific:<isocode>` is processed by `\<iso-code>lang` and it + should include language-specific macros declared by the user or macro designer. + \enditems + The USenglish patters are preloaded first: + \_cod ----------------------------- + +\_chardef\_enPatt=0 +\_def\_pattlist{\_enPatt=0} +\_def\_langlist{en(USenglish)} +\_sdef{_lan:0}{en} +\_sdef{_ulan:usenglish}{en} +\_def\_enlang{\_uselang{en}\_enPatt23} % \lefthyph=2 \righthyph=3 +\_def\enlang{\_enlang} +\_sdef{_langspecific:en}{\_nonfrenchspacing} + +\_lefthyphenmin=2 \_righthyphenmin=3 % disallow x- or -xx breaks +\_input hyphen % en(USenglish) patterns from TeX82 + + \_doc ----------------------------- + \`\_preplang` `<iso-code> <long-lang> <hyph-file-spec> <number> <pre-hyph><post-hyph>` + prepares the\nl `\<iso-code>lang` to its initialization state. Roughly + speaking, it does: + \begtt \catcode`\<=13 + \chardef\_<iso-code>Patt = <number> + \def\_lan:<number> {<iso-code>} + \def\_ulan:<long-lang> {<iso-code>} + \def\_<iso-code>lang {% + \_loadpattrs <hyph-file-spec> <number> <long-lang> % loads patterns using Lua code + \gdef\_<iso-code>lang {\_uselang{<iso-code>}\_<iso-code>Patt <pre-hyph><post-hyph>} + \_<iso-code>lang % runs itself in processing state + } + \def\<iso-code>lang {\_<iso-code>lang} % public version \<iso-code>lang + \endtt + You can see that `\<iso-code>lang` runs \^`\_loadpattrs` and + \^`\_uselang` first (in initialization state) and it runs + only \^`\_uselang` when it is called again (in processing state). + \_cod ----------------------------- + +\_def\_preplang #1 #2 #3 #4 #5 {% + \_ea\_chardef \_csname _#1Patt\_endcsname=#4 + \_sdef{_lan:#4}{#1}\_lowercase{\_sdef{_ulan:#2}}{#1}% + \_def\_next{\_ea\_noexpand\_csname _#1lang\_endcsname}% + \_ea\_edef \_csname _#1lang\_endcsname {% + \_noexpand\_loadpattrs #3 #4 #2 % loads patterns + \_gdef\_next{\_noexpand\_uselang{#1}\_csname _#1Patt\_endcsname #5}% re-defines itself + \_next % runs itself in processing state + } + \_addto\_langlist{ #1(#2)}% + \_sdef{#1lang\_ea}\_ea{\_csname _#1lang\_endcsname}% unprefixed \<isocode>lang +} + + \_doc ----------------------------- + \`\_loadpattrs` `<hyph-file-spec> <number> <long-lang>` + loads hyphenation patterns and hyphenation exceptions for given language + and registers them as `\language=<number>`. + + The <hyph-file-spec> is a part of full file name wich is read: + `hyph-<hyph-file-spec>.tex`. The patterns and hyphenation exceptions + are saved here in UTF-8 encoding. + The <hyph-file-spec> should be a list of individual <hyph-file-spec>'s + separated by commas, see the language Serbian below for an example. + \_cod ----------------------------- + +\_def\_loadpattrs#1 #2 #3 {% + \_wlog{Loading hyphenation #3: (#1) \_string\language=#2}% + \_begingroup\_setbox0=\_vbox{% we don't want spaces in horizontal mode + \_language=#2\_def\\{#3}% + \_let\patterns=\_patterns \_let\hyphenation=\_hyphenation \_def\message##1{}% + \_loadpattrsA #1,,% + }\_endgroup +} +\_def\_loadpattrsA #1,{\_ifx,#1,\_else + \_isfile {hyph-#1}\_iftrue \_opinput{hyph-#1}% + \_else \_opwarning{No hyph. patterns #1 for \\, missing package?}% + \_def\_opwarning##1{}\_fi + \_ea \_loadpattrsA \_fi +} + + \_doc ----------------------------- + \`\_uselang``{<iso-code>}\_<iso-code>Patt <pre-hyph><post-hyph>`\nl + sets `\language`, `\lefthyphenmin`, `\righthyphenmin` and runs + `\frenchspacing`. This default language-dependent settings + should be re-declared by `\_langspecific:<iso-code>` which is run + finally (it is `\relax` by default, only `\_langspecific:en` runs + \^`\nonfrenchspacing`). + \_cod ----------------------------- + +\_def\_uselang#1#2#3#4{\_language=#2\_lefthyphenmin=#3\_righthyphenmin=#4\_relax + \_frenchspacing % \nonfrenchspacing can be set in \cs{_langspecific:lan} + \_cs{_langspecific:#1}% +} + \_doc ----------------------------- + The \`\uselanguage` `{<long-lang>}` is defined here + (for compatibility with e-plain users). + \_cod ----------------------------- + +\_def\_uselanguage#1{\_lowercase{\_cs{_\_cs{_ulan:#1}lang}}} +\_public \uselanguage ; + + \_doc ----------------------------- + The numbers for languages are declared as fixed constants (no + auto-generated). This concept is inspired by CSplain. + There are typical numbers of languages in CSplain: 5=Czech in IL2, + 15=Czech in T1 and 115=Czech in Unicode. We keep these constants + but we load only Unicode patterns (greater than 100), of course. + \_cod ----------------------------- + +\_preplang enus USenglishmax en-us 100 23 +\_preplang engb UKenglish en-gb 101 23 +\_preplang it Italian it 102 22 +\_preplang ia Interlingua ia 103 22 +\_preplang id Indonesian id 104 22 + +\_preplang cs Czech cs 115 23 +\_preplang sk Slovak sk 116 23 +\_preplang de nGerman de-1996 121 22 +\_preplang fr French fr 122 22 +\_preplang pl Polish pl 123 22 +\_preplang cy Welsh cy 124 23 +\_preplang da Danish da 125 22 +\_preplang es Spanish es 126 22 +\_preplang sl Slovenian sl 128 22 +\_preplang fi Finnish fi 129 22 +\_preplang hu Hungarian hu 130 22 +\_preplang tr Turkish tr 131 22 +\_preplang et Estonian et 132 23 +\_preplang eu Basque eu 133 22 +\_preplang ga Irish ga 134 23 +\_preplang nb Bokmal nb 135 22 +\_preplang nn Nynorsk nn 136 22 +\_preplang nl Dutch nl 137 22 +\_preplang pt Portuguese pt 138 23 +\_preplang ro Romanian ro 139 22 +\_preplang hr Croatian hr 140 22 +\_preplang zh Pinyin zh-latn-pinyin 141 11 +\_preplang is Icelandic is 142 22 +\_preplang hsb Uppersorbian hsb 143 22 +\_preplang af Afrikaans af 144 12 +\_preplang gl Galician gl 145 22 +\_preplang kmr Kurmanji kmr 146 22 +\_preplang tk Turkmen tk 147 22 +\_preplang la Latin la 148 22 +\_preplang lac classicLatin la-x-classic 149 22 +\_preplang lal liturgicalLatin la-x-liturgic 150 22 +\_preplang elm monoGreek el-monoton 201 11 +\_preplang elp Greek el-polyton 202 11 +\_preplang grc ancientGreek grc 203 11 +\_preplang ca Catalan ca 204 22 +\_preplang cop Coptic cop 205 11 +\_preplang mn Mongolian mn-cyrl 206 22 +\_preplang sa Sanskrit sa 207 13 +\_preplang ru Russian ru 208 22 +\_preplang uk Ukrainian uk 209 22 +\_preplang hy Armenian hy 210 12 +\_preplang as Assamese as 211 11 +\_preplang hi Hindi hi 212 11 +\_preplang kn Kannada kn 213 11 +\_preplang lv Latvian lv 215 22 +\_preplang lt Lithuanian lt 216 22 +\_preplang ml Malayalam ml 217 11 +\_preplang mr Marathi mr 218 11 +\_preplang or Oriya or 219 11 +\_preplang pa Panjabi pa 220 11 +\_preplang ta Tamil ta 221 11 +\_preplang te Telugu te 222 11 + +\_preplang be Belarusian be 223 22 +\_preplang bg Bulgarian bg 224 22 +\_preplang bn Bengali bn 225 11 +\_preplang cu churchslavonic cu 226 12 +\_preplang deo oldGerman de-1901 227 22 +\_preplang gsw swissGerman de-ch-1901 228 22 +\_preplang eo Esperanto eo 229 22 +\_preplang fur Friulan fur 230 22 +\_preplang gu Gujarati gu 231 11 +\_preplang ka Georgian ka 232 12 +\_preplang mk Macedonian mk 233 22 +\_preplang oc Occitan oc 234 22 +\_preplang pi Pali pi 235 12 +\_preplang pms Piedmontese pms 236 22 +\_preplang rm Romansh rm 237 22 +\_preplang sr Serbian sh-cyrl,sh-latn 238 22 +\_preplang sv Swedish sv 239 22 +\_preplang th Thai th 240 23 +\_preplang ethi Ethiopic mul-ethi 241 11 + + \_doc ----------------------------- + The \`\langlist` includes names of all languages which are ready to load + and use their hyphenation patterns. This list is printed to the terminal and + to log at ini\TeX/ state here. It can be used when processing documents too. + \_cod ----------------------------- + +\_message{Language hyph.patterns ready to load: \_langlist. + Use \_string\<shortname>lang to initialize language, + \_string\cslang\_space for example} + +\_public \langlist ; + +\_endcode % --------------------------------------------- + + +Maybe, you need to do more language-specific actions than just switching +hyphenation patterns. For example, you need to load a specific font with a +specific script used in the selected language, you can define macros for +quotation marks depending on the language, etc. + +The example shows how to declare such language-specific things. + +\begtt +\def\langset #1 #2{\sdef{_langspecific:#1}{#2}} + +\langset fr {... declare French quotation marks} +\langset de {... declare German quotation marks} +\langset gr {... switch to Greek fonts family} +... etc. +\endtt + +Note that you need not set language-specific phrases (like `\today`) +by this code. Another concept is used for such tasks. See the +section~\ref[langphrases] for more details. diff --git a/Master/texmf-dist/tex/optex/base/if-macros.opm b/Master/texmf-dist/tex/optex/base/if-macros.opm new file mode 100644 index 00000000000..462e4960172 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/if-macros.opm @@ -0,0 +1,313 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \newif {Special if-macros, is-macros and loops <2021-02-03>} % preloaded in format + + \_doc ---------------------------- + \secc Classical \code{\\newif} + The \`\newif` macro implements boolean value. + It works as in plain \TeX. It means that + after `\newif\ifxxx` you can use `\xxxtrue` or + `\xxxfalse` to set the boolean value and use `\ifxxx true\else false\fi` + to test this value. The default value is false. + + The macro \`\_newifi` enables to declare `\_ifxxx` and to use `\_xxxtrue` and + `\_xxxfalse`. This means that it is usable for the internal namespace + (`_`prefixed macros). + \_cod ---------------------------- + +\_def\_newif #1{\_ea\_newifA \_string #1\_relax#1} +\_ea\_def \_ea\_newifA \_string\if #1\_relax#2{% + \_sdef{#1true}{\_let#2=\_iftrue}% + \_sdef{#1false}{\_let#2=\_iffalse}% + \_let#2=\_iffalse +} +\_def\_newifi #1{\_ea\_newifiA \string#1\_relax#1} +\_ea\_def \_ea\_newifiA \_string\_if #1\_relax#2{% + \_sdef{_#1true}{\_let#2=\_iftrue}% + \_sdef{_#1false}{\_let#2=\_iffalse}% + \_let#2=\_iffalse +} +\_public \newif ; + + \_doc ---------------------------- + \`\afterfi` `{<what to do>}<ignored>\fi` closes condition by `\fi` and processes + <what to do>. Usage: + \begtt + \if<something> \afterfi{<result is true>} \else \afterfi{<resut is false>} \fi + \endtt + \_cod ---------------------------- + +\_def\_afterfi#1#2\_fi{\_fi#1} +\_def\afterfi#1#2\fi{\_fi#1} + + \_doc ---------------------------- + \secc Loops + The \`\loop` `<codeA> \ifsomething <codeB>` \`\repeat` loops `<codeA><codeB>` + until `\ifsomething` is false. Then `<codeB>` is not executed and loop is + finished. This works like in plain \TeX, but implementation is somewhat + better (you can use `\else` clause after the `\ifsomething`). + + There are public version `\loop...\repeat` and private version + \`\_loop` ...\`\_repeat`. You cannot mix both versions in one loop. + + The `\loop` macro keeps its original plain TeX meaning. It is not + expandable and nested `\loop`s are possible only in a \TeX/ group. + \_cod ---------------------------- + +\_long\_def \_loop #1\_repeat{\_def\_body{#1}\_iterate} +\_long\_def \loop #1\repeat{\_def\_body{#1}\_iterate} +\_let \_repeat=\_fi % this makes \loop...\if...\repeat skippable +\_let \repeat=\_fi +\_def \_iterate {\_body \_ea \_iterate \_fi} + + \_doc ----------------------------- + \`\foreach` `<list>`\`\do` `{<what>}` + repeats `<what>` for each element of the + `<list>`. The `<what>` can include `#1` which is substituted by each + element of the `<list>`. The macro is expandable. + \nl + \`\foreach` `<list>`\`\do` `<parameter-mask>{<what>}` + reads parameters from <list> repeatedly and does <what> for each such reading. + The parameters are declared by <parameter-mask>. Examples: + \begtt + \foreach (a,1)(b,2)(c,3)\do (#1,#2){#1=#2 } + \foreach word1,word2,word3,\do #1,{Word is #1.} + \foreach A=word1 B=word2 \do #1=#2 {"#1 is set as #2".} + \endtt + Note that `\foreach <list>\do {<what>}` is equivalent to `\foreach <list>\do #1{<what>}`. + + Recommendation: it is better to use private variants of \`\_foreach`. + When the user writes `\input tikz` then `\foreach` macro is redefined! The + private variants use \`\_do` separator instead `\do` separator. + \_cod ----------------------------- + +\_newcount\_frnum % the numeric variable used in \fornum +\_def\_do{\_doundefined} % we need to ask \_ifx#1\_do ... + +\_long\_def\_foreach #1\_do #2#{\_isempty{#2}\_iftrue + \_afterfi{\_foreachA{#1}{##1}}\_else\_afterfi{\_foreachA{#1}{#2}}\_fi} +\_long\_def\_foreachA #1#2#3{\_putforstack + \_immediateassignment \_long\_gdef\_fbody#2{\_testparam##1..\_iftrue #3\_ea\_fbody\_fi}% + \_fbody #1#2\_finbody\_getforstack +} +\_def\_testparam#1#2#3\_iftrue{\_ifx###1\_empty\_ea\_finbody\_else} +\_def\_finbody#1\_finbody{} + +\_long\_def\foreach #1\do#2#{\_isempty{#2}\_iftrue + \_afterfi{\_foreachA{#1}{##1}}\_else\_afterfi{\_foreachA{#1}{#2}}\_fi} + + \_doc ----------------------------- + \`\fornum` `<from>..<to>` \`\do` `{<what>}` or + \`\fornumstep` `<num>: <from>..<to>` \`\do` `{<what>}` + repeats `<what>` for each number from `<from>` to `<to>` (with step `<num>` + or with step one). The `<what>` can include `#1` which is substituted by + current number. The <from>, <to>, <step> parameters can be numeric expressions. + The macro is expandable.\nl + The test in the \`\_fornumB` says: if (<to> $\string<$ <current number> + AND <step> is positive) or if (<to> $>$ <current number> AND <step> is + negative) then close loop by `\_getforstack`. Sorry, the condition is + writen by somewhat cryptoid \TeX/ language. + \_cod ----------------------------- + +\_def\_fornum#1..#2\_do{\_fornumstep 1:#1..#2\_do} +\_long\_def\_fornumstep#1:#2..#3\_do#4{\_putforstack + \_immediateassigned{% + \_gdef\_fbody##1{#4}% + \_global\_frnum=\_numexpr#2\_relax + }% + \_ea\_fornumB\_ea{\_the\_numexpr#3\_ea}\_ea{\_the\_numexpr#1}% +} +\_def\_fornumB #1#2{\_ifnum#1\_ifnum#2>0<\_else>\_fi \_frnum \_getforstack + \_else \_ea\_fbody\_ea{\_the\_frnum}% + \_immediateassignment\_global\_advance\_frnum by#2 + \_afterfi{\_fornumB{#1}{#2}}\_fi +} +\_def\fornum#1..#2\do{\_fornumstep 1:#1..#2\_do} +\_def\fornumstep#1:#2..#3\do{\_fornumstep #1:#2..#3\_do} + + \_doc ---------------------------- + The `\foreach` and `\fornum` macros can be nested and arbitrary combined. + When they are nested then use `##1` for the variable of nested level, + `####1` for the variable of second nested level etc. Example: + \begtt + \foreach ABC \do {\fornum 1..5 \do {letter:#1, number: ##1. }} + \endtt + Implementation note: + we cannot use \TeX/-groups for nesting levels because we want to do the + macros expandable. We must implement a special for-stack which saves the + data needed by `\foreach` and `\fornum`. The \`\_putforstack` is used + when `\for*` is initialized and \`\_getforstack` is used when the + `\for*` macro ends. The \`\_forlevel` variable keeps the current nesting + level. If it is zero, then we need not save nor restore any data. + \_cod ---------------------------- + +\_newcount\_forlevel +\_def\_putforstack{\_immediateassigned{% + \_ifnum\_forlevel>0 + \_sxdef{_frnum:\_the\_forlevel\_ea}{\_the\_frnum}% + \_global\_slet{_fbody:\_the\_forlevel}{_fbody}% + \_fi + \_incr\_forlevel +}} +\_def\_getforstack{\_immediateassigned{% + \_decr\_forlevel + \_ifnum\_forlevel>0 + \_global\_slet{_fbody}{_fbody:\_the\_forlevel}% + \_global\_frnum=\_cs{_frnum:\_the\_forlevel}\_space + \_fi +}} +\_ifx\_immediateassignment\_undefined % for compatibility with older LuaTeX + \_let\_immediateassigned=\_useit \_let\_immediateassignment=\_empty +\_fi + + \_doc ---------------------------- + User can define own expandable \"foreach" macro by + \`\foreachdef` `\macro <parameter-mask>{<what>}` + which can be used by `\macro {<list>}`. The macro reads repeatedly parameters from <list> + using <parameter-mask> and does <what> for each such reading. For example + \begtt + \foreachdef\mymacro #1,{[#1]} + \mymacro{a,b,cd,efg,} + \endtt + expands to [a][b][cd][efg]. Such user defined macros are more effecive during processing + than `\foreach` itself because they need not to operate with the for-stack. + \_cod ---------------------------- + +\_def\_foreachdef#1#2#{\_toks0{#2}% + \_long\_edef#1##1{\_ea\_noexpand\_csname _body:\_csstring#1\_endcsname + ##1\_the\_toks0 \_noexpand\_finbody}% + \_foreachdefA#1{#2}} +\_def\_foreachdefA#1#2#3{% + \_long\_sdef{_body:\_csstring#1}#2{\_testparam##1..\_iftrue #3\_cs{_body:\_csstring#1\_ea}\_fi}} + +\_public \foreachdef ; + + \_doc ---------------------------- + \secc Is-macros + There are a collection of macros + \^`\isempty`, \^`\istoksempty`, \^`\isequal`, \^`\ismacro`, + \^`\isdefined`, \^`\isinlist`, \^`\isfile` and \^`\isfont` + with common syntax: + \begtt \catcode`\<=13 + \issomething <params> \iftrue <codeA> \else <codeB> \fi + or + \issomething <params> \iffalse <codeB> \else <codeA> \fi + \endtt + The `\else` part is optional. The `<codeA>` is processed if + `\issomething<params>` generates true condition. The `<codeB>` + is processed if `\issomething<params>` generates false condition. + + The `\iftrue` or `\iffalse` is an integral part of this syntax + because we need to keep skippable nested `\if` conditions. + + Implementation note: + we read this `\iftrue` or `\iffalse` into unseparated parameter and repeat + it because we need to remove an optional space before this command. + + \medskip\noindent + \`\isempty` `{<text>}\iftrue` + is true if the `<text>` is empty. This macro is expandable.\nl + \`\istoksempty` `<tokens variable>\iftrue` + is true if the `<tokens variable>` is empty. It is expandable. + \_cod ---------------------------- + +\_long\_def \_isempty #1#2{\_if\_relax\_detokenize{#1}\_relax \_else \_ea\_unless \_fi#2} +\_def \_istoksempty #1#2{\_ea\_isempty\_ea{\_the#1}#2} +\_public \isempty \istoksempty ; + + \_doc ---------------------------- + \`\isequal` `{<textA>}{<textB>}\iftrue` + is true if the <textA> and <textB> are + equal, only from strings point of view, category codes are ignored. + The macro is expandable. + \_cod ---------------------------- + +\_def\_isequal#1#2#3{\_directlua{% + if "\_luaescapestring{\_detokenize{#1}}"=="\_luaescapestring{\_detokenize{#2}}" + then else tex.print("\_nbb unless") end}#3} +\_public \isequal ; + + \_doc ---------------------------- + \`\ismacro` `\macro{text}\iftrue` is true if macro is defined as {<text>}. + Category codes are ignored in this testing. The macro is expandable. + \_cod ---------------------------- + +\_def\_ismacro#1{\_ea\_isequal\_ea{#1}} +\_public \ismacro ; + + \_doc ---------------------------- + \`\isdefined` `{<csname>}\iftrue` is true if `\<csname>` is defined. + The macro is expandable. + \_cod ---------------------------- + +\_def\_isdefined #1#2{\_ifcsname #1\_endcsname \_else \_ea\_unless \_fi #2} +\_public \isdefined ; + + \_doc ---------------------------- + \`\isinlist` `\list{<text>}\iftrue` is true if the + `<text>` is included the macro body of the `\list`. + The category codes are relevant here. The macro is not expandable. + \_cod ---------------------------- + +\_long\_def\_isinlist#1#2{\_begingroup + \_long\_def\_tmp##1#2##2\_end/_% + {\_endgroup\_if\_relax\_detokenize{##2}\_relax \_ea\_unless\_fi}% + \_ea\_tmp#1\_endlistsep#2\_end/_% +} +\_public \isinlist ; + + \_doc ----------------------------- + \`\isfile` `{<filename>}\iftrue` is true if the file <filename> exists and are + readable by \TeX. + \_cod ----------------------------- + +\_newread \_testin +\_def\_isfile #1{% + \_openin\_testin ={#1}\_relax + \_ifeof\_testin \_ea\_unless + \_else \_closein\_testin + \_fi +} +\_public \isfile ; + + \_doc ----------------------------- + \`\isfont` `{<fontname or [fontfile]>}\iftrue` + is true if a given font exists. The result of this testing + is saved to the \`\_ifexistfam`. + \_cod ----------------------------- + +\_newifi \_ifexistfam +\_def\_isfont#1#2{% + \_begingroup + \_suppressfontnotfounderror=1 + \_font\_testfont={#1}\_relax + \_ifx\_testfont\_nullfont \_def\_tmp{\_existfamfalse \_unless} + \_else \_def\_tmp{\_existfamtrue}\_fi + \_ea \_endgroup \_tmp #2% +} +\_public \isfont ; + + \_doc ---------------------------- + The last macro \`\isnextchar` `<char>{<codeA>}{<codeB>}` + has a different syntax than all other is-macros. + It executes `<codeA>` if next character is equal to <char>. + Else the `<codeB>` is executed. The macro is not expandable. + \_cod ---------------------------- + +\_long\_def\_isnextchar#1#2#3{\_begingroup\_toks0={\_endgroup#2}\_toks1={\_endgroup#3}% + \_let\_tmp= #1\_futurelet\_next\_isnextcharA +} +\_def\_isnextcharA{\_the\_toks\_ifx\_tmp\_next0\_else1\_fi\_space} + +\_public \isnextchar ; + + +\_endcode + +2021-02-03 public version of \loop and \foreach are \long +2020-05-22 \foreach, \fornum: all settings are global, independent on TeX group +2020-05-06 \isnextchar: \let\tmp=#1 -> \let\tmp= #1 (bug fix, #1 should be space) +2020-05-02 \newif bug fix +2020-04-15 \fornumstep 3: 1..12 instead \fornum 1..12\step 3 +2020-04-15 \fornum, \foreach can be nested without groups +2020-04-01 implemented diff --git a/Master/texmf-dist/tex/optex/base/keyval.opm b/Master/texmf-dist/tex/optex/base/keyval.opm new file mode 100644 index 00000000000..b0462296b37 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/keyval.opm @@ -0,0 +1,82 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \readkv {Key-value dictionaries <2020-12-21>} % preloaded in format + + \_doc ---------------------------- + {\bf Implementation.} + The \`\readkv` expands its parameter and does replace-strings in order to + remove spaces around equal signs and after commas. Double commas are + removed. Then \`\_kvscan` reads the parameters list finished by the double + comma and saves values to `\_kv:<key>` macros.\nl + The \`\kv``{<key>}` expands the `\_kv:<key>` macro. If this macro isn't + defined then \`\_kvunknown` is processed. You can re-define it if you want. + \_cod ---------------------------- + +\_def\_readkv#1{\_ea\_def\_ea\_tmpb\_ea{#1}% + \_replstring\_tmpb{= }{=}\_replstring\_tmpb{ =}{=}% + \_replstring\_tmpb{, }{,}\_replstring\_tmpb{,,}{,}% + \_ea \_kvscan \_tmpb,,=,} +\_def\_kvscan #1#2=#3,{\_ifx#1,\_else \_sdef{_kv:#1#2}{#3}\_ea\_kvscan\_fi} +\_def\_kv#1{\_trycs{_kv:#1}{\_kvunknown}} +\_def\_kvunknown{???} + +\public \readkv \kv ; + +\_endcode + +Users or macro programmers can define macros with options in key=value format. +It means a comma-separated list of equations key=value. First, we give an +example. + +Suppose that you want to define a macro `\myframe` with options: color of +rules, color of text inside the frame, rule-width, space between text and +rules. You want to use this macro as: + +\begtt +\myframe [margins=5pt,rule-width=2pt,frame-color=\Red,text-color=\Blue] {text1} +or +\myframe [frame-color=\Blue] {text2} % other parameters are default +\endtt +% +You can define `\myframe` as follows: + +\begtt +\def\myframedefaults{% defaults: + frame-color=\Black, % color of frame rules + text-color=\Black, % color ot text nside the frame + rule-width=0.4pt, % width of rules used in the frame + margins=2pt, % space between text inside and rules. +} +\optdef\myframe [] #1{\bgroup + \ea\addto\ea\myframedefaults\ea{\ea,\the\opt}% + \readkv\myframedefaults + \rulewidth=\kv{rule-width} + \hhkern=\kv{margins}\vvkern=\kv{margins}\relax + \kv{frame-color}\frame{\kv{text-color}\strut #1}% + \egroup} +\endtt +% +We recommend using \^`\optdef` for defining macros with optional parameters +written in `[]`. Then the optional parameters are saved in the \^`\opt` tokens +register. First: we append the \^`\opt` (actual optional parameters) to +`\myframedefault` by \^`\addto` macro. +Second: we read the parameters by +\^`\readkv{<pramaters list>}` macro. +Third: the values can be used by expandable \^`\kv{<key>}` macro. +The \^`\kv{<key>}` returns `???` if such key is not declared. + +You can use keys without values in the parameters list too, but with +additional care. For example, suppose `draft` option without parameter. +If a user writes `\myframe [..., draft, ...]{text}` then `\myframe` should behave differently. +We have to add `DRAFTv=0,` in `\myframedefault` macro. +Moreover, `\myframe` macro must include preprocessing of `\myframedefault` using +\^`\replstring` which replaces the occurrence of `draft` by `DRAFTv=1`. +\begtt +\optdef\myframe [] #1{... + \ea\addto\ea\myframedefaults\ea{\the\opt}% + \replstring\myframedefaults{draft}{DRAFTv=1}% + \readkv\myframedefaults + ... + \ifnum\kv{DRAFTv}=1 draft mode\else normal mode\fi + ...} +\endtt diff --git a/Master/texmf-dist/tex/optex/base/languages.opm b/Master/texmf-dist/tex/optex/base/languages.opm new file mode 100644 index 00000000000..ff9373b7202 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/languages.opm @@ -0,0 +1,188 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \_mtext {Languages <2021-01-21>} % preloaded in format + + \_doc ----------------------------- + Only four words are generated by \OpTeX/ macros: \"Chapter", + \"Table", \"Figure" and \"Subject". These phrases can be generated depending + on the current value of `\language` register, if you use \`\_mtext``{<phrase-id>}`, + specially `\_mtext{chap}`, `\_mtext{t}`, `\_mtext{f}` or `\_mtext{subj}`. + If your macros generate more words then + you can define such words by `\sdef{_mt:<phrase-id>:<lang>}` where + `<phrase-id>` is a label for the declared word and `<lang>` is a language shortcut + (iso code). + \_cod ----------------------------- + +\_def\_mtext#1{\_trycs{_mt:#1:\_trycs{_lan:\_the\_language}{en}} + {\_csname _mt:#1:en\_endcsname}} + +\_sdef{_mt:chap:en}{Chapter} \_sdef{_mt:chap:cs}{Kapitola} \_sdef{_mt:chap:sk}{Kapitola} +\_sdef{_mt:t:en}{Table} \_sdef{_mt:t:cs}{Tabulka} \_sdef{_mt:t:sk}{Tabuľka} +\_sdef{_mt:f:en}{Figure} \_sdef{_mt:f:cs}{Obrázek} \_sdef{_mt:f:sk}{Obrázok} +\_sdef{_mt:subj:en}{Subject} \_sdef{_mt:subj:cs}{Věc} \_sdef{_mt:subj:sk}{Vec} + + \_doc ----------------------------- + Using \`\_langw` `<lang> <chapter> <table> <figure> <subject>` you can + declare these words more effectively: + \maxlines=13 + \_cod ----------------------------- + +\_def \_langw #1 #2 #3 #4 #5 {% + \_sdef{_mt:chap:#1}{#2}\_sdef{_mt:t:#1}{#3}\_sdef{_mt:f:#1}{#4}% + \_sdef{_mt:subj:#1}{#5}% +} + +\_langw en Chapter Table Figure Subject +%-------------------------------------------------------------- +\_langw cs Kapitola Tabulka Obrázek Věc +\_langw de Kapitel Tabelle Abbildung Betreff +\_langw es Capítulo Tabla Figura Sujeto +\_langw fr Chaptire Tableau Figure Matière +\_langw it Capitolo Tabella Fig. Oggetto +\_langw pl Rozdział Tabela Ilustracja Temat +\_langw gr Κεφάλαιο Πίνακας Σχήμα θέμα +\_langw ru Глава Таблица Рисунок Предмет +\_langw sk Kapitola Tabuľka Obrázok Vec + + \_doc ----------------------------- + You can add more words as you wish. For example \`\today` macro: + \_cod ----------------------------- + +\_def \_monthw #1 #2 #3 #4 #5 #6 #7 {% + \_sdef{_mt:m1:#1}{#2}\_sdef{_mt:m2:#1}{#3}\_sdef{_mt:m3:#1}{#4}% + \_sdef{_mt:m4:#1}{#5}\_sdef{_mt:m5:#1}{#5}\_sdef{_mt:m6:#1}{#5}% + \_monthwB #1 +} +\_def \_monthwB #1 #2 #3 #4 #5 #6 #7 {% + \_sdef{_mt:m7:#1}{#2}\_sdef{_mt:m8:#1}{#3}\_sdef{_mt:m9:#1}{#4}% + \_sdef{_mt:m10:#1}{#5}\_sdef{_mt:m11:#1}{#5}\_sdef{_mt:m12:#1}{#5}% +} + +\_monthw en January February March April May June + July August September October November December +\_monthw cs ledna února března dubna května června + července srpna září října listopadu prosince +\_monthw sk januára februára marca apríla mája júna + júla augusta septembra októbra novembra decembra +\_monthw it gennaio febbraio marzo aprile maggio giugno + luglio agosto settembre ottobre novembre dicembre + + +\_sdef{_mt:today:en}{\_mtext{m\_the\_month} \_the\_day, \_the\_year} +\_sdef{_mt:today:cs}{\_the\_day.~\_mtext{m\_the\_month} \_the\_year} +\_slet{_mt:today:sk}{_mt:today:cs} + +\_def\_today{\_mtext{today}} +\_public \today ; + + \_doc ----------------------------- + Quotes should be tagged by `\"<text>"` and `\'<text>'` if `\<iso-code>quotes` + is declared at beginning of the document (for example `\enquotes`). + If not, then the control + sequences `\"` and `\'` are undefined. Remember, that they are used in + another meaning when the `\oldaccents` command is used. + The macros `\"` and `\'` are not defined as `\protected` because we need + their expansion when `\outlines` are created. + User can declare quotes by \^`\quoteschars``<clqq><crqq><clq><crq>`, where + `<clqq>...<crqq>` are normal quotes and `<clq>...<crq>` are alternative quotes. + or use \`\altquotes` to swap between the meaning of these two types of quotes. + \nl + \`\enquotes`, \`\csquotes`, \`\dequotes`, \`\frquotes` etc. are defined here. + \_cod ----------------------------- + +\_def \_enquotes {\_quoteschars “”‘’} +\_def \_csquotes {\_quoteschars „“‚‘} +\_def \_frquotes {\_quoteschars “”«»} +\_let \_plquotes = \_frquotes +\_let \_esquotes = \_frquotes +\_let \_grquotes = \_frquotes +\_let \_ruquotes = \_frquotes +\_let \_itquotes = \_frquotes +\_let \_skquotes = \_csquotes +\_let \_dequotes = \_csquotes + + \_doc ----------------------------- + The \`\quoteschars``<lqq><rqq><lq><rq>` defines `\"` and `\"` as `\_qqA` + in in normal mode and as expadable macros in outline mode. + We want to well process the common cases: \code{\\"`&`"} or \code{\\"`\{`"}. + This is the reason why the quotes parameter is read in verbatim mode and retokenized + again by `\scantextokens`. We want to allow to quote the quotes mark + itself by \code{\\"{`"`}"}. This is the reason why the sub-verbatim mode is + used when the first character is \code{\{} in the parameter.\nl + The `\"` is defined as `\_qqA\_qqB<lqq><rqq>` and `\'` as `\_qqA\_qqC<lq><rq>`. + The \`\_qqA``\_qqB<clqq><crqq>` runs \`\_qqB``<lqq><rqq><text>"`.\nl + The \`\_regquotes``\""<L><R>` does `\def\"#1"{<L>#1<R>}` for outlines but the `"` + separator is active (because `"` and `'` are active in \^`\pdfunidef`). + \_cod ----------------------------- + +\_def \_quoteschars #1#2#3#4{\_def\_altquotes{\_quoteschars#3#4#1#2}\_public\altquotes;% + \_protected\_def \"{\_qqA\_qqB#1#2}\_protected\_def \'{\_qqA\_qqC#3#4}% + \_regmacro{}{}{\_regquotes\""#1#2\_regquotes\''#3#4}} + +\_def\_qqA#1#2#3{\_bgroup\_setverb \_catcode`\ =10 + \_isnextchar\_bgroup{\_catcode`\{=1 \_catcode`\}=2 #1#2#3}{#1#2#3}} +\_long\_def\_qqB#1#2#3"{\_egroup#1\_scantextokens{#3}#2} +\_long\_def\_qqC#1#2#3'{\_egroup#1\_scantextokens{#3}#2} +\_def\_regquotes#1#2#3#4{\_bgroup \_lccode`~=`#2\_lowercase{\_egroup \_def#1##1~}{#3##1#4}} + + \_doc ----------------------------- + Sometimes should be usable to leave the markup `"such"` or `'such'` i.e.~without + the first backslash. Then you can make the characters `"` and `'` active + by the \`\activequotes` macro and leave quotes without the first backslash. + First, declare `\<iso-code>quotes`, then \^`\altquotes` (if needed) and finally + \^`\activequotes`. + \_cod ----------------------------- + +\_def\_activequotes{\_let\_actqq=\"\_adef"{\_actqq}\_let\_actq=\'\_adef'{\_actq}% + \_regmacro{}{}{\_adef"{\"}\_adef'{\'}}} + +\_public \quoteschars \activequotes \enquotes \csquotes \skquotes \frquotes \plquotes + \esquotes \grquotes \ruquotes \itquotes \dequotes ; + + \_doc ----------------------------- + Bibliography references generated by \^`\usebib` uses more + language-dependent phrases. They are declared here. We don't want to save + all these phrases into the format, so the trick with {`\_endinput`} + is used here. When \^`\usebib` is processed then the following part of the file + `languages.opm` is read again. + + Only phrases of few languages are declared here now. If you want to declare + phrases of your language, please create an \"issue" or a \"request" at + \url{https://github.com/olsak/OpTeX} or send me an email with new + phrases for your language (or language you know:). I am ready to put them here. + Temporarily, you can put your definitions into `\bibtexhook` token list. + \_cod ----------------------------- + +\_endinput % don't save these \def's to the format + +\_def\_langb#1 #2#3#4#5#6#7#8#9{\_def\_mbib##1##2{\_sdef{_mt:bib.##2:#1}{##1}}% + \_mbib{#2}{and}\_mbib{#3}{etal}\_mbib{#4}{edition}\_mbib{#5}{citedate}\_mbib{#6}{volume}% + \_mbib{#7}{number}\_mbib{#8}{prepages}\_mbib{#9}{postpages}\_langbA} +\_def\_langbA#1#2#3#4#5#6#7{\_mbib{#1}{editor}\_mbib{#2}{editors}\_mbib{#3}{available}% + \_mbib{#4}{availablealso}\_mbib{#5}{bachthesis}\_mbib{#6}{masthesis}\_mbib{#7}{phdthesis}} + +\_langb en {, and } { et al.} { ed.} {cit.~} {Vol.~} {No.~} {pp.~} {~p.} {,~ed.} {,~eds.} + {Available from } {Available also from } + {Bachelor's Thesis} {Master's Thesis} {Ph.D. Thesis} +%------------------------------------------------------------------------------------------ +\_langb cs { a } { a~kol.} { vyd.} {vid.~} {ročník~} {č.~} {s.~} {~s.} {,~editor} {,~editoři} + {Dostupné na } {Dostupné též na } + {Bakalářská práce} {Diplomová práce} {Disertační práce} +\_langb sk { a } { a~kol.} { vyd.} {vid.~} {ročník~} {č.~} {s.~} {~s.} {,~editor} {,~editoři} + {Dostupné na } {Dostupné tiež na } + {Bakalárska práca} {Diplomová práca} {Dizertačná práca} + +% \_<lang>dateformat year/month/day\relax, for example: \_csdateformat 2020/05/21\relax +% This is used in iso690 bib-style when the field "citedate" is used. + +\_def\_endateformat #1/#2/#3\relax{#1-#2-#3} +% \_csdateformat 2020/05/21\relax -> \hbox{21. 5. 2020} +\_def\_csdateformat #1/#2/#3\relax{\hbox{\_tmpnum=#3 \_the\_tmpnum. \_tmpnum=#2 \_the\_tmpnum. #1}} +\_let\_skdateformat =\_csdateformat + +\_endcode % ------------------------------------- + +2021-01-21 more robust quotes in outlines +2020-12-05 bib phrases moved here +2020-04-29 Obrazek -> Abbildung: bug fixed +2020-03-15 introduced diff --git a/Master/texmf-dist/tex/optex/base/lists.opm b/Master/texmf-dist/tex/optex/base/lists.opm new file mode 100644 index 00000000000..189719302dd --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/lists.opm @@ -0,0 +1,128 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \begitems {Lists: begitems, enditems <2021-03-10>} % preloaded in format + + \_doc ----------------------------- + \`\_aboveliskip` is used above the list of items,\nl + \`\_belowliskip` is used below the list of items and\nl + \`\_interliskip` is used between items.\nl + \`\_listskipA` is used as `\listskipamount` at level 1 of items.\nl + \`\_listskipB` is used as `\listskipamount` at other levels.\nl + \`\_setlistskip` sets the skip dependent on the current level of items + \_cod ----------------------------- + +\_def\_aboveliskip {\_removelastskip \_penalty-100 \_vskip\_listskipamount} +\_def\_belowliskip {\_penalty-200 \_vskip\_listskipamount} +\_def\_interliskip {} +\_def\_listskipA {\_medskipamount} +\_def\_listskipB {0pt plus.5\_smallskipamount} + +\_def\_setlistskip {% + \_ifnum \_ilevel = 1 \_listskipamount = \_listskipA \_relax + \_else \_listskipamount = \_listskipB \_relax + \_fi} + + \_doc ----------------------------- + The \`\itemnum` is locally reset to zero in each group declared by + `\begitems`. So nested lists are numbered independently. Users can set + initial value of `\itemnum` to another value after `\beitems` if they want. + \nl + Each level of nested lists is indented by the new `\iindent` from left. + The default item mark is `\_printitem`. + \nl + The \`\begitems` runs `\_aboveliskip` only if we are not near below a title, + where a vertical skip is placed already and where the `\penalty` 11333 is. + It activates `*` and defines it as \`\_startitem`. + \nl + The \`\enditems` runs `\_isnextchar\_par{}{\_noindent}` thus the next + paragraph is without indentation if there is no empty line between + the list and this paragraph (it is similar behavior as after display math). + \_cod ----------------------------- + +\_newcount\_itemnum \_itemnum=0 +\_newtoks\_printitem + +\_def\_begitems{\_par + \_bgroup + \_advance \_ilevel by1 + \_setlistskip + \_ifnum\_lastpenalty<10000 \_aboveliskip \_fi + \_itemnum=0 \_adef*{\_relax\_ifmmode*\_else\_ea\_startitem\_fi} + \_advance\_leftskip by\_iindent + \_printitem=\_defaultitem + \_the\_everylist \_relax +} +\_def\_enditems{\_par\_belowliskip\_egroup \_isnextchar\_par{}{\_noindent}} + +\_def\_startitem{\_par \_ifnum\_itemnum>0 \_interliskip \_fi + \_advance\_itemnum by1 + \_the\_everyitem \_noindent\_llap{\_the\_printitem}\_ignorespaces +} +\_public \begitems \enditems \itemnum ; + + \_doc ---------------------------- + \`\novspaces` sets \`\listskipamount` to 0pt. + \_cod ---------------------------- + +\_def\_novspaces {\_removelastskip \_listskipamount=0pt \_relax} +\_public \novspaces ; + + \_doc ----------------------------- + Various item marks are saved in `\_item:<letter>` macros. + You can re-define then or define more such macros. + The \`\style` `<letter>` does \`\_printitem``={\_item:<letter>}`. + More exactly: \^`\begitems` does `\_printitem=`\^`\defaultitem` first, + then \`\style` `<letter>` does \`\_printitem``={\_item:<letter>}` + when it is used and finally, `\_startitem` alias `*` uses `\_printitem`. + \_cod ----------------------------- + +\_def\_style#1{% + \_ifcsname _item:#1\_endcsname \_printitem=\ea{\_csname _item:#1\_endcsname}% + \_else \_printitem=\_defaultitem \_fi +} +\_sdef{_item:o}{\_raise.4ex\_hbox{$\_scriptscriptstyle\_bullet$} } +\_sdef{_item:-}{- } +\_sdef{_item:n}{\_the\_itemnum. } +\_sdef{_item:N}{\_the\_itemnum) } +\_sdef{_item:i}{(\_romannumeral\_itemnum) } +\_sdef{_item:I}{\_uppercase\_ea{\_romannumeral\_itemnum}\_kern.5em} +\_sdef{_item:a}{\_athe\_itemnum) } +\_sdef{_item:A}{\_uppercase\_ea{\_athe\_itemnum}) } +\_sdef{_item:x}{\_raise.3ex\_fullrectangle{.6ex}\_kern.4em} +\_sdef{_item:X}{\_raise.2ex\_fullrectangle{1ex}\_kern.5em} + + \_doc ----------------------------- + \`\_athe``{<num>}` returns the `<num>`s lowercase letter from the alphabet.\nl + \`\_fullrectangle``{<dimen>}` prints full rectangle with given `<dimen>`. + \_cod ----------------------------- + +\_def\_fullrectangle#1{\_hbox{\_vrule height#1 width#1}} + +\_def\_athe#1{\_ifcase#1?\_or a\_or b\_or c\_or d\_or e\_or f\_or g\_or h\_or + i\_or j\_or k\_or l\_or m\_or n\_or o\_or p\_or q\_or r\_or s\_or t\_or + u\_or v\_or w\_or x\_or y\_or z\_else ?\_fi +} +\_public \style ; + + \_doc ----------------------------- + The \`\begblock` macro selects fonts from footnotes \^`\_fnset` + and opens new indentation in a group. + \`\endblock` closes the group. + This is implemented as an counterpart + of Markdown's Blockquotes. Redefine these macros if you want to declare + different design. + The \ulink[http://petr.olsak.net/optex/optex-tricks.html\#greyblock]{\OpTeX/ trick 0031} + shows how to create blocks with grey background splittable to more pages. + \_cod ----------------------------- + +\_def\_begblock{\_bgroup\_fnset \_medskip \_advance\_leftskip by\_iindent \_firstnoindent} +\_def\_endblock{\_par\_medskip\_egroup\_isnextchar\_par{}{\_noindent}} + +\_public \begblock \endblock ; + + +\_endcode % ------------------------------------- + +2021-03-10 \_ifmmode*\_else\_ea\_startitem\_fi added to * defintition +2020-04-21 \isnextchar\par added to \enditems +2020-03-18 introduced diff --git a/Master/texmf-dist/tex/optex/base/logos.opm b/Master/texmf-dist/tex/optex/base/logos.opm new file mode 100644 index 00000000000..a510a74a304 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/logos.opm @@ -0,0 +1,61 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \TeX {Logos TeX, LuaTeX, etc. <2020-02-28>} % preloaded in format + + \_doc ---------------------------- + Despite plain \TeX/ each macro for logos ends by \`\ignoreslash`. + This macro ignores the next slash if it is present. + You can `use \TeX/ like this` for protecting the space following the logo. + This is visually more comfortable. + The macros \`\TeX`, \`\OpTeX`, \`\LuaTeX`, \`\XeTeX` are defined. + \_cod ---------------------------- + +\_protected\_def \_TeX {T\_kern-.1667em\_lower.5ex\_hbox{E}\_kern-.125emX\_ignoreslash} +\_protected\_def \_OpTeX {Op\_kern-.1em\_TeX} +\_protected\_def \_LuaTeX {Lua\_TeX} +\_protected\_def \_XeTeX {X\_kern-.125em\_phantom E% + \_pdfsave\_rlap{\_pdfscale{-1}{1}\_lower.5ex\_hbox{E}}\_pdfrestore \_kern-.1667em \_TeX} + +\_def\_ignoreslash {\_isnextchar/\_ignoreit{}} + +\_public \TeX \OpTeX \LuaTeX \XeTeX \ignoreslash ; + + \_doc ----------------------------- + The \`\_slantcorr` macro expands to the slant-correction of the current font. It is + used to shifting A if the \`\LaTeX` logo is in italic. + \_cod ----------------------------- + +\_protected\_def \_LaTeX{\_tmpdim=.42ex L\_kern-.36em \_kern \_slantcorr % slant correction + \_raise \_tmpdim \_hbox{\_thefontscale[710]A}% + \_kern-.15em \_kern-\_slantcorr \_TeX} +\_def\_slantcorr{\_ea\_ignorept \_the\_fontdimen1\_font\_tmpdim} + +\_public \LaTeX ; + + \_doc ----------------------------- + \`\OPmac`, \`\CS` and \`\csplain` logos. + \_cod ----------------------------- + +\_def\_OPmac{\_leavevmode + \_lower.2ex\_hbox{\_thefontscale[1400]O}\_kern-.86em P{\_em mac}\_ignoreslash} +\_def\_CS{$\_cal C$\_kern-.1667em\_lower.5ex\_hbox{$\_cal S$}\_ignoreslash} +\_def\_csplain{\_CS plain\_ignoreslash} + +\_public \OPmac \CS \csplain ; + + \_doc ---------------------------- + The expandable versions of logos used in Outlines need the expandable + \`\ingnslash` (instead of the \^`\ignoreslash`). + \_cod \_fin ---------------------- + +\_def\_ignslash#1{\_ifx/#1\_else #1\_fi} +\_regmacro {}{}{% conversion for PDF outlines + \_def\TeX{TeX\_ignslash}\_def\OpTeX{OpTeX\_ignslash}% + \_def\LuaTeX{LuaTeX\_ignslash}\_def\XeTeX{XeTeX\_ignslash}% + \_def\LaTeX{LaTeX\_ignslash}\_def\OPmac{OPmac\_ignslash}% + \_def\CS{CS}\_def\csplain{csplain\_ignslash}% +} +\_public \ignslash ; + +\_endcode + diff --git a/Master/texmf-dist/tex/optex/base/luatex-ini.opm b/Master/texmf-dist/tex/optex/base/luatex-ini.opm new file mode 100644 index 00000000000..e0526a48d61 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/luatex-ini.opm @@ -0,0 +1,136 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \pdfprimitive {LuaTeX initialization code <2020-02-21>} % preloaded in format + +\_let\_pdfpagewidth \pagewidth +\_let\_pdfpageheight \pageheight +\_let\_pdfadjustspacing \adjustspacing +\_let\_pdfprotrudechars \protrudechars +\_let\_pdfnoligatures \ignoreligaturesinfont +\_let\_pdffontexpand \expandglyphsinfont +\_let\_pdfcopyfont \copyfont +\_let\_pdfxform \saveboxresource +\_let\_pdflastxform \lastsavedboxresourceindex +\_let\_pdfrefxform \useboxresource +\_let\_pdfximage \saveimageresource +\_let\_pdflastximage \lastsavedimageresourceindex +\_let\_pdflastximagepages \lastsavedimageresourcepages +\_let\_pdfrefximage \useimageresource +\_let\_pdfsavepos \savepos +\_let\_pdflastxpos \lastxpos +\_let\_pdflastypos \lastypos +\_let\_pdfoutput \outputmode +\_let\_pdfdraftmode \draftmode +\_let\_pdfpxdimen \pxdimen +\_let\_pdfinsertht \insertht +\_let\_pdfnormaldeviate \normaldeviate +\_let\_pdfuniformdeviate \uniformdeviate +\_let\_pdfsetrandomseed \setrandomseed +\_let\_pdfrandomseed \randomseed +\_let\_pdfprimitive \primitive +\_let\_ifpdfprimitive \ifprimitive +\_let\_ifpdfabsnum \ifabsnum +\_let\_ifpdfabsdim \ifabsdim + +\_public + \pdfpagewidth \pdfpageheight \pdfadjustspacing \pdfprotrudechars + \pdfnoligatures \pdffontexpand \pdfcopyfont \pdfxform \pdflastxform + \pdfrefxform \pdfximage \pdflastximage \pdflastximagepages \pdfrefximage + \pdfsavepos \pdflastxpos \pdflastypos \pdfoutput \pdfdraftmode \pdfpxdimen + \pdfinsertht \pdfnormaldeviate \pdfuniformdeviate \pdfsetrandomseed + \pdfrandomseed \pdfprimitive \ifpdfprimitive \ifpdfabsnum \ifpdfabsdim ; + +\_directlua {tex.enableprimitives('pdf',{'tracingfonts'})} + +\_protected\_def \_pdftexversion {\_numexpr 140\_relax} + \_def \_pdftexrevision {7} +\_protected\_def \_pdflastlink {\_numexpr\_pdffeedback lastlink\_relax} +\_protected\_def \_pdfretval {\_numexpr\_pdffeedback retval\_relax} +\_protected\_def \_pdflastobj {\_numexpr\_pdffeedback lastobj\_relax} +\_protected\_def \_pdflastannot {\_numexpr\_pdffeedback lastannot\_relax} + \_def \_pdfxformname {\_pdffeedback xformname} +{\_outputmode=1 + \_xdef\_pdfcreationdate {\_pdffeedback creationdate} +} + \_def \_pdffontname {\_pdffeedback fontname} + \_def \_pdffontobjnum {\_pdffeedback fontobjnum} + \_def \_pdffontsize {\_pdffeedback fontsize} + \_def \_pdfpageref {\_pdffeedback pageref} + \_def \_pdfcolorstackinit {\_pdffeedback colorstackinit} +\_protected\_def \_pdfliteral {\_pdfextension literal} +\_protected\_def \_pdfcolorstack {\_pdfextension colorstack} +\_protected\_def \_pdfsetmatrix {\_pdfextension setmatrix} +\_protected\_def \_pdfsave {\_pdfextension save\_relax} +\_protected\_def \_pdfrestore {\_pdfextension restore\_relax} +\_protected\_def \_pdfobj {\_pdfextension obj } +\_protected\_def \_pdfrefobj {\_pdfextension refobj } +\_protected\_def \_pdfannot {\_pdfextension annot } +\_protected\_def \_pdfstartlink {\_pdfextension startlink } +\_protected\_def \_pdfendlink {\_pdfextension endlink\_relax} +\_protected\_def \_pdfoutline {\_pdfextension outline } +\_protected\_def \_pdfdest {\_pdfextension dest } +\_protected\_def \_pdfthread {\_pdfextension thread } +\_protected\_def \_pdfstartthread {\_pdfextension startthread } +\_protected\_def \_pdfendthread {\_pdfextension endthread\_relax} +\_protected\_def \_pdfinfo {\_pdfextension info } +\_protected\_def \_pdfcatalog {\_pdfextension catalog } +\_protected\_def \_pdfnames {\_pdfextension names } +\_protected\_def \_pdfincludechars {\_pdfextension includechars } +\_protected\_def \_pdffontattr {\_pdfextension fontattr } +\_protected\_def \_pdfmapfile {\_pdfextension mapfile } +\_protected\_def \_pdfmapline {\_pdfextension mapline } +\_protected\_def \_pdftrailer {\_pdfextension trailer } +\_protected\_def \_pdfglyphtounicode {\_pdfextension glyphtounicode } + +\_protected\_edef\_pdfcompresslevel {\_pdfvariable compresslevel} +\_protected\_edef\_pdfobjcompresslevel {\_pdfvariable objcompresslevel} +\_protected\_edef\_pdfdecimaldigits {\_pdfvariable decimaldigits} +\_protected\_edef\_pdfgamma {\_pdfvariable gamma} +\_protected\_edef\_pdfimageresolution {\_pdfvariable imageresolution} +\_protected\_edef\_pdfimageapplygamma {\_pdfvariable imageapplygamma} +\_protected\_edef\_pdfimagegamma {\_pdfvariable imagegamma} +\_protected\_edef\_pdfimagehicolor {\_pdfvariable imagehicolor} +\_protected\_edef\_pdfimageaddfilename {\_pdfvariable imageaddfilename} +\_protected\_edef\_pdfpkresolution {\_pdfvariable pkresolution} +\_protected\_edef\_pdfinclusioncopyfonts {\_pdfvariable inclusioncopyfonts} +\_protected\_edef\_pdfinclusionerrorlevel {\_pdfvariable inclusionerrorlevel} +\_protected\_edef\_pdfgentounicode {\_pdfvariable gentounicode} +\_protected\_edef\_pdfpagebox {\_pdfvariable pagebox} +\_protected\_edef\_pdfminorversion {\_pdfvariable minorversion} +\_protected\_edef\_pdfuniqueresname {\_pdfvariable uniqueresname} +\_protected\_edef\_pdfhorigin {\_pdfvariable horigin} +\_protected\_edef\_pdfvorigin {\_pdfvariable vorigin} +\_protected\_edef\_pdflinkmargin {\_pdfvariable linkmargin} +\_protected\_edef\_pdfdestmargin {\_pdfvariable destmargin} +\_protected\_edef\_pdfthreadmargin {\_pdfvariable threadmargin} +\_protected\_edef\_pdfpagesattr {\_pdfvariable pagesattr} +\_protected\_edef\_pdfpageattr {\_pdfvariable pageattr} +\_protected\_edef\_pdfpageresources {\_pdfvariable pageresources} +\_protected\_edef\_pdfxformattr {\_pdfvariable xformattr} +\_protected\_edef\_pdfxformresources {\_pdfvariable xformresources} +\_protected\_edef\_pdfpkmode {\_pdfvariable pkmode} + +\_public + \pdftexversion \pdftexrevision \pdflastlink \pdfretval \pdflastobj + \pdflastannot \pdfxformname \pdfcreationdate \pdffontname \pdffontobjnum + \pdffontsize \pdfpageref \pdfcolorstackinit \pdfliteral \pdfcolorstack + \pdfsetmatrix \pdfsave \pdfrestore \pdfobj \pdfrefobj \pdfannot + \pdfstartlink \pdfendlink \pdfoutline \pdfdest \pdfthread \pdfstartthread + \pdfendthread \pdfinfo \pdfcatalog \pdfnames \pdfincludechars \pdffontattr + \pdfmapfile \pdfmapline \pdftrailer \pdfglyphtounicode \pdfcompresslevel + \pdfobjcompresslevel \pdfdecimaldigits \pdfgamma \pdfimageresolution + \pdfimageapplygamma \pdfimagegamma \pdfimagehicolor \pdfimageaddfilename + \pdfpkresolution \pdfinclusioncopyfonts \pdfinclusionerrorlevel + \pdfgentounicode \pdfpagebox \pdfminorversion \pdfuniqueresname \pdfhorigin + \pdfvorigin \pdflinkmargin \pdfdestmargin \pdfthreadmargin \pdfpagesattr + \pdfpageattr \pdfpageresources \pdfxformattr \pdfxformresources \pdfpkmode ; + +\_pdfminorversion = 5 +\_pdfobjcompresslevel = 2 +\_pdfcompresslevel = 9 +\_pdfdecimaldigits = 3 +\_pdfpkresolution = 600 + +\_endcode + +Common pdf\TeX/ primitives equivalents are declared here. Initial values are set. diff --git a/Master/texmf-dist/tex/optex/base/makeindex.opm b/Master/texmf-dist/tex/optex/base/makeindex.opm new file mode 100644 index 00000000000..e5f7b4032e4 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/makeindex.opm @@ -0,0 +1,463 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \makeindex {Makeindex and sorting <2021-02-15>} % loaded in format + + \_doc ----------------------------- + \^`\makeindex` implements sorting algorithm at \TeX/ macro-language level. + You need not any external program. + + There are two passes in the sorting algorithm. The primary pass does not + distinguish between a group of letters (typically non-accented and + accented). If the result of comparing two string is equal in primary pass + then the secondary pass is started. It distinguishes between variously accented + letters. Czech rules, for example, says: not accented before dieresis + before acute before circumflex before ring. At less priority: lowercase + letters must be before uppercase letters. + + The \`\_sortingdata``<iso-code>` implements these rules for the language + <iso-code>. The groups between commas are not distinguished in the first + pass. The second pass distinguishes all characters mentioned in the + `\_sortingdata<iso-code>` (commas are ignored). The order of letters + in the `\_sortingdata<iso-code>` macro is significant for the sorting algorithm. + The Czech rules (`cs`) are implemented here: + \_cod ----------------------------- + +\_def \_sortingdatacs {% + /,{ },-,&,@,% + aAäÄáÁ,% + bB,% + cC,% + čČ,% + dDďĎ,% + eEéÉěĚ,% + fF,% + gG,% + hH,% + ^^T^^U^^V,% ch Ch CH + iIíÍ,% + jJ,% + kK,% + lLĺĹľĽ,% + mM,% + nNňŇ,% + oOöÖóÓôÔ,% + pP,% + qQ,% + rRŕŔ,% + řŘ,% + sS,% + šŠ,% + tTťŤ,% + uUüÜúÚůŮ,% + vV,% + wW,% + xX,% + yYýÝ,% + zZ,% + žŽ,% + 0,1,2,3,4,5,6,7,8,9,'% +} + + \_doc ----------------------------- + Characters ignored by the sorting algorithm are declared in \`\_ignoredchars``<iso-code>`. + The compound characters (two or more characters interpreted as one + character in the sorting algorithm) are mapped to single invisible characters + in \`\_compoundchars``<iso-code>`. Czech rules declare ch or Ch or CH as + a single letter sorted between H and I. See \`\_sortingdatacs` above where + these declared characters are used. + + The characters declared in `\_ignoredchars` are ignored in the first pass + without additional condition. All characters are taken into account in + second pass: ASCII characters with code $\string<65$ are sorted first if they + are not mentioned in the `\_sortingdata<iso-code>` macro. + Others not mentioned characters have undefined behavior during sorting. + \_cod ----------------------------- + +\_def \_ignoredcharscs {.,;?!:'"|()[]<>=+} +\_def \_compoundcharscs {ch:^^T Ch:^^U CH:^^V} % DZ etc. are sorted normally + + \_doc ----------------------------- + Slovak sorting rules are the same as Czech. The macro `\_sortingdatacs` + includes Slovak letters too. Compound characters are the same. + English sorting rules can be defined by `\_sortingdatacs` too because + English alphabet is a subset of the Czech and Slovak alphabets. Only + difference: \`\_compoundcharsen` is empty in English rules. + + You can declare these macros for more languages if you wish to use + `\makeindex` with sorting rules with respect to your language. + Note: if you need to map compound characters to a character, don't use + `^^I` or `^^M` because these characters have very specific category codes. + And use space to separate more mappings, like in \`\_compoundcharscs` above. + \_cod ----------------------------- + +\_let \_sortingdatask = \_sortingdatacs +\_let \_compoundcharssk = \_compoundcharscs +\_let \_ignoredcharssk = \_ignoredcharscs +\_let \_sortingdataen = \_sortingdatacs +\_def \_compoundcharsen {} +\_let \_ignoredcharsen = \_ignoredcharscs + + \_doc ----------------------------- + Preparing to primary pass is implemented by the \`\_setprimarysorting` macro. + It is called from `\makeindex` macro and all processing of sorting is in a group. + \_cod ----------------------------- + +\_def\_setprimarysorting {% + \_ea\_let \_ea\_sortingdata \_csname _sortingdata\_sortinglang\_endcsname + \_ea\_let \_ea\_compoundchars \_csname _compoundchars\_sortinglang\_endcsname + \_ea\_let \_ea\_ignoredchars \_csname _ignoredchars\_sortinglang\_endcsname + \_ifx \_sortingdata\_relax \_addto\_nold{ sortingdata}% + \_let \_sortingdata = \_sortingdataen \_fi + \_ifx \_compoundchars\_relax \_addto\_nold{ compoundchars}% + \_let \_compoundchars = \_compoundcharsen \_fi + \_ifx \_ignoredchars\_relax \_addto\_nold{ ignoredchars}% + \_let \_ignoredchars = \_ignoredcharsen \_fi + \_ifx \_compoundchars\_empty \_else + \_edef \_compoundchars {\_detokenize\_ea{\_compoundchars} }\_fi % all must be catcode 12 + \_def \_act ##1{\_ifx##1\_relax \_else + \_ifx##1,\_advance\_tmpnum by1 + \_else \_lccode`##1=\_tmpnum \_fi + \_ea\_act \_fi}% + \_tmpnum=65 \_ea\_act \_sortingdata \_relax + \_def \_act ##1{\_ifx##1\_relax \_else + \_lccode`##1=`\^^I + \_ea\_act \_fi}% + \_ea\_act \_ignoredchars \_relax +} + + \_doc ----------------------------- + Preparing to secondary pass is implemented by the \`\_setsecondarysorting` macro. + \_cod ----------------------------- + +\_def\_setsecondarysorting {% + \_def \_act ##1{\_ifx##1\_relax \_else + \_ifx##1,\_else \_advance\_tmpnum by1 \_lccode`##1=\_tmpnum \_fi + \_ea\_act \_fi}% + \_tmpnum=64 \_ea\_act \_sortingdata \_relax +} + + \_doc ----------------------------- + Strings to be sorted are prepared in `\,<string>` control sequences + (to save `\TeX` memory). + The \`\_preparesorting` `\,<string>` converts `<string>` to `\_tmpb` + with respect to the data initialized in \^`\_setprimarysorting` or + \^`\_setsecondarysorting`.\nl + The compoud characters are converted to single characters by the + \`\_docompound` macro. + \_cod ----------------------------- + +\_def \_preparesorting #1{% + \_edef \_tmpb {\_ea\_ignorefirst\_csstring #1}% \,<string> -> <string> + \_ea \_docompound \_compoundchars \_relax:{} % replace compound characters + \_lowercase \_ea{\_ea\_def \_ea\_tmpb \_ea{\_tmpb}}% convert in respect to \_sortingdata + \_ea\_replstring \_ea\_tmpb \_ea{\_csstring\^^I}{}% remove ignored characters +} +\_def \_docompound #1:#2 {% + \_ifx\_relax#1\_else \_replstring\_tmpb {#1}{#2}\_ea\_docompound \_fi +} +\_def \_ignorefirst#1{} + + \_doc ----------------------------- + Macro \`\_isAleB` `\,<string1> \,<string2>` returns the result of comparison + of given two strings to \`\_ifAleB` control sequence. Usage: + `\isAleB \,<string1> \,<string2> \_ifAleB ... \_else ... \_fi` + The converted strings (in respect of the data prepared for first pass) + must be saved as values of `\,<string1>` and `\,<string2>` macros. + The reason is speed: we don't want to convert them repeatedly in each + comparison. + \nl + The macro + \`\_testAleB` `<converted string1>&\_relax<converted-string2>\_relax \,<string1>\,<string2>`\nl + does the real work. It reads the first character from both converted strings, compares them + and if it is equal then calls itself recursively else gives the result. + \_cod ----------------------------- + +\_newifi \_ifAleB + +\_def\_isAleB #1#2{% + \_edef\_tmpb {#1&\_relax#2&\_relax}% + \_ea \_testAleB \_tmpb #1#2% +} +\_def\_testAleB #1#2\_relax #3#4\_relax #5#6{% + \_if #1#3\_if #1&\_testAleBsecondary #5#6% goto to the second pass:: + \_else \_testAleB #2\_relax #4\_relax #5#6% + \_fi + \_else \_ifnum `#1<`#3 \_AleBtrue \_else \_AleBfalse \_fi + \_fi +} +\_def\_testAleBsecondary#1#2{% + \_bgroup + \_setsecondarysorting + \_preparesorting#1\_let\_tmpa=\_tmpb \_preparesorting#2% + \_edef\_tmpb{\_tmpa0\_relax\_tmpb1\_relax}% + \_ea\_testAleBsecondaryX \_tmpb + \_egroup +} +\_def\_testAleBsecondaryX #1#2\_relax #3#4\_relax {% + \_if #1#3\_testAleBsecondaryX #2\_relax #4\_relax + \_else \_ifnum `#1<`#3 \_global\_AleBtrue \_else \_global \_AleBfalse \_fi + \_fi +} + + \_doc ----------------------------- + Merge sort is very effectively implemented by \TeX/ macros. The following + code is created by my son Miroslav. + The \`\_mergesort` macro expects that all items in `\_iilist` are separated + by a comma when it starts. It ends with sorted items in `\_iilist` without commas. + So `\_dosorting` macro must prepare commas between items. + \_cod ----------------------------- + +\_def\_mergesort #1#2,#3{% by Miroslav Olsak + \_ifx,#1% % prazdna-skupina,neco, (#2=neco #3=pokracovani) + \_addto\_iilist{#2,}% % dvojice skupin vyresena + \_sortreturn{\_fif\_mergesort#3}% % \mergesort pokracovani + \_fi + \_ifx,#3% % neco,prazna-skupina, (#1#2=neco #3=,) + \_addto\_iilist{#1#2,}% % dvojice skupin vyresena + \_sortreturn{\_fif\_mergesort}% % \mergesort dalsi + \_fi + \_ifx\_end#3% % neco,konec (#1#2=neco) + \_ifx\_empty\_iilist % neco=kompletni setrideny seznam + \_def\_iilist{#1#2}% + \_sortreturn{\_fif\_fif\_gobbletoend}% % koncim + \_else % neco=posledni skupina nebo \end + \_sortreturn{\_fif\_fif % spojim \indexbuffer+necoa cele znova + \_edef\_iilist{\_ea}\_ea\_mergesort\_iilist#1#2,#3}% + \_fi\_fi % zatriduji: p1+neco1,p2+neco2, (#1#2=p1+neco1 #3=p2) + \_isAleB #1#3\_ifAleB % p1<p2 + \_addto\_iilist{#1}% % p1 do bufferu + \_sortreturn{\_fif\_mergesort#2,#3}% % \mergesort neco1,p2+neco2, + \_else % p1>p2 + \_addto\_iilist{#3}% % p2 do bufferu + \_sortreturn{\_fif\_mergesort#1#2,}% % \mergesort p1+neco1,neco2, + \_fi + \_relax % zarazka, na ktere se zastavi \sortreturn +} +\_def\_sortreturn#1#2\_fi\_relax{#1} \_def\_fif{\_fi} +\_def\_gobbletoend #1\_end{} + + \_doc ----------------------------- + The \`\_dosorting` `\list` macro redefines `\list` as sorted `\list`. + The `\list` have to include control sequences in the form `\<c><string>`. + These control sequences will be sorted with respect to <strings> without + change of meanings of these control sequences. Their meanings are + irrelevant when sorting. The first character <c> in `\<c><string>` should + be whatever. It does not influence the sorting. \OpTeX/ uses comma at + this place for sorting indexes: `\,<word1> \,<word2> \,<word3> ...`. + + The actual language (chosen for hyphenation patterns) is used for + sorting data. If the `\_sortinglang` macro + is defined as `<iso-code>`(for example `\def\sortinglang{de}`) + then this has precedence and actual language is not used. + Moreover, if you specify \`\_asciisortingtrue` then ASCII + sorting will be processed and all language sorting data will be ignored. + \_cod ----------------------------- + +\_newifi \_ifasciisorting \_asciisortingfalse +\_def\_dosorting #1{% + \_begingroup + \_def\_nold{}% + \_ifx\_sotringlang\_undefined \_edef\_sortinglang{\_cs{_lan:\_the\_language}}\_fi + \_ifasciisorting + \_edef\_sortinglang{ASCII}% + \_def \_preparesorting##1{\_edef\_tmpb{\_ea\_ignorefirst\_csstring##1}}% + \_let \_setsecondarysorting=\_relax + \_else + \_setprimarysorting + \_fi + \_message{OpTeX: Sorting \_string#1 (\_sortinglang) ...^^J}% + \_ifx\_nold\_empty\_else \_opwarning{Missing\_nold\_space for language (\_sortinglang)}\_fi + \_def \_act##1{\_preparesorting ##1\_edef##1{\_tmpb}}% + \_ea\_xargs \_ea\_act #1;% + \_def \_act##1{\_addto #1{##1,}}% + \_edef #1{\_ea}\_ea\_xargs \_ea\_act #1;% + \_edef \_iilist{\_ea}\_ea\_mergesort #1\_end,\_end + \_ea\_endgroup + \_ea\_def\_ea#1\_ea{\_iilist}% +} + + \_doc ----------------------------- + The \`\makeindex` prints the index. First, it sorts the `\_iilist` + second, it prints the sorted `\_iilist`, each item is printed + using \^`\_printindexitem`. + \_cod ----------------------------- + +\_def\_makeindex{\_par + \_ifx\_iilist\_empty \_opwarning{index data-buffer is empty. TeX me again}% + \_incr\_unresolvedrefs + \_else + \_dosorting \_iilist % sorting \_iilist + \_bgroup + \_rightskip=0pt plus1fil \_exhyphenpenalty=10000 \_leftskip=\_iindent + \_ea\_xargs \_ea\_printindexitem \_iilist ;\_par + \_egroup + \_fi +} +\_public \makeindex ; + + \_doc ----------------------------- + The \`\_printindexitem` `\,<word>` prints one item to the index. + If `\_,<word>` is defined then this is used instead real <word> + (this exception is declared by `\iis` macro). Else <word> is printed by + \^`\_printii`. Finally, \^`\_printiipages` prints the value of `\,<word>`, + i.e. the list of pages. + \_cod ----------------------------- + +\_def\_printindexitem #1{% + \_ifcsname _\_csstring #1\_endcsname + \_ea\_ea\_ea \_printii \_csname _\_csstring #1\_endcsname &% + \_else + \_ea\_ea\_ea\_printii \_ea\_ignorefirst \_csstring #1&% + \_fi + \_ea\_printiipages #1& +} + + \_doc ----------------------------- + \`\_printii` `<word>&` does more intelligent work because we are working with + words in the form `<main-word>/<sub-word>/<sub-sub-word>`. + The \^`\everyii` tokens register is applied before `\noindent`. User can + declare something special here. + + The \`\_newiiletter``{<letter>}` macro is empty by default. It is invoked if first + letter of index entries is changed. You can declare a design between + index entries here. You can try, for example: + \begtt + \def\_newiiletter#1#2{% + \bigskip \hbox{\setfontsize{at15pt}\bf\uppercase{#1}}\medskip} + \endtt + \_cod ----------------------------- + +\_def\_printii #1#2&{% + \_ismacro\_lastii{#1}\_iffalse \_newiiletter{#1}{#2}\_def\_lastii{#1}\_fi + \_gdef\_currii{#1#2}\_the\_everyii\_noindent + \_hskip-\_iindent \_ignorespaces\_printiiA#1#2//} +\_def\_printiiA #1/{\_if^#1^\_let\_previi=\_currii \_else + \_ea\_scanprevii\_previi/&\_edef\_tmpb{\_detokenize{#1}}% + \_ifx\_tmpa\_tmpb \_iiemdash \_else#1 \_gdef\_previi{}\_fi + \_ea\_printiiA\_fi +} +\_def\_iiemdash{\_kern.1em---\_space} +\_def\_lastii{} +\_def\_newiiletter#1#2{} + +\_def\_scanprevii#1/#2&{\_def\_previi{#2}\_edef\_tmpa{\_detokenize{#1}}} +\_def\_previi{} % previous index item + + \_doc ----------------------------- + \`\_printiipages` `<pglist>&` gets `<pglist>` in the form + `<pg>:<type>,<pg>:<type>,...<pg>:<type>` and it converts them to + `<pg>, <pg>, <from>--<to>, <pg>` etc. The same pages must be printed only once + and continuous consequences of pages must be compressed to the form <from>-<to>. + Moreover, the consequence is continuous only if all pages have the same <type>. + Empty <type> is most common, pages with `b` <type> must be printed as bold + and with `i` `<type>` as italics. + Moreover, the `<pg>` mentioned here are <gpageno>, but we have to print + <pageno>. The following macros solve these tasks. + \_cod ----------------------------- + +\_def\_printiipages#1&{\_let\_pgtype=\_undefined \_tmpnum=0 \_printpages #1,:,\_par} +\_def\_printpages#1:#2,{% state automaton for compriming pages + \_ifx,#1,\_uselastpgnum + \_else \_def\_tmpa{#2}% + \_ifx\_pgtype\_tmpa \_else + \_let\_pgtype=\_tmpa + \_uselastpgnum \_usepgcomma \_pgprint#1:{#2}% + \_tmpnum=#1 \_returnfi \_fi + \_ifnum\_tmpnum=#1 \_returnfi \_fi + \_advance\_tmpnum by1 + \_ifnum\_tmpnum=#1 \_ifx\_lastpgnum\_undefined \_usepgdash\_fi + \_edef\_lastpgnum{\_the\_tmpnum:{\_pgtype}}% + \_returnfi \_fi + \_uselastpgnum \_usepgcomma \_pgprint#1:{#2}% + \_tmpnum=#1 + \_relax + \_ea\_printpages \_fi +} +\_def\_returnfi #1\_relax{\_fi} +\_def\_uselastpgnum{\_ifx\_lastpgnum\_undefined + \_else \_ea\_pgprint\_lastpgnum \_let\_lastpgnum=\_undefined \_fi +} +\_def\_usepgcomma{\_ifnum\_tmpnum>0, \_fi} % comma+space between page numbers +\_def\_usepgdash{\_hbox{--}} % dash in the <from>--<to> form + + \_doc ----------------------------- + You can re-define \`\_pgprint` `<gpageno>:{<iitype>}` + if you need to implement more <iitypes>. + \_cod ----------------------------- + +\_def\_pgprint #1:#2{% + \_ifx ,#2,\_pgprintA{#1}\_returnfi \_fi + \_ifx b#2{\_bf \_pgprintA{#1}}\_returnfi \_fi + \_ifx i#2{\_it \_pgprintA{#1}}\_returnfi \_fi + \_ifx u#2\_pgu{\_pgprintA{#1}}\_returnfi \_fi + \_pgprintA{#1}\_relax +} +\_def\_pgprintA #1{\_ilink[pg:#1]{\_cs{_pgi:#1}}} % \ilink[pg:<gpageno>]{<pageno>} +\_def\_pgu#1{\_leavevmode\_vtop{\_hbox{#1}\kern.3ex\_hrule}} + + \_doc ----------------------------- + The \`\iindex``{<word>}` puts one <word> to the index. It writes + \^`\_Xindex``{<word>}{<iitype>}` to the `.ref` file. + All other variants of indexing macros expand internally to `\iindex`. + \_cod ----------------------------- + +\_def\_iindex#1{\_isempty{#1}\_iffalse + \_openref{\_def~{ }\_ewref\_Xindex{{#1}{\_iitypesaved}}}\_fi} +\_public \iindex ; + + \_doc ----------------------------- + The \`\_Xindex``{<word>}{<iitype>}` stores `\,<word>` to the `\_iilist` if + there is the first occurrence of the <word>. The list of pages where `<word>` + occurs, is the value of the macro `\,<word>`, so the `<gpageno>:<iitype>` + is appended to this list. + Moreover, we need a mapping from <gpageno> to `<pageno>`, because we print + `<pageno>` in the index, but hyperlinks are implemented by `<gpageno>`. + So, the macro `\_pgi:<gpageno>` is defined as `<pageno>`. + \_cod ----------------------------- + +\_def \_iilist {} +\_def \_Xindex #1#2{\_ea\_XindexA \_csname ,#1\_ea\_endcsname \_currpage {#2}} +\_def \_XindexA #1#2#3#4{% #1=\,<word> #2=<gpageno> #3=<pageno> #4=<iitype> + \_ifx#1\_relax \_global\_addto \_iilist {#1}% + \_gdef #1{#2:#4}% + \_else \_global\_addto #1{,#2:#4}% + \_fi + \_sxdef{_pgi:#2}{#3}% +} + + \_doc ----------------------------- + The implementation of macros \`\ii`, \`\iid`, \`\iis` follows. + Note that `\ii` works in the horizontal mode in order to the `\write` whatsit + is not broken from the following word. If you need to keep vertical mode, + use \^`\iindex``{<word>}` directly. + \nl + The \`\iitype` `{<type>}` saves the `<type>` to the \`\_iitypesaved` macro. It is + used in the \^`\iindex` macro. + \_cod ----------------------------- + +\_def\_ii #1 {\_leavevmode\_def\_tmp{#1}\_iiA #1,,\_def\_iitypesaved{}} + +\_def\_iiA #1,{\_if$#1$\_else\_def\_tmpa{#1}% + \_ifx\_tmpa\_iiatsign \_ea\_iiB\_tmp,,\_else\_iindex{#1}\_fi + \_ea\_iiA\_fi} +\_def\_iiatsign{@} + +\_def\_iiB #1,{\_if$#1$\_else \_iiC#1/\_relax \_ea\_iiB\_fi} +\_def\_iiC #1/#2\_relax{\_if$#2$\_else\_iindex{#2#1}\_fi} + +\_def\_iid #1 {\_leavevmode\_iindex{#1}#1\_futurelet\_tmp\_iiD\_def\_iitypesaved{}} +\_def\_iiD{\_ifx\_tmp,\_else\_ifx\_tmp.\_else\_space\_fi\_fi} + +\_def\_iis #1 #2{{\_def~{ }\_global\_sdef{_,#1}{#2}}\_ignorespaces} + +\_def\_iitypesaved{} +\_def\_iitype #1{\_def\_iitypesaved{#1}\_ignorespaces} + +\_public \ii \iid \iis \iitype ; + +\_endcode % ------------------------------------- + +2021-02-15 \_expandafter -> \_ea +2021-02-01 secodary sorting: start from code 65 +2020-04-21 \isempty \iffalse ... \fi added to \iindex +2020-03-26 introduced diff --git a/Master/texmf-dist/tex/optex/base/maketoc.opm b/Master/texmf-dist/tex/optex/base/maketoc.opm new file mode 100644 index 00000000000..8dfd821640a --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/maketoc.opm @@ -0,0 +1,154 @@ +% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \maketoc {Macros for maketoc <2020-02-09>} % preloaded in format + + \_doc ------------------------------------ + \`\_Xtoc` `{<level>}{<type>}{<number>}{<o-title>}<title>` (in `.ref` file) reads + given data and appends them to the \`\_toclist` as + \^`\_tocline``{<level>}{<type>}{<number>}{<o-title>}{<title>}{<gpageno>}{<pageno>}` + where: + \begitems + * `<level>`: 0 reserved, 1: chapter, 2: section, 3: subsection + * `<type>`: the type of the level, i.e. chap, sec, secc + * `<number>`: the number of the chapter/section/subsection in the format 1.2.3 + * `<o-title>`: outlines title, if differs from `<title>`. + * `<title>`: the title text + * `<gpageno>`: the page number numbered from 1 independently of pagination + * `<pageno>`: the page number used in the pagination + \enditems + The last two parameters are restored from previous + \^`\_Xpage``{<pageno>}{<gpageno>}`, data were saved in the \^`\_currpage` macro. + + We read the <title> parameter by \^`\scantoeol` from `.ref` file + because the <title> can include something like \code{`\{`}. + \_cod ------------------------------------ + +\_def\_toclist{} +\_newifi \_ifischap \_ischapfalse + +\_def\_Xtoc#1#2#3#4{\_ifnum#1=0 \_ischaptrue\_fi + \_addto\_toclist{\_tocline{#1}{#2}{#3}{#4}}\_scantoeol\_XtocA} +\_def\_XtocA#1{\_addto\_toclist{{#1}}\_ea\_addto\_ea\_toclist\_ea{\_currpage}} + + \_doc ------------------------------------ + \`\_tocline``{<level>}{<type>}{<number>}{<o-title>}{<title>}{<gpageno>}{<pageno>}` + prints the record to the table of contents. It opens group, reduces `\_leftskip`, + `\_rightskip`, runs the \^`\everytocline` (user can customise the design of TOC + here) and runs `\_tocl:<level> {<number>}{<title>}{<pageno>}` macro. + This macro starts with vertical mode, + inserts one record with given `<level>` and it should end by \^`\_tocpar` + which returns to horizontal mode. The `\_tocpar` + appends `\_nobreak \_hskip-2\_iindent\_null \_par`. This causes + that the last line of the record is shifted outside the margin given by + `\_rightskip`. A typical record (with long `<title>`) looks like this: + \begtt \catcode`\<=13 + | | + \llap{<number>} text text text text text + text text text text text + text text .................... <pageno> + \endtt + Margins given by `\leftskip` and `\rightskip` are denoted by `|` in the + examle above. + \nl + \`\tocrefnum` is the global counter of all TOC records (used by hyperlinks). + \_cod ------------------------------------ + +\_newcount \_tocrefnum +\_def\_tocline#1#2#3#4#5#6#7{% + \_advance\_tocrefnum by1 + \_bgroup + \_leftskip=\_iindent \_rightskip=2\_iindent + \_ifischap \_advance\_leftskip by \_iindent \_fi + \_def\_pgn{\_ilink[pg:#6]}% + \_the\_everytocline + \_ifcsname _tocl:#1\_endcsname + \_cs{_tocl:#1}{#3}{\_scantextokens{#5}}{#7}\_par + \_fi + \_egroup +} +\_public \tocrefnum ; + + \_doc ----------------------------------- + You can re-define default macros for each level of tocline if you want.\nl + Parameters are `{<number>}{<title>}{<pageno>}`. + \_cod ----------------------------------- + +\_sdef{_tocl:1}#1#2#3{\_nofirst\_bigskip \_bf\_llaptoclink{#1}{#2}\_hfill \_pgn{#3}\_tocpar} +\_sdef{_tocl:2}#1#2#3{\_llaptoclink{#1}{#2}\_tocdotfill \_pgn{#3}\_tocpar} +\_sdef{_tocl:3}#1#2#3{\_advance\_leftskip by\_iindent \_cs{_tocl:2}{#1}{#2}{#3}} + + \_doc ----------------------------------- + The auxiliary macros are: + \begitems + * \`\_llaptoclink``<text>` does `\_noindent\_llap{<linked text>}`. + * \`\_tocdotfill` creates dots in the TOC. + * \`\_nofirst``\macro` applies the `\macro` only if we don't print the first + record of the TOC. + * \`\_tocpar` finalizes one TOC recors whith rlapped `<pageno>`. + * \`\_pgn``{<pageno>}` creates <pageno> as link to real `<gpage>` saved in `#6` + of \^`\_tocline`. This is temporarily defined in the \^`\_tocline`. + \enditems + \_cod ---------------------------------- + +\_def\_llaptoclink#1{\_noindent + \_llap{\_ilink[toc:\_the\_tocrefnum]{\_enspace#1\_kern.4em}\_kern.1em}} +\_def\_tocdotfill{\_nobreak\_leaders\_hbox to.8em{\_hss.\_hss}\_hskip 1em plus1fill\_relax} +\_def\_nofirst #1{\_ifnum \_lastpenalty=11333 \_else #1\_fi} +\_def\_tocpar{\_nobreak \_hskip-2\_iindent\_null \_par} + + \_doc ----------------------------------- + If you want a special formating of TOC with adding more + special lines (no generated as titles from `\chap`, `\sec`, `\secc`), you + can define `\addtotoc{<level>}{<type>}{<number>}{<o-title>}{<title>}` macro: + \begtt + \def\addtotoc#1#2#3#4#5{% + \incr\_tocrefnum + \_dest[toc:\_the\_tocrefnum]% + \_ewref\_Xtoc{{#1}{#2}{#3}{#4}#5}% + } + \endtt + and you can declare special lines (or something else) + as an unused level (10 in the following example): + \begtt + \sdef{_tocl:10}#1#2#3{\medskip\hbox{\Blue #2}\medskip} + \endtt + Now, users can add a blue line into TOC by + \begtt \catcode`\<=13 + \addtotoc{10}{blue-line}{}{\relax}{<blue text to be added in the TOC>} + \endtt + anywhere in the document. Note that `\relax` in the fourth parameter + means that outline will be not generated. And second parameter + `blue-line` is only a comment (unused in macros). + + \`\maketoc` prints warning if TOC data is empty, else it creates TOC by + running \^`\_toclist` + \_cod ---------------------------------- + +\_def\_maketoc{\_par \_ifx\_toclist\_empty + \_opwarning{\_noexpand\maketoc -- data unavailable, TeX me again}\_openref + \_incr\_unresolvedrefs + \_else \_begingroup + \_tocrefnum=0 \_penalty11333 + \_the\_regtoc \_toclist + \_endgroup \_fi +} + + \_doc ----------------------------------- + \`\regmacro` appends its parameters to \`\_regtoc`, \`\_regmark` and + \`\_regoul`. These token lists are used in \^`\maketoc`, \^`\_begoutput` and + \^`\pdfunidef`. + \_cod \_fin ----------------------------- + +\_newtoks \_regtoc \_newtoks \_regmark \_newtoks \_regoul + +\_def\_regmacro #1#2#3{% + \_toksapp\_regtoc{#1}\_toksapp\_regmark{#2}\_toksapp\_regoul{#3}% +} +\_public \maketoc \regmacro ; + +\_endcode + +2021-02-09 \thisoutline implemented +2020-04-23 \_tocpar introduced (incompatible change) +2020-04-22 \_pg -> \_pgn (incompatible change) +2020-03-12 introduced diff --git a/Master/texmf-dist/tex/optex/base/margins.opm b/Master/texmf-dist/tex/optex/base/margins.opm new file mode 100644 index 00000000000..d88cc04237f --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/margins.opm @@ -0,0 +1,80 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \margins {Macros for margins setting <2021-03-15>} % preloaded in format + + \_doc ---------------------------- + \`\margins``/<pg> <fmt> (<left>,<right>,<top>,<bot>)<unit>` + takes its parameters, does calculation and sets `\hoffset`, `\voffset`, + `\hsize` and `\vsize` registers. Note that \OpTeX/ sets the page origin at + the top left corner of the paper, no at the obscure position 1\,in, 1\,in. + It is much more comfortable for macro writers. + \_cod ---------------------------- + +\_newdimen\_pgwidth \_newdimen\_pgheight \_pgwidth=0pt +\_newdimen\_shiftoffset + +\_def\_margins/#1 #2 (#3,#4,#5,#6)#7 {\_def\_tmp{#7}% + \_ifx\_tmp\_empty + \_opwarning{\_string\_margins: missing unit, mm inserted}\_def\_tmp{mm}\_fi + \_setpagedimens #2 % setting \_pgwidth, \_pgheight + \_ifdim\_pgwidth=0pt \_else + \_hoffset=0pt \_voffset=0pt + \_if$#3$\_if$#4$\_hoffset =\_dimexpr (\_pgwidth -\_hsize)/2 \_relax + \_else \_hoffset =\_dimexpr \_pgwidth -\_hsize - #4\_tmp \_relax % only right margin + \_fi + \_else \_if$#4$\_hoffset = #3\_tmp \_relax % only left margin + \_else \_hsize =\_dimexpr \_pgwidth - #3\_tmp - #4\_tmp \_relax % left+right margin + \_hoffset = #3\_tmp \_relax + \_xhsize =\_hsize \_setxhsize % \_xhsize used by \output routine + \_fi\_fi + \_if$#5$\_if$#6$\_voffset =\_dimexpr (\_pgheight -\_vsize)/2 \_relax + \_else \_voffset =\_dimexpr \_pgheight -\_vsize - #6\_tmp \_relax % only bottom margin + \_fi + \_else \_if$#6$\_voffset = #5\_tmp \_relax % only top margin + \_else \_vsize=\_dimexpr \_pgheight - #5\_tmp - #6\_tmp \_relax % top+bottom margin + \_voffset = #5\_tmp \_relax + \_fi\_fi + \_if 1#1\_shiftoffset=0pt \_def\_prepoffsets{}\_else \_if 2#1% double-page layout + \_shiftoffset = \_dimexpr \_pgwidth -\_hsize -2\_hoffset \_relax + \_def\_prepoffsets{\_ifodd\_pageno \_else \_advance\_hoffset \_shiftoffset \_fi}% + \_else \_opwarning{use \_string\_margins/1 or \_string\_margins/2}% + \_fi\_fi\_fi +} +\_def\_setpagedimens{\_isnextchar({\_setpagedimensB}{\_setpagedimensA}} +\_def\_setpagedimensA#1 {\_ifcsname _pgs:#1\_endcsname + \_ea\_ea\_ea\_setpagedimensB \_csname _pgs:#1\_ea\_endcsname\_space + \_else \_opwarning{page specification "#1" is undefined}\_fi} +\_def\_setpagedimensB (#1,#2)#3 {\_setpagedimensC\_pgwidth=#1:#3 + \_setpagedimensC\_pgheight=#2:#3 + \_pdfpagewidth=\_pgwidth \_pdfpageheight=\_pgheight +} +\_def\_setpagedimensC #1=#2:#3 {#1=#2\_ifx^#3^\_tmp\_else#3\_fi\_relax\_truedimen#1} + +\_public \margins ; + + \_doc ---------------------------- + The common page dimensions are defined here. + \_cod ---------------------------- + +\_sdef{_pgs:a3}{(297,420)mm} \_sdef{_pgs:a4}{(210,297)mm} \_sdef{_pgs:a5}{(148,210)mm} +\_sdef{_pgs:a3l}{(420,297)mm} \_sdef{_pgs:a4l}{(297,210)mm} \_sdef{_pgs:a5l}{(210,148)mm} +\_sdef{_pgs:b5}{(176,250)mm} \_sdef{_pgs:letter}{(8.5,11)in} + + \_doc ---------------------------- + \`\magscale` `[<factor>]` does `\mag=<factor>` and recalculates page + dimensions to their true values. + \_cod ---------------------------- + +\_def\_trueunit{} +\_def\_magscale[#1]{\_mag=#1\_def\_trueunit{true}% + \_ifdim\_pgwidth=0pt \_else \_truedimen\_pgwidth \_truedimen\_pgheight \_fi + \_truedimen\_pdfpagewidth \_truedimen\_pdfpageheight +} +\_def\_truedimen#1{\_ifx\_trueunit\_empty \_else#1=\_ea\_ignorept\_the#1truept \_fi} + +\_public \magscale ; + +\_endcode % ----------------------------------------- + +2021-03-15 \_setxhsize added +2020-03-14 released diff --git a/Master/texmf-dist/tex/optex/base/math-macros.opm b/Master/texmf-dist/tex/optex/base/math-macros.opm new file mode 100644 index 00000000000..2b090ee1b8b --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/math-macros.opm @@ -0,0 +1,1079 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \sin {Math macros plus mathchardefs <2021-02-15>} % preloaded in format + + \_doc ----------------------------- + The category code of the character `_` remains as the letter (11) and the mathocode + of it is `"8000`. + It means that it is an active character in math mode. It is defined as the subscript prefix. + + There is a problem: The `x_n` is tokenized as `x`, `_`, `n` and it works + without problems. But `\int``_a^b` is tokenized as `\int``_a`, `^`, `b`. The + control sequence `\int``_a` isn't defined. We must write `\int _a^b`. + + The Lua code presented here solves this problem. But you cannot set your own + control sequence in the form `\<word>_` or `\<word>_<one-letter>` (where + <word> is a sequence of letters) because such control sequences are + inaccessible: preprocessor rewrites it. + + The \`\mathsbon` macro activates the rewriting rule `\<word>_<nonleter>` to + `\<word> _<nonletter>` and + `\<word>``_<letter><nonletter>` to `\<word> _<letter><nonletter>` at input + processor level. The \`\mathsboff` deactivates it. + You can ask by \`\_ifmathsb` if this feature is activated or deactivated. + By default, it is activated in the `\everyjob`, see section~\ref[init]. + Note, that the `\everyjob` is processed after the first line of the document is + read, so the \^`\mathsbon` is activated from the second line of the document. + \_cod ----------------------------- + +\catcode`\_ = 8 \let\sb = _ +\catcode`\_ = 13 \let _ = \sb +\catcode`\_ = 11 +\_private \sb ; + +\_newifi\_ifmathsb \_mathsbfalse +\_def \_mathsbon {% + \_directlua{ + callback.add_to_callback("process_input_buffer", + function (str) + return string.gsub(str.." ", "(\_nbb[a-zA-Z]+)_([a-zA-Z]?[^_a-zA-Z])", "\_pcent 1 _\_pcent 2") + end, "_mathsb") }% + \_global\_mathsbtrue +} +\_def \_mathsboff {% + \_directlua{ callback.remove_from_callback("process_input_buffer", "_mathsb") }% + \_global \_mathsbfalse +} +\_public \mathsboff \mathsbon ; + + \_doc ----------------------------- + All mathcodes are set to equal values as in plain\TeX/. + But all encoding-dependent declarations (like these) will be set + to different values when a Unicode-math font is used. + \_cod ----------------------------- + +\_mathcode`\^^@="2201 % \cdot +\_mathcode`\^^A="3223 % \downarrow +\_mathcode`\^^B="010B % \alpha +\_mathcode`\^^C="010C % \beta +\_mathcode`\^^D="225E % \land +\_mathcode`\^^E="023A % \lnot +\_mathcode`\^^F="3232 % \in +\_mathcode`\^^G="0119 % \pi +\_mathcode`\^^H="0115 % \lambda +\_mathcode`\^^I="010D % \gamma +\_mathcode`\^^J="010E % \delta +\_mathcode`\^^K="3222 % \uparrow +\_mathcode`\^^L="2206 % \pm +\_mathcode`\^^M="2208 % \oplus +\_mathcode`\^^N="0231 % \infty +\_mathcode`\^^O="0140 % \partial +\_mathcode`\^^P="321A % \subset +\_mathcode`\^^Q="321B % \supset +\_mathcode`\^^R="225C % \cap +\_mathcode`\^^S="225B % \cup +\_mathcode`\^^T="0238 % \forall +\_mathcode`\^^U="0239 % \exists +\_mathcode`\^^V="220A % \otimes +\_mathcode`\^^W="3224 % \leftrightarrow +\_mathcode`\^^X="3220 % \leftarrow +\_mathcode`\^^Y="3221 % \rightarrow +\_mathcode`\^^Z="8000 % \ne +\_mathcode`\^^[="2205 % \diamond +\_mathcode`\^^\="3214 % \le +\_mathcode`\^^]="3215 % \ge +\_mathcode`\^^^="3211 % \equiv +\_mathcode`\^^_="225F % \lor +\_mathcode`\ ="8000 % \space +\_mathcode`\!="5021 +\_mathcode`\'="8000 % ^\prime +\_mathcode`\(="4028 +\_mathcode`\)="5029 +\_mathcode`\*="2203 % \ast +\_mathcode`\+="202B +\_mathcode`\,="613B +\_mathcode`\-="2200 +\_mathcode`\.="013A +\_mathcode`\/="013D +\_mathcode`\:="303A +\_mathcode`\;="603B +\_mathcode`\<="313C +\_mathcode`\=="303D +\_mathcode`\>="313E +\_mathcode`\?="503F +\_mathcode`\[="405B +\_mathcode`\\="026E % \backslash +\_mathcode`\]="505D +\_mathcode`\_="8000 % math-active subscript +\_mathcode`\{="4266 +\_mathcode`\|="026A +\_mathcode`\}="5267 +\_mathcode`\^^?="1273 % \smallint + +\_delcode`\(="028300 +\_delcode`\)="029301 +\_delcode`\[="05B302 +\_delcode`\]="05D303 +\_delcode`\<="26830A +\_delcode`\>="26930B +\_delcode`\/="02F30E +\_delcode`\|="26A30C +\_delcode`\\="26E30F + + \_doc ----------------------------- + All control sequences declared by `\mathchardef` are supposed (by default) + only for public usage. It means that they are declared without `_` prefix. + If such sequences are used in internal \OpTeX/ macro then their internal + prefixed form is declared using `\_private` macro.\nl + These encoding dependent declarations will be set to different values + when Unicode-math font is loaded.\nl + The declared sequences for math symbols are not hyperlinked in this documentation. + \maxlines=15 + \_cod ----------------------------- + +\_mathchardef\alpha="010B +\_mathchardef\beta="010C +\_mathchardef\gamma="010D +\_mathchardef\delta="010E +\_mathchardef\epsilon="010F +\_mathchardef\zeta="0110 +\_mathchardef\eta="0111 +\_mathchardef\theta="0112 +\_mathchardef\iota="0113 +\_mathchardef\kappa="0114 +\_mathchardef\lambda="0115 +\_mathchardef\mu="0116 +\_mathchardef\nu="0117 +\_mathchardef\xi="0118 +\_mathchardef\pi="0119 +\_mathchardef\rho="011A +\_mathchardef\sigma="011B +\_mathchardef\tau="011C +\_mathchardef\upsilon="011D +\_mathchardef\phi="011E +\_mathchardef\chi="011F +\_mathchardef\psi="0120 +\_mathchardef\omega="0121 +\_mathchardef\varepsilon="0122 +\_mathchardef\vartheta="0123 +\_mathchardef\varpi="0124 +\_mathchardef\varrho="0125 +\_mathchardef\varsigma="0126 +\_mathchardef\varphi="0127 +\_mathchardef\Gamma="7000 +\_mathchardef\Delta="7001 +\_mathchardef\Theta="7002 +\_mathchardef\Lambda="7003 +\_mathchardef\Xi="7004 +\_mathchardef\Pi="7005 +\_mathchardef\Sigma="7006 +\_mathchardef\Upsilon="7007 +\_mathchardef\Phi="7008 +\_mathchardef\Psi="7009 +\_mathchardef\Omega="700A + +\_mathchardef\aleph="0240 +\_mathchardef\imath="017B +\_mathchardef\jmath="017C +\_mathchardef\ell="0160 +\_mathchardef\wp="017D +\_mathchardef\Re="023C +\_mathchardef\Im="023D +\_mathchardef\partial="0140 +\_mathchardef\infty="0231 +\_mathchardef\prime="0230 +\_mathchardef\emptyset="023B +\_mathchardef\nabla="0272 +\_protected\_def \surd{{\_mathchar"1270}} +\_mathchardef\top="023E +\_mathchardef\bot="023F +\_mathchardef\triangle="0234 +\_mathchardef\forall="0238 +\_mathchardef\exists="0239 +\_mathchardef\neg="023A \_let\lnot=\neg +\_mathchardef\flat="015B +\_mathchardef\natural="015C +\_mathchardef\sharp="015D +\_mathchardef\clubsuit="027C +\_mathchardef\diamondsuit="027D +\_mathchardef\heartsuit="027E +\_mathchardef\spadesuit="027F + +\_mathchardef\coprod="1360 +\_mathchardef\bigvee="1357 +\_mathchardef\bigwedge="1356 +\_mathchardef\biguplus="1355 +\_mathchardef\bigcap="1354 +\_mathchardef\bigcup="1353 +\_mathchardef\intop="1352 +\_protected\_def \int{\_intop\_nolimits} \_private \intop; +\_mathchardef\prod="1351 +\_mathchardef\sum="1350 +\_mathchardef\bigotimes="134E +\_mathchardef\bigoplus="134C +\_mathchardef\bigodot="134A +\_mathchardef\ointop="1348 +\_protected\_def\_oint {\_ointop\_nolimits} \_private \ointop; +\_mathchardef\bigsqcup="1346 +\_mathchardef\smallint="1273 + +\_mathchardef\triangleleft="212F \_private \triangleleft; +\_mathchardef\triangleright="212E \_private \trianglerigt; +\_mathchardef\bigtriangleup="2234 +\_mathchardef\bigtriangledown="2235 +\_mathchardef\wedge="225E \let\land=\wedge +\_mathchardef\vee="225F \let\lor=\vee +\_mathchardef\cap="225C +\_mathchardef\cup="225B +\_mathchardef\ddagger="227A +\_mathchardef\dagger="2279 +\_mathchardef\sqcap="2275 +\_mathchardef\sqcup="2274 +\_mathchardef\uplus="225D +\_mathchardef\amalg="2271 +\_mathchardef\diamond="2205 +\_mathchardef\bullet="220F \_private \bullet; +\_mathchardef\wr="226F +\_mathchardef\div="2204 +\_mathchardef\odot="220C +\_mathchardef\oslash="220B +\_mathchardef\otimes="220A +\_mathchardef\ominus="2209 +\_mathchardef\oplus="2208 +\_mathchardef\mp="2207 +\_mathchardef\pm="2206 +\_mathchardef\circ="220E +\_mathchardef\bigcirc="220D +\_mathchardef\setminus="226E % for set difference A\setminus B +\_mathchardef\cdot="2201 +\_mathchardef\ast="2203 +\_mathchardef\times="2202 +\_mathchardef\star="213F + +\_mathchardef\propto="322F +\_mathchardef\sqsubseteq="3276 +\_mathchardef\sqsupseteq="3277 +\_mathchardef\parallel="326B +\_mathchardef\mid="326A +\_mathchardef\dashv="3261 +\_mathchardef\vdash="3260 +\_mathchardef\nearrow="3225 +\_mathchardef\searrow="3226 +\_mathchardef\nwarrow="322D +\_mathchardef\swarrow="322E +\_mathchardef\Leftrightarrow="322C +\_mathchardef\Leftarrow="3228 +\_mathchardef\Rightarrow="3229 +\_protected\_def \neq{\_not=} \_let\ne=\neq +\_mathchardef\leq="3214 \let\le=\leq +\_mathchardef\geq="3215 \let\ge=\geq +\_mathchardef\succ="321F +\_mathchardef\prec="321E +\_mathchardef\approx="3219 +\_mathchardef\succeq="3217 +\_mathchardef\preceq="3216 +\_mathchardef\supset="321B +\_mathchardef\subset="321A +\_mathchardef\supseteq="3213 +\_mathchardef\subseteq="3212 +\_mathchardef\in="3232 +\_mathchardef\ni="3233 \let\owns=\ni +\_mathchardef\gg="321D +\_mathchardef\ll="321C +% \_mathchardef\not="3236 % defined below +\_mathchardef\leftrightarrow="3224 +\_mathchardef\leftarrow="3220 \_let\gets=\leftarrow +\_mathchardef\rightarrow="3221 \_let\to=\rightarrow +\_mathchardef\mapstochar="3237 +\_protected\_def\mapsto{\_mapstochar\_rightarrow} \_private \mapstochar \rightarrow ; +\_mathchardef\sim="3218 +\_mathchardef\simeq="3227 +\_mathchardef\perp="323F +\_mathchardef\equiv="3211 +\_mathchardef\asymp="3210 +\_mathchardef\smile="315E +\_mathchardef\frown="315F +\_mathchardef\leftharpoonup="3128 +\_mathchardef\leftharpoondown="3129 +\_mathchardef\rightharpoonup="312A +\_mathchardef\rightharpoondown="312B + + \_doc ----------------------------- + The math functions like log, sin, cos are declared in the same way as in + plain\TeX/, but they are `\protected` in \OpTeX/. + \_cod ----------------------------- + +\_protected\_def\log {\_mathop{\_rm log}\_nolimits} +\_protected\_def\lg {\_mathop{\_rm lg}\_nolimits} +\_protected\_def\ln {\_mathop{\_rm ln}\_nolimits} +\_protected\_def\lim {\_mathop{\_rm lim}} +\_protected\_def\limsup {\_mathop{\_rm lim\_thinsk sup}} +\_protected\_def\liminf {\_mathop{\_rm lim\_thinsk inf}} +\_protected\_def\sin {\_mathop{\_rm sin}\_nolimits} +\_protected\_def\arcsin {\_mathop{\_rm arcsin}\_nolimits} +\_protected\_def\sinh {\_mathop{\_rm sinh}\_nolimits} +\_protected\_def\cos {\_mathop{\_rm cos}\_nolimits} +\_protected\_def\arccos {\_mathop{\_rm arccos}\_nolimits} +\_protected\_def\cosh {\_mathop{\_rm cosh}\_nolimits} +\_protected\_def\tan {\_mathop{\_rm tan}\_nolimits} +\_protected\_def\arctan {\_mathop{\_rm arctan}\_nolimits} +\_protected\_def\tanh {\_mathop{\_rm tanh}\_nolimits} +\_protected\_def\cot {\_mathop{\_rm cot}\_nolimits} +\_protected\_def\coth {\_mathop{\_rm coth}\_nolimits} +%\_protected\_def\sec {\_mathop{\_rm sec}\_nolimits} % \sec is section +\_protected\_def\csc {\_mathop{\_rm csc}\_nolimits} +\_protected\_def\max {\_mathop{\_rm max}} +\_protected\_def\min {\_mathop{\_rm min}} +\_protected\_def\sup {\_mathop{\_rm sup}} +\_protected\_def\inf {\_mathop{\_rm inf}} +\_protected\_def\arg {\_mathop{\_rm arg}\_nolimits} +\_protected\_def\ker {\_mathop{\_rm ker}\_nolimits} +\_protected\_def\dim {\_mathop{\_rm dim}\_nolimits} +\_protected\_def\hom {\_mathop{\_rm hom}\_nolimits} +\_protected\_def\det {\_mathop{\_rm det}} +\_protected\_def\exp {\_mathop{\_rm exp}\_nolimits} +\_protected\_def\Pr {\_mathop{\_rm Pr}} +\_protected\_def\gcd {\_mathop{\_rm gcd}} +\_protected\_def\deg {\_mathop{\_rm deg}\_nolimits} + + \_doc ----------------------------- + These macros are defined similarly as in plain\TeX. Only internal macro + names from plain\TeX/ with `@` character are re-written in a more readable + form.\nl + \`\sp` is an alternative for `^`. The \`\sb` alternative for `_` was defined + at line 27 of the file `math-macros.opm`. + \_cod ----------------------------- + +\_let\_sp=^ \public \sp ; +% \sb=_ , defined at beginning of this file + +\_def\_thinsk {\_mskip\_thinmuskip} +\_protected\_def\,{\_relax\_ifmmode \_thinsk \_else \_thinspace \_fi} +\_protected\_def\>{\_mskip\_medmuskip} \let\_medsk = \> +\_protected\_def\;{\_mskip\_thickmuskip} \let\_thicksk = \; +\_protected\_def\!{\_mskip-\_thinmuskip} \let\_thinneg = \! +%\_def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}} % obsolete + + \_doc ----------------------------- + Active \`\prime` character is defined here. + \_cod ----------------------------- + +{\_catcode`\'=\active \_gdef'{^\_bgroup\_primes}} % primes dance +\_def\_primes{\_prime\_isnextchar'{\_primesA}% + {\_isnextchar^{\_primesB}{\_egroup}}} +\_def\_primesA #1{\_primes} +\_def\_primesB #1#2{#2\egroup} +\_private \prime ; + + \_doc ----------------------------- + \`\big`, \`\Big`, \`\bigg`, \`\Bigg`, \`\bigl`, \`\bigm`, \`\bigr`, \`\Bigl`, \`\Bigm`, + \`\Bigr`, \`\biggl`, \`\biggm`, \`\biggr`, \`\Biggl`, \`\Biggm`, \`\Bigg`, \`\Biggr` + are based on the \`\_scalebig` macro because we need the dependency on + the various sizes of the fonts. + \_cod ----------------------------- + +%{\catcode`\^^Z=\active \gdef^^Z{\not=}} % ^^Z is like \ne in math %obsolete + +\_def\_scalebig#1#2{{\_left#1\_vbox to#2\_fontdimen6\_textfont1{}% + \_kern-\_nulldelimiterspace\_right.}} +\_protected\_def\_big#1{\_scalebig{#1}{.85}} +\_protected\_def\_Big#1{\_scalebig{#1}{1.15}} +\_protected\_def\_bigg#1{\_scalebig{#1}{1.45}} +\_protected\_def\_Bigg#1{\_scalebig{#1}{1.75}} +\_public \big \Big \bigg \Bigg ; + +\_protected\_def\_bigl{\_mathopen\_big} +\_protected\_def\_bigm{\_mathrel\_big} +\_protected\_def\_bigr{\_mathclose\_big} +\_protected\_def\_Bigl{\_mathopen\_Big} +\_protected\_def\_Bigm{\_mathrel\_Big} +\_protected\_def\_Bigr{\_mathclose\_Big} +\_protected\_def\_biggl{\_mathopen\_bigg} +\_protected\_def\_biggm{\_mathrel\_bigg} +\_protected\_def\_biggr{\_mathclose\_bigg} +\_protected\_def\_Biggl{\_mathopen\_Bigg} +\_protected\_def\_Biggm{\_mathrel\_Bigg} +\_protected\_def\_Biggr{\_mathclose\_Bigg} +\_public \bigl \bigm \bigr \Bigl \Bigm \Bigr \biggl \biggm \biggr \Biggl \Biggm \Biggr ; + + \_doc ----------------------------- + Math relations defined by the \`\jointrel` plain \TeX/ macro: + \_cod ----------------------------- + +\_protected\_def\_joinrel{\_mathrel{\_mkern-2.5mu}} % -3mu in plainTeX +\_protected\_def\relbar{\_mathrel{\_smash-}} % \_smash, because - has the same height as + +\_protected\_def\Relbar{\_mathrel=} +\_mathchardef\lhook="312C +\_protected\_def\hookrightarrow{\_lhook\_joinrel\_rightarrow} +\_mathchardef\rhook="312D +\_protected\_def\hookleftarrow{\_leftarrow\_joinrel\_rhook} +\_protected\_def\bowtie{\_mathrel\_triangleright\_joinrel\_mathrel\_triangleleft} +\_protected\_def\models{\_mathrel|\_joinrel=} +\_protected\_def\Longrightarrow{\_Relbar\_joinrel\_Rightarrow} +\_protected\_def\longrightarrow{\_relbar\_joinrel\_rightarrow} +\_protected\_def\longleftarrow{\_leftarrow\_joinrel\_relbar} +\_protected\_def\Longleftarrow{\_Leftarrow\_joinrel\_Relbar} +\_protected\_def\longmapsto{\_mapstochar\_longrightarrow} +\_protected\_def\longleftrightarrow{\_leftarrow\_joinrel\_rightarrow} +\_protected\_def\Longleftrightarrow{\_Leftarrow\_joinrel\_Rightarrow} +\_protected\_def\iff{\_thicksk\_Longleftrightarrow\_thicksk} +\_private \lhook \rightarrow \leftarrow \rhook \triangleright \triangleleft + \Relbar \Rightarrow \relbar \rightarrow \Leftarrow \mapstochar + \longrightarrow \Longleftrightarrow ; +\_public \joinrel ; + + \_doc ----------------------------- + \`\ldots`, \`\cdots`, \`\vdots`, \`\ddots` from plain \TeX/ + \_cod ----------------------------- + +\_mathchardef\_ldotp="613A % ldot as a punctuation mark +\_mathchardef\_cdotp="6201 % cdot as a punctuation mark +\_mathchardef\_colon="603A % colon as a punctuation mark +\_public \ldotp \cdotp \colon ; + +\_protected\_def\_ldots{\_mathinner{\_ldotp\_ldotp\_ldotp}} +\_protected\_def\_cdots{\_mathinner{\_cdotp\_cdotp\_cdotp}} +\_protected\_def\_vdots{\_vbox{\_baselineskip=.4em \_lineskiplimit=\_zo + \_kern.6em \_hbox{.}\_hbox{.}\_hbox{.}}} +\_protected\_def\_ddots{\_mathinner{% + \_mkern1mu\_raise.7em\_vbox{\_kern.7em\_hbox{.}}\_mkern2mu + \_raise.4em\_hbox{.}\_mkern2mu\_raise.1em\_hbox{.}\_mkern1mu}} + +\_public \ldots \cdots \vdots \ddots ; + + \_doc ----------------------------- + \`\adots` inspired by plain \TeX/ + \_cod ----------------------------- + +\_protected\_def\_adots{\_mathinner{% + \_mkern1mu\_raise.1em\_hbox{.}\_mkern2mu + \_raise.4em\_hbox{.}\_mkern2mu\_raise.7em\_vbox{\_kern.7em\_hbox{.}}\_mkern1mu}} + +\_public \adots ; + + \_doc ----------------------------- + Math accents (encoding dependent declarations). + \_cod ----------------------------- + +\_protected\_def\acute{\_mathaccent"7013 } +\_protected\_def\grave{\_mathaccent"7012 } +\_protected\_def\ddot{\_mathaccent"707F } +\_protected\_def\tilde{\_mathaccent"707E } +\_protected\_def\bar{\_mathaccent"7016 } +\_protected\_def\breve{\_mathaccent"7015 } +\_protected\_def\check{\_mathaccent"7014 } +\_protected\_def\hat{\_mathaccent"705E } +\_protected\_def\vec{\_mathaccent"017E } +\_protected\_def\dot{\_mathaccent"705F } +\_protected\_def\widetilde{\_mathaccent"0365 } +\_protected\_def\widehat{\_mathaccent"0362 } + + \_doc ----------------------------- + \`\_math`, \`\skew`, + \`\overrightarrow`, \`\overleftarrow`, \`\overbrace`, \`\underbrace` macros. + The last four are redefined when Unicode math is loaded. + \_cod ----------------------------- + +\_def\_math{\_mathsurround\_zo} +\_protected\_def\_skew #1#2#3{{\_muskip0=#1mu\_divide\_muskip0=by2 \_mkern\_muskip0 + #2{\_mkern-\_muskip0{#3}\_mkern\_muskip0}\_mkern-\_muskip0}{}} +\_protected\_def\_overrightarrow #1{\_vbox{\_math\_ialign{##\_crcr + \_rightarrowfill\_crcr\_noalign{\_kern-.1em \_nointerlineskip} + $\_hfil\_displaystyle{#1}\_hfil$\_crcr}}} +\_protected\_def\_overleftarrow #1{\_vbox{\_math\_ialign{##\_crcr + \_leftarrowfill\_crcr\_noalign{\_kern-.1em \_nointerlineskip} + $\_hfil\_displaystyle{#1}\_hfil$\_crcr}}} +\_protected\_def\_overbrace #1{\_mathop{% + \_vbox{\_math\_ialign{##\_crcr\_noalign{\_kern.3em} + \_downbracefill\_crcr\_noalign{\_kern.3em \_nointerlineskip} + $\_hfil\_displaystyle{#1}\_hfil$\_crcr}}}\_limits} +\_protected\_def\_underbrace #1{\_mathop{\_vtop{\_math\_ialign{##\_crcr + $\_hfil\_displaystyle{#1}\_hfil$\_crcr\_noalign{\_kern.3em \_nointerlineskip} + \_upbracefill\_crcr\_noalign{\_kern.3em}}}}\_limits} + +\_public \overrightarrow \overleftarrow \overbrace \underbrace \skew ; + + \_doc ----------------------------- + Macros based on `\delimiter`, `\*witdelims` and `\radical` primitives. + \_cod ----------------------------- + +\_protected\_def\lmoustache{\_delimiter"437A340 } % top from (, bottom from ) +\_protected\_def\rmoustache{\_delimiter"537B341 } % top from ), bottom from ( +\_protected\_def\lgroup{\_delimiter"462833A } % extensible ( with sharper tips +\_protected\_def\rgroup{\_delimiter"562933B } % extensible ) with sharper tips +\_protected\_def\arrowvert{\_delimiter"26A33C } % arrow without arrowheads +\_protected\_def\Arrowvert{\_delimiter"26B33D } % double arrow without arrowheads +\_protected\_def\bracevert{\_delimiter"77C33E } % the vertical bar that extends braces +\_protected\_def\Vert{\_delimiter"26B30D } \_let\|=\Vert +\_protected\_def\vert{\_delimiter"26A30C } +\_protected\_def\uparrow{\_delimiter"3222378 } +\_protected\_def\downarrow{\_delimiter"3223379 } +\_protected\_def\updownarrow{\_delimiter"326C33F } +\_protected\_def\Uparrow{\_delimiter"322A37E } +\_protected\_def\Downarrow{\_delimiter"322B37F } +\_protected\_def\Updownarrow{\_delimiter"326D377 } +\_protected\_def\backslash{\_delimiter"26E30F } % for double coset G\_backslash H +\_protected\_def\rangle{\_delimiter"526930B } +\_protected\_def\langle{\_delimiter"426830A } +\_protected\_def\rbrace{\_delimiter"5267309 } \_let\}=\rbrace \_let\_rbrace=\rbrace +\_protected\_def\lbrace{\_delimiter"4266308 } \_let\{=\lbrace \_let\_lbrace=\lbrace +\_protected\_def\rceil{\_delimiter"5265307 } +\_protected\_def\lceil{\_delimiter"4264306 } +\_protected\_def\rfloor{\_delimiter"5263305 } +\_protected\_def\lfloor{\_delimiter"4262304 } + +\_protected\_def\choose{\_atopwithdelims()} +\_protected\_def\brack{\_atopwithdelims[]} +\_protected\_def\brace{\_atopwithdelims\_lbrace\_rbrace} + +\_protected\_def\_sqrt{\_radical"270370 } \_public \sqrt ; + + \_doc ----------------------------- + \`\mathpalette`, \`\vphantom`, \`\hphantom`, \`\phantom`, \`\mathstrut`, and + \`\smash` macros from plain \TeX. + \_cod ----------------------------- + +\_def\_mathpalette#1#2{\_mathchoice{#1\_displaystyle{#2}}% + {#1\_textstyle{#2}}{#1\_scriptstyle{#2}}{#1\_scriptscriptstyle{#2}}} +\_newbox\_rootbox +\_protected\_def\root#1\of{\_setbox\_rootbox + \_hbox{$\_math\_scriptscriptstyle{#1}$}\_mathpalette\_rootA} +\_def\_rootA#1#2{\_setbox0=\_hbox{$\_math#1\_sqrt{#2}$}\_dimen0=\_ht0 + \_advance\_dimen0by-\_dp0 + \_mkern5mu\_raise.6\_dimen0\_copy\_rootbox \_mkern-10mu\_box0 } +\_newifi\_ifvp \_newifi\_ifhp +\_protected\_def\_vphantom{\_vptrue\_hpfalse\_phant} +\_protected\_def\_hphantom{\_vpfalse\_hptrue\_phant} +\_protected\_def\_phantom{\_vptrue\_hptrue\_phant} +\_def\_phant{\_ifmmode\_def\_next{\_mathpalette\_mathphant}% + \_else\_let\_next=\_makephant\_fi\_next} +\_def\_makephant#1{\_setbox0\_hbox{#1}\_finphant} +\_def\_mathphant#1#2{\_setbox0=\_hbox{$\_math#1{#2}$}\_finphant} +\_def\_finphant{\_setbox2=\_null + \_ifvp \_ht2=\_ht0 \_dp2=\_dp0 \_fi + \_ifhp \_wd2=\_wd0 \_fi \_hbox{\_box2}} +\_def\_mathstrut{\_vphantom(} +\_protected\_def\_smash{\_relax % \_relax, in case this comes first in \halign + \_ifmmode\_def\_next{\_mathpalette\_mathsmash}\_else\_let\_next\_makesmash + \_fi\_next} +\_def\_makesmash#1{\_setbox0=\_hbox{#1}\_finsmash} +\_def\_mathsmash#1#2{\_setbox0=\_hbox{$\_math#1{#2}$}\_finsmash} +\_def\_finsmash{\_ht0=\_zo \_dp0=\_zo \_hbox{\_box0}} +\_public \mathpalette \vphantom \hphantom \phantom \mathstrut \smash ; + + \_doc ----------------------------- + \`\cong`, \`\notin`, \`\rightleftharpoons`, \`\buildrel`, \`\doteq`, \`\bmod` + and \`\pmod` macros from plain \TeX/. + \_cod ----------------------------- + +\_protected\_def\_cong{\_mathrel{\_mathpalette\_overeq\_sim}} % congruence sign +\_def\_overeq#1#2{\_lower.05em\_vbox{\_lineskiplimit\_maxdimen\_lineskip=-.05em + \_ialign{$\_math#1\_hfil##\_hfil$\_crcr#2\_crcr=\_crcr}}} +\_protected\_def\_notin{\_mathrel{\_mathpalette\_cancel\_in}} +\_def\_cancel#1#2{\_math\_ooalign{$\_hfil#1\_mkern1mu/\_hfil$\_crcr$#1#2$}} +\_protected\_def\_rightleftharpoons{\_mathrel{\_mathpalette\_rlhp{}}} +\_def\_rlhp#1{\_vcenter{\_math\_hbox{\_ooalign{\_raise.2em + \_hbox{$#1\_rightharpoonup$}\_crcr + $#1\_leftharpoondown$}}}} +\_protected\_def\_buildrel#1\over#2{\_mathrel{\_mathop{\_kern\_zo #2}\_limits^{#1}}} +\_protected\_def\_doteq{\_buildrel\_textstyle.\over=} +\_private \in \sim ; +\_public \cong \notin \rightleftharpoons \buildrel \doteq ; + +\_protected\_def\_bmod{\_nonscript\_mskip-\_medmuskip\_mkern5mu + \_mathbin{\_rm mod}\_penalty900\_mkern5mu\_nonscript\_mskip-\_medmuskip} +\_protected\_def\_pmod#1{\_allowbreak\_mkern18mu({\_rm mod}\_thinsk\_thinsk#1)} +\_public \bmod \pmod ; + + \_doc ----------------------------- + \`\matrix` and \`\pmatrix` + behave as in Plain \TeX/, if it is used in the + `\displaystyle`. On the other hand, it is printed in smaller size + (by appropriate amount) in `\textstyle` = `\scriptstyle` and `\scriptscriptstyle`. + This feature is new in \OpTeX/. + \_cod ----------------------------- + +\_protected\_def\_matrix#1{\_null\_thinsk + \_edef\_tmpa{\_the\_numexpr \_mathstyle/4\_relax}% 0 0 1 1 1 1 2 2 + \_vcenter{\_matrixbaselines\_math + \_ialign{\_the\_lmfil$\_matrixstyle##$\_hfil&&\_quad\_the\_lmfil$\_matrixstyle##$\_hfil\_crcr + \_mathstrut\_crcr\_noalign{\_kern-\_baselineskip} + #1\_crcr\_mathstrut\_crcr\_noalign{\_kern-\_baselineskip}}}\_thinsk} + +\_def\_matrixbaselines{\_normalbaselines \_def\_matrixstyle{}% + \_let\_matrixbaselines=\_relax % \matrix inside matrix does not change size again + \_ifcase\_tmpa \_or + \_baselineskip=.7\_baselineskip \_def\_quad {\_hskip.7em\_relax}% + \_let\_matrixstyle=\_scriptstyle + \_or + \_baselineskip=.5\_baselineskip \_def\_quad {\_hskip.5em\_relax}% + \_let\_matrixstyle=\_scriptscriptstyle + \_fi +} +\_protected\_def\_pmatrix#1{\_left(\_matrix{#1}\_right)} + +\_public \matrix \pmatrix ; + + \_doc ----------------------------- + The \`\cases` and \`\bordermatrix` macros are almost identical as in plain \TeX/. + You can simply re-define `\bordermatrix` with other delimiters + using the common \`\_bordermatrixwithdelims` macro. + \_cod ----------------------------- + +\_protected\_long\_def\_cases#1{\_left\{\_thinsk\_vcenter{\_normalbaselines\_math + \_ialign{$##\_hfil$&\_quad{##\_unsskip}\_hfil\_crcr#1\_crcr}}\_right.} + +\_newdimen\_ptrenwd +\_ptrenwd=8.75pt % width of the big left ( +\_protected\_def\_bordermatrix{\_bordermatrixwithdelims()} +\_def\_bordermatrixwithdelims#1#2#3{\_begingroup \_math + \_setbox0=\_vbox{\_bordermatrixA #3\_stopbmatrix}% + \_setbox2=\_vbox{\_unvcopy0 \_global\_setbox1=\_lastbox}% + \_setbox2=\_hbox{\_unhbox1 \_unskip\_global\_setbox1=\_lastbox}% + \_setbox2=\_hbox{$\_kern\_wd1 \_kern-\_ptrenwd\_left#1\_kern-\_wd1 + \_global\_setbox1=\_vbox{\_box1 \_kern.2em}% + \_vcenter{\_kern-\_ht1 \_unvbox0 \_kern-\_baselineskip}\_thinsk\_right#2$}% + \_null\_thicksk\_vbox{\_kern\_ht1 \_box2}\_endgroup} +\_def\_bordermatrixA #1\cr#2\_stopbmatrix{% + \_ialign{$##$\_hfil\_kern.2em\_kern\_ptrenwd&\_thinspace\_hfil$##$\_hfil + &&\_quad\_hfil$##$\_hfil\_crcr + \_omit\_strut\_hfil\_crcr\_noalign{\_kern-\_baselineskip}% + #1\_crcr\_noalign{\_kern.2em}#2\_crcr\_omit\_strut\_cr}} + +\_public \cases \bordermatrix ; + + \_doc ----------------------------- + The \`\eqalign` macro behaves like in Plain \TeX/ by default. + It creates the `\vcenter` in the math mode. The content is two column + `\halign` with right-aligned left column and left-aligned right column. + The table items are in `\displaystyle` and the `\baselineskip` is + advanced by `\jot` (3pt in plain \TeX). It follows from the default + settings of \^`\eqlines` and \^`\eqstyle` parameters. + + In \OpTeX/, this macro is more flexible. See section 4.4 in the + \ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf] + {Typesetting Math with \OpTeX/}. + The `\baselineskip` value is set by the \^`\eqlines` parameter and math style + by the \^`\eqstyle` parameter. + + There are more possible columns than two (used in classical Plain TeX): + `rlcrlcrlc` etc.\ where `r` and `l` columns are without spaces and `c` column + (if used) has space \^`\eqspace`/2 at its both sides. + \_cod ----------------------------- + +\_long\_def\_eqalign#1{\_null\_thinsk\_vcenter{\_the\_eqlines\_math + \_ialign{&\_hfil$\_the\_eqstyle{##}$&$\_the\_eqstyle{{}##}$\_hfil + &\_hskip.5\_eqspace\_hfil$\_the\_eqstyle{##}$\_hskip.5\_eqspace\_hfil + \_crcr#1\_crcr}}\_thinsk} + +\_public \eqalign ; + + \_doc ----------------------------- + The \`\displaylines``{<formula>\cr<formula>\cr...<formula>}` + creates horizontally centered formulae. + It behaves exactly as in Plain \TeX/. The `\halign` is applied directly + in the outer display environment with lines of type `\hbox to\displaywidth`. + This enables to break lines inside such display to more pages but it is + impossible to use `\eqno` or `\leqno` or \^`\eqmark`. + + \OpTeX/ offers + `\dislaylines to<dimen>{<formula>\cr<formula>\cr...<formula>}` + as an alternative case of usage `\displaylines`. See section 4.3 in the + \ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf] + {Typesetting Math with \OpTeX/}. + The centered formulas are in `\vcenter` in this case, + so lines cannot be broken into more pages, but this case + enables to use `\eqno` or `\leqno` or \^`\eqmark`. + \_cod ----------------------------- + +\_def\_displaylines #1#{\_ifx&\_ea\_displaylinesD + \_else \_def\_tmp to##1\_end{\_def\_tmp{\_dimexpr ##1}}\_tmp #1\_end + \_ea\_displaylinesto \_fi} +\_long\_def\_displaylinesD #1{\_display \_tabskip=\_zoskip + \_halign{\_hbox to\_displaywidth{$\_elign\_hfil\_displaystyle##\_hfil$}\_crcr + #1\_crcr}} +\_long\_def\_displaylinesto #1{\_vcenter{\_openup\_jot \_math \_tabskip=\_zoskip + \_halign{\_strut\_hbox to\_span\_tmp{$\_hss\_displaystyle##\_hss$}\_crcr + #1\_crcr}}} + +\_public\displaylines ; + + \_doc ----------------------------- + \`\openup`, \`\eqalignno` and `\leqalignno` macros are copied from + Plain \TeX/ unchanged. + \_cod ----------------------------- + +\_def\_openup{\_afterassignment\_openupA\_dimen0=} +\_def\_openupA{\_advance\_lineskip by\_dimen0 + \_advance\_baselineskip by\_dimen0 + \_advance\_lineskiplimit by\_dimen0 } +\_newifi\_ifdtop +\_def\_display{\_global\_dtoptrue\_openup\_jot\_math + \_everycr{\_noalign{\_ifdtop \_global\_dtopfalse \_ifdim\_prevdepth>-1000pt + \_vskip-\_lineskiplimit \_vskip\_normallineskiplimit \_fi + \_else \_penalty\_interdisplaylinepenalty \_fi}}} +\_def\_elign{\_tabskip=\_zoskip\_everycr{}} % restore inside \_display +\_long\_def\_eqalignno#1{\_display \_tabskip=\_centering + \_halign to\_displaywidth{\_hfil$\_elign\_displaystyle{##}$\_tabskip=\_zoskip + &$\_elign\_displaystyle{{}##}$\_hfil\_tabskip\_centering + &\_llap{$\_elign##$}\_tabskip\_zoskip\_crcr + #1\_crcr}} +\_long\_def\_leqalignno#1{\_display \_tabskip=\_centering + \_halign to\_displaywidth{\_hfil$\_elign\_displaystyle{##}$\_tabskip=\_zoskip + &$\_elign\_displaystyle{{}##}$\_hfil\_tabskip=\_centering + &\_kern-\_displaywidth\_rlap{$\_elign##$}\_tabskip\_displaywidth\_crcr + #1\_crcr}} +\_public \openup \eqalignno \leqalignno ; + + \_doc ----------------------------- + These macros are inspired by `ams-math.tex` file. + \maxlines=15 + \_cod ----------------------------- + +\_def\_amsafam{4} \_def\_amsbfam{5} + +\_mathchardef \boxdot "2\_amsafam 00 +\_mathchardef \boxplus "2\_amsafam 01 +\_mathchardef \boxtimes "2\_amsafam 02 +\_mathchardef \square "0\_amsafam 03 +\_mathchardef \blacksquare "0\_amsafam 04 +\_mathchardef \centerdot "2\_amsafam 05 +\_mathchardef \lozenge "0\_amsafam 06 +\_mathchardef \blacklozenge "0\_amsafam 07 +\_mathchardef \circlearrowright "3\_amsafam 08 +\_mathchardef \circlearrowleft "3\_amsafam 09 +\_mathchardef \rightleftharpoons "3\_amsafam 0A +\_mathchardef \leftrightharpoons "3\_amsafam 0B +\_mathchardef \boxminus "2\_amsafam 0C +\_mathchardef \Vdash "3\_amsafam 0D +\_mathchardef \Vvdash "3\_amsafam 0E +\_mathchardef \vDash "3\_amsafam 0F +\_mathchardef \twoheadrightarrow "3\_amsafam 10 +\_mathchardef \twoheadleftarrow "3\_amsafam 11 +\_mathchardef \leftleftarrows "3\_amsafam 12 +\_mathchardef \rightrightarrows "3\_amsafam 13 +\_mathchardef \upuparrows "3\_amsafam 14 +\_mathchardef \downdownarrows "3\_amsafam 15 +\_mathchardef \upharpoonright "3\_amsafam 16 +\_mathchardef \downharpoonright "3\_amsafam 17 +\_mathchardef \upharpoonleft "3\_amsafam 18 +\_mathchardef \downharpoonleft "3\_amsafam 19 +\_mathchardef \rightarrowtail "3\_amsafam 1A +\_mathchardef \leftarrowtail "3\_amsafam 1B +\_mathchardef \leftrightarrows "3\_amsafam 1C +\_mathchardef \rightleftarrows "3\_amsafam 1D +\_mathchardef \Lsh "3\_amsafam 1E +\_mathchardef \Rsh "3\_amsafam 1F +\_mathchardef \rightsquigarrow "3\_amsafam 20 +\_mathchardef \leftrightsquigarrow "3\_amsafam 21 +\_mathchardef \looparrowleft "3\_amsafam 22 +\_mathchardef \looparrowright "3\_amsafam 23 +\_mathchardef \circeq "3\_amsafam 24 +\_mathchardef \succsim "3\_amsafam 25 +\_mathchardef \gtrsim "3\_amsafam 26 +\_mathchardef \gtrapprox "3\_amsafam 27 +\_mathchardef \multimap "3\_amsafam 28 +\_mathchardef \therefore "3\_amsafam 29 +\_mathchardef \because "3\_amsafam 2A +\_mathchardef \doteqdot "3\_amsafam 2B +\_mathchardef \triangleq "3\_amsafam 2C +\_mathchardef \precsim "3\_amsafam 2D +\_mathchardef \lesssim "3\_amsafam 2E +\_mathchardef \lessapprox "3\_amsafam 2F +\_mathchardef \eqslantless "3\_amsafam 30 +\_mathchardef \eqslantgtr "3\_amsafam 31 +\_mathchardef \curlyeqprec "3\_amsafam 32 +\_mathchardef \curlyeqsucc "3\_amsafam 33 +\_mathchardef \preccurlyeq "3\_amsafam 34 +\_mathchardef \leqq "3\_amsafam 35 +\_mathchardef \leqslant "3\_amsafam 36 +\_mathchardef \lessgtr "3\_amsafam 37 +\_mathchardef \backprime "0\_amsafam 38 +\_mathchardef \risingdotseq "3\_amsafam 3A +\_mathchardef \fallingdotseq "3\_amsafam 3B +\_mathchardef \succcurlyeq "3\_amsafam 3C +\_mathchardef \geqq "3\_amsafam 3D +\_mathchardef \geqslant "3\_amsafam 3E +\_mathchardef \gtrless "3\_amsafam 3F +\_mathchardef \sqsubset "3\_amsafam 40 +\_mathchardef \sqsupset "3\_amsafam 41 +\_mathchardef \vartriangleright "3\_amsafam 42 +\_mathchardef \vartriangleleft "3\_amsafam 43 +\_mathchardef \trianglerighteq "3\_amsafam 44 +\_mathchardef \trianglelefteq "3\_amsafam 45 +\_mathchardef \bigstar "0\_amsafam 46 +\_mathchardef \between "3\_amsafam 47 +\_mathchardef \blacktriangledown "0\_amsafam 48 +\_mathchardef \blacktriangleright "3\_amsafam 49 +\_mathchardef \blacktriangleleft "3\_amsafam 4A +\_mathchardef \vartriangle "3\_amsafam 4D +\_mathchardef \blacktriangle "0\_amsafam 4E +\_mathchardef \triangledown "0\_amsafam 4F +\_mathchardef \eqcirc "3\_amsafam 50 +\_mathchardef \lesseqgtr "3\_amsafam 51 +\_mathchardef \gtreqless "3\_amsafam 52 +\_mathchardef \lesseqqgtr "3\_amsafam 53 +\_mathchardef \gtreqqless "3\_amsafam 54 +\_mathchardef \Rrightarrow "3\_amsafam 56 +\_mathchardef \Lleftarrow "3\_amsafam 57 +\_mathchardef \veebar "2\_amsafam 59 +\_mathchardef \barwedge "2\_amsafam 5A +\_mathchardef \doublebarwedge "2\_amsafam 5B +\_mathchardef \angle "0\_amsafam 5C +\_mathchardef \measuredangle "0\_amsafam 5D +\_mathchardef \sphericalangle "0\_amsafam 5E +\_mathchardef \varpropto "3\_amsafam 5F +\_mathchardef \smallsmile "3\_amsafam 60 +\_mathchardef \smallfrown "3\_amsafam 61 +\_mathchardef \Subset "3\_amsafam 62 +\_mathchardef \Supset "3\_amsafam 63 +\_mathchardef \Cup "2\_amsafam 64 +\_mathchardef \Cap "2\_amsafam 65 +\_mathchardef \curlywedge "2\_amsafam 66 +\_mathchardef \curlyvee "2\_amsafam 67 +\_mathchardef \leftthreetimes "2\_amsafam 68 +\_mathchardef \rightthreetimes "2\_amsafam 69 +\_mathchardef \subseteqq "3\_amsafam 6A +\_mathchardef \supseteqq "3\_amsafam 6B +\_mathchardef \bumpeq "3\_amsafam 6C +\_mathchardef \Bumpeq "3\_amsafam 6D +\_mathchardef \lll "3\_amsafam 6E +\_mathchardef \ggg "3\_amsafam 6F +\_protected\_def \ulcorner {\_delimiter"4\_amsafam 70\_amsafam 70 } +\_protected\_def \urcorner {\_delimiter"5\_amsafam 71\_amsafam 71 } +\_mathchardef \circledS "0\_amsafam 73 +\_mathchardef \pitchfork "3\_amsafam 74 +\_mathchardef \dotplus "2\_amsafam 75 +\_mathchardef \backsim "3\_amsafam 76 +\_mathchardef \backsimeq "3\_amsafam 77 +\_protected\_def \llcorner {\_delimiter"4\_amsafam 78\_amsafam 78 } +\_protected\_def \lrcorner {\_delimiter"5\_amsafam 79\_amsafam 79 } +\_mathchardef \complement "0\_amsafam 7B +\_mathchardef \intercal "2\_amsafam 7C +\_mathchardef \circledcirc "2\_amsafam 7D +\_mathchardef \circledast "2\_amsafam 7E +\_mathchardef \circleddash "2\_amsafam 7F +\_mathchardef \rhd "2\_amsafam 42 +\_mathchardef \lhd "2\_amsafam 43 +\_mathchardef \unrhd "2\_amsafam 44 +\_mathchardef \unlhd "2\_amsafam 45 + + \_let\restriction\upharpoonright + \_let\Doteq\doteqdot + \_let\doublecup\Cup + \_let\doublecap\Cap + \_let\llless\lll + \_let\gggtr\ggg + \_let\Box=\square % LaTeX symbol + \_let\Box=\square % LaTeX symbol + +\_mathchardef \lvertneqq "3\_amsbfam 00 +\_mathchardef \gvertneqq "3\_amsbfam 01 +\_mathchardef \nleq "3\_amsbfam 02 +\_mathchardef \ngeq "3\_amsbfam 03 +\_mathchardef \nless "3\_amsbfam 04 +\_mathchardef \ngtr "3\_amsbfam 05 +\_mathchardef \nprec "3\_amsbfam 06 +\_mathchardef \nsucc "3\_amsbfam 07 +\_mathchardef \lneqq "3\_amsbfam 08 +\_mathchardef \gneqq "3\_amsbfam 09 +\_mathchardef \nleqslant "3\_amsbfam 0A +\_mathchardef \ngeqslant "3\_amsbfam 0B +\_mathchardef \lneq "3\_amsbfam 0C +\_mathchardef \gneq "3\_amsbfam 0D +\_mathchardef \npreceq "3\_amsbfam 0E +\_mathchardef \nsucceq "3\_amsbfam 0F +\_mathchardef \precnsim "3\_amsbfam 10 +\_mathchardef \succnsim "3\_amsbfam 11 +\_mathchardef \lnsim "3\_amsbfam 12 +\_mathchardef \gnsim "3\_amsbfam 13 +\_mathchardef \nleqq "3\_amsbfam 14 +\_mathchardef \ngeqq "3\_amsbfam 15 +\_mathchardef \precneqq "3\_amsbfam 16 +\_mathchardef \succneqq "3\_amsbfam 17 +\_mathchardef \precnapprox "3\_amsbfam 18 +\_mathchardef \succnapprox "3\_amsbfam 19 +\_mathchardef \lnapprox "3\_amsbfam 1A +\_mathchardef \gnapprox "3\_amsbfam 1B +\_mathchardef \nsim "3\_amsbfam 1C +\_mathchardef \ncong "3\_amsbfam 1D +\_mathchardef \diagup "0\_amsbfam 1E +\_mathchardef \diagdown "0\_amsbfam 1F +\_mathchardef \varsubsetneq "3\_amsbfam 20 +\_mathchardef \varsupsetneq "3\_amsbfam 21 +\_mathchardef \nsubseteqq "3\_amsbfam 22 +\_mathchardef \nsupseteqq "3\_amsbfam 23 +\_mathchardef \subsetneqq "3\_amsbfam 24 +\_mathchardef \supsetneqq "3\_amsbfam 25 +\_mathchardef \varsubsetneqq "3\_amsbfam 26 +\_mathchardef \varsupsetneqq "3\_amsbfam 27 +\_mathchardef \subsetneq "3\_amsbfam 28 +\_mathchardef \supsetneq "3\_amsbfam 29 +\_mathchardef \nsubseteq "3\_amsbfam 2A +\_mathchardef \nsupseteq "3\_amsbfam 2B +\_mathchardef \nparallel "3\_amsbfam 2C +\_mathchardef \nmid "3\_amsbfam 2D +\_mathchardef \nshortmid "3\_amsbfam 2E +\_mathchardef \nshortparallel "3\_amsbfam 2F +\_mathchardef \nvdash "3\_amsbfam 30 +\_mathchardef \nVdash "3\_amsbfam 31 +\_mathchardef \nvDash "3\_amsbfam 32 +\_mathchardef \nVDash "3\_amsbfam 33 +\_mathchardef \ntrianglerighteq "3\_amsbfam 34 +\_mathchardef \ntrianglelefteq "3\_amsbfam 35 +\_mathchardef \ntriangleleft "3\_amsbfam 36 +\_mathchardef \ntriangleright "3\_amsbfam 37 +\_mathchardef \nleftarrow "3\_amsbfam 38 +\_mathchardef \nrightarrow "3\_amsbfam 39 +\_mathchardef \nLeftarrow "3\_amsbfam 3A +\_mathchardef \nRightarrow "3\_amsbfam 3B +\_mathchardef \nLeftrightarrow "3\_amsbfam 3C +\_mathchardef \nleftrightarrow "3\_amsbfam 3D +\_mathchardef \divideontimes "2\_amsbfam 3E +\_mathchardef \varnothing "0\_amsbfam 3F +\_mathchardef \nexists "0\_amsbfam 40 +\_mathchardef \Finv "0\_amsbfam 60 +\_mathchardef \Game "0\_amsbfam 61 +\_mathchardef \mho "0\_amsbfam 66 +\_mathchardef \eth "0\_amsbfam 67 +\_mathchardef \eqsim "3\_amsbfam 68 +\_mathchardef \beth "0\_amsbfam 69 +\_mathchardef \gimel "0\_amsbfam 6A +\_mathchardef \daleth "0\_amsbfam 6B +\_mathchardef \lessdot "2\_amsbfam 6C +\_mathchardef \gtrdot "2\_amsbfam 6D +\_mathchardef \ltimes "2\_amsbfam 6E +\_mathchardef \rtimes "2\_amsbfam 6F +\_mathchardef \shortmid "3\_amsbfam 70 +\_mathchardef \shortparallel "3\_amsbfam 71 +\_mathchardef \smallsetminus "2\_amsbfam 72 +\_mathchardef \thicksim "3\_amsbfam 73 +\_mathchardef \thickapprox "3\_amsbfam 74 +\_mathchardef \approxeq "3\_amsbfam 75 +\_mathchardef \precapprox "3\_amsbfam 76 +\_mathchardef \succapprox "3\_amsbfam 77 +\_mathchardef \curvearrowleft "3\_amsbfam 78 +\_mathchardef \curvearrowright "3\_amsbfam 79 +\_mathchardef \digamma "0\_amsbfam 7A +\_mathchardef \varkappa "0\_amsbfam 7B +\_mathchardef \Bbbk "0\_amsbfam 7C +\_mathchardef \hslash "0\_amsbfam 7D +\_mathchardef \hbar "0\_amsbfam 7E +\_mathchardef \backepsilon "3\_amsbfam 7F + +\_let\circledplus\oplus +\_let\circledminus\ominus +\_let\circledtimes\otimes +\_let\circledslash\oslash +\_let\circleddot\odot + + \_doc ----------------------------- + The \^`\not` macro is re-defined to be smarter than in plain + \TeX/. The macro follows this rule: + \begtt + \not< becomes \_nless + \not> becomes \_ngtr + if \_notXXX is defined, \not\XXX becomes \_notXXX; + if \_nXXX is defined, \not\XXX becomes \_nXXX; + otherwise, \not\XXX is done in the usual way. + \endtt + \_cod ----------------------------- + +\_mathchardef \_notchar "3236 + +\_protected\_def \_not#1{% + \_ifx #1<\_nless \_else + \_ifx #1>\_ngtr \_else + \_edef\_tmpn{\_csstring#1}% + \_ifcsname _not\_tmpn\_endcsname \_csname _not\_tmpn\_endcsname + \_else \_ifcsname _n\_tmpn\_endcsname \_csname _n\_tmpn\_endcsname + \_else \_mathrel{\_mathord{\_notchar}\_mathord{#1}}% + \_fi \_fi \_fi \_fi} +\_private + \nleq \ngeq \nless \ngtr \nprec \nsucc \nleqslant \ngeqslant \npreceq + \nsucceq \nleqq \ngeqq \nsim \ncong \nsubseteqq \nsupseteqq \nsubseteq + \nsupseteq \nparallel \nmid \nshortmid \nshortparallel \nvdash \nVdash + \nvDash \nVDash \ntrianglerighteq \ntrianglelefteq \ntriangleleft + \ntriangleright \nleftarrow \nrightarrow \nLeftarrow \nRightarrow + \nLeftrightarrow \nleftrightarrow \nexists ; +\_public \not ; + + \_doc ----------------------------- + \`\mathstyles``{<math list>}` + behaves like `{<math list>}`, but you can use the following commands in the + `<math list>`: + \begitems + * \`\currstyle` which expands to `\displaystyle`, `\textstyle`, + `\scriptstyle` or `\scriptscriptstyle` depending on the current math style + when \^`\mathstyles` was opened. + * \`\dobystyle``{<D>}{<T>}{<S>}{<SS>}` is expandable macro. It expands to + `<D>`, `<T>`, `<S>` or `<SS>` depending on the current math style + when \^`\mathstyles` was opened. + * The value of the \`\stylenum` is 0, 1, 2 or 3 + depending on the current math style when \^`\mathstyles` was opened. + \enditems + Example of usage of \^`\mathstyles`: + `\def\mathframe#1{\mathstyles{\frame{$\currstyle{#1}$}}}`. + \_cod ----------------------------- + +\_newcount\_stylenum +\_def\_mathstyles#1{{\_mathchoice{\_stylenum0 #1}{\_stylenum1 #1}% + {\_stylenum2 #1}{\_stylenum3 #1}}} +\_def\_dobystyle#1#2#3#4{\_ifcase\_stylenum#1\_or#2\_or#3\_or#4\_fi} +\_def\_currstyle{\_dobystyle\_displaystyle\_textstyle\_scriptstyle\_scriptscriptstyle} +\_public \mathstyles \dobystyle \currstyle \stylenum ; + + \_doc ----------------------------- + The \`\cramped` macro + sets the cramped variant of the current style. + Note that \^`\currstyle` initializes non-cramped variants. + The example `\mathframe` above should be:\nl + `\def\mathframe#1{\mathstyles{\frame{$\currstyle\cramped #1$}}}`.\nl + Second note: `\cramped` macro reads the current math style from + the `\mathstyle` LuaTeX primitive, so it does not work in numerators of + generalized fractions but you can use it before the fraction is opened: + `$\cramped {x^2\over y^2}$`. + \_cod ----------------------------- + +\_def\_cramped{\_ifcase\_numexpr(\_mathstyle+1)/2\_relax\_or + \_crampeddisplaystyle \_or \_crampedtextstyle \_or + \_crampedscriptstyle \_or \_crampedscriptscriptstyle \_fi +} +\_public \cramped ; + + \_doc ----------------------------- + The \`\mathbox``{<text>}` macro is copied from OPmac trick 078. + It behaves like `\hbox{<text>}` but the `<text>` is scaled to a smaller + size if it is used in scriptstyle or scriptscript style.\nl + The \^`\_textmff` and \^`\_scriptmff` are redefined in order to + respect optical sizes. If we are in script style then the math mode + starts in text style, but optical size is given to script style. + The `\mathbox` in non-Unicode math respects optical sizes + using different principle. + \_cod ----------------------------- + +\_def\_mathbox#1{{\_mathstyles{\_hbox{% + \_ifnum\_stylenum<2 \_everymath{\_currstyle}% + \_else + \_ifnum\_stylenum=2 \_def\_textmff{+ssty=0;}\_fi + \_ifnum\_stylenum=3 \_def\_textmff{+ssty=1;}\_def\_scriptmff{+ssty=1;}\_fi + \_typoscale[\_dobystyle{}{}{700}{500}/]\_fi #1}}}% +} +\_public \mathbox ; + +\_endcode %--------------------------------------------------- + +2021-02-15 \_mathbox redefines \_textmff etc. in order to respect optical sizes +2021-02-04 \_bordermatrixwithdelims introduced. +2021-01-23 better expession for math styles in \matrix +2021-01-22 bad use of \_stylenum in \matrix + bad value (bug fix: \_stylenum->\_mtstylenum) +2020-12-17 \box0->\hbox{\box0} in \_finphant and \_finsmash, see https://tex.stackexchange.com/questions/574997/ +2020-06-14 \borermatrix, \cases corrected +2020-06-13 \adots introduced, \matrix smaller in T mode too. +2020-06-03 \notin corrected +2020-06-02 $$\par$$ error is supressed, so we define \(l)eqalign(no), \displayines as \long +2020-05-30 \cases: group added in the second column. + "\displaylines to<size>" implemented and documented. +2020-05-11 \let\|=\Vert, bug fixed +2020-04-27 \mathstyles introduced +2020-03-14 implemented diff --git a/Master/texmf-dist/tex/optex/base/math-preload.opm b/Master/texmf-dist/tex/optex/base/math-preload.opm new file mode 100644 index 00000000000..0ec9abae2f7 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/math-preload.opm @@ -0,0 +1,227 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \normalmath {Math fonts CM + AMS preloaded <2020-05-06>} % preloaded in format + + \_doc ------------------------------ + We have two math macros \`\normalmath` for the normal shape of all math + symbols and \`\boldmath` for the bold shape of all math symbols. The second one + can be used in bold titles, for example. + These macros load all fonts from all given math font families. + \_cod ------------------------------ + +\_def\_normalmath{% + \_loadmathfamily 0 cmr % CM Roman + \_loadmathfamily 1 cmmi % CM Math Italic + \_loadmathfamily 2 cmsy % CM Standard symbols + \_loadmathfamily 3 cmex % CM extra symbols + \_loadmathfamily 4 msam % AMS symbols A + \_loadmathfamily 5 msbm % AMS symbols B + \_loadmathfamily 6 rsfs % script + \_loadmathfamily 7 eufm % fractur + \_loadmathfamily 8 bfsans % sans serif bold + \_loadmathfamily 9 bisans % sans serif bold slanted (for vectors) +% \_setmathfamily 10 \_tentt +% \_setmathfamily 11 \_tenit + \_setmathdimens +} +\_def\_boldmath{% + \_loadmathfamily 0 cmbx % CM Roman Bold Extended + \_loadmathfamily 1 cmmib % CM Math Italic Bold + \_loadmathfamily 2 cmbsy % CM Standard symbols Bold + \_loadmathfamily 3 cmexb % CM extra symbols Bold + \_loadmathfamily 4 msam % AMS symbols A (bold not available?) + \_loadmathfamily 5 msbm % AMS symbols B (bold not available?) + \_loadmathfamily 6 rsfs % script (bold not available?) + \_loadmathfamily 7 eufb % fractur bold + \_loadmathfamily 8 bbfsans % sans serif extra bold + \_loadmathfamily 9 bbisans % sans serif extra bold slanted (for vectors) +% \_setmathfamily 10 \_tentt +% \_setmathfamily 11 \_tenbi + \_setmathdimens +} +\_count18=9 % families declared by \newfam are 12, 13, ... + +\_def \normalmath {\_normalmath} \_def\boldmath {\_boldmath} + + \_doc ----------------------------- + The classical math family selectors + \`\mit`, \^`\cal`, \^`\bbchar`, \^`\frak` and \^`\script` + are defined here. + The \^`\rm`, \^`\bf`, \^`\it`, \^`\bi` and \^`\tt` does two things: + they are variant selectors for text fonts and math family selectors for math fonts. + The idea was adapted from plain \TeX/.\nl + These macros are redefined when `unimat-codes.opm` is loaded, + see the section~\ref[unimath-codes]. + \_cod ----------------------------- + +\_chardef\_bffam = 8 +\_chardef\_bifam = 9 +%\_chardef\_ttfam = 10 +%\_chardef\_itfam = 11 + +\_protected\_def \_rm {\_tryloadrm \_tenrm \_fam0 } +\_protected\_def \_bf {\_tryloadbf \_tenbf \_fam\_bffam} +\_protected\_def \_it {\_tryloadit \_tenit \_fam1 } +\_protected\_def \_bi {\_tryloadbi \_tenbi \_fam\_bifam} +\_protected\_def \_tt {\_tryloadtt \_tentt} + +\_protected\_def \_mit {\_fam1 } +\_protected\_def \_cal {\_fam2 } +\_protected\_def \_bbchar {\_fam5 } % double stroked letters +\_protected\_def \_frak {\_fam7 } % fraktur +\_protected\_def \_script {\_fam6 } % more extensive script than \cal + +\_public \rm \bf \it \bi \tt \mit \cal \bbchar \frak \script ; + + \_doc ----------------------------- + The optical sizes of Computer Modern fonts, AMS, and other fonts + are declared here. + \_cod ----------------------------- + +%% CM math fonts, optical sizes: + +\_regtfm cmmi 0 cmmi5 5.5 cmmi6 6.5 cmmi7 7.5 cmmi8 8.5 cmmi9 9.5 + cmmi10 11.1 cmmi12 * +\_regtfm cmmib 0 cmmib5 5.5 cmmib6 6.5 cmmib7 7.5 cmmib8 8.5 cmmib9 9.5 cmmib10 * +\_regtfm cmtex 0 cstex8 8.5 cstex9 9.5 cstex10 * +\_regtfm cmsy 0 cmsy5 5.5 cmsy6 6.5 cmsy7 7.5 cmsy8 8.5 cmsy9 9.5 cmsy10 * +\_regtfm cmbsy 0 cmbsy5 5.5 cmbsy6 6.5 cmbsy7 7.5 cmbsy8 8.5 cmbsy9 9.5 cmbsy10 * +\_regtfm cmex 0 cmex7 7.5 cmex8 8.5 cmex9 9.5 cmex10 * +\_regtfm cmexb 0 cmexb10 * + +\_regtfm cmr 0 cmr5 5.5 cmr6 6.5 cmr7 7.5 cmr8 8.5 cmr9 9.5 + cmr10 11.1 cmr12 15 cmr17 * +\_regtfm cmbx 0 cmbx5 5.5 cmbx6 6.5 cmbx7 7.5 cmbx8 8.5 cmbx9 9.5 + cmbx10 11.1 cmbx12 * +\_regtfm cmti 0 cmti7 7.5 cmti8 8.5 cmti9 9.5 cmti10 11.1 cmti12 * +\_regtfm cmtt 0 cmtt8 8.5 cmtt9 9.5 cmtt10 11.1 cmtt12 * + +%% AMS math fonts, optical sizes: + +\_regtfm msam 0 msam5 5.5 msam6 6.5 msam7 7.5 msam8 8.5 msam9 9.5 msam10 * +\_regtfm msbm 0 msbm5 5.5 msbm6 6.5 msbm7 7.5 msbm8 8.5 msbm9 9.5 msbm10 * + +%% fraktur, rsfs, optical sizes: + +\_regtfm eufm 0 eufm5 6 eufm7 8.5 eufm10 * +\_regtfm eufb 0 eufb5 6 eufb7 8.5 eufb10 * +\_regtfm rsfs 0 rsfs5 6 rsfs7 8.5 rsfs10 * + +%% bf and bi sansserif math alternatives: + +\_regtfm bfsans 0 ecsx0500 5.5 ecsx0600 6.5 ecsx0700 7.5 ecsx0800 + 8.5 ecsx0900 9.5 ecsx1000 11.1 ecsx1200 * +\_regtfm bisans 0 ecso0500 5.5 ecso0600 6.5 ecso0700 7.5 ecso0800 + 8.5 ecso0900 9.5 ecso1000 11.1 ecso1200 * +\_regtfm bbfsans 0 ecsx0500 5.5 ecsx0600 6.5 ecsx0700 7.5 ecsx0800 + 8.5 ecsx0900 9.5 ecsx1000 11.1 ecsx1200 * +\_regtfm bbisans 0 ecso0500 5.5 ecso0600 6.5 ecso0700 7.5 ecso0800 + 8.5 ecso0900 9.5 ecso1000 11.1 ecso1200 * + + \_doc ----------------------------- + \`\_loadmathfamily` `<number> <font>` loads one math family, i.\,e.\ + the triple of fonts in the text size, script size and script-script size. + The `<font>` is `<font-id>` used in the `\_regtfm` parameter or + the real TFM name. The family is saved as `\fam<number>`. + \nl + \`\_setmathfamily` `<number> \<font-switch>` loads one math family + like `\_loadmathfamily` does it. But the second parameter is a + `\<font-switch>` declared previously by the `\font` primitive. + \nl + The font family is loaded at \`\_sizemtext`, \`\_sizemscript` and + \`\_sizemsscript` sizes. These sizes are set by the + \`\setmathsizes` `[<text-size>/<script-size>/<scriptscript-size>]` macro. + These parameters are given in the \`\ptmunit` unit, it is set to + 1\`\ptunit` and it is set to 1\,pt by default. + \nl + \`\_corrmsize` `<factor><space>` can be used just before + `\_loadmathfamily` or `\_setmathfamily`. + The `<factor>` is decimal number, it denotes + scale-factor \"size of loaded math font in `\textstyle` : size of text font". + You can use it in `\_normalmath` or `\_boldmath` macros if you want to do a + corrections (for example due to different ex-height in text and math + font). The `\_corrmsize` is applied only to one following + `\_loadmathfamily` or `\_setmathfamily`. If it is missing + then the `<factor>` is 1 for such math family (i.e.\ no size corrections). + \_cod ----------------------------- + +\_def\_corrmsize#1 {\_ptmunit=#1\_ptunit} % for corrections of sizes in diferent fonts + +\_def\_loadmathfamily #1 #2 {% + \_edef\_optsizesave{\_the\_optsize}% + \_optsize=\_sizemtext \_font\_mF=\_whichtfm{#2} at\_optsize \_textfont#1=\_mF + \_optsize=\_sizemscript \_font\_mF=\_whichtfm{#2} at\_optsize \_scriptfont#1=\_mF + \_optsize=\_sizemsscript \_font\_mF=\_whichtfm{#2} at\_optsize \_scriptscriptfont#1=\_mF + \_optsize=\_optsizesave \_ptmunit=\_ptunit +} +\_def\_setmathfamily #1 #2{\_let\_mF=#2% + \_edef\_optsizesave{\_the\_optsize}% + \_optsize=\_sizemtext \_fontlet#2=#2 at\_optsize \_textfont#1=#2% + \_optsize=\_sizemscript \_fontlet#2=#2 at\_optsize \_scriptfont#1=#2% + \_optsize=\_sizemsscript \_fontlet#2=#2 at\_optsize \_scriptscriptfont#1=#2% + \_optsize=\_optsizesave \_ptmunit=\_ptunit \_let#2=\_mF +} +\_def\_setmathsizes[#1/#2/#3]{\_ptmunit=\_ptunit + \_def\_sizemtext{#1\_ptmunit}\_def\_sizemscript{#2\_ptmunit}% + \_def\_sizemsscript{#3\_ptmunit}% +} +\_newdimen\_ptunit \_ptunit=1pt +\_newdimen\_ptmunit \_ptmunit=1\_ptunit + +\_public \setmathsizes \ptunit \ptmunit ; + + \_doc ----------------------------- + The \`\_setmathdimens` macro is used in \^`\normalmath` or \^`\boldmath` + macros. It makes math dimensions dependent on the font size (plain \TeX/ sets + them only for 10\,pt typesetting). The `\skewchar` of some math families are + set here too. + \_cod ----------------------------- + +\_def\_setmathdimens{% PlainTeX sets these dimens for 10pt size only: + \_delimitershortfall=0.5\_fontdimen6\_textfont3 + \_nulldelimiterspace=0.12\_fontdimen6\_textfont3 + \_scriptspace=0.05\_fontdimen6\_textfont3 + \_skewchar\_textfont1=127 \_skewchar\_scriptfont1=127 + \_skewchar\_scriptscriptfont1=127 + \_skewchar\_textfont2=48 \_skewchar\_scriptfont2=48 + \_skewchar\_scriptscriptfont2=48 + \_skewchar\_textfont6=127 \_skewchar\_scriptfont6=127 + \_skewchar\_scriptscriptfont6=127 +} + + \_doc ----------------------------- + Finally, we preload a math fonts collection in [10/7/5] sizes + when the format is generated. This is done when + `\_suppressfontnotfounderror=1` because we need not errors when the format is + generated. Maybe there are not all fonts in the \TeX/ distribution + installed. + \_cod ----------------------------- + +\_suppressfontnotfounderror=1 +\_setmathsizes[10/7/5]\_normalmath +\_suppressfontnotfounderror=0 + + +\_endcode %--------------------------------------------------- + +The Computer Modern and AMS fonts are preloaded here in classical math-fam +concept, where each math family includes three fonts with max 256 characters +(typically 128 characters). + +On the other hand, when \^`\fontfam` macro is used in the document then text +font family and appropriate math family is loaded with Unicode fonts, i.e. +Unicode-math is used. It re-defines all settings given here. + +The general rule of usage the math fonts in different sizes in \OpTeX/ says: set three +sizes by the macro +\^`\setmathsizes` `[<text-size>/<script-size>/<scriptscript-size>]` and then +load all math fonts in given sizes by \^`\normalmath` or \^`\boldmath` macros. +For example +\begtt +\setmathsizes[12/8.4/6]\normalmath ... math typesetting at 12 pt is ready. +\endtt + +\_endinput + +2020-05-06: \itfam, \ttfam removed, (Unicode math preferred) +2020-04-14: \skewchar\fam6 added diff --git a/Master/texmf-dist/tex/optex/base/math-unicode.opm b/Master/texmf-dist/tex/optex/base/math-unicode.opm new file mode 100644 index 00000000000..96f99833808 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/math-unicode.opm @@ -0,0 +1,266 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \loadmath {Unicode Math fonts <2021-03-09>} % preloaded in format + + \_doc ----------------------------- + \`\loadmath` `{<Unicode-math font>}` loads the given font. It does: + \begitems + * define \`\_unimathfont` as `<Unicode-math font>`, + * redefine `\normalmath` and `\boldmath` macros to their Unicode counterparts, + * load the `\_unimathfont` by `\normalmath`, + * print information about the loaded font on the terminal, + * redefine all encoding dependent setting by `\input unimath-codes.opm`, + * protect new loading by setting \`\_ifmathloading` to false. + \enditems + \`\noloadmath` disallows Unicode-math loading by \`\_mathloadingfalse`.\nl + \`\doloadmath` allows Unicode-math loading by \`\_mathloadingtrue`. + \_cod ----------------------------- + +\_newifi \_ifmathloading \_mathloadingtrue + +\_def\_noloadmath{\_mathloadingfalse} +\_def\_doloadmath{\_mathloadingtrue} + +\_def\_loadmath#1{% + \_ifmathloading + \_initunifonts + \_isfont{#1}\_iffalse + \_opwarning{Math font "#1" not found, skipped...}% + \_else + \_def\_unimathfont{#1}% + \_let\_normalmath = \_normalunimath \_let\_boldmath = \_boldunimath + \_normalmath + \_wterm {MATH-FONT: "#1" -- unicode math prepared.}% + \_ifx\_ncharrmA\_undefined \_opinput {unimath-codes.opm}\_fi + \_mathloadingfalse + \_fi\_fi} + +\_public \loadmath \noloadmath \doloadmath ; + + \_doc ----------------------------- + \`\loadboldmath` `{<bold-font>} \to {<normal-font>}` + defines \`\_unimathboldfont` as `<bold-font>` only if `\_unimathfont` is + defined as `<normal-font>`. It is used when \^`\boldmath` macro is run. + When no `\_unimathboldfont` is defined then the `\boldmath` macro + use \"fake bold" generated by `embolden` \LuaTeX/ font feature. + \_cod ----------------------------- + +\_def\_loadboldmath#1#2\to #3{% + \_def\_tmp{#3}\_ifx\_unimathfont\_tmp % do work only if #3 is loaded as normal Math + \_isfont{#1}\_iffalse + \_opwarning{Bold-Math font "#1" not found, skipped...} + \_else + \_def\_unimathboldfont{#1}% + \_wterm {MATH-FONT: "#1" -- unicode math bold prepared.}% + \_fi\_fi} + +\_public \loadboldmath ; + + \_doc ----------------------------- + The Unicode version of the \^`\normalmath` and \^`\boldmath` macros + are defined here as \`\_normalunimath` and \`\_boldunimath` macros. + They are using \`\_setunimathdimens` in a similar sense as + \^`\_setmathdimens`. + \nl + You can combine more fonts if you register them to another + math families (5, 6, 7, etc.) in the \^`\normalmath` macro. + \nl + The default value of \^`\_normalunimath` shows a combination of base Unicode-math + font with 8bit Math font at family 4. See definition of `\script` macro where + `\fam4` is used. + \_cod ----------------------------- + +\_def\_normalunimath{% + \_loadumathfamily 1 {\_unimathfont}{} % Base font + \_loadmathfamily 4 rsfs % script + \_setunimathdimens +}% +\_def\_boldunimath{% + \_ifx\_unimathboldfont \_undefined + \_loadumathfamily 1 {\_unimathfont}{embolden=1.7;} % Base faked bold + \_else + \_loadumathfamily 1 {\_unimathboldfont}{} % Base real bold font + \_fi + \_loadmathfamily 4 rsfs % script + \_setunimathdimens +}% +\_def\_setunimathdimens{% PlainTeX sets these dimens for 10pt size only: + \_delimitershortfall=0.5\_fontdimen6\_textfont3 + \_nulldelimiterspace=0.12\_fontdimen6\_textfont3 + \_scriptspace=0.05\_fontdimen6\_textfont3 + \_begingroup % correction for \choose + \_everymath{}\_global\_setbox0=\_hbox{$\_fam1\_displaystyle{0\_atop0}$}\_endgroup + \_Umathfractiondelsize\_displaystyle = \_dimexpr(\_ht0-\_Umathaxis\_displaystyle)*2\_relax +} + + \_doc ----------------------------- + If you try the example above about + \~`\loadboldmath``{[xitsmath-bold]} \to {[xitsmath-regular]}` + then you can find a bug in XITSMath-Bold font: the symbols for norm + $\|x\|$ are missing. So, we have to define `\_boldmath` macro manually. + The missing symbol is loaded from family 5 as no-bold variant in our example: + \begtt + \loadmath{[xitsmath-regular]} + \def\_boldmath{% + \_loadumathfamily 1 {[xitsmath-bold]}{} % Base font + \_loadmathfamily 4 rsfs % script + \_loadumathfamily 5 {[xitsmath-regular]}{} + \_def\|{\_Udelimiter 0 5 "02016 }% % norm delimiter from family 5 + \_setmathdimens + } + \endtt + + \`\_loadumathfamily` `<number> {<font>}{<font features>}` + loads the given Unicode-math fonts in three sizes given by the + \^`\setmathsizes` macro and sets it as the math family `<number>`. + The `<font features>` are added to the default + \`\_mfontfeatures` and to the size-dependent features `+ssty=0` + if script size is asked or `+ssty=1` if scriptscriptsize is asked. + If the math family 1 is loaded then the family 2 and 3 are set by the same + font because \TeX/ needs to read dimension information about generating + math formulae from these three math families. All information needed by + \TeX/ is collected in single Unicode-math font.\nl + The \^`\_corrmsize` `<factor><space>` can be used just before + `\_loadumathfamily`, see section~\ref[math-preload] for more information.\nl + The \`\_textmff`, \`\_scriptmff` and \`\_sscriptmff` are additional font + features for text, script and sscript sizes respectively. They are + locally re-defined in \^`\mathbox` macro. + \_cod ----------------------------- + +\_def\_umathname#1#2{"#1:\_mfontfeatures#2"} +\_def\_mfontfeatures{mode=base;script=math;} + +\_def\_loadumathfamily #1 #2#3 {% + \_edef\_optsizesave{\_the\_optsize}% + \_optsize=\_sizemtext \_font\_mF=\_umathname{#2}{\_textmff #3} at\_optsize + \_textfont#1=\_mF \_ifnum#1=1 \_textfont2=\_mF \_textfont3=\_mF \_fi + \_optsize=\_sizemscript \_font\_mF=\_umathname{#2}{\_scriptmff #3} at\_optsize + \_scriptfont#1=\_mF \_ifnum#1=1 \_scriptfont2=\_mF \_scriptfont3=\_mF \_fi + \_optsize=\_sizemsscript \_font\_mF=\_umathname{#2}{\_sscriptmff #3} at\_optsize + \_scriptscriptfont#1=\_mF \_ifnum#1=1 \_scriptscriptfont2=\_mF \_scriptscriptfont3=\_mF \_fi + \_optsize=\_optsizesave \_ptmunit=\_ptunit +} +\_def\_textmff{} \_def\_scriptmff{+ssty=0;} \_def\_sscriptmff{+ssty=1;} + + \_doc ----------------------------- + Unicode math font includes all typical math alphabets together, user needs not to + load more \TeX/ math families. These math alphabets are encoded by + different parts of Unicode table. We need auxiliary macros for setting + mathcodes by selected math alphabet. + \nl + \`\_umathrange` `{<from->-<to>}<class><family>\<first>` sets `\Umathcode`s + of the characters in the interval `<from>-<to>` to `\<first>`, + `\<first>+1`, `\<first>+2` + etc., but \`\_umathcharholes` are skipped + (`\_umathcharholes` are parts of the Unicode table not designed for math + alphabets but they cause that the math alphabets are + not continuously spread out in the table; I mean that the + designers were under the influence of drugs when they created + this part of the Unicode table). + The `<from>-<to>` clause includes normal letters like `A-Z`. + \nl + \`\_umahrangegreek` `\<first>` is the same as + `\_umathrange {<alpha>-<omega>}\<first>`. + \nl + \`\_umahrangeGREEK` `\<first>` is the same as + `\_umathrange {<Alpha>-<Omega>}\<first>`. + \nl + \`\_greekdef` `<control sequences> \_relax` defines each control sequence + as a normal character with codes `\_umathnumB`, `\_umathnumB+1`, + `\_umathnumB+2` etc. It is used for redefinig the contol sequences for + math Greek `\alpha`, `\beta`, `\gamma` etc. + \_cod ----------------------------- + +\_newcount\_umathnumA \_newcount\_umathnumB + +\_def\_umathcorr#1#2{\_ea#1\_ea{\_the#2}} +\_def\_umathprepare#1{\_def\_umathscanholes##1[#1]##2##3\_relax{##2}} +\_def\_umathvalue#1{\_ea\_umathscanholes\_umathcharholes[#1]{#1}\_relax} + +\_def\_umathcharholes{% holes in math alphabets: + [119893]{"210E}[119965]{"212C}[119968]{"2130}[119969]{"2131}% + [119971]{"210B}[119972]{"2110}[119975]{"2112}[119976]{"2133}[119981]{"211B}% + [119994]{"212F}[119996]{"210A}[120004]{"2134}% + [120070]{"212D}[120075]{"210C}[120076]{"2111}[120085]{"211C}[120093]{"2128}% + [120122]{"2102}[120127]{"210D}[120133]{"2115}[120135]{"2119} + [120136]{"211A}[120137]{"211D}[120145]{"2124}% +} +\_def\_umathrange#1#2#3#4{\_umathnumB=#4\_def\_tmp{#2 #3 }\_umathrangeA#1} +\_def\_umathrangeA#1-#2{\_umathnumA=`#1\_relax + \_loop + \_umathcorr\_umathprepare\_umathnumB + \_Umathcode \_umathnumA = \_tmp \_umathcorr\_umathvalue{\_umathnumB} + \_ifnum\_umathnumA<`#2\_relax + \_advance\_umathnumA by1 \_advance\_umathnumB by1 + \_repeat +} +\_def\_umathrangeGREEK{\_umathrange{^^^^0391-^^^^03a9}} +\_def\_umathrangegreek{\_umathrange{^^^^03b1-^^^^03d6}} +\_def\_greekdef#1{\_ifx#1\_relax \_else + \_begingroup \_lccode`X=\_umathnumB \_lowercase{\_endgroup \_def#1{X}}% + \_advance\_umathnumB by 1 + \_ea\_greekdef \_fi +} + +\_endcode + + +The \^`\loadmath` `{<Unicode-math font>}` macro loads math fonts and +redefines all default math-codes using `\input unimath-codes.opm`. +If Unicode-math font is loaded then \^`\_mathloadingfalse` +is set, so the new Unicode-math font isn't loaded until \^`\doloadmath` is used. + +\^`\loadboldmath` `{<bold-font>} \to {<normal-font>}` loads bold variant only +if `<normal-font>` was sucessully loaded by the previous `\loadmath`. For example: + +\begtt +\loadmath {[xitsmath-regular]} +\loadboldmath {[xitsmath-bold]} \to {[xitsmath-regular]} +\endtt +There are very few Unicode-math fonts with full \^`\boldmath` support. +I know only XITSMath-Bold and KpMath-Bold. If \^`\loadboldmath` is not used +then \"faked bold" created from \^`\normalmath` is used by default. + +The \^`\loadmath` macro was succesfully tested on: + +\begtt +\loadmath{[XITSMath-Regular]} ... XITS MATH +\loadmath{[latinmodern-math]} ... Latin Modern Math +\loadmath{[texgyretermes-math]} ... TeXGyre Termes Math +\loadmath{[texgyrebonum-math]} ... TeXGyre Bonum Math +\loadmath{[texgyrepagella-math]} ... TeXGyre Pagella Math +\loadmath{[texgyreschola-math]} ... TeXGyre Schola Math +\loadmath{[texgyredejavu-math]} ... TeXGyre DeJaVu Math +\loadmath{[LibertinusMath-Regular]} ... Libertinus Math +\loadmath{[FiraMath-Regular]} ... Fira Math +\loadmath{[Asana-Math]} ... Asana Math +\loadmath{[KpMath-Regular]} ... KP fonts Math +\endtt + +\secc Unicode-math macros preloaded in the format + +\printdoc math-unicode.opm + + +\secc[unimath-codes] Macros and codes set when \code{\\loadmatfont} is processed + +The file `unimath-codes.opm` is loaded when the \^`\loadmath` is used. The +macros here redefines globally all encoding dependent settings declared in +the section~\ref[math-macros]. + +\printdoc unimath-codes.opm +\printdoctail unimath-codes.opm + +\secc Printing all Unicode math slots in used math font + +\printdoctail print-unimath.opm +\printdoc print-unimath.opm + +\_endinput + +2021-03-09 \_setunimathdimes: \_begin/end/group instead {}, bug fixed +2021-02-15 \_textmff, \_scriptmff and \_sscriptmff introduced +2021-02-15 \_expandafter -> \_ea +2020-06-07 \Umathfractiondelsize (for \choose brackets) corrected, see https://tug.org/pipermail/luatex/2020-June/007365.html +2020-04-15 \_setmathdimens -> \_setuniathdimens +2020-02-25 implemented diff --git a/Master/texmf-dist/tex/optex/base/mathclass.opm b/Master/texmf-dist/tex/optex/base/mathclass.opm new file mode 100644 index 00000000000..458431abcad --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/mathclass.opm @@ -0,0 +1,1591 @@ +# File: MathClass.txt +# Revision: 15 +# Date: 2017-06-01, 12:35:00 GMT +# +# © 2017 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see http://www.unicode.org/reports/tr25/ +# +# ------------------------------------------------ +# This file is a classification of characters based on their usage in +# mathematical notation. +# +# While the contents of this file represent the best information +# available to the authors and the Unicode Technical Committee as +# of the date referenced above, it is likely that the information +# in this file will change from time to time. +# +# This file is *NOT* formally part of the Unicode Character Database +# at this time. +# +# The character encoding of this plain-text file is UTF-8. +# +# The data consists of 2 fields. +# +# 1: code point or range +# +# 2: class, one of: +# +# N - Normal - includes all digits and symbols requiring only one form +# A - Alphabetic +# B - Binary +# C - Closing - usually paired with opening delimiter +# D - Diacritic +# F - Fence - unpaired delimiter (often used as opening or closing) +# G - Glyph_Part - piece of large operator +# L - Large - n-ary or large operator, often takes limits +# O - Opening - usually paired with closing delimiter +# P - Punctuation +# R - Relation - includes arrows +# S - Space +# U - Unary - operators that are only unary +# V - Vary - operators that can be unary or binary depending on context +# X - Special - characters not covered by other classes +# +# Fields are delimited by ';'. Spaces adjacent to the delimiter or the '#' are +# not significant. Future versions of this file may use different amounts of +# whitespace. +# +# Some character positions in the Mathematical Alphanumeric Symbols block are +# reserved and have been mapped to the Letterlike Symbols block in Unicode. +# This is indicated in 24 special purpose comments. +# +# The character repertoire of this revision is the repertoire of Unicode +# Version 9.0. For more information see Revision 15 or later of UTR #25. +# ------------------------------------------------ + +0020;S +0021;N +0023;N +0024;N +0025;N +0026;N +0028;O +0029;C +002A;N +002B;V +002C;P +002D;N +002E;P +002F;B +0030..0039;N +003A;P +003B;P +003C;R +003D;R +003E;R +003F;P +0040;N +0041..005A;A +005B;O +005C;B +005D;C +005E;N +005F;N +0060;D +0061..007A;A +007B;O +007C;F +007D;C +007E;N +00A0;S +00A1;P +00A2;N +00A3;N +00A4;N +00A5;N +00A6;N +00A7;N +00A8;D +00AC;U +00AF;D +00B0;N +00B1;V +00B2;N +00B3;N +00B4;N +00B5;N +00B6;N +00B7;B +00B9;N +00BC;N +00BD;N +00BE;N +00BF;P +00D7;B +00F7;B +0131;A +0237;A +02C6;D +02C7;D +02D8;D +02D9;D +02DA;D +02DC;D +0300;D +0301;D +0302;D +0303;D +0304;D +0305;D +0306;D +0307;D +0308;D +030A;D +030C;D +0311;D +0323;D +032C;D +032D;D +032E;D +032F;D +0330;D +0331;D +0332;D +0333;D +0338;D +033A;D +033F;D +0346;D +0391;A +0392;A +0393;A +0394;A +0395;A +0396;A +0397;A +0398;A +0399;A +039A;A +039B;A +039C;A +039D;A +039E;A +039F;A +03A0;A +03A1;A +03A3;A +03A4;A +03A6;A +03A7;A +03A8;A +03A9;A +03B1;A +03B2;A +03B3;A +03B4;A +03B5;A +03B6;A +03B7;A +03B8;A +03B9;A +03BA;A +03BB;A +03BC;A +03BD;A +03BE;A +03BF;A +03C0;A +03C1;A +03C3;A +03C4;A +03C5;A +03C6;A +03C7;A +03C8;A +03C9;A +03D0;A +03D1;A +03D2;A +03D5;A +03D6;A +03D8;N +03D9;N +03DA;A +03DB;A +03DC;A +03DD;A +03E0;A +03E1;A +03F0;A +03F1;A +03F4;A +03F5;A +03F6;N +0428;A +0606;L +0607;L +0608;A +2000;S +2001;S +2002;S +2003;S +2004;S +2005;S +2006;S +2007;S +2009;S +200A;S +200B;S +2010;P +2012;P +2013;P +2014;P +2016;F +2020;R +2021;R +2022;B +2026;N +2032;N +2033;N +2034;N +2035;N +2036;N +2037;N +203B;N +203C;N +2040;B +2044;B +204E;B +204F;R +2050;R +2051;N +2052;N +2057;N +205F;S +2061;B +2062;B +2063;P +2064;X +207A..207E;N +208A..208E;N +20D0;D +20D1;D +20D2;D +20D3;X +20D4;D +20D5;D +20D6;D +20D7;D +20D8;D +20D9;D +20DA;D +20DB;D +20DC;D +20DD;D +20DE;D +20DF;D +20E1;D +20E4;D +20E5;D +20E6;D +20E7;D +20E8;D +20E9;D +20EA;D +20EB;D +20EC;D +20ED;D +20EE;D +20EF;D +2102;A +2107;N +210A;A +210B;A +210C;A +210D;A +210E;N +210F;N +2110;A +2111;A +2112;A +2113;A +2115;A +2118;A +2119;A +211A;A +211B;A +211C;A +211D;A +2124;A +2126;N +2127;N +2128;A +2129;N +212B;A +212C;A +212D;A +212F;A +2130;A +2131;A +2132;N +2133;A +2134;A +2135;A +2136;A +2137;A +2138;A +213C;A +213D;A +213E;N +213F;A +2140;L +2141;N +2142;N +2143;N +2144;N +2145;N +2146;N +2147;N +2148;N +2149;N +214B;N +2190..21B3;R +21B6;R +21B7;R +21BA..21FF;R +2200;U +2201;U +2202;N +2203;U +2204;U +2205;N +2206;U +2207;U +2208;R +2209;R +220A;R +220B;R +220C;R +220D;R +220E;N +220F;L +2210;L +2211;L +2212;V +2213;V +2214;B +2215;B +2216;B +2217;B +2218;B +2219;B +221A;L +221B;L +221C;L +221D;R +221E;N +221F;N +2220;N +2221;N +2222;N +2223;R +2224;R +2225;R +2226;R +2227;B +2228;B +2229;B +222A;B +222B;L +222C;L +222D;L +222E;L +222F;L +2230;L +2231;L +2232;L +2233;L +2234;R +2235;R +2236;R +2237;R +2238;B +2239;R +223A;R +223B;R +223C;R +223D;R +223E;B +223F;N +2240;B +2241;R +2242;R +2243;R +2244;R +2245;R +2246;R +2247;R +2248;R +2249;R +224A;R +224B;R +224C;R +224D;R +224E;R +224F;R +2250;R +2251;R +2252;R +2253;R +2254;R +2255;R +2256;R +2257;R +2258;R +2259;R +225A;R +225B;R +225C;R +225D;R +225E;R +225F;R +2260;R +2261;R +2262;R +2263;R +2264;R +2265;R +2266;R +2267;R +2268;R +2269;R +226A;R +226B;R +226C;R +226D;R +226E;R +226F;R +2270;R +2271;R +2272;R +2273;R +2274;R +2275;R +2276;R +2277;R +2278;R +2279;R +227A;R +227B;R +227C;R +227D;R +227E;R +227F;R +2280;R +2281;R +2282;R +2283;R +2284;R +2285;R +2286;R +2287;R +2288;R +2289;R +228A;R +228B;R +228C;B +228D;B +228E;B +228F;R +2290;R +2291;R +2292;R +2293;B +2294;B +2295;B +2296;B +2297;B +2298;B +2299;B +229A;B +229B;B +229C;B +229D;B +229E;B +229F;B +22A0;B +22A1;B +22A2;R +22A3;R +22A4;N +22A5;R +22A6;R +22A7;R +22A8;R +22A9;R +22AA;R +22AB;R +22AC;R +22AD;R +22AE;R +22AF;R +22B0;R +22B1;R +22B2;R +22B3;R +22B4;R +22B5;R +22B6;R +22B7;R +22B8;R +22B9;B +22BA;B +22BB;B +22BC;B +22BD;B +22BE;N +22BF;N +22C0;L +22C1;L +22C2;L +22C3;L +22C4;B +22C5;B +22C6;B +22C7;B +22C8;R +22C9;B +22CA;B +22CB;B +22CC;B +22CD;R +22CE;B +22CF;B +22D0;R +22D1;R +22D2;B +22D3;B +22D4;R +22D5;R +22D6;R +22D7;R +22D8;R +22D9;R +22DA;R +22DB;R +22DC;R +22DD;R +22DE;R +22DF;R +22E0;R +22E1;R +22E2;R +22E3;R +22E4;R +22E5;R +22E6;R +22E7;R +22E8;R +22E9;R +22EA;R +22EB;R +22EC;R +22ED;R +22EE;R +22EF;R +22F0;R +22F1;R +22F2;R +22F3;R +22F4;R +22F5;R +22F6;R +22F7;R +22F8;R +22F9;R +22FA;R +22FB;R +22FC;R +22FD;R +22FE;R +22FF;R +2300;N +2302;N +2305;B +2306;B +2308;O +2309;C +230A;O +230B;C +2310;N +2311;N +2319;N +231C;O +231D;C +231E;O +231F;C +2320..2321;G +2322;R +2323;R +#2329;O +#232A;C +2336;N +233D;B +233F;R +237C;R +2394;N +239B..23AF;G +23B0;R +23B1;R +23B2..23B3;G +23B4;N +23B5;N +23B6;N +23B7;G +23D0;G +23DC;N +23DD;N +23DE;N +23DF;N +23E0;N +23E1;N +23E2;N +23E3;N +23E4;N +23E5;N +23E6;N +23E7;N +24C8;N +25A0;N +25A1;N +25AA;N +25AB;N +25AD;N +25AE;N +25AF;N +25B0;N +25B1;N +25B2;B +25B3;B +25B4;B +25B5;B +25B6;B +25B7;B +25B8;B +25B9;B +25BC;B +25BD;B +25BE;B +25BF;B +25C0;B +25C1;B +25C2;B +25C3;B +25C4;B +25C5;B +25C6;N +25C7;N +25C8;N +25C9;N +25CA;B +25CB;B +25CE;N +25CF;N +25D0..25D3;N +25D6;N +25D7;N +25E2;N +25E3;N +25E4;N +25E5;N +25E6;B +25E7..25EA;N +25EB;B +25EC;B +25EF;N +25F8;B +25F9;B +25FA;B +25FB;B +25FC;B +25FD;B +25FE;B +25FF;B +2605;B +2606;B +2609;N +260C;N +263D;N +263E;N +263F;N +2640;N +2641;N +2642;N +2643;N +2644;N +2646;N +2647;N +2648;N +2649;N +2660;N +2661;N +2662;N +2663;N +2664;N +2665;N +2666;N +2667;N +2669;N +266D;N +266E;N +266F;N +2680;N +2681;N +2682;N +2683;N +2684;N +2685;N +2686;N +2687;N +2688;N +2689;N +26AA;N +26AB;N +26AC;N +26B2;N +2713;N +2717;N +2720;N +272A;N +2736;N +2772;O +2773;C +27C0;N +27C1;N +27C2;R +27C3;R +27C4;R +27C5;R +27C6;R +27C7;R +27C8;R +27C9;R +27CA;R +27CB;R +27CC;L +27CD;R +27CE;B +27CF;B +27D0;N +27D1;B +27D2;R +27D3;R +27D4;R +27D5;L +27D6;L +27D7;L +27D8;L +27D9;L +27DA;R +27DB;R +27DC;R +27DD;R +27DE;R +27DF;R +27E0;B +27E1;B +27E2;B +27E3;B +27E4;B +27E5;B +27E6;O +27E7;C +27E8;O +27E9;C +27EA;O +27EB;C +27EC;O +27ED;C +27EE;O +27EF;C +27F0;R +27F1;R +27F2;R +27F3;R +27F4;R +27F5;R +27F6;R +27F7;R +27F8;R +27F9;R +27FA;R +27FB;R +27FC;R +27FD;R +27FE;R +27FF;R +2900;R +2901;R +2902;R +2903;R +2904;R +2905;R +2906;R +2907;R +2908;R +2909;R +290A;R +290B;R +290C;R +290D;R +290E;R +290F;R +2910;R +2911;R +2912;R +2913;R +2914;R +2915;R +2916;R +2917;R +2918;R +2919;R +291A;R +291B;R +291C;R +291D;R +291E;R +291F;R +2920;R +2921;R +2922;R +2923;R +2924;R +2925;R +2926;R +2927;R +2928;R +2929;R +292A;R +292B;R +292C;R +292D;R +292E;R +292F;R +2930;R +2931;R +2932;R +2933;R +2934;R +2935;R +2936;R +2937;R +2938;R +2939;R +293A;R +293B;R +293C;R +293D;R +293E;R +293F;R +2940;R +2941;R +2942;R +2943;R +2944;R +2945;R +2946;R +2947;R +2948;R +2949;R +294A;R +294B;R +294C;R +294D;R +294E;R +294F;R +2950;R +2951;R +2952;R +2953;R +2954;R +2955;R +2956;R +2957;R +2958;R +2959;R +295A;R +295B;R +295C;R +295D;R +295E;R +295F;R +2960;R +2961;R +2962;R +2963;R +2964;R +2965;R +2966;R +2967;R +2968;R +2969;R +296A;R +296B;R +296C;R +296D;R +296E;R +296F;R +2970;R +2971;R +2972;R +2973;R +2974;R +2975;R +2976;R +2977;R +2978;R +2979;R +297A;R +297B;R +297C;R +297D;R +297E;R +297F;R +2980;F +2981;N +2982;F +2983;O +2984;C +2985;O +2986;C +2987;O +2988;C +2989;O +298A;C +298B;O +298C;C +298D;O +298E;C +298F;O +2990;C +2991;O +2992;C +2993;O +2994;C +2995;O +2996;C +2997;O +2998;C +2999;F +299A;F +299B;N +299C;N +299D;N +299E;N +299F;N +29A0;N +29A1;N +29A2;N +29A3;N +29A4;N +29A5;N +29A6;N +29A7;N +29A8;N +29A9;N +29AA;N +29AB;N +29AC;N +29AD;N +29AE;N +29AF;N +29B0;N +29B1;N +29B2;N +29B3;N +29B4;N +29B5;N +29B6;B +29B7;B +29B8;B +29B9;B +29BA;N +29BB;N +29BC;N +29BD;N +29BE;N +29BF;N +29C0;B +29C1;B +29C2;N +29C3;N +29C4;B +29C5;B +29C6;B +29C7;B +29C8;B +29C9;N +29CA;N +29CB;N +29CC;N +29CD;N +29CE;R +29CF;R +29D0;R +29D1;R +29D2;R +29D3;R +29D4;R +29D5;R +29D6;B +29D7;B +29D8;O +29D9;C +29DA;O +29DB;C +29DC;N +29DD;N +29DE;N +29DF;R +29E0;N +29E1;R +29E2;B +29E3;R +29E4;R +29E5;R +29E6;R +29E7;N +29E8;N +29E9;N +29EA;N +29EB;B +29EC;N +29ED;N +29EE;N +29EF;N +29F0;N +29F1;N +29F2;N +29F3;N +29F4;R +29F5;B +29F6;B +29F7;B +29F8;L +29F9;L +29FA;B +29FB;B +29FC;O +29FD;C +29FE;B +29FF;B +2A00;L +2A01;L +2A02;L +2A03;L +2A04;L +2A05;L +2A06;L +2A07;L +2A08;L +2A09;L +2A0A;L +2A0B;L +2A0C;L +2A0D;L +2A0E;L +2A0F;L +2A10;L +2A11;L +2A12;L +2A13;L +2A14;L +2A15;L +2A16;L +2A17;L +2A18;L +2A19;L +2A1A;L +2A1B;L +2A1C;L +2A1D;L +2A1E;L +2A1F;L +2A20;L +2A21;L +2A22;B +2A23;B +2A24;B +2A25;B +2A26;B +2A27;B +2A28;B +2A29;B +2A2A;B +2A2B;B +2A2C;B +2A2D;B +2A2E;B +2A2F;B +2A30;B +2A31;B +2A32;B +2A33;B +2A34;B +2A35;B +2A36;B +2A37;B +2A38;B +2A39;B +2A3A;B +2A3B;B +2A3C;B +2A3D;B +2A3E;B +2A3F;B +2A40;B +2A41;B +2A42;B +2A43;B +2A44;B +2A45;B +2A46;B +2A47;B +2A48;B +2A49;B +2A4A;B +2A4B;B +2A4C;B +2A4D;B +2A4E;B +2A4F;B +2A50;B +2A51;B +2A52;B +2A53;B +2A54;B +2A55;B +2A56;B +2A57;B +2A58;B +2A59;R +2A5A;B +2A5B;B +2A5C;B +2A5D;B +2A5E;B +2A5F;B +2A60;B +2A61;B +2A62;B +2A63;B +2A64;B +2A65;B +2A66;R +2A67;R +2A68;R +2A69;R +2A6A;R +2A6B;R +2A6C;R +2A6D;R +2A6E;R +2A6F;R +2A70;R +2A71;B +2A72;B +2A73;R +2A74;R +2A75;R +2A76;R +2A77;R +2A78;R +2A79;R +2A7A;R +2A7B;R +2A7C;R +2A7D;R +2A7E;R +2A7F;R +2A80;R +2A81;R +2A82;R +2A83;R +2A84;R +2A85;R +2A86;R +2A87;R +2A88;R +2A89;R +2A8A;R +2A8B;R +2A8C;R +2A8D;R +2A8E;R +2A8F;R +2A90;R +2A91;R +2A92;R +2A93;R +2A94;R +2A95;R +2A96;R +2A97;R +2A98;R +2A99;R +2A9A;R +2A9B;R +2A9C;R +2A9D;R +2A9E;R +2A9F;R +2AA0;R +2AA1;R +2AA2;R +2AA3;R +2AA4;R +2AA5;R +2AA6;R +2AA7;R +2AA8;R +2AA9;R +2AAA;R +2AAB;R +2AAC;R +2AAD;R +2AAE;R +2AAF;R +2AB0;R +2AB1;R +2AB2;R +2AB3;R +2AB4;R +2AB5;R +2AB6;R +2AB7;R +2AB8;R +2AB9;R +2ABA;R +2ABB;R +2ABC;R +2ABD;R +2ABE;R +2ABF;R +2AC0;R +2AC1;R +2AC2;R +2AC3;R +2AC4;R +2AC5;R +2AC6;R +2AC7;R +2AC8;R +2AC9;R +2ACA;R +2ACB;R +2ACC;R +2ACD;R +2ACE;R +2ACF;R +2AD0;R +2AD1;R +2AD2;R +2AD3;R +2AD4;R +2AD5;R +2AD6;R +2AD7;R +2AD8;R +2AD9;R +2ADA;R +2ADB;R +2ADC;R +2ADD;R +2ADE;R +2ADF;R +2AE0;R +2AE1;N +2AE2;R +2AE3;R +2AE4;R +2AE5;R +2AE6;R +2AE7;R +2AE8;R +2AE9;R +2AEA;R +2AEB;R +2AEC;R +2AED;R +2AEE;R +2AEF;R +2AF0;R +2AF1;N +2AF2;R +2AF3;R +2AF4;B +2AF5;B +2AF6;B +2AF7;R +2AF8;R +2AF9;R +2AFA;R +2AFB;B +2AFC;L +2AFD;B +2AFE;B +2AFF;L +2B00..2B11;R +2B12;N +2B13;N +2B14;N +2B15;N +2B16;N +2B17;N +2B18;N +2B19;N +2B1B..2B1F;N +2B20;N +2B21;N +2B22;N +2B23;N +2B24..2B2F;N +2B30..2B44;R +2B45;R +2B46;R +2B47..2B4C;R +2B50..2B54;N +2B95;R +2BC2..2BC8;N +2BCA;N +2BCB;N +3008;X +3009;X +#3014;O +#3015;C +#3018;O +#3019;C +301A;X +301B;X +306E;N +FB29;X +FE00;D +#deprecFE35; +#deprecFE36; +#deprecFE37; +#deprecFE38; +FE61..FE66;X +FE68;X +FF0B;X +FF1C..FF1E;X +FF3C;X +FF3E;X +FF5C;X +FF5E;X +FFE2;X +FFE9..FFEC;X +1D400..1D454;A +#1D455=210E;N +1D456..1D49B;A +1D49C;A +#1D49D=212C;A +1D49E;A +1D49F;A +#1D4A0=2130;A +#1D4A1=2131;A +1D4A2;A +#1D4A3=210B;A +#1D4A4=2110;A +1D4A5;A +1D4A6;A +#1D4A7=2112;A +#1D4A8=2133;A +1D4A9;A +1D4AA;A +1D4AB;A +1D4AC;A +#1D4AD=211B;A +1D4AE;A +1D4AF;A +1D4B0;A +1D4B1;A +1D4B2;A +1D4B3;A +1D4B4;A +1D4B5;A +1D4B6;A +1D4B7;A +1D4B8;A +1D4B9;A +#1D4BA=212F;A +1D4BB;A +#1D4BC=210A;A +1D4BD;A +1D4BE;A +1D4BF;A +1D4C0;A +1D4C1;A +1D4C2;A +1D4C3;A +#1D4C4=2134;A +1D4C5;A +1D4C6;A +1D4C7;A +1D4C8;A +1D4C9;A +1D4CA;A +1D4CB;A +1D4CC;A +1D4CD;A +1D4CE;A +1D4CF;A +1D4D0..1D503;A +1D504;A +1D505;A +#1D506=212D;A +1D507;A +1D508;A +1D509;A +1D50A;A +#1D50B=210C;A +#1D50C=2111;A +1D50D;A +1D50E;A +1D50F;A +1D510;A +1D511;A +1D512;A +1D513;A +1D514;A +#1D515=211C;A +1D516;A +1D517;A +1D518;A +1D519;A +1D51A;A +1D51B;A +1D51C;A +#1D51D=2128;A +1D51E;A +1D51F;A +1D520;A +1D521;A +1D522;A +1D523;A +1D524;A +1D525;A +1D526;A +1D527;A +1D528;A +1D529;A +1D52A;A +1D52B;A +1D52C;A +1D52D;A +1D52E;A +1D52F;A +1D530;A +1D531;A +1D532;A +1D533;A +1D534;A +1D535;A +1D536;A +1D537;A +1D538;A +1D539;A +#1D53A=2102;A +1D53B;A +1D53C;A +1D53D;A +1D53E;A +#1D53F=210D;A +1D540;A +1D541;A +1D542;A +1D543;A +1D544;A +#1D545=2115;A +1D546;A +#1D547=2119;A +#1D548=211A;A +#1D549=211D;A +1D54A;A +1D54B;A +1D54C;A +1D54D;A +1D54E;A +1D54F;A +1D550;A +#1D551=2124;A +1D552;A +1D553;A +1D554;A +1D555;A +1D556;A +1D557;A +1D558;A +1D559;A +1D55A;A +1D55B;A +1D55C;A +1D55D;A +1D55E;A +1D55F;A +1D560;A +1D561;A +1D562;A +1D563;A +1D564;A +1D565;A +1D566;A +1D567;A +1D568;A +1D569;A +1D56A;A +1D56B;A +1D56C..1D6A3;A +1D6A4;A +1D6A5;A +1D6A8..1D7C9;A +1D7CA;A +1D7CB;A +1D7CE..1D7FF;N +1EE00..1EE03;A +1EE05..1EE1F;A +1EE21;A +1EE22;A +1EE24;A +1EE27;A +1EE29..1EE32;A +1EE34..1EE37;A +1EE39;A +1EE3B;A +1EE42;A +1EE47;A +1EE49;A +1EE4B;A +1EE4D..1EE4F;A +1EE51;A +1EE52;A +1EE54;A +1EE57;A +1EE59;A +1EE5B;A +1EE5D;A +1EE5F;A +1EE61;A +1EE62;A +1EE64;A +1EE67..1EE6A;A +1EE6C..1EE72;A +1EE74..1EE77;A +1EE79..1EE7C;A +1EE7E;A +1EE80..1EE89;A +1EE8B..1EE9B;A +1EEA1..1EEA3;A +1EEA5..1EEA9;A +1EEAB..1EEBB;A +1EEF0;L +1EEF1;L +1F784;N +1F78C;N +1F78D;N +1F797..1F799;N +1F79D..1F79F;N + +# EOF diff --git a/Master/texmf-dist/tex/optex/base/more-macros.opm b/Master/texmf-dist/tex/optex/base/more-macros.opm new file mode 100644 index 00000000000..d5ce88c1a67 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/more-macros.opm @@ -0,0 +1,284 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \eoldef {OpTeX useful macos <2020-05-22>} % preloaded in format + + \_doc ----------------------------- + We define \`\opinput` `{<file name>}` macro which + does `\input {<file name>}` but the catcodes are set to normal catcodes + (like \OpTeX/ initializes them) and the catcodes setting is returned back to + the current values when the file is read. You can use `\opinput` + in any situation inside the document and you will be sure that the file + is read correctly with correct catcode settings. + + To achieve this, we declare \`\optexcatcodes` catcode table + and \`\plaintexcatcodes`. They save the commonly used catcode tables. + Note that `\catcodetable` is a part of \LuaTeX/ extension. + The catcodetable stack is implemented by \OpTeX/ macros. + The \`\setctable` `<catcode table>` pushes + current catcode table to the stack and activates catcodes from + the `<catcode table>`. The \`\restorectable` returns to the saved catcodes + from the catcode table stack. + + The `\opinput` works inside the catcode table stack. It reads `\optexcatcodes` + table and stores it to \`\_tmpcatcodes` table. + This table is actually used during `\input` (maybe catcodes are + changed here). Finally, `\_restoretable` pops the stacks and returns + to the catcodes used before `\opinput` is run. + \_cod ----------------------------- + +\_def\_opinput #1{\_setctable\_optexcatcodes + \_savecatcodetable\_tmpcatcodes \_catcodetable\_tmpcatcodes + \_input {#1}\_relax\_restorectable} + +\_newcatcodetable \_optexcatcodes +\_newcatcodetable \_plaintexcatcodes +\_newcatcodetable \_tmpcatcodes + +\_public \optexcatcodes \plaintexcatcodes \opinput ; + +\_savecatcodetable\_optexcatcodes +{\_catcode`_=8 \savecatcodetable\plaintexcatcodes} + + \_doc ----------------------------- + The implementation of the catcodetable stack follows. + + The current catcodes are + managed in the `\catcodetable0`. If the `\setctable` is used first (or at + the outer level of the stack), then the `\catcodetable0` is pushed to the + stack and the current table is re-set to the given `<catcode table>`. + The numbers of these tables are stacked to the \`\_ctablelist` macro. + The `\restorectable` reads the last saved catcode table number from the + `\_ctablelist` and uses it. + \_cod ----------------------------- + +\_newcount\_currctable \_currctable=0 +\_catcodetable0 + +\_def\_setctable#1{\_edef\_ctablelist{{\_the\_currctable}\_ctablelist}% + \_catcodetable#1\_relax \_currctable=#1\_relax +} +\_def\_restorectable{\_ea\_restorectableA\_ctablelist\_relax} +\_def\_restorectableA#1#2\_relax{% + \_ifx^#2^\_opwarning + {You can't use \_noindent\restorectable without previous \_string\setctable}% + \_else \_def\_ctablelist{#2}\_catcodetable#1\_relax \_currctable=#1\_relax \_fi +} +\_def\_ctablelist{.} + +\_public \setctable \restorectable ; + + \_doc ----------------------------- + When a special macro is defined with different catcodes then + \`\normalcatcodes` can be used at the end of such definition. + The normal catcodes are restored. + The macro reads + catcodes from `\optecatodes` table and sets it to the main catcode table 0. + \_cod ----------------------------- + +\_def\_normalcatcodes {\_catcodetable\_optexcatcodes \_savecatcodetable0 \_catcodetable0 } +\_public \normalcatodes ; + + \_doc ----------------------------- + The \`\load` `[<filename-list>]` loads files specfied in + comma separated `<filename-list>`. The first space (after comma) + is ignored using the trick `#1#2,`: first parameter is unseparated. + The `\load` macro saves information about loaded files by setting + `\_load:<filename>` as a defined macro. + + If the \`\_afterload` macro is defined then it is run after `\_opinput`. + The catcode setting should be here. Note that catcode setting done in the + loaded file is forgotten after the `\opinput`. + \_cod ----------------------------- + +\_def \_load [#1]{\_loadA #1,,,\_end} +\_def \_loadA #1#2,{\_ifx,#1 \_ea \_loadE \_else \_loadB{#1#2}\_ea\_loadA\_fi} +\_def \_loadB #1{% + \_ifcsname _load:#1\_endcsname \_else + \_isfile {#1.opm}\_iftrue \_opinput {#1.opm}\_else \_opinput {#1}\_fi + \_sxdef{_load:#1}{}% + \_trycs{_afterload}{}\_let\_afterload=\_undefined + \_fi +} +\_def \_loadE #1\_end{} +\_public \load ; + + \_doc ----------------------------- + The declarator \`\optdef``\macro [<opt default>] <params>{<replacement text>}` + defines the `\macro` with the optional parameter followed by normal parameters + declared in `<params>`. The optional parameter must be used as the first + first parameter in brackets `[...]`. If it isn't used then <opt default> + is taken into account. The `<replacement text>` can use `\the\opt` + because optional parameter is saved to the \`\opt` tokens register. + Note the difference from \LaTeX/ concept where the optional parameter is + in `#1`. \OpTeX/ uses `#1` as the first normal parameter (if declared). + + The \`\_nospaceafter` ignores the following optional space at expand + processor level using the negative `\romannumeral` trick. + \_cod ----------------------------- + +\_def\_optdef#1[#2]{% + \_def#1{\_opt={#2}\_isnextchar[{\_cs{_oA:\_string#1}}{\_cs{_oB:\_string#1}}}% + \_sdef{_oA:\_string#1}[##1]{\_opt={##1}\_cs{_oB:\_string#1\_nospaceafter}}% + \_sdef{_oB:\_string#1\_nospaceafter}% +} +\_def\_nospaceafter#1{\_ea#1\_romannumeral-`\.} +\_newtoks\_opt + +\_public \opt \optdef ; + + \_doc ----------------------------- + The declarator \`\eoldef``\macro #1{<replacement text>}` defines a `\macro` + which scans its parameter to the end of the current line. + This is the parameter `#1` which can be used in the `<replacement text>`. + The catcode of the `\endlinechar` is reset temporarily when the parameter is scanned. + + The macro defined by `\eoldef` cannot be used with its parameter inside + other macros because the catcode dancing is not possible here. But the + \`\bracedparam``\macro{<parameter>}` can be used here. The `\bracedparam` + is a prefix that re-sets temporarily the `\macro` to a `\macro` with + normal one parameter. + + The \`\skiptoeol` macro reads the text to the end of the current line + and ignores it. + \_cod ----------------------------- + +\_def\_eoldef #1{\_def #1{\_begingroup \_catcode`\^^M=12 \_eoldefA #1}% + \_ea\_def\_csname _\_csstring #1:M\_endcsname} +\_catcode`\^^M=12 % +\_def\_eoldefA #1#2^^M{\_endgroup\_csname _\_csstring #1:M\_endcsname{#2}}% +\_normalcatcodes % + +\_eoldef\_skiptoeol#1{} +\_def\_bracedparam#1{\_ifcsname _\_csstring #1:M\_endcsname + \_csname _\_csstring #1:M\_ea \_endcsname + \_else \_csname __in\_csstring #1:M\_ea \_endcsname \_fi +} +\_public \eoldef \skiptoeol \bracedparam ; + + \_doc ----------------------------- + \`\scantoeol``\macro <text to end of line>` scans the + `<text to end of line>` in verbatim mode and runs the + `\macro{<text to end of line>}`. The `\macro` + can be defined `\def\macro#1{...\scantextokens{#1}...}`. + The new tokenization of the parameter is processed when the parameter is used, + no when the parameter is scanned. This principle is used in definition + of \^`\chap`, \^`\sec`, \^`\secc` and \^`\_Xtoc` macros. + It means that user can write \code{\\sec text `&` text} for example. + Inline verbatim works in title sections. + + The verbatim scanner of `\scatoeol` keeps category 7 for `^` in + order to be able to use `^^J` as comment character which means that + the next line continues. + \_cod ----------------------------- + +\_def\_scantoeol#1{\def\_tmp{#1}\_begingroup \_setscancatcodes \_scantoeolA} +\_def\_setscancatcodes{\_setverb \_catcode`\^^M=12\_catcode`\^=7\_catcode`\ =10\_catcode`\^^J=14 } +\_catcode`\^^M=12 % +\_def\_scantoeolA#1^^M{\_endgroup \_tmp{#1}}% +\_normalcatcodes % + +\_public \scantoeol ; + + \_doc ----------------------------- + The \`\replstring``\macro{<textA>}{<textB>}` + replaces all occurrences of `<textA>` by `<textB>` in the `\macro` body. + The `\macro` must be defined without parameters. The occurrences of + `<textA>` are not replaced if they are \"hidden" in braces, for example + `...{...<textA>...}...`. The category codes in the `<textA>` must exactly + match. + + How it works: `\replstring\foo{<textA>}{<textB>}` prepares + `\_replacestringsA#1<textA>{...}` and runs + `\_replacestringsA<foo-body>?<textA>!<textA>`. + So, `#1` includes the first part of <foo-body> before first <textA>. + It is saved to \`\_tmptoks` and `\_replacestringsB` is run in a loop. + It finishes processing or appends the next part to `\_tmptoks` separated by + <textB> and continues loop. The final part of the macro removes the last `?` + from resulting `\_tmptoks` and defines a new version of the `\foo`. + \_cod ----------------------------- + +\_newtoks\_tmptoks +\_catcode`!=3 \_catcode`?=3 +\_def\_replstring #1#2#3{% \replstring #1{stringA}{stringB} + \_long\_def\_replacestringsA##1#2{\_tmptoks{##1}\_replacestringsB}% + \_long\_def\_replacestringsB##1#2{\_ifx!##1\_relax \_else \_toksapp\_tmptoks{#3##1}% + \_ea\_replacestringsB\_fi}% + \_ea\_replacestringsA #1?#2!#2% + \_long\_def\_replacestringsA##1?{\_tmptoks{##1}\_edef#1{\_the\_tmptoks}}% + \_ea\_replacestringsA \_the\_tmptoks} +\_normalcatcodes + +\_public \replstring ; + + \_doc ----------------------------- + The \`\catcode` primitive is redefined here. Why? + There is very common cases like \code{\\catcode`}`<something>` + or `\catcode"<number>` but these characters + \code{\`} or \code{"} can be set as active (typically by `\verbchar` macro). + Nothing problematic happens if re-defined `\catcode` is used in this case. + + If you really need primitive `\catcode` then you can use `\_catcode`. + \_cod ----------------------------- + +\_def\catcode#1{\_catcode \_if`\_noexpand#1\_ea`\_else\_if"\_noexpand#1"\_else + \_if'\_noexpand#1'\_else \_ea\_ea\_ea\_ea\_ea\_ea\_ea#1\_fi\_fi\_fi} + + \_doc ----------------------------- + The \`\removespaces` `<text with spaces >{}` expands to <textwithoutspaces>. + \nl + The `\_ea`\`\ignorept``\the<dimen>` expands to a decimal + number `\the<dimen>` but without `pt` unit. + \_cod ----------------------------- + +\_def\_removespaces #1 {\_isempty{#1}\_iffalse #1\_ea\_removespaces\_fi} +\_ea\_def \_ea\_ignorept \_ea#\_ea1\_detokenize{pt}{#1} + +\public \removespaces \ignorept ; + + \_doc ----------------------------- + You can use expandable \`\bp``{<dimen>}` convertor from + \TeX/ `<dimen>` (or from an expression accepted by + `\dimexpr` primitive) to a decimal value in big points + (used as natural unit in the PDF format). So, you can write, for example: + \begtt + \pdfliteral{q \_bp{.3\hsize-2mm} \_bp{2mm} m 0 \_bp{-4mm} l S Q} + \endtt + You can use expandable \`\expr``{<expression>}` for analogical purposes. + It expands to the value of the `<expression>` at expand processor level + with \`\_decdigits` digits after the decimal point. + The `<expression>` can include `+-*/()` and decimal numbers in common syntax. + + The usage of prefixed versions \`\_expr` or \`\_bp` is more recommended + because a user can re-define the control sequences `\expr` or `\bp`. + \_cod ----------------------------- + +\_def\_decdigits{3} % digits after decimal point in \_bp and \_expr outputs. +\_def\_pttopb{% + \_directlua{tex.print(string.format('\_pcent.\_decdigits f', + token.scan_dimen()/65781.76))}% pt to bp conversion +} +\def\_bp#1{\_ea\_pttopb\_dimexpr#1\_relax} +\def\_expr#1{\_directlua{tex.print(string.format('\_pcent.\_decdigits f',#1))}} + +\_public \expr \bp ; + + \_doc ------------------ + The pair {\`\_doc` ... \`\_cod`} is used for documenting macros and to + printing the technical documentation of the \OpTeX/. The syntax is: + {\begtt \catcode`\<=13 + \_doc <ignored text> + <documentation> + \_cod <ignored text> + \endtt + } + The `<documentation>` (and `<ignored text>` too) must be `<balanced text>`. + It means that you cannot document only the `{` but you must document the `}` too. + \_cod ------------------ + +\_long\_def\_doc #1\_cod {\_skiptoeol} + +\_endcode % ------------------------------------- + +2020-05-22 robust \catcode newly defined in order \catcode\string.... be possible +2020-05-03 \load macro introduced +2020-03-15 released diff --git a/Master/texmf-dist/tex/optex/base/multicolumns.opm b/Master/texmf-dist/tex/optex/base/multicolumns.opm new file mode 100644 index 00000000000..bf5b05f7db1 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/multicolumns.opm @@ -0,0 +1,114 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \begmulti {Balanced columns <2020-03-26>} % preloaded in format + + \_doc ----------------------------- + This code is documented in detail in the \"\TeX/book naruby", pages 244--246, + free available, \url{http://petr.olsak.net/tbn.html}, but in Czech. + Roughly speaking, macros complete all material between + \`\begmulti``<num-columns>` and \`\endmulti` + into one `\vbox 6`. Then the macro measures the amount of free space at the current + page using `\pagegoal` and `\pagtotal` and does `\vsplit` of `\vbox 6` to + columns with a height of such free space. This is done only if we have + enough amount of material in `\vbox 6` to fill the full page by columns. + This is repeated in a loop until we have less amount of material in `\vbox 6`. + Then we run `\_balancecolumns` which balances the last part of the columns. + Each part of printed material is distributed to the main vertical list as + `\hbox{<columns>}` and we need not do any change in the output routine. + + If you have paragraphs in `\begmulti`... `\endmulti` environment then + you may say `\raggedright` inside this environment and you can re-assign + `\widowpenalty` and `\clubppenalty` (they are set to 10000 in \OpTeX/). + \_cod ----------------------------- + +\_def\_multiskip{\_medskip} % space above and below \begmulti...\endmulti + +\_newcount\_mullines + +\_def\_begmulti #1 {\_par\_bgroup\_wipeepar\_multiskip\_penalty0 \_def\_Ncols{#1} + \_setbox6=\_vbox\_bgroup \_let\_setxhsize=\_relax \_penalty0 + %% \hsize := column width = (\hsize+\colsep) / n - \colsep + \_advance\_hsize by\_colsep + \_divide\_hsize by\_Ncols \_advance\_hsize by-\_colsep + \_mullines=0 + \_def\par{\_ifhmode\_endgraf\_global\_advance\_mullines by\_prevgraf\_fi}% +} +\_def\_endmulti{\_vskip-\_prevdepth\_vfil + \_ea\_egroup\_ea\_baselineskip\_the\_baselineskip\_relax + \_dimen0=.8\_maxdimen \_tmpnum=\_dimen0 \_divide\_tmpnum by\_baselineskip + \_splittopskip=\_baselineskip + \_setbox1=\_vsplit6 to0pt + %% \dimen1 := the free space on the page + \_ifdim\_pagegoal=\_maxdimen \_dimen1=\_vsize \_corrsize{\_dimen1} + \_else \_dimen1=\_pagegoal \_advance\_dimen1 by-\_pagetotal \_fi + \_ifdim \_dimen1<2\_baselineskip + \_vfil\_break \_dimen1=\_vsize \_corrsize{\_dimen1} \_fi + \_ifnum\_mullines<\_tmpnum \_dimen0=\_ht6 \_else \_dimen0=.8\_maxdimen \_fi + \_divide\_dimen0 by\_Ncols \_relax + %% split the material to more pages? + \_ifdim \_dimen0>\_dimen1 \_splitpart + \_else \_balancecolumns \_fi % only balancing + \_multiskip\_egroup +} + + \_doc ----------------------------- + Splitting columns... + \_cod ----------------------------- + +\_def\_makecolumns{\_bgroup % full page, destination height: \dimen1 + \_vbadness=20000 \_setbox1=\_hbox{}\_tmpnum=0 + \_loop \_ifnum\_Ncols>\_tmpnum + \_advance\_tmpnum by1 + \_setbox1=\_hbox{\_unhbox1 \_vsplit6 to\_dimen1 \_hss} + \_repeat + \_hbox{}\_nobreak\_vskip-\_splittopskip \_nointerlineskip + \_line{\_unhbox1\_unskip} + \_dimen0=\_dimen1 \_divide\_dimen0 by\_baselineskip \_multiply\_dimen0 by\_Ncols + \_global\_advance\_mullines by-\_dimen0 + \_egroup +} +\_def\_splitpart{% + \_makecolumns % full page + \_vskip 0pt plus 1fil minus\_baselineskip \_break + \_ifnum\_mullines<\_tmpnum \_dimen0=\_ht6 \_else \_dimen0=.8\_maxdimen \_fi + \_divide\_dimen0 by\_Ncols \_relax + \_ifx\_balancecolumns\_flushcolumns \_advance\_dimen0 by-.5\_vsize \_fi + \_dimen1=\_vsize \_corrsize{\_dimen1}\_dimen2=\_dimen1 + \_advance\_dimen2 by-\_baselineskip + %% split the material to more pages? + \_ifvoid6 \_else + \_ifdim \_dimen0>\_dimen2 \_ea\_ea\_ea \_splitpart + \_else \_balancecolumns % last balancing + \_fi \_fi +} + + \_doc ----------------------------- + Final balancing of the columns. + \_cod ----------------------------- + +\_def\_balancecolumns{\_bgroup \_setbox7=\_copy6 % destination height: \dimen0 + \_ifdim\_dimen0>\_baselineskip \_else \_dimen0=\_baselineskip \_fi + \_vbadness=20000 + \_def\_tmp{% + \_setbox1=\_hbox{}\_tmpnum=0 + \_loop \_ifnum\_Ncols>\_tmpnum + \_advance\_tmpnum by1 + \_setbox1=\_hbox{\_unhbox1 + \_ifvoid6 \_hbox to\_wd6{\_hss}\_else \_vsplit6 to\_dimen0 \_fi\_hss} + \_repeat + \_ifvoid6 \_else + \_advance \_dimen0 by.2\_baselineskip + \_setbox6=\_copy7 + \_ea \_tmp \_fi}\_tmp + \_hbox{}\_nobreak\_vskip-\_splittopskip \_nointerlineskip + \_hbox to\_hsize{\_unhbox1\_unskip}% + \_egroup +} +\_def\_corrsize #1{%% #1 := #1 + \splittopskip - \topskip + \_advance #1 by \_splittopskip \_advance #1 by-\_topskip +} +\_public \begmulti \endmulti ; + +\_endcode % ------------------------------------- + + diff --git a/Master/texmf-dist/tex/optex/base/optex.ini b/Master/texmf-dist/tex/optex/base/optex.ini new file mode 100644 index 00000000000..c695b7d8098 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/optex.ini @@ -0,0 +1,107 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +%% OpTeX ini file +%% Petr Olsak <project started from: Jan. 2020> + +% Catcodes: + +\catcode `\{=1 % left brace is begin-group character +\catcode `\}=2 % right brace is end-group character +\catcode `\$=3 % dollar sign is math shift +\catcode `\&=4 % ampersand is alignment tab +\catcode `\#=6 % hash mark is macro parameter character +\catcode `\^=7 % +\catcode `\^^K=7 % circumflex and uparrow are for superscripts +\catcode `\^^A=8 % downarrow is for subscripts +\catcode `\^^I=10 % ascii tab is a blank space +\catcode `\_=11 % underline can be used in control sequences +\catcode `\~=13 % tilde is active +\catcode `\^^a0=13 % non breaking space in Unicode +\catcode 127=12 % normal character + +% OpTeX version + +\def\optexversion{1.01 Mar.2021} +\def\fmtname{OpTeX} +\let\fmtversion=\optexversion + +% Engine testing: + +\newlinechar=`\^^J +\ifx\directlua\undefined + \message{This format is based only on LuaTeX, use luatex -ini optex.ini^^J} + \endinput \fi + +\ifx\bgroup\undefined \else + \message{This file can be used only for format initialisation, use luatex -ini^^J} + \endinput \fi + +% Basic .opm syntax: + +\let\_endcode =\endinput +\def \_codedecl #1#2{\message{#2^^J}}% information about .opm file +\long\def\_doc#1\_cod#2 {} % skip documentation + +% Initialization: + +\message{OpTeX (Olsak's Plain TeX) initialization <\optexversion>^^J} + +\input prefixed.opm % prefixed primitives and code syntax +\input luatex-ini.opm % luaTeX initialization +\input basic-macros.opm % basic macros +\input alloc.opm % allocators for registers +\input if-macros.opm % special \if-macros, \is-macros and loops +\input parameters.opm % parameters setting +\input more-macros.opm % OpTeX useful macros (todo: doc) +\input keyval.opm % key=value dictionaries +\input plain-macros.opm % plainTeX macros +\input fonts-preload.opm % preloaded Latin Modern fonts +\input fonts-resize.opm % font resizing (low-level macros) +\input fonts-select.opm % font selection system +\input math-preload.opm % math fams CM + AMS preloaded +\input math-macros.opm % basic macros for math plus mathchardefs +\input math-unicode.opm % macros for loading UnicodeMath fonts +\input fonts-opmac.opm % font managing macros from OPmac +\input output.opm % output routine +\input margins.opm % macros for margins setting +\input colors.opm % colors +\input ref-file.opm % ref file +\input references.opm % references +\input hyperlinks.opm % hyperlinks +\input maketoc.opm % maketoc +\input outlines.opm % PDF outlines +\input pdfuni-string.opm % PDFunicode strings for outlines +\input sections.opm % titles, chapters, sections +\input lists.opm % lists, \begitems, \enditems +\input verbatim.opm % verbatim +\input hi-syntax.opm % syntax highlighting of verbatim listimgs +\input graphics.opm % graphics +\input table.opm % table macro +\input multicolumns.opm % more columns by \begmulti ...\endmulti +\input cite-bib.opm % Bibliography, \cite +\input makeindex.opm % Make index and sorting +\input fnotes.opm % \fnotes, \mnotes +\input styles.opm % styles \report, \letter +\input logos.opm % standard logos +\input uni-lcuc.opm % Setting lccodes and uccodes for Unicode characters +\input hyphen-lan.opm % initialization of hyphenation patterns +\input languages.opm % languages +\input others.opm % miscenaleous + +\_directlua{ + % preload OpTeX's lua code into format as bytecode + lua.bytecode[1] = assert(loadfile(kpse.find_file("optex", "lua"))) +} + +\_everyjob = {% + \_message{This is OpTeX (Olsak's Plain TeX), version <\optexversion>^^J}% + \_mathchardef\_fnotestack=\_pdfcolorstackinit page {0 g 0 G}% + \_directlua{lua.bytecode[1]()}% load OpTeX's Lua code + \_mathsbon % replaces \int_a^b to \int _a^b + \_inputref % inputs \jobname.ref if exists +} + +\_dump + +\_endcode % ------------------------------ + diff --git a/Master/texmf-dist/tex/optex/base/optex.lua b/Master/texmf-dist/tex/optex/base/optex.lua new file mode 100644 index 00000000000..2d83f38ed6f --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/optex.lua @@ -0,0 +1,356 @@ +-- This is part of the OpTeX project, see http://petr.olsak.net/optex + +-- The basic lua functions and declarations used in \OpTeX/ are here + +-- GENERAL + +-- Error function used by following functions for critical errors. +local function err(message) + error("\nerror: "..message.."\n") +end +-- +-- For a `\chardef`'d, `\countdef`'d, etc., csname return corresponding register +-- number. The responsibility of providing a `\XXdef`'d name is on the caller. +function registernumber(name) + return token.create(name).index +end +-- +-- ALLOCATORS +alloc = alloc or {} +-- +-- An attribute allocator in Lua that cooperates with normal \OpTeX/ allocator. +local attributes = {} +function alloc.new_attribute(name) + local cnt = tex.count["_attributealloc"] + 1 + if cnt > 65534 then + tex.error("No room for a new attribute") + else + tex.setcount("global", "_attributealloc", cnt) + texio.write_nl("log", '"'..name..'"=\\attribute'..tostring(cnt)) + attributes[name] = cnt + return cnt + end +end +-- +-- `provides_module` is needed by older version of luaotfload +provides_module = function() end +-- +-- CALLBACKS +callback = callback or {} +-- +-- Save `callback.register` function for internal use. +local callback_register = callback.register +function callback.register(name, fn) + err("direct registering of callbacks is forbidden, use 'callback.add_to_callback'") +end +-- +-- Table with lists of functions for different callbacks. +local callback_functions = {} +-- Table that maps callback name to a list of descriptions of its added +-- functions. The order corresponds with `callback_functions`. +local callback_description = {} +-- +-- Table used to differentiate user callbacks from standard callbacks. Contains +-- user callbacks as keys. +local user_callbacks = {} +-- Table containing default functions for callbacks, which are called if either +-- a user created callback is defined, but doesn't have added functions or for +-- standard callbacks that are \"extended" (see `mlist_to_hlist` and its pre/post +-- filters below). +local default_functions = {} +-- +-- Table that maps standard (and later user) callback names to their types. +local callback_types = { + -- file discovery + find_read_file = "exclusive", + find_write_file = "exclusive", + find_font_file = "data", + find_output_file = "data", + find_format_file = "data", + find_vf_file = "data", + find_map_file = "data", + find_enc_file = "data", + find_pk_file = "data", + find_data_file = "data", + find_opentype_file = "data", + find_truetype_file = "data", + find_type1_file = "data", + find_image_file = "data", + + open_read_file = "exclusive", + read_font_file = "exclusive", + read_vf_file = "exclusive", + read_map_file = "exclusive", + read_enc_file = "exclusive", + read_pk_file = "exclusive", + read_data_file = "exclusive", + read_truetype_file = "exclusive", + read_type1_file = "exclusive", + read_opentype_file = "exclusive", + + -- data processing + process_input_buffer = "data", + process_output_buffer = "data", + process_jobname = "data", + input_level_string = "data", + + -- node list processing + contribute_filter = "simple", + buildpage_filter = "simple", + build_page_insert = "exclusive", + pre_linebreak_filter = "list", + linebreak_filter = "exclusive", + append_to_vlist_filter = "exclusive", + post_linebreak_filter = "reverselist", + hpack_filter = "list", + vpack_filter = "list", + hpack_quality = "list", + vpack_quality = "list", + process_rule = "exclusive", + pre_output_filter = "list", + hyphenate = "simple", + ligaturing = "simple", + kerning = "simple", + insert_local_par = "simple", + mlist_to_hlist = "exclusive", + + -- information reporting + pre_dump = "simple", + start_run = "simple", + stop_run = "simple", + start_page_number = "simple", + stop_page_number = "simple", + show_error_hook = "simple", + show_error_message = "simple", + show_lua_error_hook = "simple", + start_file = "simple", + stop_file = "simple", + call_edit = "simple", + finish_synctex = "simple", + wrapup_run = "simple", + + -- pdf related + finish_pdffile = "data", + finish_pdfpage = "data", + page_order_index = "data", + process_pdf_image_content = "data", + + -- font related + define_font = "exclusive", + glyph_not_found = "exclusive", + glyph_info = "exclusive", + + -- undocumented + glyph_stream_provider = "exclusive", + provide_charproc_data = "exclusive", +} +-- +-- Return a list containing descriptions of added callback functions for +-- specific callback. +function callback.callback_descriptions(name) + return callback_description[name] or {} +end + +local valid_callback_types = { + exclusive = true, + simple = true, + data = true, + list = true, + reverselist = true, +} +-- +-- Create a user callback that can only be called manually using +-- `call_callback`. A default function is only needed by "exclusive" callbacks. +function callback.create_callback(name, cbtype, default) + if callback_types[name] then + err("cannot create callback '"..name.."' - it already exists") + elseif not valid_callback_types[cbtype] then + err("cannot create callback '"..name.. "' with invalid callback type '"..cbtype.."'") + elseif ctype == "exclusive" and not default then + err("unable to create exclusive callback '"..name.."', default function is required") + end + + callback_types[name] = cbtype + default_functions[name] = default or nil + user_callbacks[name] = true +end +-- +-- Add a function to the list of functions executed when callback is called. +-- For standard luatex callback a proxy function that calls our machinery is +-- registered as the real callback function. This doesn't happen for user +-- callbacks, that are called manually by user using `call_callback` or for +-- standard callbacks that have default functions -- like `mlist_to_hlist` (see +-- below). +function callback.add_to_callback(name, fn, description) + if user_callbacks[name] or callback_functions[name] or default_functions[name] then + -- either: + -- a) user callback - no need to register anything + -- b) standard callback that has already been registered + -- c) standard callback with default function registered separately + -- (mlist_to_hlist) + elseif callback_types[name] then + -- This is a standard luatex callback with first function being added, + -- register a proxy function as a real callback. Assert, so we know + -- when things break, like when callbacks get redefined by future + -- luatex. + assert(callback_register(name, function(...) + return callback.call_callback(name, ...) + end)) + else + err("cannot add to callback '"..name.."' - no such callback exists") + end + + -- add function to callback list for this callback + callback_functions[name] = callback_functions[name] or {} + table.insert(callback_functions[name], fn) + + -- add description to description list + callback_description[name] = callback_description[name] or {} + table.insert(callback_description[name], description) +end +-- +-- Remove a function from the list of functions executed when callback is +-- called. If last function in the list is removed delete the list entirely. +function callback.remove_from_callback(name, description) + local descriptions = callback_description[name] + local index + for i, desc in ipairs(descriptions) do + if desc == description then + index = i + break + end + end + + table.remove(descriptions, index) + local fn = table.remove(callback_functions[name], index) + + if #descriptions == 0 then + -- Delete the list entirely to allow easy checking of "truthiness". + callback_functions[name] = nil + + if not user_callbacks[name] and not default_functions[name] then + -- this is a standard callback with no added functions and no + -- default function (i.e. not mlist_to_hlist), restore standard + -- behaviour by unregistering. + callback_register(name, nil) + end + end + + return fn, description +end +-- +-- helper iterator generator for iterating over reverselist callback functions +local function reverse_ipairs(t) + local i, n = #t + 1, 1 + return function() + i = i - 1 + if i >= n then + return i, t[i] + end + end +end +-- +-- Call all functions added to callback. This function handles standard +-- callbacks as well as user created callbacks. It can happen that this +-- function is called when no functions were added to callback -- like for user +-- created callbacks or `mlist_to_hlist` (see below), these are handled either +-- by a default function (like for `mlist_to_hlist` and those user created +-- callbacks that set a default function) or by doing nothing for empty +-- function list. +function callback.call_callback(name, ...) + local cbtype = callback_types[name] + -- either take added functions or the default function if there is one + local functions = callback_functions[name] or {default_functions[name]} + + if cbtype == nil then + err("cannot call callback '"..name.."' - no such callback exists") + elseif cbtype == "exclusive" then + -- only one function, atleast default function is guaranteed by + -- create_callback + return functions[1](...) + elseif cbtype == "simple" then + -- call all functions one after another, no passing of data + for _, fn in ipairs(functions) do + fn(...) + end + return + elseif cbtype == "data" then + -- pass data (first argument) from one function to other, while keeping + -- other arguments + local data = (...) + for _, fn in ipairs(functions) do + data = fn(data, select(2, ...)) + end + return data + end + + -- list and reverselist are like data, but "true" keeps data (head node) + -- unchanged and "false" ends the chain immediately + local iter + if cbtype == "list" then + iter = ipairs + elseif cbtype == "reverselist" then + iter = reverse_ipairs + end + + local head = (...) + local new_head + local changed = false + for _, fn in iter(functions) do + new_head = fn(head, select(2, ...)) + if new_head == false then + return false + elseif new_head ~= true then + head = new_head + changed = true + end + end + return not changed or head +end +-- +-- Create \"virtual" callbacks `pre/post_mlist_to_hlist_filter` by setting +-- `mlist_to_hlist` callback. The default behaviour of `mlist_to_hlist` is kept by +-- using a default function, but it can still be overriden by using +-- `add_to_callback`. +default_functions["mlist_to_hlist"] = node.mlist_to_hlist +callback.create_callback("pre_mlist_to_hlist_filter", "list") +callback.create_callback("post_mlist_to_hlist_filter", "reverselist") +callback_register("mlist_to_hlist", function(head, ...) + -- pre_mlist_to_hlist_filter + local new_head = callback.call_callback("pre_mlist_to_hlist_filter", head, ...) + if new_head == false then + node.flush_list(head) + return nil + elseif new_head ~= true then + head = new_head + end + + -- mlist_to_hlist means either added functions or standard luatex behavior + -- of node.mlist_to_hlist (handled by default function) + head = callback.call_callback("mlist_to_hlist", head, ...) + + -- post_mlist_to_hlist_filter + new_head = callback.call_callback("post_mlist_to_hlist_filter", head, ...) + if new_head == false then + node.flush_list(head) + return nil + elseif new_head ~= true then + head = new_head + end + return head +end) +-- +-- Compatibility with \LaTeX/ through luatexbase namespace. Needed for +-- luaotfload. +luatexbase = { + registernumber = registernumber, + attributes = attributes, + provides_module = provides_module, + new_attribute = alloc.new_attribute, + callback_descriptions = callback.callback_descriptions, + create_callback = callback.create_callback, + add_to_callback = callback.add_to_callback, + remove_from_callback = callback.remove_from_callback, + call_callback = callback.call_callback, + callbacktypes = {} +} diff --git a/Master/texmf-dist/tex/optex/base/others.opm b/Master/texmf-dist/tex/optex/base/others.opm new file mode 100644 index 00000000000..6ff15d4332f --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/others.opm @@ -0,0 +1,106 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \uv {Miscenaleous <2020-05-22>} % preloaded in format + + \_doc ---------------------------- + \`\useOpTeX` and \`\useoptex` are declared as `\relax`. + \_cod ---------------------------- + +\_let \useOpTeX = \_relax \_let \useoptex = \_relax + + \_doc ---------------------------- + The \`\lastpage` and \`\totalpages` get the information from the + \^`\_currpage`. The \^`\_Xpage` from `.ref` file sets the \^`\_currpage`. + \_cod ---------------------------- + +\_def\_totalpages {\_openref\_ea\_ignoresecond\_currpage} +\_def\_lastpage {\_openref\_ea\_usesecond\_currpage} +\_def\_currpage {{0}{?}} +\_public \lastpage \totalpages ; + + \_doc ---------------------------- + We need \`\uv`, \`\clqq`, \`\crqq`, \`\flqq`, \`\frqq`, \`\uslang`, \`\ehyph` + \`\chyph`, \`\shyph`, for backward compatibility with \csplain. + Codes are set according to Unicode because we are using Czech only in Unicode + when \LuaTeX/ is used. + \_cod ---------------------------- + + +% for compatibility with csplain: + +\_chardef\clqq=8222 \_chardef\crqq=8220 +\_chardef\flqq=171 \_chardef\frqq=187 +\_chardef\promile=8240 + +\_def\uv#1{\clqq#1\crqq} + +\_let\uslang=\enlang \_let\ehyph=\enlang +\_let\chyph=\cslang \_let\shyph=\sklang +\_let\csUnicode=\csPatt \_let\czUnicode=\csPatt \_let\skUnicode=\skPatt + + \_doc ---------------------------- + The \`\letfont` was used in \csplain/ instead of `\fontlet`. + \_cod ---------------------------- + +\_let \letfont = \_fontlet + + \_doc ---------------------------- + Non-breaking space in Unicode. + \_cod ---------------------------- + +\let ^^a0=~ + + \_doc ---------------------------- + TikZ needs these funny control sequences. + \_cod ---------------------------- + +\_ea\_toksdef \_csname toks@\_endcsname=0 +\_ea\_let \_csname voidb@x\_endcsname=\_voidbox + + \_doc ---------------------------- + We don't want to read `opmac.tex` unless `\input opmac` is specified. + \_cod ---------------------------- + +\_def\OPmacversion{OpTeX} + + \_doc ---------------------------- + We allow empty lines in math formulae. It is more comfortable. + \_cod ---------------------------- + +\_suppressmathparerror = 1 + + \_doc ---------------------------- + Lorem ipsum can be printed by \`\lipsum``[<range>]` or \`\lorem``[<range>]`, + for example `\lipsum[3]` or `\lipsum[112-121]`, max=150. + + First usage of `\lipsum` reads the \LaTeX/ file `lipsum.ltd.tex` + by \`\_lipsumload` + and prints the selected paragraph(s). Next usages of `\lipsum` + prints the selected paragraph(s) from memory. This second and more + usages of `\lipsum` are fully expandable. If you want to have all + printings of `\lipsum` expandable, use dummy `\lipsum[0]` first. + + `\lipsum` adds `\par` after each printed paragraph. If you don't need + such `\par` here, use \`\lipsumtext``[<number>]`. + This macro prints only one selected paragraph <number> and does not add `\par`. + \_cod ---------------------------- + +\_def\_lipsumtext[#1]{\_lipsumload\_cs{_lip:#1}} +\_def\_lipsum[#1]{\_lipsumA #1\_empty-\_empty\_end} +\_def\_lipsumA #1-#2\_empty#3\_end{% + \_fornum #1..\_ifx^#2^#1\_else#2\_fi \_do {\_lipsumtext[##1]\par}} +\_def\_lipsumload{{% + \_setbox0=\_vbox{\_tmpnum=0 % vertical mode during \input lipsum.ltd.tex + \_def\ProvidesFile##1[##2]{}% + \_def\NewLipsumPar{\_incr\_tmpnum \_sxdef{_lip:\_the\_tmpnum}}% + \_opinput {lipsum.ltd.tex}% + \_global\_let\_lipsumload=\_empty + }}} +\_public \lipsum \lipsumtext ; +\_let \lorem=\lipsum + +\_endcode + +2021-01-04 \lipsumtext introduced +2020-05-22 \lipsum uses \fornum (expandable after first usage) +2020-04-02 released diff --git a/Master/texmf-dist/tex/optex/base/outlines.opm b/Master/texmf-dist/tex/optex/base/outlines.opm new file mode 100644 index 00000000000..6230d8988b8 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/outlines.opm @@ -0,0 +1,108 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \outlines {PDF outlines <2021-02-09>} % preloaded in format + +\_def\_outlines#1{\_pdfcatalog{/PageMode/UseOutlines}\_openref + \_ifx\_toclist\_empty + \_opwarning{\_noexpand\outlines -- data unavailable. TeX me again}% + \_incr\_unresolvedrefs + \_else + \_ifx\_dest\_destactive \_else + \_opwarning{\_noexpand\outlines doesn't work when \_noexpand\hyperlinks isn't declared}\_fi + {\_let\_tocline=\_outlinesA + \_count0=0 \_count1=0 \_count2=0 \_count3=0 \_toclist % calculate numbers o childs + \_def\_outlinelevel{#1}\_let\_tocline=\_outlinesB + \_tocrefnum=0 \_count0=0 \_count1=0 \_count2=0 \_count3=0 + \_toclist}% create outlines + \_fi +} +\_def\_outlinesA#1#2#3#4#5#6#7{% + \_isequal{\relax}{#4}\_iffalse + \_advance\_count#1 by1 + \_ifcase#1\_or + \_addoneol{_ol:\_the\_count0}\_or + \_addoneol{_ol:\_the\_count0:\_the\_count1}\_or + \_addoneol{_ol:\_the\_count0:\_the\_count1:\_the\_count2}\_or + \_addoneol{_ol:\_the\_count0:\_the\_count1:\_the\_count2:\_the\_count3}\_fi + \_fi +} +\_def\_addoneol#1{% + \_ifcsname #1\_endcsname + \_tmpnum=\_csname#1\_endcsname\_relax + \_advance\_tmpnum by1 \_sxdef{#1}{\_the\_tmpnum}% + \_else \_sxdef{#1}{1}% + \_fi +} +\_def\_outlinesB#1#2#3#4#5#6#7{% + \_advance\_tocrefnum by1 + \_isequal{\relax}{#4}\_iffalse + \_advance\_count#1 by1 + \_ifcase#1% + \_tmpnum=\_trycs{_ol:\_the\_count0}{0}\_or + \_tmpnum=\_trycs{_ol:\_the\_count0:\_the\_count1}{0}\_relax\_or + \_tmpnum=\_trycs{_ol:\_the\_count0:\_the\_count1:\_the\_count2}{0}\_relax\_or + \_tmpnum=\_trycs{_ol:\_the\_count0:\_the\_count1:\_the\_count2:\_the\_count3}{0}\_relax\_or + \_tmpnum = 0\_relax\_fi + \_isempty{#4}\_iftrue \_pdfunidef\_tmp{#5}\_else \_pdfunidef\_tmp{#4}\_fi + \_outlinesC{toc:\_the\_tocrefnum}{\_ifnum#1<\_outlinelevel\_space\_else-\_fi}{\_tmpnum}{\_tmp}% + \_fi +} +\_def\_outlinesC#1#2#3#4{\_pdfoutline goto name{#1} count #2#3{#4}\_relax} + +\_newcount\_oulnum +\_def\_insertoutline#1{\_incr\_oulnum + \_pdfdest name{oul:\_the\_oulnum} xyz\_relax + \_pdfunidef\_tmp{#1}% + \_pdfoutline goto name{oul:\_the\_oulnum} count0 {\_tmp}\_relax +} +\_public \outlines \insertoutline ; + +\_endcode % ---------------------------- + +The problem is that PDF format needs to know the number of direct +descendants of each outline if we need to create the tree of structured +outlines. But we know only the level of each outline. The required data +should be calculated from TOC data. We use two steps over TOC data saved in +the `\_toclist` where each record is represented by one `\_tocline`. + +The first step, the \`\outlines` macro sets `\_tocline` to \`\_outlinesA` and +calculates the number of direct descendants of each record. The second step, +the `\outlines` macro sets `\_tocline` to \`\_outlinesB` and it uses prepared +data and creates outlines. + +Each outline is mapped to the control sequence of the type +`\_ol:<num>` or `\_ol:<num>:<num>` or `\_ol:<num>:<num>:<num>` or etc. +The first one is reserved for level 0, the second one for level 1 (chapters), the third +one for level 2 (sections) etc. The number of direct descendants will be stored +in these macros after the first step is finished. Each new outline of a given level +increases the `<num>` at the given level. When the first step is processed then +(above that) the `\_ol:..` sequence of the parent increases its value too. The +`_ol:...` sequences are implemented by `\_ol:\_count0:\_count1:\count2` etc. +For example, when section (level 2) is processed in the first step then we do: + +\begtt + \advance \count2 by 1 + % increases the mapping pointer of the type + % \_ol:\_count0:\_count1:\_count2 of this section + \advance \_ol:\_count0:\_count1 by 1 + % increases the number of descendants connected + % to the parent of this section. +\endtt + +When the second step is processed, then we only read the stored data about the +number of descendants. And we use it in `count` parameter of `\_pdfoutline` +primitive. + +For linking, we use the same links as in TOC, i.e. the `toc:\_the\_tocrefnum` +labels are used. + +\`\insertoutline` `{<text>}` inserts one outline with zero direct descendants. +It creates a link destination of the type `oul:<num>` into the document +(where \^`\insertoutline` is used) and the link itself is created too in the +outline. + +\endinput + +2021-02-15 \_advance -> \_incr +2021-02-09 \thisoutline implemented +2020-03-12 released diff --git a/Master/texmf-dist/tex/optex/base/output.opm b/Master/texmf-dist/tex/optex/base/output.opm new file mode 100644 index 00000000000..5bb93c24773 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/output.opm @@ -0,0 +1,267 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \nopagenumbers {Output routine <2021-02-25>} % preloaded in format + + \_doc ----------------------------- + \`\_optexoutput` is the default output routine. You can create another... + \_cod ----------------------------- + +\_output={\_optexoutput} +\_def \_optexoutput{\_begoutput \_shipout\_completepage \_endoutput} + + \_doc ----------------------------- + Default \`\_begoutput` and \`\_endoutput` is defined. + If you need another functionality implemented in the output routine, you can + \^`\addto``\_begoutput{...}` or \^`\addto``\_endoutput{...}`. The settings + here are local in the `\output` group. + + The \`\_prepoffsets` can set `\hoffset` differently for the left or right + page. It is re-defined by the \^`\margins` macro.. + + The \^`\_regmark` tokens list includes accumulated `#2` from the \^`\regmacro`. + Logos and other macros are re-defined here (locally) for their usage + in headlines or footlines. + \_cod ----------------------------- + +\_def \_begoutput{\_incr\_gpageno + \_immediate\_wref\_Xpage{{\_the\_gpageno}{\_folio}}% + \_setxhsize \_prepoffsets \_the\_regmark} +\_def \_endoutput{\_advancepageno + {\_globaldefs=1 \_the\_nextpages \_nextpages={}}% + \_ifnum\_outputpenalty>-20000 \_else\_dosupereject\_fi +} +\_def \_prepoffsets {} + + \_doc ----------------------------- + The `\hsize` value can be changed at various places in the document but + we need to have a constant value \`\_xhsize` in the output routine + (for headlines and footlines, for instance). This value is set + from the current value of `\hsize` when \`\_setxhsize` macro is called. + This macro destroys itself, so the value is set only once. Typically it is + done in \^`\margins` macro or + when first \^`\_optexoutput` routine is called (see \^`\_begoutput`). + Or it is called at the begining of the \^`\begtt`...`\endtt` environment before + `\hsize` value is eventually changed by the user in this environment. + \_cod ----------------------------- + +\_newdimen \_xhsize +\_def\_setxhsize {\_global\_xhsize=\_hsize \_global\_let\_setxhsize=\_relax} + + \_doc ----------------------------- + \`\gpageno` counts pages from one in the whole document + \_cod ----------------------------- + +\_newcount\_gpageno +\_public \gpageno ; + + \_doc ----------------------------- + The \`\_completepage` is similar to what plain \TeX/ does in its output routine. + New is only \`\_backgroundbox`. It is `\vbox` with zero height with its + contents (from \^`\pgbackground`) extended down. It is shifted directly to the + left-upper corner of the paper. + + The \`\_ensureblack` sets the typesetting of its parameter locally to `\Black` + color. We needn't do this if colors are never used in the document. So, + the default value of the `\_ensureblack` macro is empty. But the first usage of + color macros in the document re-defines `\_ensureblack`. + See the section~\ref[colors] for more details. + \_cod ----------------------------- + +\_def\_completepage{\_vbox{% + \_istoksempty \_pgbackground + \_iffalse \_ensureblack{\_backgroundbox{\_the\_pgbackground}}\_nointerlineskip \_fi + \_ensureblack{\_makeheadline}% + \_vbox to\_vsize {\_boxmaxdepth=\_maxdepth \_pagecontents}% \pagebody in plainTeX + \_ensureblack{\_makefootline}}% +} +\_def \_ensureblack #1{#1} % will be re-defined by color macros +\_let \_openfnotestack = \_relax % will be re-defined by color macros +\_def \_backgroundbox #1{\_moveleft\_hoffset\_vbox to\_zo{\_kern-\_voffset #1\_vss}} + + \_doc ----------------------------- + \`\_makeheadline` creates `\vbox to0pt` with its contents (the \^`\headline`) + shifted by \^`\headlinedist` up. + \_cod ----------------------------- + +\_def\_makeheadline {\_istoksempty \_headline \_iffalse + \_vbox to\_zo{\_vss + \_baselineskip=\_headlinedist \_lineskiplimit=-\_maxdimen + \_hbox to\_xhsize{\_the\_headline}\_hbox{}}\_nointerlineskip + \_fi +} + + \_doc ----------------------------- + The \`\_makefootline` appends the \^`\footline` to the page-body box. + \_cod ----------------------------- + +\_def\_makefootline{\_istoksempty \_footline \_iffalse + \_baselineskip=\_footlinedist + \_lineskiplimit=-\_maxdimen \_hbox to\_xhsize{\_the\_footline} + \_fi +} + + \_doc ----------------------------- + The \`\_pagecontents` is similar as in plain \TeX/. The only differnece is + that the \`\_pagedest` is inserted at the top of `\_pagecontents` and + \^`\_ensureblack` is applied to the \^`\topins` and \^`\footins` material.\nl + The \`\_footnoterule` is defined here. + \_cod ----------------------------- + +\_def\_pagecontents{\_pagedest % destination of the page + \_ifvoid\_topins \_else \_ensureblack{\_unvbox\_topins}\_fi + \_dimen0=\_dp255 \_unvbox255 % open up \box255 + \_ifvoid\_footins \_else % footnote info is present + \_vskip\_skip\_footins + \_ensureblack{\_footnoterule \_openfnotestack \_unvbox\_footins}\_fi + \_kern-\_dimen0 \_vskip \_pgbottomskip +} +\_def \_pagedest {{\_def\_destheight{25pt}\_dest[pg:\_the\_gpageno]}} +\_def \_footnoterule {\_kern-3pt \_hrule width 2truein \_kern 2.6pt } + + \_doc ----------------------------- + \`\pageno`, \`\folio`, \`\nopagenumbers`, \`\advancepageno` + and \`\normalbottom` + used in the context of the output routine + from plain \TeX/ is defined here. + Only the \`\raggedbottom` macro is defined differently. We use the + \^`\pgbottomskip` register here which is set to 0\,pt by default. + \_cod ----------------------------- + +\_countdef\_pageno=0 \_pageno=1 % first page is number 1 +\_def \_folio {\_ifnum\_pageno<0 \_romannumeral-\_pageno \_else \_number\_pageno \_fi} +\_def \_nopagenumbers {\_footline={}} +\_def \_advancepageno {% + \_ifnum\_pageno<0 \_decr\_pageno \_else \_incr\_pageno \_fi +} % increase |pageno| +\_def \_raggedbottom {\_topskip=\_dimexpr\_topskip plus60pt \_pgbottomskip=0pt plus1fil\_relax} +\_def \_normalbottom {\_topskip=\_dimexpr\_topskip \_pgbottomskip=0pt\_relax} + +\_public \pageno \folio \nopagenumbers \advancepageno \raggedbottom \normalbottom ; + + \_doc ----------------------------- + Macros for footnotes are the same as in plain \TeX. There is only one + difference: \`\vfootnote` is implemented as \`\_opfootnote` with empty + parameter `#1`. This parameter should do local settings inside + the \`\footins` group and it does it when `\fnote` macro is used.\nl + The `\_opfootnote` nor `\vfootnote` don't take the footnote text + as a parameter. This is due to a user can do catcode settings (like inline + verbatim) in the footnote text. This idea is adapted from plain \TeX.\nl + The \`\footnote` and \`\footstrut` is defined as in plain \TeX/. + \_cod ----------------------------- + +\_newinsert\_footins +\_def \_footnote #1{\_let\_osf=\_empty % parameter #2 (the text) is read later + \_ifhmode \_edef\_osf{\_spacefactor\_the\_spacefactor}\/\_fi + #1\_osf\_vfootnote{#1}} +\_def\_vfootnote{\_opfootnote{}} +\_def \_opfootnote #1#2{\_insert\_footins\_bgroup + \_interlinepenalty=\_interfootnotelinepenalty + \_leftskip=\_zo \_rightskip=\_zo \_spaceskip=\_zo \_xspaceskip=\_zo \_relax + \_let\_colorstackcnt=\_fnotestack % special color stack for footnotes + #1\_relax % local settings used by \fnote macro + \_splittopskip=\_ht\_strutbox % top baseline for broken footnotes + \_splitmaxdepth=\_dp\_strutbox \_floatingpenalty=20000 + \_textindent{#2}\_footstrut + \_isnextchar \_bgroup + {\_bgroup \_aftergroup\_vfootA \_afterassignment\_ignorespaces \_let\_next=}{\_vfootB}% +} +\_def\_vfootA{\_unskip\_strut\_isnextchar\_colorstackpop\_closefncolor\_vfootF} +\_def\_vfootB #1{#1\_unskip\_strut\_vfootF} +\_def\_vfootF{\_egroup} % close \_insert\_footins\_bgroup +\_def\_closefncolor#1{#1\_isnextchar\_colorstackpop\_closefncolor\_vfootF} +\_def \_footstrut {\_vbox to\_splittopskip{}} +\_skip\_footins=\_bigskipamount % space added when footnote is present +\_count\_footins=1000 % footnote magnification factor (1 to 1) +\_dimen\_footins=8in % maximum footnotes per page +\_public + \footins \footnote \vfootnote \footstrut ; + + \_doc ----------------------------- + The \`\topins` macros + \`\topinsert`, \`\midinsert`, \`\pageinsert`, \`\endinsert` + are the same as in plain \TeX/. + \_cod ----------------------------- + +\_newinsert\_topins +\_newifi\_ifupage \_newifi\_ifumid +\_def \_topinsert {\_umidfalse \_upagefalse \_oins} +\_def \_midinsert {\_umidtrue \_oins} +\_def \_pageinsert {\_umidfalse \_upagetrue \_oins} +\_skip\_topins=\_zoskip % no space added when a topinsert is present +\_count\_topins=1000 % magnification factor (1 to 1) +\_dimen\_topins=\_maxdimen % no limit per page +\_def \_oins {\_par \_begingroup\_setbox0=\_vbox\_bgroup} % start a \_vbox +\_def \_endinsert {\_par\_egroup % finish the \_vbox + \_ifumid \_dimen0=\_ht0 \_advance\_dimen0 by\_dp0 \_advance\_dimen0 by\_baselineskip + \_advance\_dimen0 by\_pagetotal \_advance\_dimen0 by-\_pageshrink + \_ifdim\_dimen0>\_pagegoal \_umidfalse \_upagefalse \_fi \_fi + \_ifumid \_bigskip \_box0 \_bigbreak + \_else \_insert \_topins {\_penalty100 % floating insertion + \_splittopskip=0pt + \_splitmaxdepth=\_maxdimen \_floatingpenalty=0 + \_ifupage \_dimen0=\_dp0 + \_vbox to\_vsize {\_unvbox0 \_kern-\_dimen0}% depth is zero + \_else \_box0 \_nobreak \_bigskip \_fi}\_fi\_endgroup} + +\_public \topins \topinsert \midinsert \pageinsert \endinsert ; + + \_doc ----------------------------- + The \`\draft` macro is an example of usage `\_pgbackground` to create + watercolor marks. + \_cod ----------------------------- + +\_def \_draft {\_pgbackground={\_draftbox{\_draftfont DRAFT}}% + \_fontdef\_draftfont{\_setfontsize{at10pt}\_bf}% + \_global\_let\_draftfont=\_draftfont +} +\_def \_draftbox #1{\_setbox0=\_hbox{#1}% + \_kern.5\_vsize \_kern\_voffset \_kern4.5\_wd0 + \_hbox to0pt{\_kern.5\_xhsize \_kern\_hoffset \_kern-2\_wd0 + \_pdfsave \_pdfrotate{55}\_pdfscale{10}{10}% + \_hbox to0pt{\_localcolor\_setgreycolor{.8}\_box0\_hss}% + \_pdfrestore + \_hss}% +} +\_public \draft ; + +\_endcode % ------------------------------------- + + +The output routine \^`\_optexoutput` is similar as in plain \TeX. It does: + +\begitems +* \^`\_begoutput` which does: + \begitems + * increments \^`\gpageno`, + * prints `\_Xpage{<gpageno>}{<pageno>}` to the `.ref` file + (if \^`\openref` is active), + * calculates `\hoffset`, + * sets local meaning of macros used in headlines/footlines (see \^`\regmacro`). + \enditems +* `\shipout`\^`\_completepage`, which is `\vbox` of -- + \begitems + * backrground box, if \^`\pgbackground` is non-empty, + * headline box by \^`\_makeheadline`, if the \^`\headline` is nonempty, + * `\vbox to\vsize` of \^`\_pagecontents` which cosnists of -- + \begitems + * \^`\_pagedest`, the page destination `pg:<gpageno>` for hyperlinks is created here, + * \^`\topins` box if non-empty (from \^`\topinsert`s), + * `\box255` with completed vertical material from main vertical mode, + * \^`\_footnoterule` and \^`\footins` box if nonempty (from \^`\fnote`, \^`\footnote`), + * \^`\pgbottomskip` (default is 0\,pt). + \enditems + * footline box by `\_makefootline`, if the \^`\footline` is nonempty + \enditems +* \^`\_endoutput` which does: + \begitems + * increments \^`\pageno` using \^`\advancepageno` + * runs output routine repeatedly if \^`\dosupereject` is activated. + \enditems +\enditems + +\_endinput + +2021-02-25 \_draftbox improved +2021-02-15 \_advance -> \_decr +2020-05-12 \vfootB: \uskip -> \unskip bug fixed +2020-03-28 Released diff --git a/Master/texmf-dist/tex/optex/base/parameters.opm b/Master/texmf-dist/tex/optex/base/parameters.opm new file mode 100644 index 00000000000..c8df6eec491 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/parameters.opm @@ -0,0 +1,588 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \normalbaselineskip {Parameter settings <2020-03-17>} % preloaded in format + + \_doc ----------------------------- + \secc Primitive registers + The primitive registers with the same default value as in plain \TeX/ follow: + \_cod ----------------------------- + +\_parindent=20pt % indentation of paragraphs +\_pretolerance=100 % parameters used in paragraph breaking algorithm +\_tolerance=200 +\_hbadness=1000 +\_vbadness=1000 +\_doublehyphendemerits=10000 +\_finalhyphendemerits=5000 +\_adjdemerits=10000 +\_uchyph=1 +\_defaulthyphenchar=`\- +\_defaultskewchar=-1 +\_hfuzz=0.1pt +\_vfuzz=0.1pt +\_overfullrule=5pt +\_linepenalty=10 % penalty between lines inside the paragraph +\_hyphenpenalty=50 % when a word is bro-ken +\_exhyphenpenalty=50 % when the hyphenmark is used explicitly +\_binoppenalty=700 % between binary operators in math +\_relpenalty=500 % between relations in math +\_brokenpenalty=100 % after lines if they end by a broken word. +\_displaywidowpenalty=50 % before last line of paragraph if display math follows +\_predisplaypenalty=10000 % above display math +\_postdisplaypenalty=0 % below display math +\_delimiterfactor=901 % parameter for scaling delimiters +\_delimitershortfall=5pt +\_nulldelimiterspace=1.2pt +\_scriptspace=0.5pt +\_maxdepth=4pt +\_splitmaxdepth=\_maxdimen +\_boxmaxdepth=\_maxdimen +\_parskip=0pt plus 1pt +\_abovedisplayskip=12pt plus 3pt minus 9pt +\_abovedisplayshortskip=0pt plus 3pt +\_belowdisplayskip=12pt plus 3pt minus 9pt +\_belowdisplayshortskip=7pt plus 3pt minus 4pt +\_parfillskip=0pt plus 1fil +\_thinmuskip=3mu +\_medmuskip=4mu plus 2mu minus 4mu +\_thickmuskip=5mu plus 5mu + + \_doc ----------------------------- + Note that `\topskip` and `\splittopskip` are changed when first + `\typosize` sets the main values (default font size and default + `\baselineskip`). + \_cod ----------------------------- + +\_topskip=10pt % top edge of page-box to first baseline distance +\_splittopskip=10pt + + \_doc ----------------------------- + \secc Plain \TeX/ registers + Declared registers used in plain \TeX/ + \_cod ----------------------------- + +% We also define special registers that function like parameters: +\_newskip\_smallskipamount \_smallskipamount=3pt plus 1pt minus 1pt +\_newskip\_medskipamount \_medskipamount=6pt plus 2pt minus 2pt +\_newskip\_bigskipamount \_bigskipamount=12pt plus 4pt minus 4pt +\_newskip\_normalbaselineskip \_normalbaselineskip=12pt +\_newskip\_normallineskip \_normallineskip=1pt +\_newdimen\_normallineskiplimit \_normallineskiplimit=0pt +\_newdimen\_jot \_jot=3pt +\_newcount\_interdisplaylinepenalty \_interdisplaylinepenalty=100 +\_newcount\_interfootnotelinepenalty \_interfootnotelinepenalty=100 + +\_def\_normalbaselines{\_lineskip=\_normallineskip + \_baselineskip=\_normalbaselineskip \_lineskiplimit=\_normallineskiplimit} + +\_def\_frenchspacing{\_sfcode`\.=1000 \_sfcode`\?=1000 \_sfcode`\!=1000 + \_sfcode`\:=1000 \_sfcode`\;=1000 \_sfcode`\,=1000 } +\_def\_nonfrenchspacing{\_sfcode`\.=3000 \_sfcode`\?=3000 \_sfcode`\!=3000 + \_sfcode`\:=2000 \_sfcode`\;=1500 \_sfcode`\,=1250 } + +\_public \normalbaselines \frenchspacing \nonfrenchspacing + \smallskipamount \medskipamount \bigskipamount + \normalbaselineskip \normallineskip \normallineskiplimit + \jot \interdisplaylinepenalty \interfootnotelinepenalty ; + + \_doc ----------------------------- + \secc Different settings than in plain \TeX/ + + Default \"baseline setting" is for 10\,pt fonts (like in plain \TeX/). + But `\typosize` and `\typoscale` macros re-declare it if another font size is used. + + The \`\nonfrenchspacing` is not set by default because + the author of \OpTeX/ is living in Europe. + If you set `\enlang` hyphenation patterns then `\nonfrenchspacing` + is set. + \_cod ----------------------------- + +\_normalbaselines % baseline setting, 10 pt font size + + \_doc ----------------------------- + Different values than in plain \TeX/ have the following primitive registers. + We prohibit orphans, set more information for tracing boxes, set page origin + to the upper left corner of the paper (no at 1\,in, 1\,in coordinates) + and set default page dimensions as A4, no letter. + \_cod ----------------------------- + +\_emergencystretch=20pt % we want to use third pass of paragraph building algoritmh + % we need not keep the compatibility with old documents + +\_clubpenalty=10000 % after first line of paragraph +\_widowpenalty=10000 % before last line of paragraph + +\_showboxbreadth=150 % for tracing boxes +\_showboxdepth=7 +\_errorcontextlines=15 +\_tracinglostchars=2 % missing chracter warnings on terminal too + +\_outputmode=1 % PDF ouput +\_pdfvorigin=0pt % orgin is exatly at left upper corner +\_pdfhorigin=0pt +\_hoffset=25mm % margins are 2.5cm, no 1in +\_voffset=25mm +\_hsize=160mm % 210mm (from A4 size) - 2*25mm (default margins) +\_vsize=244mm % 297mm (from A4 size) - 2*25mm (default margins) -3mm baseline correction +\_pagewidth=210 true mm +\_pageheight=297 true mm + + \_doc ----------------------------- + If you insist on plain \TeX/ values of these parameters then you can + call the `\plaintexsetting` macro. + \_cod ----------------------------- + +\_def\_plaintexsetting{% + \_emergencystretch=0pt + \_clubpenalty=150 + \_widowpenalty=150 + \_pdfvorigin=1in + \_pdfhorigin=1in + \_hoffset=0pt + \_voffset=0pt + \_hsize=6.5in + \_vsize=8.9in + \_pagewidth=8.5 true in + \_pageheight=11 true in + \_nonfrenchspacing +} +\_public \plaintexsetting ; + + \_doc ----------------------------- + \secc[oparams] \OpTeX/ parameters + + The main principle of how to configure \OpTeX/ is not to use only parameters. + A designer can copy macros from \OpTeX/ and re-define them as required. + This is a reason why we don't implement dozens of parameters, + but we keep \OpTeX/ macros relatively simple. Example: do you want + another design of section titles? Copy macros `\_printsec` and + `\_printsecc` from `sections.opm` file to your macro file and re-define them. + + Notice for OPmac users: there is an important difference: all "string-like" + parameters are token lists in \OpTeX/ (OPmac uses macros for them). The reason of + this difference: if a user sets parameter by unprefixed (public) control sequence, + an \OpTeX/ macro can read {\em the same data} using a prefixed (private) control sequence. + + The \`\picdir` tokens list can include a directory where image files + (loaded by `\inspic`) are saved. Empty `\picdir` (default value) means + that image files are in the current directory (or somewhere in the \TeX/ + system where \LuaTeX/ can find them). If you set a non-empty value to + the `\picdir`, then it must end by `/` character, for example + `\picdir={img/}` means that there exists a directory `img` in your + current directory and the image files are stored here. + \_cod ----------------------------- + +\_newtoks\_picdir +\_public \picdir ; + + \_doc ----------------------------- + You can control the dimensions of included images by + the parameters \`\picwidth` (which is equivalent to \`\picw`) and + \`\picheight`. By default these parameters are set to zero: the native + dimension of the image is used. If only `\picwidth` has a nonzero value, + then this is the width of the image (height is calculated automatically in + order to respect the aspect of the image). If only `\picheight` has + a nonzero value then the height is given, the width is calculated. If both + parameters are non-zero, the height and width are given and the aspect + ratio of the image is (probably) broken. We recommend setting these + parameters locally in the group where \^`\inspic` is used in order to not + influence the dimensions of other images. But there exist many + situations you need to put the same dimensions to more images, + so you can set this parameter only once before more \^`\inspic` macros. + \_cod ----------------------------- + +\_newdimen\_picwidth \_picwidth=0pt \_let\picw=\_picwidth +\_newdimen\_picheight \_picheight=0pt +\_public \picwidth \picheight ; + + \_doc ----------------------------- + The \`\everytt` is the token list used in + \^`\begtt`...\^`\endtt` environment and + in the verbatim group opened by \^`\verbinput` macro. You can include a + code which is processed inside the group after basic settings were done + On the other hand, it is processed before the scanner of verbatim text is started. + Your macros should influence scanner (catcode settings) or printing + process of the verbatim code or both. + + The code from the line immediately after \^`\begtt` is processed after + the \^`\everytt`. This code should overwrite \^`\everytt` settings. Use + \^`\everytt` for all verbatim environments in your document and use a code + after \^`\begtt` locally only for this environment. + + The \`\everyintt` token list does similar work + but acts in the in-line verbatim + text processed by a pair of \^`\verbchar` characters or by \^`\code``{<text>}`. + You can set `\everyintt={\Red}` for example if you want in-line verbatim + in red color. + \_cod ----------------------------- + +\_newtoks\_everytt +\_newtoks\_everyintt +\_public \everytt \everyintt ; + + \_doc ----------------------------- + The \`\ttline` is used + in \^`\begtt`...\^`\endtt` environment or in the code + printed by \^`\verbinput`. If `\ttline` is positive or zero, then the + verbatim code has numbered lines from `\ttline+1`. The `\ttline` + register is re-set to a new value after a code piece is printed, so next + code pieces have numbered lines continuously. If `\ttline=-1`, then + \^`\begtt`...\^`\endtt` lines are without numbers and \^`\verbinput` lines + show the line numbers of inputted file. If `\ttline`\code{<-1} + then no line numbers are printed. + \_cod ----------------------------- + +\_newcount\_ttline \_ttline=-1 % last line number in \begtt...\endtt +\_public \ttline ; + + \_doc ----------------------------- + The \`\ttindent` gives default indentation + of verbatim lines printed by \^`\begtt`...\^`\endtt` pair or by + \^`\verbinput`. + \nl + The \`\ttshift` gives the amount of shift of all verbatim lines to the right. + Despite the \^`\ttindent`, it does not shift the line numbers, only + the text. + \nl + The \`\iindent` gives default indentations used in the table of contents, + captions, lists, bib references, + \nl + It is strongly recommended to re-set this value if you set `\parindent` + to another value than plain \TeX/ default 20pt. A well-typeset + document should have the same dimension for all indentations, so + you should say `\ttindent=\parindent` and `\iindent=\parindent`. + \_cod ----------------------------- + +\_newdimen\_ttindent \_ttindent=\_parindent % indentation in verbatim +\_newdimen\_ttshift +\_newdimen\_iindent \_iindent=\_parindent +\_public \ttindent \ttshift \iindent ; + + \_doc ----------------------------- + The tabulator `^^I` has its category code like space: it behaves as a + space in normal text. This is a common plain \TeX/ setting. + But in the multiline verbatim environment it + is active and expands to the `\hskip<dimen>` where `<dimen>` + is the width of \`\tabspaces` spaces. + Default `\tabspaces=3` means + that tabulator behaves like three spaces in multiline verbatim. + \_cod ----------------------------- + +\_newcount \_tabspaces \_tabspaces=3 +\_public \tabspaces ; + + \_doc ----------------------------- + If \`\hicolors` is non-empty then its contents is used instead + `\_hicolors<name>` declared in the file `hisyntax-<name>.opm`. + The user can give his/her preferences about colors for + syntax highlighting by this tokens list. + The full color set must be declared here. + \_cod ----------------------------- + +\_newtoks\_hicolors +\_public \hicolors ; + + \_doc ----------------------------- + The default item mark used between \^`\begitems` and \^`\enditems` is the bullet. + The \`\defaultitem` tokens list declares this default item mark. + \nl + The \`\everyitem` tokens list is applied in vertical mode + at the start of each item. + \nl + The \`\everylist` tokens list is applied after the group is opened by \^`\begitems` + \nl + The \`\ilevel` keeps the value of the current nesting level of the items list. + \nl + The \`\listskipamount` gives vertical skip above and below the items list + if `\ilevel=1`. + \_cod ----------------------------- + +\_newtoks\_defaultitem \_defaultitem={$\_bullet$\_enspace} +\_newtoks\_everyitem +\_newtoks\_everylist +\_newskip \_listskipamount \_listskipamount=\_medskipamount +\_newcount \_ilevel +\_public \defaultitem \everyitem \everylist \listskipamount \ilevel ; + + \_doc ----------------------------- + The \^`\tit` macro includes `\vglue`\`\titskip` above the title of the document. + \_cod ----------------------------- + +\_newskip\_titskip \_titskip=40pt \_relax % \vglue above title printed by \tit +\_public \titskip ; + + \_doc ---------------------------- + The \^`\begmulti` and \^`\endmulti` pair creates more columns. The parameter + \`\colsep` declares the space between columns. If $n$ columns are specified + then we have $n-1$ `\colseps` and $n$ columns in total `\hsize`. This + gives the definite result of the width of the columns. + \_cod ---------------------------- + +\_newdimen\_colsep \_colsep=20pt % space between columns +\_public \colsep ; + + \_doc ----------------------------- + Each line in the Table of contents is printed in a group. + The \`\everytocline` tokens list is processed here before + the internal `\_tocl:<num>` macro which starts printing the line. + \_cod ----------------------------- + +\_newtoks \_everytocline +\_public \everytocline ; + + \_doc ----------------------------- + The \`\bibtexhook` tokens list is used inside the group when `\usebib` command is + processed after style file is loaded and before printing bib-entries. + You can re-define a behavior of the style file here or you can modify the + more declaration for printing (fonts, baselineskip, etc.) or you can + define specific macros used in your `.bib` file. + \_cod ----------------------------- + +\_newtoks\_bibtexhook +\_public \bibtexhook ; + + \_doc ----------------------------- + \`\everycapitonf` is used before printing caption in figures and + \`\everycapitont` is used before printing caption in tables. + \_cod ----------------------------- + +\_newtoks\_everycaptiont \_newtoks\_everycaptionf +\_public \everycaptiont \everycaptionf ; + + \_doc ----------------------------- + The \`\everyii` tokens list is used before `\noindent` for each + Index item when printing the Index. + \_cod ----------------------------- + +\_newtoks\_everyii +\_public \everyii ; + + \_doc ----------------------------- + The \`\everymnote` is used in the \^`\mnote` group before `\noindent` which + immediately precedes marginal note text. + \nl + The \`\mnotesize` is the horizontal size of the marginal notes. + \nl + The \`\mnoteindent` is horizontal space between body-text and marginal note. + \_cod ----------------------------- + +\_newtoks\_everymnote +\_newdimen\_mnotesize \_mnotesize=20mm % the width of the mnote paragraph +\_newdimen\_mnoteindent \_mnoteindent=10pt % ditance between mnote and text +\_public \everymnote \mnotesize \mnoteindent ; + + \_doc ----------------------------- + The \^`\table` parameters follow. The \`\thistable` tokens list + register should be used for giving an exception for only one `\table` + which follows. It should change locally other parameters of the `\table`. + It is reset to an empty list after the table is printed. + \nl + The \`\everytable` tokens list register is applied in every table. + There is another difference between these two registers. + The `\thistable` is used first, then strut and baselineskip settings are + done, then `\everytable` is applied and then the table is printed. + \nl + \`\tabstrut` configures the height and depth of lines in the table. + You can declare `\tabstrut={}`, then normal baselineskip is used in the + table. This can be used when you don't use horizontal nor vertical + lines in tables. + \nl + \`\tabiteml` is applied before each item, + \`\tabitemr` is applied after each item of the table. + \nl + \`\tablinespace` is additional vertical space between horizontal rules + and the lines of the table. + \nl + \`\hhkern` gives the space between horizontal lines if they are doubled and + \`\vvkern` gives the space between such vertical lines. + \nl + \`\tabskipl` is `\tabskip` used before first column, + \`\tabskipr` is `\tabskip` used after the last column. + \nl + \`\tsize` is virtual unit of the width of paragraph-like table items when + `\table pxto<size>` is used. + \_cod ----------------------------- + +\_newtoks\_everytable \_newtoks\_thistable +\_newtoks\_tabiteml \_newtoks\_tabitemr \_newtoks\_tabstrut +\_newdimen\_tablinespace \_newdimen\_vvkern \_newdimen\_hhkern \_newdimen\_tsize +\_newskip\_tabskipl \_newskip\_tabskipr +\_everytable={} % code used after settings in \vbox before table processing +\_thistable={} % code used when \vbox starts, is is removed after using it +\_tabstrut={\_strut} +\_tabiteml={\_enspace} % left material in each column +\_tabitemr={\_enspace} % right material in each column +\_tablinespace=2pt % additional vertical space before/after horizontal rules +\_vvkern=1pt % space between double vertical line and used in \frame +\_hhkern=1pt % space between double horizontal line and used in \frame +\_tabskipl=0pt\_relax % \tabskip used before first column +\_tabskipr=0pt\_relax % \tabskip used after the last column +\_public \everytable \thistable \tabiteml \tabitemr \tabstrut \tablinespace + \vvkern \hhkern \tsize \tabskipl \tabskipr ; + + \_doc ----------------------------- + The \^`\eqalign` macro can be configured by \`\eqlines` and \`\eqstyle` + tokens lists. The default values are set in order these macro beahaves + as in Plain \TeX. The \`\eqspace` is horizontal space put + between equation systems if more columns in \^`\eqalign` are used. + \_cod ----------------------------- + +\_newtoks \_eqlines \_eqlines={\_openup\_jot} +\_newtoks \_eqstyle \_eqstyle={\_strut\_displaystyle} +\_newdimen \_eqspace \_eqspace=20pt +\_public \eqlines \eqstyle \eqspace ; + + \_doc ----------------------------- + \`\lmfil` is \"left matrix filler" (for `\matrix` columns). The default + value does centering because the right matrix filler is directly set to `\hfil`. + \_cod ----------------------------- + +\_newtoks \_lmfil \_lmfil={\_hfil} +\_public \lmfil ; + + \_doc ----------------------------- + The output routine uses token list \`\headline` and \`\footline` in the + same sense as in plain \TeX/. If they are non-empty then `\hfil` or `\hss` + must be here because they are used inside `\hbox to\hsize`. + + Assume that page-body text can be typeset in different sizes and + different fonts and we don't know in what font context the output routine + is invoked. So, it is strongly recommended to declare fixed variants of + fonts at the beginning of your document. For example `\fontdef\rmfixed{\rm}`, + `\fontdef\itfixed{\it}`. Then use them in headline and footline: + \begtt + \headline={\itfixed Text of headline, section: \fistmark \hss} + \footline={\rmfixed \ifodd\pageno \hfill\fi \folio \hfil} + \endtt + \_cod ----------------------------- + +\_newtoks\_headline \_headline={} +\_newtoks\_footline \_footline={\_hss\_rmfixed \_folio \_hss} +\_public \headline \footline ; + + \_doc ----------------------------- + The distance between the `\headline` and the top of the page text + is controlled by the \`\headlinedist` register. + The distance between the bottom of + page-text and `\footline` is \`\footlinedist`. + More precisely: baseline of + headline and baseline of the first line in page-text have distance + `\headlinedist+\topskip`. The baseline of the last line in page-text and + the baseline of the footline have distance `\footlinedist`. + Default values are inspired by plain \TeX/. + \_cod ----------------------------- + +\_newdimen \_headlinedist \_headlinedist=14pt +\_newdimen \_footlinedist \_footlinedist=24pt +\_public \headlinedist \footlinedist ; + + \_doc ----------------------------- + The \`\pgbottomskip` is inserted to the page bottom + in the output routine. You can set less tolerance here than + `\raggedbotom` does. By default, no tolerance is given. + \_cod ----------------------------- + +\_newskip \_pgbottomskip \_pgbottomskip=0pt \_relax +\_public \pgbottomskip ; + + \_doc ----------------------------- + The \`\nextpages` tokens list can include settings which will be used at + next pages. It is processed at the end of output routine with + `\globaldefs=1` prefix. The `\nextpages` is reset to empty after + processing. Example of usage: + \begtt + \headline={} \nexptages={\headline={\rmfixed \firstmark \hfil}} + \endtt + This example sets current page with empty headline, but next pages have + non-empty headlines. + \_cod ----------------------------- + +\_newtoks \_nextpages +\_public \nextpages ; + + \_doc ----------------------------- + The \`\pgbackground` token list can include macros which generate a + vertical list. It is used as page background. The top-left corner of such + `\vbox` is at the top-left corner of the paper. Example creates the + background of all pages yellow: + \begtt + \pgbackground={\Yellow \hrule height 0pt depth\pdfpageheight width\pdfpagewidth} + \endtt + \_cod ----------------------------- + +\_newtoks \_pgbackground \_pgbackground={} % for page background +\_public \pgbackground ; + + \_doc ----------------------------- + The parameters used in \^`\inoval` and \^`\incircle` macros + can be re-set by \`\ovalparams`, \`\circleparams` tokens lists. + The default values (documented in the user manual) are set in the macros. + \_cod ----------------------------- + +\_newtoks \_ovalparams +\_newtoks \_circleparams +%\_ovalparams={\_roundness=2pt \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp +% \_shadow=N \_overlapmargins=N \_hhkern=0pt \_vvkern=0pt } +%\_circleparams={\_ratio=1 \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp +% \_shadow=N \_overlapmargins=N \_hhkern=3pt \_vvkern=3pt} + +\_newdimen \_roundness \_roundness=5mm % used in \clippingoval macro + +\_public \ovalparams \circleparams \roundness ; + + \_doc ----------------------------- + \OpTeX/ defines \"Standard \OpTeX/ markup language"% + \fnote{Will be developed in 2021.} + which lists selected commands from chapter~1 and gives their behavior when a + converter from \OpTeX/ document to HTML or Markdown or \LaTeX/ is used. + The structure-oriented commands are selected here, but the commands which + declare typographical appearance (page layout, dimensions, selected font + family) are omitted. More information for such a converter should be + given in \`\cnvinfo``{<data>}`. + \OpTeX/ simply ignores this but the converter can read its configuration + from here. For example, a user can write: + \begtt \catcode`\<=13 + \cnvinfo {type=html, <cnv-to-html-data>} + \cnvinfo {type=markdown, <cnv-to-markdown-data>} + \endtt + and the document can be processed by \OpTeX/ to create PDF, or by a + converter to create HTML, or by another converter to create Markdown. + \_cod ----------------------------- + +\_let\cnvinfo=\_ignoreit + + +\_endcode %---------------------------------------------------- + +The behavior of document processing by \OpTeX/ is +controlled by {\em parameters}. The parameters are +\begitems +* primitive registers used in build-in algorithms of \TeX/, +* registers declared and used by \OpTeX/ macros. +\enditems +Both groups of registers have their type: number, dimension, skip, token +list. + +The registers are represented by their names (control sequences). If the user +re-defines this control sequence then the appropriate register exists +steadily and build-in algorithms are using it without change. But user +cannot access its value in this case. \OpTeX/ declares two control sequences +for each register: prefixed (private) and unprefixed (public). \OpTeX/ macros use only +prefixed variants of control sequences. The user should use the unprefixed variant +with the same meaning and set or read the values of registers using the +unprefixed variant. If the user re-defines the unprefixed control sequence of +a register then \OpTeX/ macros still work without change. + +%There are only a few parameters declared by \OpTeX/ macros. All of them +%are listed in this section. This is the desired feature of the \OpTeX/. +%If you want to do more +%changes which cannot be controlled by parameters listed here then you +%can copy the appropriate \OpTeX/ macro to your macro file and you +%can completely re-define it. The typical examples are `\_printsomething` +%macros which declare the design of the document. + +\_endinput + +History: +2020-04-04 ... \tabspaces added +2020-04-03 ... \hicolors added diff --git a/Master/texmf-dist/tex/optex/base/pdfuni-string.opm b/Master/texmf-dist/tex/optex/base/pdfuni-string.opm new file mode 100644 index 00000000000..25781ddfb4f --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/pdfuni-string.opm @@ -0,0 +1,127 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \pdfunidef {PDFunicode strings for outlines <2021-02-08>} % preloaded in format + + \_doc ----------------------------- + \`\_hexprint` is a command defined in Lua, that scans a number and expands + to its UTF-16 Big Endian encoded form for use in PDF hexadecimal strings. + \_cod ----------------------------- + +\bgroup +\_catcode`\%=12 +\_gdef\_hexprint{\_directlua{ + local num = token.scan_int() + if num < 0x10000 then + tex.print(string.format("%04X", num)) + else + num = num - 0x10000 + local high = bit32.rshift(num, 10) + 0xD800 + local low = bit32.band(num, 0x3FF) + 0xDC00 + tex.print(string.format("%04X%04X", high, low)) + end +}} +\egroup + + \_doc ----------------------------- + \`\pdfunidef``\macro{<text>}` does more things than only converting to hexadecimal PDF string. + The <text> can be scanned in verbatim mode (it is true becuase \^`\_Xtoc` + reads the <text> in verbatim mode). First `\edef` do + `\_scantextokens\unexpanded` and second `\edef` expands the parameter + according to current values on selected macros from `\_regoul`. Then + \`\_removeoutmath` converts `..$x^2$..` to `..x^2..`, i.e removes dollars. + Then \`\_removeoutbraces` converts `..{x}..` to `..x..`. + Finally, the <text> is detokenized, spaces are preprocessed using \^`\replstring` + and then the \`\_pdfunidefB` is repeated on each character. It calls the + `\directlua` chunk to print hexadecimal numbers in the macro \^`\_hexprint`.\nl + Characters for quotes (and separators for quotes) are activated by first + `\_scatextokens` and they are defined as the same non-active characters. + But `\_regoul` can change this definition. + \_cod ----------------------------- + +\_def\_pdfunidef#1#2{% + \_begingroup + \_catcodetable\_optexcatcodes \_adef"{"}\_adef'{'}% + \_the\_regoul \_relax % \_regmacro alternatives of logos etc. + \_ifx\_savedttchar\_undefined \_def#1{\_scantextokens{\_unexpanded{#2}}}% + \_else \_lccode`\;=\_savedttchar \_lowercase{\_prepinverb#1;}{#2}\fi + \_edef#1{#1}% + \_escapechar=-1 + \_edef#1{#1\_empty}% + \_escapechar=`\\ + \_ea\_edef \_ea#1\_ea{\_ea\_removeoutmath #1$\_end$}% $x$ -> x + \_ea\_edef \_ea#1\_ea{\_ea\_removeoutbraces #1{\_end}}% {x} -> x + \_edef#1{\_detokenize\_ea{#1}}% + \_replstring#1{ }{{ }}% text text -> text{ }text + \_catcode`\\=12 \_let\\=\_bslash + \_edef\_out{<FEFF} + \_ea\_pdfunidefB#1^% text -> \_out in octal + \_ea + \_endgroup + \_ea\_def\_ea#1\_ea{\_out>} +} +\_def\_pdfunidefB#1{% + \_ifx^#1\_else + \_edef\_out{\_out \_hexprint `#1} + \_ea\_pdfunidefB \_fi +} + +\_def\_removeoutbraces #1#{#1\_removeoutbracesA} +\_def\_removeoutbracesA #1{\_ifx\_end#1\_else #1\_ea\_removeoutbraces\_fi} +\_def\_removeoutmath #1$#2${#1\_ifx\_end#2\_else #2\_ea\_removeoutmath\_fi} + + \_doc ----------------------------- + The \`\_prepinverb``<macro><separator>{<text>}`, + e.g.\ `\_prepinverb\tmpb|{aaa |bbb| cccc |dd| ee}` + does `\def\tmpb{<su>{aaa }bbb<su>{ cccc }dd<su>{ ee}}` where + <su> is `\scantextokens\unexpanded`. It means that in-line verbatim + are not argument of `\scantextoken`. First `\edef\tmpb` tokenizes again + the <text> but not the parts which were in the the in-line verbatim. + \_cod ----------------------------- + +\_def\_prepinverb#1#2#3{\_def#1{}% + \_def\_dotmpb ##1#2##2{\_addto#1{\_scantextokens{\_unexpanded{##1}}}% + \_ifx\_end##2\_else\_ea\_dotmpbA\_ea##2\_fi}% + \_def\_dotmpbA ##1#2{\_addto#1{##1}\_dotmpb}% + \_dotmpb#3#2\_end +} + + \_doc ----------------------------- + The \^`\regmacro` is used in order to sed the values of macros + `\em`, `\rm`, `\bf`, `\it`, `\bi`, `\tt`, `\/` and `~` to values usable in + PDF outlines. + \_cod ----------------------------- + +\_regmacro {}{}{\_let\em=\_empty \_let\rm=\_empty \_let\bf=\_empty + \_let\it=\_empty \_let\bi=\_empty \_let\tt=\_empty \_let\/=\_empty + \_let~=\_space +} +\public \pdfunidef ; + +\_endcode % -------------------------------- + +There are only two encodings for PDF strings (used in PDFoutlines, PDFinfo, +etc.). The first one is PDFDocEncoding which is single-byte encoding, but it +misses most international characters. + +The second encoding is Big Endian UTF-16 which is implemented in this file. It +encodes a single character in either two or four bytes. +This encoding is \TeX/-discomfortable because it looks like + +\begtt +<FEFF 0043 0076 0069 010D 0065 006E 00ED 0020 006A 0065 0020 007A 00E1 0074 +011B 017E 0020 0061 0020 0078 2208 D835DD44> +\endtt + +This example shows a hexadecimal PDF string (enclosed in \code{<>} as opposed +to the literal PDF string enclosed in `()`). In these strings each byte is +represented by two hexadecimal characters (`0-9`, `A-F`). You can tell the +encoding is UTF-16BE, becuase it starts with \"Byte order mark" `FEFF`. Each +unicode character is then encoded in one or two byte pairs. The example string +corresponds to the text \"Cvičení je zátěž a ${\rm x} ∈ 𝕄$". Notice the 4 bytes +for the last character, $𝕄$. (Even the whitespace would be OK in a PDF file, +because it should be ignored by PDF viewers, but \LuaTeX\ doesn't allow it.) + +\_endinput + +2021-02-08 \_octalprint -> \_hexprint +2020-03-12 Released diff --git a/Master/texmf-dist/tex/optex/base/plain-macros.opm b/Master/texmf-dist/tex/optex/base/plain-macros.opm new file mode 100644 index 00000000000..b4569ee9691 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/plain-macros.opm @@ -0,0 +1,346 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \magstep {Macros from plain TeX <2020-02-14>} % preloaded in format + + \_doc ----------------------------- + The \`\dospecials` works like in plain TeX but does nothing with `_`. + If you need to do the same with this character, you can re-define: + \begtt + \addto \dospecials{\do\_} + \endtt + \_cod ----------------------------- + +\_def\_dospecials {\do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\^^A\do\%\do\~} +\_chardef\_active = 13 + +\_public \dospecials \active ; + + \_doc ----------------------------- + The shortcuts `\chardef\@one` is not defined in \OpTeX/. Use normal + numbers instead of such obscurities. + \nl + The \`\magstep` and \`\magstephalf` are + defined with `\space`, (no `\relax`), in order to be expandable. + \_cod ----------------------------- + +\_def \_magstephalf{1095 } +\_def \_magstep#1{\_ifcase#1 1000\_or 1200\_or 1440\_or 1728\_or 2074\_or 2488\_fi\_space} +\_public \magstephalf \magstep ; + + \_doc ----------------------------- + Plain \TeX/ basic macros and control sequences. + \`\endgraf`, \`\endline`. + The `^^L` is not defined in \OpTeX/ because it is obsolete. + \_cod ----------------------------- + +\_def\^^M{\ } % control <return> = control <space> +\_def\^^I{\ } % same for <tab> + +\_def\lq{`} \def\rq{'} +\_def\lbrack{[} \_def\rbrack{]} % They are only public versions. +% \catcode`\^^L=\active \outer\def^^L{\par} % ascii form-feed is "\outer\par" % obsolete + +\_let\_endgraf=\_par \_let\_endline=\_cr +\_public \endgraf \endline ; + + \_doc ----------------------------- + Plain \TeX/ classical \`\obeylines` and \`\obeyspaces`. + \_cod ----------------------------- + +% In \obeylines, we say `\let^^M=\par' instead of `\def^^M{\par}' +% since this allows, for example, `\let\par=\cr \obeylines \halign{...' +{\_catcode`\^^M=13 % these lines must end with % + \_gdef\_obeylines{\_catcode`\^^M=13\_let^^M\_par}% + \_global\_let^^M=\par} % this is in case ^^M appears in a \write +\_def\_obeyspaces{\_catcode`\ =13 } +{\_obeyspaces\_global\_let =\_space} +\_public \obeylines \obeyspaces ; + + \_doc ----------------------------- + Spaces. + \`\thinspace`, \`\negthinspace`, \`\enspace`, \`\enskip`, + \`\quad`, \`\qquad`, \`\smallskip`, + \`\medskip`, \`\bigskip`, \`\nointerlineskip`, \`\offinterlineskip`, + \`\topglue`, \`\vglue`, \`\hglue`, \`\slash`. + \_cod ----------------------------- + +\_protected\_def\_thinspace {\_kern .16667em } +\_protected\_def\_negthinspace {\_kern-.16667em } +\_protected\_def\_enspace {\_kern.5em } +\_protected\_def\_enskip {\_hskip.5em\_relax} +\_protected\_def\_quad {\_hskip1em\_relax} +\_protected\_def\_qquad {\_hskip2em\_relax} +\_protected\_def\_smallskip {\_vskip\_smallskipamount} +\_protected\_def\_medskip {\_vskip\_medskipamount} +\_protected\_def\_bigskip {\_vskip\_bigskipamount} +\_def\_nointerlineskip {\_prevdepth=-1000pt } +\_def\_offinterlineskip {\_baselineskip=-1000pt \_lineskip=0pt \_lineskiplimit=\_maxdimen} + +\_public \thinspace \negthinspace \enspace \enskip \quad \qquad \smallskip + \medskip \bigskip \nointerlineskip \offinterlineskip ; + +\_def\_topglue {\_nointerlineskip\_vglue-\_topskip\_vglue} % for top of page +\_def\_vglue {\_afterassignment\_vglA \_skip0=} +\_def\_vglA {\_par \_dimen0=\_prevdepth \_hrule height0pt + \_nobreak\_vskip\_skip0 \_prevdepth=\_dimen0 } +\_def\_hglue {\_afterassignment\_hglA \_skip0=} +\_def\_hglA {\_leavevmode \_count255=\_spacefactor \_vrule width0pt + \_nobreak\_hskip\_skip0 \_spacefactor=\_count255 } +\_protected\_def~{\_penalty10000 \ } % tie +\_protected\_def\_slash {/\_penalty\_exhyphenpenalty} % a `/' that acts like a `-' + +\_public \topglue \vglue \hglue \slash ; + + \_doc ----------------------------- + Penalties macros: + \`\break`, \`\nobreak`, \`\allowbreak`, \`\filbreak`, \`\goodbreak`, + \`\eject`, \`\supereject`, \`\dosupereject`, + \`\removelastskip`, \`\smallbreak`, \`\medbreak`, \`\bigbreak`. + \_cod ----------------------------- + +\_protected\_def \_break {\_penalty-10000 } +\_protected\_def \_nobreak {\_penalty10000 } +\_protected\_def \_allowbreak {\_penalty0 } +\_protected\_def \_filbreak {\_par\_vfil\_penalty-200\_vfilneg} +\_protected\_def \_goodbreak {\_par\_penalty-500 } +\_protected\_def \_eject {\_par\_break} +\_protected\_def \_supereject {\_par\_penalty-20000 } +\_protected\_def \_dosupereject {\_ifnum \_insertpenalties>0 % something is being held over + \_line{}\_kern-\_topskip \_nobreak \_vfill \_supereject \_fi} +\_def \_removelastskip {\_ifdim\_lastskip=\_zo \_else \_vskip-\_lastskip \_fi} +\_def \_smallbreak {\_par\_ifdim\_lastskip<\_smallskipamount + \_removelastskip \_penalty-50 \_smallskip \_fi} +\_def \_medbreak {\_par\_ifdim\_lastskip<\_medskipamount + \_removelastskip \_penalty-100 \_medskip \_fi} +\_def \_bigbreak {\_par\_ifdim\_lastskip<\_bigskipamount + \_removelastskip \_penalty-200 \_bigskip \_fi} + +\_public \break \nobreak \allowbreak \filbreak \goodbreak \eject \supereject \dosupereject + \removelastskip \smallbreak \medbreak \bigbreak ; + + \_doc ----------------------------- + Boxes. + \`\line`, \`\leftline`, \`\rightline`, \`\centerline`, \`\rlap`, \`\llap`, + \`\underbar`. + \_cod ----------------------------- + +\_def \_line {\_hbox to\_hsize} +\_def \_leftline #1{\_line{#1\_hss}} +\_def \_rightline #1{\_line{\_hss#1}} +\_def \_centerline #1{\_line{\_hss#1\_hss}} +\_def \_rlap #1{\_hbox to\_zo{#1\_hss}} +\_def \_llap #1{\_hbox to\_zo{\_hss#1}} +\_def\_underbar #1{$\_setbox0=\_hbox{#1}\_dp0=\_zo \_math \_underline{\_box0}$} + +\_public \line \leftline \rightline \centerline \rlap \llap \underbar ; + + \_doc ----------------------------- + The \`\strutbox` is declared as 10pt size dependent (like in plain \TeX), but + the macro `\_setbaselineskip` (from `fonts-opmac.opm`) redefines it. + \_cod ----------------------------- + +\_newbox\_strutbox +\_setbox\_strutbox=\_hbox{\_vrule height8.5pt depth3.5pt width0pt} +\_def \_strut {\_relax\_ifmmode\_copy\_strutbox\_else\_unhcopy\_strutbox\_fi} + +\_public \strutbox \strut ; + + \_doc ----------------------------- + Alignment. \`\hidewidth` \`\ialign` \`\multispan`. + \_cod ----------------------------- + +\_def \_hidewidth {\_hskip\_hideskip} % for alignment entries that can stick out +\_def \_ialign{\_everycr={}\_tabskip=\_zoskip \_halign} % initialized \halign +\_newcount\_mscount +\_def \_multispan #1{\_omit \_mscount=#1\_relax + \_loop \_ifnum\_mscount>1 \_spanA \_repeat} +\_def \_spanA {\_span\_omit \_advance\_mscount by-1 } + +\_public \hidewidth \ialign \multispan ; + + \_doc ----------------------------- + Tabbing macros are omitted because they are obsolete. + \nl + Indentation and others. \`\textindent`, \`\item`, \`\itemitem`, + \`\narrower`, \`\raggedright`, \`\ttraggedright`, \`\leavevmode`. + \_cod ----------------------------- + +\_def \_hang {\_hangindent\_parindent} +\_def \_textindent #1{\_indent\_llap{#1\_enspace}\_ignorespaces} +\_def \_item {\_par\_hang\_textindent} +\_def \_itemitem {\_par\_indent \_hangindent2\_parindent \_textindent} +\_def \_narrower {\_advance\_leftskip\_parindent + \_advance\_rightskip\_parindent} +\_def \_raggedright {\_rightskip=0pt plus2em + \_spaceskip=.3333em \_xspaceskip=.5em\_relax} +\_def \_ttraggedright {\_tt \_rightskip=0pt plus2em\_relax} % for use with \tt only +\_def \_leavevmode {\_unhbox\_voidbox} % begins a paragraph, if necessary + +\_public \hang \textindent \item \itemitem \narrower \raggedright \ttraggedright \leavevmode ; + + \_doc ----------------------------- + Few character codes are set for backward compatibility. But old obscurities + (from plain TeX) based on \`\mathhexbox` + are not supported -- an error message and recommendation + to directly using the desired character is implemented by the + \`\_usedirectly` macro). + The user can re-define these control sequences of course. + \_cod ----------------------------- + +%\chardef\%=`\% +\_let\% = \_pcent % more natural, can be used in lua codes. +\_chardef\&=`\& +\_chardef\#=`\# +\_chardef\$=`\$ +\_chardef\ss="FF +\_chardef\ae="E6 +\_chardef\oe="F7 +\_chardef\o="F8 +\_chardef\AE="C6 +\_chardef\OE="D7 +\_chardef\O="D8 +\_chardef\i="11 \chardef\j="12 % dotless letters +\_chardef\aa="E5 +\_chardef\AA="C5 +\_chardef\S="9F +\_def\l{\_errmessage{\_usedirectly ł}} +\_def\L{\_errmessage{\_usedirectly Ł}} +%\def\_{\_ifmmode \kern.06em \vbox{\hrule width.3em}\else _\fi} % obsolete +\_def\_{\_hbox{_}} +\_def\dag{\_errmessage{\_usedirectly †}} +\_def\ddag{\_errmessage{\_usedirectly ‡}} +%\_def\copyright{\_errmessage{\_usedirectly ©}} +\_def\copyright{©} % << example, what to do +%\_def\Orb{\_mathhexbox20D} % obsolete (part of Copyright) +%\_def\P{\_mathhexbox27B} % obsolete + +\_def \_usedirectly #1{Load Unicoded font by \string\fontfam\space and use directly #1} +\_def \_mathhexbox #1#2#3{\_leavevmode \_hbox{$\_math \_mathchar"#1#2#3$}} +\_public \mathhexbox ; + + \_doc ----------------------------- + Accents. + The macros \`\ooalign`, \`\d`, \`\b`, \`\c`, \`\dots`, + are defined for backward compatibility. + \_cod ----------------------------- + +\_def \_oalign #1{\_leavevmode\_vtop{\_baselineskip=\_zo \_lineskip=.25ex + \_ialign{##\_crcr#1\_crcr}}} +\_def \_oalignA {\_lineskiplimit=\_zo \_oalign} +\_def \_ooalign {\_lineskiplimit=-\_maxdimen \_oalign} % chars over each other +\_def \_shiftx #1{\_dimen0=#1\_kern\_ea\_ignorept \_the\_fontdimen1\_font + \_dimen0 } % kern by #1 times the current slant +\_def \_d #1{{\_oalignA{\_relax#1\_crcr\_hidewidth\_shiftx{-1ex}.\_hidewidth}}} +\_def \_b #1{{\_oalignA{\_relax#1\_crcr\_hidewidth\_shiftx{-3ex}% + \_vbox to.2ex{\_hbox{\_char\_macron}\_vss}\_hidewidth}}} +\_def \_c #1{{\_setbox0=\_hbox{#1}\_ifdim\_ht0=1ex\_accent\_cedilla #1% + \_else\_ooalign{\_unhbox0\_crcr\_hidewidth\_cedilla\_hidewidth}\_fi}} +\_def\_dots{\_relax\_ifmmode\_ldots\_else$\_math\_ldots\_thinsk$\_fi} +\_public \oalign \ooalign \d \b \c \dots ; + + \_doc ----------------------------- + The accent commands like `\v`, `\.`, `\H`, etc. are not defined. Use the + accented characters directly -- it is the best solution. But you can use the + macro \`\oldaccents` which defines accented macros. + \nl + Much more usable is to define these control sequences for other purposes. + \_cod ----------------------------- + +\_def \_oldaccents {% + \_def\`##1{{\_accent\_tgrave ##1}}% + \_def\'##1{{\_accent\_tacute ##1}}% + \_def\v##1{{\_accent\_caron ##1}}% + \_def\u##1{{\_accent\_tbreve ##1}}% + \_def\=##1{{\_accent\_macron ##1}}% + \_def\^##1{{\_accent\_circumflex ##1}}% + \_def\.##1{{\_accent\_dotaccent ##1}}% + \_def\H##1{{\_accent\_hungarumlaut ##1}}% + \_def\~##1{{\_accent\_ttilde ##1}}% + \_def\"##1{{\_accent\_dieresis ##1}}% + \_def\r##1{{\_accent\_ring ##1}}% +} +\_public \oldaccents ; + +% ec-lmr encoding (will be changed after \fontfam macro): +\_chardef\_tgrave=0 +\_chardef\_tacute=1 +\_chardef\_circumflex=2 +\_chardef\_ttilde=3 +\_chardef\_dieresis=4 +\_chardef\_hungarumlaut=5 +\_chardef\_ring=6 +\_chardef\_caron=7 +\_chardef\_tbreve=8 +\_chardef\_macron=9 +\_chardef\_dotaccent=10 +\_chardef\_cedilla=11 + +\_def \_uniaccents {% accents with Unicode + \_chardef\_tgrave="0060 + \_chardef\_tacute="00B4 + \_chardef\_circumflex="005E + \_chardef\_ttilde="02DC + \_chardef\_dieresis="00A8 + \_chardef\_hungarumlaut="02DD + \_chardef\_ring="02DA + \_chardef\_caron="02C7 + \_chardef\_tbreve="02D8 + \_chardef\_macron="00AF + \_chardef\_dotaccent="02D9 + \_chardef\_cedilla="00B8 + \_chardef\_ogonek="02DB + \_let \_uniaccents=\_relax +} + + \_doc ----------------------------- + The plain \TeX/ macros + \`\hrulefill`, \`\dotfill`, \`\rightarrowfill`, \`\leftarrowfill`, + \`\downbracefill`, \`\upbracefill`. + The last four are used in non-Unicode variants of `\overrightarrow`, + `\overleftarrow`, `\overbrace` and `\underbrace` macros, see + section~\ref[math-macros]. + \_cod ----------------------------- + +\_def \_hrulefill {\_leaders\_hrule\_hfill} +\_def \_dotfill {\_cleaders\_hbox{$\_math \_mkern1.5mu.\_mkern1.5mu$}\_hfill} +\_def \_rightarrowfill {$\_math\_smash-\_mkern-7mu% + \_cleaders\_hbox{$\_mkern-2mu\_smash-\_mkern-2mu$}\_hfill + \_mkern-7mu\_mathord\_rightarrow$} +\_def \_leftarrowfill {$\_math\_mathord\_leftarrow\_mkern-7mu% + \_cleaders\_hbox{$\_mkern-2mu\_smash-\_mkern-2mu$}\_hfill + \_mkern-7mu\_smash-$} + +\_mathchardef \_braceld="37A \_mathchardef \_bracerd="37B +\_mathchardef \_bracelu="37C \_mathchardef \_braceru="37D +\_def \_downbracefill {$\_math \_setbox0=\_hbox{$\_braceld$}% + \_braceld \_leaders\_vrule height\_ht0 depth\_zo \_hfill \_braceru + \_bracelu \_leaders\_vrule height\_ht0 depth\_zo \_hfill \_bracerd$} +\_def \_upbracefill {$\_math \_setbox0=\_hbox{$\_braceld$}% + \_bracelu \_leaders\_vrule height\_ht0 depth\_zo \_hfill \_bracerd + \_braceld \_leaders\_vrule height\_ht0 depth\_zo \_hfill \_braceru$} + +\_public \hrulefill \dotfill + \rightarrowfill \leftarrowfill \downbracefill \upbracefill ; + + \_doc ----------------------------- + The last part of plain \TeX/ macros: \`\magnification`, \`\bye`. + Note that math macros are defined in the `math-macros.opm` file + (section~\ref[math-macros]). + \_cod ----------------------------- + +\_def \_magnification {\_afterassignment \_magA \_count255 } +\_def \_magA {\_mag=\_count255 \_truedimen\_hsize \_truedimen\_vsize + \_dimen\_footins=8truein +} +% only for backward compatibility, but \margins macro is preferred. +\_public \magnification ; + +\_def \_showhyphens #1{\_setbox0=\_vbox{\_parfillskip=0pt \_hsize=\_maxdimen \_tenrm + \_pretolerance=-1 \tolerance=-1 \hbadness=0 \showboxdepth=0 \ #1}} + +\_def \_bye {\_par \_vfill \_supereject \_byehook \_end} +\_public \bye ; + +\_endcode % ------------------------------------- + diff --git a/Master/texmf-dist/tex/optex/base/prefixed.opm b/Master/texmf-dist/tex/optex/base/prefixed.opm new file mode 100644 index 00000000000..61df791ddb0 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/prefixed.opm @@ -0,0 +1,298 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \public {Prefixing and code syntax <2020-02-14>} % preloaded in format + + \_doc --------- + All \TeX/ primitives have alternative control sequence `\_hbox` `\_string`, ... + \_cod --------- + +\let\_directlua = \directlua +\_directlua { + % enable all TeX primitives with _ prefix + tex.enableprimitives('_', tex.extraprimitives('tex')) + % enable all primitives without prefixing + tex.enableprimitives('', tex.extraprimitives()) + % enable all primitives with _ prefix + tex.enableprimitives('_', tex.extraprimitives()) +} + + \_doc ------------------ + \`\ea` is useful shortcut for `\expandafter`. We recommend to use always the + private form of \`\_ea` + because there is high probability that `\ea` will be redefined by the user. + \nl + \`\public` `<sequence> <sequence> ... ;` does + `\let \<sequence> = \_<sequence>` for all sequences. + \nl + \`\private` `<sequence> <sequence> ...;` does + `\let \_<sequence> = \<sequence>` for all sequences. + \nl + \`\xargs` `<what> <sequence> <sequence> ... ;` + does `<what><sequence>` for each sequences. + \_cod ----------------- + +\_let\_ea =\_expandafter % usefull shortcut + +\_long\_def \_xargs #1#2{\_ifx #2;\_else \_ea#1\_ea#2\_ea\_xargs \_ea #1\_fi} + +\_def \_pkglabel{} +\_def \_public {\_xargs \_publicA} +\_def \_publicA #1{\_ea\_let \_ea#1\_csname _\_csstring #1\_endcsname} + +\_def \_private {\_xargs \_privateA} +\_def \_privateA #1{\_ea\_let \_csname _\_csstring #1\_endcsname =#1} + +\_public \public \private \xargs \ea ; + + \_doc ----------------------- + Each macro file should begin with \`\_codedecl` `\macro {<info>}`. + If the `\macro` is defined already then the `\endpinput` protects to read + such file more than once. Else the <info> is printed to the terminal + and the file is read.\nl + The {\`\_endcode`} is defined as `\endinput` in the `optex.ini` file. + \`\wterm` `{<text>}` prints `<text>` + to the terminal and to the `.log` file (as in plain \TeX/). + \_cod ----------------------- + +\_def \_codedecl #1#2{% + \_ifx #1\_undefined \_wterm{#2}% + \_else \_ea \_endinput \_fi +} +\_def \_wterm {\_immediate \_write16 } + +\_public \wterm ; + + \_doc ------------------------ + The `\optexversion` and `\fmtname` are defined in the `optex.ini` file. + Maybe, somebody will need a private version of these macros. + \_cod ------------------------ + +\_private \optexversion \fmtname ; + + \_doc ----------------------------- + The `\_mathsbon` and `\_mathsboff` are defined in `math-macros.opm` file. + Now, we define the macros + \`\_namespace` `{<pkg label>}`, \`\_resetnamespace` `{<pkg label>}`, \`\_endnamespace`, + \`\_nspublic` and \`\_nsprivate` + for package writers, see section~\ref[pkg-namespace].{\hbadness=2200\par} + \_cod ----------------------------- + +\_def \_pkglabel{} +\_def\_namespace #1{% + \_ifcsname namesp:#1\_endcsname \_errmessage + {The name space "#1" is used already, it cannot be used twice}% + \_endinput + \_else \_resetnamespace{#1}\_fi +} +\_def\_resetnamespace #1{% + \_ea \_gdef \_csname namesp:#1\_endcsname {}% + \_gdef \_pkglabel{_#1}% + \_directlua{ + callback.add_to_callback("process_input_buffer", + function (str) + return string.gsub(str, "\_nbb[.]([a-zA-Z])", "\_nbb _#1_\_pcent 1") + end, "_namespace") + }% +} +\_def\_endnamespace {% + \_directlua{ callback.remove_from_callback("process_input_buffer", "_namespace") }% + \_gdef \_pkglabel{}% +} + +\_def \_nspublic {\_xargs \_nspublicA} +\_def \_nspublicA #1{% + \_unless\_ifx #1\_undefined + \_opwarning{\_ea\_ignoreit\_pkglabel\_space redefines the meaning of \_string#1}\_fi + \_ea\_let \_ea#1\_csname \_pkglabel _\_csstring #1\_endcsname} + +\_def \_nsprivate {\_xargs \_nsprivateA} +\_def \_nsprivateA #1{\_ea\_let \_csname \_pkglabel _\_csstring #1\_endcsname =#1} + + +\_endcode %---------------------------------------------------- + + +\sec[prefixed] Concept of namespaces of control sequences + +\secc Prefixing internal control sequences + +All control sequences used in \OpTeX/ are used and defined with `_` prefix. +The user can be sure that when he/she does `\def\foo` then internal macros of +\OpTeX/ nor \TeX/ primitives will be not damaged. For example +`\def\if{...}` will not damage macros because \OpTeX/'s macros +are using `\_if` instead of `\if`. + +All \TeX/ primitives are initialized with two representative control +sequences: `\word` and `\_word`, for example `\hbox` and `\_hbox`. +The first alternative is reserved for users or such control sequences +can be re-defined by a user. + +\OpTeX/ sets the character `_` as the letter, so it can be used in +control sequences. When a control sequence begins with this character +then it means that it is a primitive or it is used in \OpTeX/ macros as +internal. User can redefine such prefixed control sequence only +if he/she explicitly know what happens. + +We never change catcode of `_`, so internal macros can be +redefined by user without problems if it is desired. We need not +something like `\makealetter` from \LaTeX/. + +\OpTeX/ defines all new macros as prefixed. For public usage of such macros, +we need to set non-prefixed version. This is done by + +\begtt \catcode`\<=13 +\public <list of control sequences> ; +\endtt + +For example \^`\public`` \foo \bar ;` does `\let\foo=\_foo`, `\let\bar=\_bar`. + +At the end of each code segment in \OpTeX/, the `\_public` macro is used. You +can see, what macros are defined for public usage in this code segment. + +The macro \^`\private` does a reverse job to `\public` with the same syntax. +For example `\private \foo \bar ;` does `\let\_foo=\foo`, `\let\_bar=\bar`. +This should be used when an unprefixed variant of a control sequence is declared +already but we need the prefixed variant too. + +In this documentation: if both variants of a control sequence are declared +(prefixed and unprefixed), then the accompanying text mentions only +the unprefixed variant. The code typically defines the prefixed variant +and then the \^`\public` (or `\_public`) macro is used. + +\secc Namespace of control sequences for users + +Users can define or declare any control sequence with a name without any `_`. +This does not make any problem. Only one exception is the reserved control +sequence `\par`. It is generated by tokenizer (at empty lines) +and used as internal in \TeX/. + +User can define or declare control sequences with `_` character, for +example `\my_control_sequence`, but with the following exceptions: + +\begitems +* Control sequences which begin with `_` are reserved for \TeX/ primitives, + \OpTeX/ internal macros and packages internal macros. +* Control sequences (terminated by non-letter) in the form + `\<word>_` or `\<word>_<one-letter>`, where + <word> is a sequence of letters, are inaccessible, because they + are interpreted as `\<word>` followed by `_` or as `\<word>` followed by + `_<one-letter>`. This is important for writing math, for example: +\begtt \adef-{_} + \int-a^b ... is interpreted as \int _a^b + \max-M ... is interpreted as \max _M + \alpha-{ij} ... is interpreted as \alpha _{ij} +\endtt + This feature is implemented using lua code at input processor level, see + the section~\ref[math-macros] for more details. You can deactivate this feature by + \^`\mathsboff`. After this, you can still write + `$`$\int$`_a^b$` (Unicode) or `$\int _a^b$` % $∫_a^b$ (Unicode) or $\int _a^b$ + without problems but `\int``_a^b` yields to undefined control sequence + `\int``_a`. You can activate this feature again by \^`\mathsbon`. The + effect will take shape from next line read from input file. +* Control sequences in the form `\_<pkg>_<word>` is intended for package + writers as internal macros for a package with `<pkg>` identifier, + see section~\ref[pkg-namespace]. +\enditems + +The single-letter control sequences like `\%`, `\$`, `\^` etc. are not used +in internal macros. Users can redefine them, but (of course) some classical +features can be lost (printing percent character by `\%` for example). + +\secc Macro files syntax + +Each segment of \OpTeX/ macros is stored in one file with `.opm` extension +(means OPtex Macros). Your local macros should be in a normal `*.tex` file. + +The code in macro files starts by \^`\_codedecl` and ends by \^`\_endcode`. +The \^`\_endcode` is equivalent for `\endinput`, so documentation can follow. +The \^`\_codedecl` has syntax: + +\begtt +\_codedecl \sequence {Name <version>} +\endtt + +If the mentioned `\sequence` is defined, then \^`\_codedecl` does the same as +`\endinput`: this protects from reading the file twice. We suppose, that +`\sequence` is defined in the macro file. + +It is possible to use the \^`\_doc` ... \^`\_cod` pair between the macro lines. +The documentation text should be here. It is ignored when macros are read +but it can be printed using `doc.opm` macros like in this documentation. + + +\secc[pkg-namespace] Name spaces for package writers + +Package writer should use internal names in the form `\_<pgk>_<sequence>`, +where `<pkg>` is a package label. For example: +`\_qr_utfstring` from `qrcode.opm` package. + +The package writer needs not to write repeatedly `\_pkg_foo` `\_pkg_bar` +etc.\ again and again in the macro file.\fnote +{We have not adopted the idea from expl3 language:)} +When the \^`\_namespace` `{<pkg>}` +is declared at the beginning of the macro file then all occurrences of +`\.foo` will be replaced by `\_<pkg>_foo` at the input processor level. +The macro writer can write (and backward can read his/her code) simply with +`\.foo`, `\.bar` control sequences and `\_<pkg>_foo`, `\_<pkg>_bar` +control sequences are processed internally. +The scope of the \^`\_namespace` command ends at the \^`\_endnamespace` command +or when another \^`\_namespace` is used. This command checks +if the same package label is not declared by the \^`\_namespace` twice. + +The \^`\_nspublic` macro does `\let\foo = \_<pkg>_foo` when +\^`\_namespace{<pkg>}` is declared. Moreover, it prints a warning if `\foo` is +defined already. The \^`\_nsprivate` macro does reverse +operation to it without warnings. Example: you can define `\def\.macro{...}` and then +set it to the user name space by `\_nspublic \macro;`. + +Don't load other packages (which are using their own namespace) inside your +namespace. Do load them before your \^`\_namespace`~`{<pkg>}` is +initialized. Or close your namespace by \^`\_endnamespace` and open it again +(after other packages are loaded) by \^`\_resetnamespace`~`{<pkg>}`. + +If the package writer needs to declare a control +sequence by \^`\newif`, then there is an exception of the rule described above. Use +\^`\_newifi\_if<pkg>_bar`, for example `\_newifi\_ifqr_incorner`. +Then the control sequences `\_qr_incornertrue` and +`\_qr_incornerfalse` can be used (or the sequences `\.incornertrue` +and `\.incornerfalse` when `\_namespace{qr}` is used). + + +\secc Summary about rules for external macro files published for \OpTeX/ + +If you are writing a macro file that is intended to be published for +\OpTeX/, then you are greatly welcome. You should follow these rules: + +\begitems +* Don't use control sequences from the user namespace in the macro + bodies if there is not explicit and documented reason to do this. +* Don't declare control sequences in the user namespace if there are not + explicit and documented reasons to do this. +* Use control sequences from \OpTeX/ and primitive namespace + in read-only mode, if there is not an explicit and documented reason to + redefine them. +* Use `\_<pkg>_<name>` for your internal macros or `\.<name>` if the + \^`\_namespace{<pkg>}` is declared. See section~\ref[pkg-namespace]. +* Use \^`\load` (or better: `\_load`) for loading more external macros + if you need them. Don't use `\_input` explicitly in such cases. + The reason is: the external macro file is not loaded + twice if another macro or the user needs it explicitly too. +* Use \^`\_codedecl` as your first command in the macro file and + \^`\_endcode` to close the text of macros. +* Use \^`\_doc` ... \^`\_cod` pairs for documenting the code pieces and/or write + more documentation after the \^`\_endcode` command. +\enditems + +If the macro file accepts these recommendations then it should be +named by `<filename>.opm` where `<filename>` differs from file names +used directly in \OpTeX/ and from other published macros. +This extension `opm` has precedence before `.tex` when +the \^`\load` macro is used. + +The `qrcode.opm` is the first example of how an external macro file for \OpTeX/ +can look like. + +\endinput + +2021-02-15 \_expandafter -> \_ea in \_codedecl +2020-02-14 released diff --git a/Master/texmf-dist/tex/optex/base/print-unimath.opm b/Master/texmf-dist/tex/optex/base/print-unimath.opm new file mode 100644 index 00000000000..2b1a07f30ab --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/print-unimath.opm @@ -0,0 +1,56 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \_undefined {Printing Unicode-math table \string<2020-06-08>} + +\_begingroup + \_def\UnicodeMathSymbol#1#2#3#4{% + \_ifnum#1>"10000 \_endinput \_else \_printmathsymbol{#1}{#2}{#3}{#4}\_fi + } + \_def\UnicodeMathSymbolA#1#2#3#4{% + \_ifnum#1>"10000 \_printmathsymbol{#1}{#2}{#3}{#4}\_fi + } + \_def\_printmathsymbol#1#2#3#4{% + \_hbox{\_hbox to2em{$#2{}$\_hss}\_hbox to3em + {\small\_printop#3\_hss}{\_tt\_string#2\_trycs{_eq:\_string#2}{}}} + } + \_def\_eq#1#2{\_sdef{_eq:\_string#2}{=\_string#1}} + \_eq \diamond\smwhtdiamond \_eq \bullet\smblkcircle \_eq \circ\vysmwhtcircle + \_eq \bigcirc\mdlgwhtcircle \_eq \to\rightarrow \_eq \le\leq + \_eq \ge\geq \_eq \neq\ne \_eq \emptyset\varnothing \_eq \hbar\hslash + \_eq \land\wedge \_eq \lor\vee \_eq \owns\ni \_eq \gets\leftarrow + \_eq \mathring\ocirc \_eq \lnot\neg \_eq \backepsilon\upbackepsilon + \_eq \eth\matheth \_eq \dbkarow\dbkarrow \_eq \drbkarow\drbkarrow + \_eq \hksearow\hksearrow \_eq \hkswarow\hkswarrow + + \_tracinglostchars=0 + \_fontdef\small{\_setfontsize{at5pt}\_rm} + \_def\_printop{\_def\mathop{Op}} + \_def\mathalpha{Alph}\_def\mathord{Ord}\_def\mathbin{Bin}\_def\mathrel{Rel} + \_def\mathopen{Open}\_def\mathclose{Close}\_def\mathpunct{Punct}\_def\mathfence{Fence} + \_def\mathaccent{Acc}\_def\mathaccentwide{Accw}\_def\mathbotaccentwide{AccBw} + \_def\mathbotaccent{AccB}\_def\mathaccentoverlay{AccO} + \_def\mathover{Over}\_def\mathunder{Under} + \_typosize[7.5/9]\_normalmath \_everymath={} + + Codes U+00000 \_dots\ U+10000 + \_begmulti 3 + \_input unimath-table.opm + \_endmulti + + \_medskip\_goodbreak + Codes U+10001 \_dots\ U+1EEF1 \_let\UnicodeMathSymbol=\UnicodeMathSymbolA + \_begmulti 4 + \_input unimath-table.opm + \_endmulti +\_endgroup + +\_endcode + +This file can be used for testing your Unicode-math font +and/or for printing \TeX/ sequences which can be used in math. + +Load Unicode math font first (for example by `\fontfam[termes]` or by +`\loadmath{<math-font>}`) and then you +can do `\input print-unimath.opm`. The big table with all math symbols is printed. + +\_endinput diff --git a/Master/texmf-dist/tex/optex/base/ref-file.opm b/Master/texmf-dist/tex/optex/base/ref-file.opm new file mode 100644 index 00000000000..d594bf88c04 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/ref-file.opm @@ -0,0 +1,141 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \openref {File for references <2021-02-05>} % preloaded in format + + \_doc -------------------------- + The \`\_inputref` macro is used in `\everyjob`. It reads `\jobname.ref` file + if it exists. After the file is read then it is removed and opened to write + a new contents to this file. + \_cod -------------------------- + +\_newwrite\_reffile + +\_def\_inputref {% + \_isfile{\_jobname.ref}\_iftrue + \_input {\_jobname.ref} + \_gfnotenum=0 \_lfnotenum=0 \_mnotenum=0 + \_openrefA{\_string\_inputref}% + \_fi +} + + \_doc -------------------------- + If the file does not exist then it is not created by default. It means that if you + process a document without any forward references then no `\jobname.ref` + file is created because it is unusable. The \^`\_wref` macro is a dummy in + this case. + \_cod -------------------------- + +\_def\_wrefrelax#1#2{} +\_let\_wref=\_wrefrelax + + \_doc --------------------- + If a macro needs to create and to use `.ref` file then such macro must use + \`\openref`. When the file is created (using internal \`\_openrefA`) then + the \`\_wref` `\<macro>{<data>}` is redefined in order to + save the line `\<macro><data>` to the `.ref` file using asynchronous + `\write` primitive. Finally, the `\_openref` destroys itself, because we + need not open the file again.\nl + The `\_wref``<csname>{<params>}` does exactly `\write\_reffile{\string<csname><params>}` + in this case and \`\_ewref``<csname>{<params>}` does + `\write\_reffile{\string<csname><expanded-params>}`. + \_cod --------------------- + +\_def\_openref {% + \_ifx \_wref\_wrefrelax \_openrefA{\_string\openref}\_fi + \_gdef\_openref{}% +} +\_def\_openrefA #1{% + \_immediate\_openout\_reffile="\_jobname.ref"\_relax + \_gdef\_wref ##1##2{\_write\_reffile{\_bslash\_csstring##1##2}}% + \_immediate\_write\_reffile {\_pcent\_pcent\_space OPTeX <\_optexversion> - REF file (#1)}% + \_immediate\_wref \Xrefversion{{\_REFversion}}% +} +\_def\_ewref #1#2{\_edef\_ewrefA{#2}\_ea\_wref\_ea#1\_ea{\_ewrefA}} +\_def\openref{\_openref} + + \_doc ---------------------- + We are using the convention that the macros used in `.ref` file are named + `\_X<foo>`. If there is a new version of \OpTeX/ with a different collection + of such macros then we don't want to read the `.ref` files produced by an + old version of \OpTeX/ or by OPmac. So the first line of `.ref` file is in + the form + \begtt \catcode`\<=13 + \Xrefversion{<version>} + \endtt + We can check the version compatibility by this macro. + Because OPmac does not understand `\_Xrefversion` we use + \`\Xrefversion` (with a different number of `<version>` form OPmac) here. + The result: OPmac skips the `.ref` files produced by \OpTeX/ and vice + versa. + \_cod ---------------------- + +\_def\_REFversion{5} % actual version of .ref files in OpTeX +\_def\_Xrefversion#1{\_ifnum #1=\_REFversion\_relax \_else \_endinput \_fi} +\_public \Xrefversion ; % we want to ignore .ref files generated by OPmac + + \_doc ----------------------- + You cannot define your special `.ref` macros before `.ref` file is read + because it is read in `\everyjob`. But you can define such macros using + \`\refdecl``{<definitions of your ref macros>}`. + This command sends to `.ref` file your `<definitions of your ref macros>` + immediately. Next lines in `.ref` file should include our macros. Example + from CTUstyle2: + \begtt + \refdecl{% + \def\totlist{} \def\toflist{}^^J + \def\Xtab#1#2#3{\addto\totlist{\totline{#1}{#2}{#3}}}^^J + \def\Xfig#1#2#3{\addto\toflist{\tofline{#1}{#2}{#3}}} + } + \endtt + We must read `<definition of your ref macros>` when the catcode of `#` is 12 + because we needn't duplicate each `#` in the `.ref` file. + \_cod \_fin ----------------- + +\_def\_refdecl{\_bgroup \_catcode`\#=12 \_refdeclA} +\_def\_refdeclA #1{\egroup\_openref + \_immediate\_write\_reffile {\_pcent\_space \_string \refdecl:}% + \_immediate\_write\_reffile {\_detokenize{#1}}% +} +\_public \refdecl ; + +\_endcode % ================================================ + + +The `.ref` file has the name `\jobname.ref` and +it saves information about references, TOC lines, etc. +All data needed in next \TeX/ run are saved here. +\OpTeX/ reads this file at the beginning of the document +(using `\everyjob`) if such file exists. +The `.ref` file looks like: + +\begtt \catcode`\<=13 +\Xrefversion{<ref-version>} +\_Xpage{<gpageno>}{<pageno>} +\_Xtoc{<level>}{<type>}{<text>}{}<title> +\_Xlabel{<label>}{<text>} +\_Xlabel{<label>}{<text>} +... +\_Xpage{<gpageno>}{<pageno>} +\_Xlabel{<label>}{<text>} +... +\endtt +% +where <gpageno> is internal page number globally numbered from one and +`<pageno>` is a page number (`\the\pageno`) used in pagination (they may differ). +Each page begins with \^`\_Xpage`. +The `<label>` is a label used by user in `\label[<label>]` and `<text>` is a +text which should be referenced (the number of section or table, for +example `2.3.14`). The `<title>` is the title of the chapter (`<level>`=1, +`<type>`=`chap`), section (`<level>`=2, `<type>`=`sec`), subsection +(`<level>`=3, `<type>`=`secc`). The \^`\_Xpage` is written at the beginning of each +page, the `\_Xtoc` is written when chapter or section or subsection title +exists on the page and `\_Xlabel` when labeled object prefixed by +`\label[<label>]` exists on the page. + +The `.ref` file is read when the processing of the document starts using +`\everyjob`. It is read, removed, and opened to writing immediately. +But the `.ref` file should be missing. If none forward references are needed +in the document then `.ref` file is not created. For example, you only want +to test a simple plain \TeX/ macro, you create `test.tex` file, you do +`optex test` and you don't need to see an empty `test.ref` file in your directory. + diff --git a/Master/texmf-dist/tex/optex/base/references.opm b/Master/texmf-dist/tex/optex/base/references.opm new file mode 100644 index 00000000000..03c8f6955ca --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/references.opm @@ -0,0 +1,94 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \ref {References <2020-03-03>} % preloaded in format + + \_doc ---------------------------- + \`\_Xpage` `{<gpageno>}{<pageno>}` saves the parameter pair into \`\_currpage`. + Resets `\_lfnotenum`; it is used if footnotes are numbered from one at each page. + \_cod ---------------------------- + +\_def\_Xpage#1#2{\_def\_currpage{{#1}{#2}}\_lfnotenum=0 } + + \_doc ---------------------------- + Counter for the number of unresolved references \`\_unresolvedrefs`. + \_cod ---------------------------- + +\_newcount\_unresolvedrefs +\_unresolvedrefs=0 + + \_doc ---------------------------- + \`\_Xlabel` `{<label>}{<text>}` saves the <text> to `\_lab:<label>` and saves + `[pg:<gpageno>]{<pageno>}` to `\_pgref:<label>`. + \_cod ---------------------------- + +\_def\_Xlabel#1#2{\_sdef{_lab:#1}{#2}\_sxdef{_pgref:#1}{\_ea\_bracketspg\_currpage}} +\_def\_bracketspg#1#2{[pg:#1]{#2}} + + \_doc ---------------------------- + \`\label``[<label>]` saves the decalred label to `\_lastlabel` and + \`\wlabel``{<text>}` uses the `\_lastlabel` and activates + `\_wref\_Xlabel{<label>}{<text>}`. + \_cod ---------------------------- + +\_def\_label[#1]{\_isempty{#1}\_iftrue \_global\_let \_lastlabel=\_undefined + \_else \_isdefined{l0:#1}% + \_iftrue \_opwarning{duplicated label [#1], ignored}\_else \_xdef\_lastlabel{#1}\_fi + \_fi \_ignorespaces +} +\_def\_wlabel#1{% + \_ifx\_lastlabel\_undefined \_else + \_dest[ref:\_lastlabel]% + \_printlabel\_lastlabel + \_ewref \_Xlabel {{\_lastlabel}{#1}}% + \_sxdef{_lab:\_lastlabel}{#1}\_sxdef{l0:\_lastlabel}{}% + \_global\_let\_lastlabel=\_undefined + \_fi +} +\_public \label \wlabel ; + + \_doc ---------------------------- + \`\ref``[<label>]` uses saved `\_lab:<label>` and prints (linked) `<text>`. + If the reference is backward then we know `\lab:<label>` without any need + to read REF file. On the other hand, if the reference is forwarded, then we + doesn't know `\_lab:<label>` in the first run of \TeX/ and we print a warning and + do `\_openref`. + \nl + \`\pgref``[<label>]` uses `{<gpageno>}{<pageno>}` from `\_pgref:<label>` and + prints (linked) `<pageno>` using `\_ilink` macro. + \_cod ---------------------------- + +\_def\_ref[#1]{\_isdefined{_lab:#1}% + \_iftrue \_ilink[ref:#1]{\_csname _lab:#1\_endcsname}% + \_else ??\_opwarning{label [#1] unknown. Try to TeX me again}% + \_incr\_unresolvedrefs \_openref + \_fi +} +\_def\_pgref[#1]{\_isdefined{_pgref:#1}% + \_iftrue \_ea\_ea\_ea\_ilink \_csname _pgref:#1\_endcsname + \_else ??\_opwarning{pg-label [#1] unknown. Try to TeX me again}% + \_incr\_unresolvedrefs \_openref + \_fi +} +\_public \ref \pgref ; + + \_doc ----------------------------- + Default \`\_printlabel` is empty macro (labels are not printed). + The \`\showlabels` redefines it as box with zero dimensions and + with left lapped `[<label>]` in blue 10pt `\tt` font shifted up by 1.7ex. + \_cod ----------------------------- + +\_def\_printlabel#1{} +\_def\_showlabels {% + \_def\_printlabel##1{\_vbox to\_zo{\_vss\_llap{\_labelfont[##1]}\_kern1.7ex}}% + \_fontdef\_labelfont{\_setfontsize{at10pt}\setfontcolor{blue}\_tt} +} +\_public \showlabels ; + +\_endcode %------------------------------------------ + + +If the references are \"forward" (i.~e. the `\ref` is used first, the destination +is created later) or if the reference text is page number then we must read +`.ref` file first in order to get appropriate information. +See section \ref[ref-file] for more information about `.ref` file concept. + diff --git a/Master/texmf-dist/tex/optex/base/sections.opm b/Master/texmf-dist/tex/optex/base/sections.opm new file mode 100644 index 00000000000..39759962bf8 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/sections.opm @@ -0,0 +1,469 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \chap {Titles, chapters, sections, subsections <2021-03-03>} % preloaded in format + + \_doc --------------------------- + We are using scaled fonts for titles + \`\_titfont`, \`\_chapfont`, \`\_secfont` and \`\_seccfont`. + They are scaled from main fonts size + of the document, which is declared by first `\typosize[<fo-size>/<b-size>]` + command. + \_cod --------------------------- + +\_def \_titfont {\_scalemain\_typoscale[\_magstep4/\_magstep5]\_boldify} +\_def \_chapfont {\_scalemain\_typoscale[\_magstep3/\_magstep3]\_boldify} +\_def \_secfont {\_scalemain\_typoscale[\_magstep2/\_magstep2]\_boldify} +\_def \_seccfont {\_scalemain\_typoscale[\_magstep1/\_magstep1]\_boldify} + + \_doc --------------------------- + The \`\tit` macro is defined using \^`\scantoeol` and \`\_printtit`. + It means that the parameter is + separated by end of line and inline verbatim is allowed. The same + principle is used in the \^`\chap`, \^`\sec`, and \^`\secc` macros. + \_cod --------------------------- + +\_def\_printtit #1{\_vglue\_titskip + {\_leftskip=0pt plus1fill \_rightskip=\_leftskip % centering + \_titfont \_noindent \_scantextokens{#1}\_par}% + \_nobreak\_bigskip +} +\_def\_tit{\_scantoeol\_printtit} + +\_public \tit ; + + \_doc --------------------------- + You can re-define \`\_printchap`, \`\_printsec` or \`\_printsecc` macros if + another design of section titles is needed. These macros get the + `<title>` text in its parameter. The common recommendations for these macros are: + \begitems + * Use \^`\_abovetitle``{<penaltyA>}{<skipA>}` and \^`\_belowtitle``{<skipB>}` + for inserting vertical material above and below the section title. + The arguments of these macros are normally used, i.\,e.\ \^`\_abovetitle` + inserts `<penaltyA><skipA>` and \^`\_belowtitle` inserts `<skipB>`. + But there is an + exception: if \^`\_belowtitle``{<skipB>}` is immediately followed by + \^`\_abovetitle``{<penaltyA>}{<skipA>}` (for example section title is + immediately followed by subsection title), then only `<skipA>` is generated, + i.\,e.\ `<skipB><penaltyA><skipA>` is reduced only to `<skipA>`. + The reason for such behavior: we don't want to duplicate vertical skip + and we don't want to use the negative penalty in such cases. + Moreover, \^`\_abovetitle``{<penaltyA>}{<skipA>}` takes previous whatever + vertical skip (other than from `\_belowtitle`) and generates only + greater from this pair of skips. It means that `<whatever-skip><penaltyA><skipA>` + is transformed to `<penaltyA>`max(`<whatever-skip><skipA>`). + The reason for such behavior: we don't want to + duplicate vertical skips (from `\_belowlistskip`, for example) above the title. + * Use \^`\_printrefnum``[<pre>@<post>]` in horizontal mode. It prints + `<pre><ref-num><post>`. The `<ref-num>` is \^`\_thechapnum` or \^`\_thesecnum` + or \^`\_theseccnum` depending on what type o title is processed. + If \^`\nonum` prefix is used then \^`\_printrefnum` prints nothing. + The macro \^`\_printrefnum` does more work: it creates destination of hyperlinks + (if \^`\hyperlinks``{}{}` is used) and saves references from the label (if + \^`\label``[<label>]` precedes) and saves references for the table of contents + (if \^`\maketoc` is used). + * Use \^`\nbpar` for closing the paragraph for printing title. This + command inserts `\_nobreak` between each line of such paragraph, so + the title cannot be broken into more pages. + * You can use \^`\_firstnoindent` in order to the first paragraph after + the title is not indented. + \enditems + \_cod --------------------------- + +\_def\_printchap #1{\_vfill\_supereject + \_vglue\_medskipamount % shifted by topkip+\medskipamount + {\_chapfont \_noindent \_mtext{chap} \_printrefnum[@]\_par + \_nobreak\_smallskip + \_noindent \_raggedright #1\_nbpar}\_mark{}% + \_nobreak \_belowtitle{\_bigskip}% + \_firstnoindent +} +\_def\_printsec#1{\_par + \_abovetitle{\_penalty-400}\_bigskip + {\_secfont \_noindent \_raggedright \_printrefnum[@\_quad]#1\_nbpar}\_insertmark{#1}% + \_nobreak \_belowtitle{\_medskip}% + \_firstnoindent +} +\_def\_printsecc#1{\_par + \_abovetitle{\_penalty-200}{\_medskip\_smallskip} + {\_seccfont \_noindent \_raggedright \_printrefnum[@\_quad]#1\_nbpar}% + \_nobreak \_belowtitle{\_medskip}% + \_firstnoindent +} + + \_doc -------------------------- + The \`\_sectionlevel` is the level of the printed section: + \begitems + * `\_sectionlevel=0` -- reserved for parts of the book (unused by default) + * `\_sectionlevel=1` -- chapters (used in `\chap`) + * `\_sectionlevel=2` -- sections (used in `\sec`) + * `\_sectionlevel=3` -- subsections (used in `\secc`) + * `\_sectionlevel=4` -- subsubsections (unused by default, see the + \ulink[http://petr.olsak.net/optex/optex-tricks.html\#seccc]{\OpTeX/ trick 0033}) + \enditems + \_cod -------------------------- + +\_newcount\_sectionlevel +\_def \_secinfo {\_ifcase \_sectionlevel + part\_or chap\_or sec\_or secc\_or seccc\_fi +} + + \_doc -------------------------- + The \`\_chapx` initializes counters used in chapters, + the \`\_secx` initializes counters in sections + and \`\_seccx` initializes counters in subsections. + If you have more types of numbered objects in your document then you can + declare appropriate counters and do `\addto\_chapx{\yourcounter=0 }` + for example. If you have another concept of numbering objects used in your + document, you can re-define these macros. All settings here are global + because it is used by `{\_globaldefs=1 \_chapx}`. + + Default concept: Tables, figures, and display maths are numbered + from one in each section -- subsections don't reset these counters. + Footnotes declared by \^`\fnotenumchapters` are numbered in each chapter + from one. + + The `\_the*` macros + \`\_thechapnum`, \`\_thesecnum`, \`\_theseccnum`, + \`\_thetnum`, \`\_thefnum` and \`\_thednum` + include the format of numbers used when the object + is printing. If chapter is never used in the document then `\_chapnum=0` + and \`\_othe``\_chapnum.` expands to empty. Sections have numbers <num> and + subsections <num>.<num>. On the other hand, if chapter is used in the + document then `\_chapnum>0` and sections have numbers` <num>.<num>` + and subsections have numbers `<num>.<num>.<num>`. + \_cod -------------------------- + +\_newcount \_chapnum % chapters +\_newcount \_secnum % sections +\_newcount \_seccnum % subsections +\_newcount \_tnum % table numbers +\_newcount \_fnum % figure numbers +\_newcount \_dnum % numbered display maths + +\_def \_chapx {\_secx \_secnum=0 \_lfnotenum=0 } +\_def \_secx {\_seccx \_seccnum=0 \_tnum=0 \_fnum=0 \_dnum=0 \_resetABCDE } +\_def \_seccx {} + +\_def \_thechapnum {\_the\_chapnum} +\_def \_thesecnum {\_othe\_chapnum.\_the\_secnum} +\_def \_theseccnum {\_othe\_chapnum.\_the\_secnum.\_the\_seccnum} +\_def \_thetnum {\_othe\_chapnum.\_othe\_secnum.\_the\_tnum} +\_def \_thefnum {\_othe\_chapnum.\_othe\_secnum.\_the\_fnum} +\_def \_thednum {(\_the\_dnum)} + +\_def\_othe #1.{\_ifnum#1>0 \_the#1.\_fi} + + \_doc ---------------------------- + The \`\notoc` and \`\nonum` prefixes are implemented by + internal `\_ifnotoc` and `\_ifnonum`. They are reset + after each chapter/section/subsection by the \`\_resetnonumnotoc` macro. + \_cod ---------------------------- + +\_newifi \_ifnotoc \_notocfalse \_def\_notoc {\_global\_notoctrue} +\_newifi \_ifnonum \_nonumfalse \_def\_nonum {\_global\_nonumtrue} +\_def \_resetnonumnotoc{\_global\_notocfalse \_global\_nonumfalse} +\_public \notoc \nonum ; + + \_doc ---------------------------- + The \`\chap`, \`\sec`, and \`\secc` macros are implemented here. + The \`\_inchap`, \`\_insec` and \`\_insecc` macros do the real work, + First, we read the optional parameter `[<label>]`, if it exists. + The `\chap`, `\sec` and `\secc` macro reads its parameter using + \^`\scantoeol`. This causes that they cannot be used inside other macros. + Use \`\_inchap`, \`\_insec`, and \`\_insecc` macros directly in such case. + \_cod ---------------------------- + +\_optdef\_chap[]{\_trylabel \_scantoeol\_inchap} +\_optdef\_sec []{\_trylabel \_scantoeol\_insec} +\_optdef\_secc[]{\_trylabel \_scantoeol\_insecc} +\_def\_trylabel{\_istoksempty\_opt\_iffalse \_label[\_the\_opt]\_fi} + +\_def\_inchap #1{\_par \_sectionlevel=1 + \_def \_savedtitle {#1}% saved to .ref file + \_ifnonum \_else {\_globaldefs=1 \_incr\_chapnum \_chapx}\_fi + \_edef \_therefnum {\_ifnonum \_space \_else \_thechapnum \_fi}% + \_printchap{\_scantextokens{#1}}% + \_resetnonumnotoc +} +\_def\_insec #1{\_par \_sectionlevel=2 + \_def \_savedtitle {#1}% saved to .ref file + \_ifnonum \_else {\_globaldefs=1 \_incr\_secnum \_secx}\_fi + \_edef \_therefnum {\_ifnonum \_space \_else \_thesecnum \_fi}% + \_printsec{\_scantextokens{#1}}% + \_resetnonumnotoc +} +\_def\_insecc #1{\_par \_sectionlevel=3 + \_def \_savedtitle {#1}% saved to .ref file + \_ifnonum \_else {\_globaldefs=1 \_incr\_seccnum \_seccx}\_fi + \_edef \_therefnum {\_ifnonum \_space \_else \_theseccnum \_fi}% + \_printsecc{\_scantextokens{#1}}% + \_resetnonumnotoc +} +\_public \chap \sec \secc ; + + \_doc ---------------------------- + The \`\_printrefnum``[<pre>@<post>]` macro is used in `\_print*` macros. + + Note that the `<tite-text>` is `\detokenize`d before `\_wref`, so the + problem of \"fragile macros" from old \LaTeX/ never occurs. + This fourth parameter is not delimited by `{...}` but by end of line. + This gives possibility to have unbalanced braces in inline verbatim in titles. + \_cod ---------------------------- + +\_def \_printrefnum [#1@#2]{\_leavevmode % we must be in horizontal mode + \_ifnonum \_else #1\_therefnum #2\_fi + \_wlabel \_therefnum % references, if `\label[<label>]` is declared + \_ifnotoc \_else \_incr \_tocrefnum + \_dest[toc:\_the\_tocrefnum]% + \_ewref\_Xtoc{{\_the\_sectionlevel}{\_secinfo}% + {\_therefnum}{\_theoutline}\_detokenize\_ea{\_savedtitle}}% + \_fi + \_gdef\_theoutline{}% +} + + \_doc ----------------------------- + \`\thisoutline``{<text>}` saves text to the \`\_theoutline` macro. + \^`\_printrefnum` uses it and removes it. + \_cod ----------------------------- + +\_def\_theoutline{} +\_def\_thisoutline#1{\_gdef\_theoutline{#1}} +\_public \thisoutline ; + + \_doc ----------------------------- + The \`\_abovetitle``{<penaltyA>}{<skipA>}` and \`\_belowtitle``{<skipB>}` pair + communicates using a special penalty 11333 in vertical mode. + The `\_belowtitle` puts the vertical skip (its value is saved in + `\_savedtitleskip`) followed by this special penalty. + The `\_abovetitle` reads `\lastpenalty` and if it has this special value + then it removes the skip used before and doesn't use the parameter. + The `\abovetitle` creates `<skipA>` only if whatever previous skip is less + or equal than `<skipA>`. We must save `<whatever-skip>`, remove it, + create `<penaltyA>` (if `\_belowtitle` does not precede) and create + <whatever-skip> or `<skipA>` depending on what is greater. + The amount of `<skipA>` is measured using `\setbox0=\vbox`. + \_cod ----------------------------- + +\_newskip \_savedtitleskip +\_newskip \_savedlastskip +\_def\_abovetitle #1#2{\_savedlastskip=\_lastskip % <whatever-skip> + \_ifdim\_lastskip>\_zo \_vskip-\_lastskip \_fi + \_ifnum\_lastpenalty=11333 \_vskip-\_savedtitleskip \_else #1\_fi + \_ifdim\_savedlastskip>\_zo \_setbox0=\_vbox{#2\_global\_tmpdim=\_lastskip}% + \_else \_tmpdim=\_maxdimen \_fi + \_ifdim\_savedlastskip>\_tmpdim \vskip\_savedlastskip \_else #2\_fi +} +\_def\_belowtitle #1{#1\_global\_savedtitleskip=\_lastskip \_penalty11333 } + + \_doc ----------------------------- + \`\nbpar` sets `\interlinepenaty` value. + \`\nl` is \"new line" in the text (or titles), but space in toc or headlines or outlines. + \_cod ----------------------------- + +\_def\_nbpar{{\_interlinepenalty=10000\_endgraf}} + +\_protected\_def\_nl{\_unskip\_hfil\_break} +\_regmacro {\_def\_nl{\_unskip\_space}} {\_def\_nl{\_unskip\_space}} {\_def\_nl{ }} +\_regmacro {\_def\nl{\_unskip\_space}} {\_def\nl{\_unskip\_space}} {\_def\nl{ }} + +\_public \nbpar \nl ; + + \_doc ----------------------------- + \`\_firstnoindent` puts a material to `\everypar` in order to next + paragraph will be without indentation. It is useful after titles. + If you dislike this feature then you can say `\let\_firtnoindent=\relax`. + The \`\_wipeepar` removes the material from `\everypar`. + \_cod ----------------------------- + +\_def \_firstnoindent {\_global\_everypar={\_wipeepar \_setbox7=\_lastbox}} +\_def \_wipeepar {\_global\_everypar={}} + + \_doc ----------------------------- + The `\mark` (for running heads) is used in `\_printsection` only. We + suppose that chapters will be printed after `\vfil\break`, so users can + implement chapter titles for running headers directly by macros, no + `\mark` mechanism is needed. But sections need `\mark`s. And they can be + mixed with chapter's running heads, of course. + + The \`\_insertmark``{<title text>}` saves `\mark` in the format + `{<title-num>} {<title-text>}`, so it can be printed \"as is" in + `\headline` (see the space between them), or you can define a formating + macro with two parameters for processing these data, if you need it. + \_cod ----------------------------- + +\_def\_insertmark#1{\_mark{{\_ifnonum\_else\_therefnum\_fi} {\_unexpanded{#1}}}} + + \_doc ----------------------------- + \OpTeX/ sets `\headline={}` by default, so no running headings are printed. + You can activate the running headings by following code, for example: + \begtt + \addto\_chapx {\_edef\_runningchap {\_thechapnum: \_unexpanded\_ea{\_savedtitle}}} + \def \formathead #1#2{\isempty{#1}\iffalse #1: #2\fi} + \headline = {% + \ifodd \pageno + \hfil \ea\formathead\firstmark{}{}% + \else + Chapter: \runningchap \hfil + \fi + } + \endtt + + The \`\secl``<number> <title-text><eol>` + should be used for various levels of sections (for example, when + converting from Markdown to \OpTeX/). `\secl1` is `\chap`, `\secl2` is `\sec`, + `\secl3` is `\secc` and all more levels (for <number>$>3$) + are printed by the common \`\_seclp` macro. It declares only a simple design. + If there is a requirement to use such more levels then the book designer can + define something different here. + \_cod ----------------------------- + +\_def\_secl{\_afterassignment\_secla \_sectionlevel=} +\_def\_secla{\_ifcase\_sectionlevel + \_or\_ea\_chap\_or\_ea\_sec\_or\_ea\_secc\_else\_ea\_seclp\_fi} +\_eoldef\_seclp#1{\_par \_ifnum\_lastpenalty=0 \_removelastskip\_medskip\_fi + \_noindent{\_bf #1}\_vadjust{\_nobreak}\_nl\_ignorepars} +\_def\_ignorepars{\_isnextchar\_par{\_ignoresecond\_ignorepars}{}} + +\_public \secl ; + + \_doc ----------------------------- + The \`\caption``/<letter>` increases `\_<letter>num` counter, + edefines \`\_thecapnum` as `\_the<letter>num` and + defines \`\_thecaptitle` as language-dependent word using \^`\_mtext`, + runs the `\_everycaption<letter>` tokens register. + The group opened by `\caption` is finalized by first `\par` from + an empty line or from `\vskip` or from `\endinsert`. + The `\_printcaption<letter>` is called, it starts with + printing of the caption.\nl + The \`\cskip` macro inserts nonbreakable vertical space between the caption and + the object. + \_cod ----------------------------- + +\_def\_caption/#1{\_def\_tmpa{#1}\_nospaceafter \_capA} +\_optdef\_capA []{\_trylabel \_incaption} +\_def\_incaption {\_bgroup + \_ifcsname _\_tmpa num\_endcsname \_ea\_incr \_csname _\_tmpa num\_endcsname + \_else \_opwarning{Unknown caption /\_tmpa}\_fi + \_edef\_thecapnum {\_csname _the\_tmpa num\_endcsname}% + \_edef\_thecaptitle{\_mtext{\_tmpa}}% + \_ea\_the \_csname _everycaption\_tmpa\_endcsname + \_def\_par{\_nbpar\_egroup}\_let\par=\_par + \_cs{_printcaption\_tmpa}% +} +\_def \_cskip {\_par\_nobreak\_medskip} % space between caption and the object + +\_public \caption \cskip ; + + \_doc ----------------------------- + The \`\_printcaptiont` and \`\_printcaptionf` macros start in vertical mode. + They switch to horizontal mode and use `\_wlabel\_thecapnum` (in order to + make reference and hyperlink destination) a they can use: + \begitems + * \^`\_thecaptitle` ... expands to the word Table or Figure (depending on + the current language). + * \^`\_thecapnum` ... expands to `\the<letter>num` (caption number). + \enditems + The \`\_captionsep` inserts a separator between auto-generated + caption number and the following caption text. Default separator + is `\_enspace` but if the caption text starts with dot or colon, then + the space is not inserted. A user can wite `\caption/t: My table` + and \"{\bf Table 1.1:} My table" is printed. You can re-define + the \^`\_captionsep` macro if you want to use another separator. + \_cod ----------------------------- + +\_def \_printcaptiont {% + \_noindent \_wlabel\_thecapnum {\_bf\_thecaptitle~\_thecapnum}% + \_narrowlastlinecentered\_iindent \_futurelet\_next\_captionsep +} +\_def\_captionsep{\_ifx\_next.\_ea\_bfnext \_else\_ifx\_next:\_ea\_ea\_ea\_bfnext + \_else \_enspace \_fi\_fi} +\_def\_bfnext#1{{\_bf#1}} +\_let \_printcaptionf = \_printcaptiont % caption of figures = caption of tables + + \_doc ----------------------------- + If you want to declare a new type of `\caption` with independent counter, + you can use following lines, where `\caption/a` for Algorithms are + declared: + \begtt + \let\_printcaptiona = \_printcaptionf \let\_everycaptiona = \_everycaptionf + \newcount\_anum \addto\_secx {\_anum=0 } + \def\_theanum {\_othe\_chapnum.\_the\_secnum.\_the\_anum} + \sdef{_mt:a:en}{Algorithm} \sdef{_mt:a:cs}{Algoritmus} % + your language... + \endtt + The default format of `\caption` text is a paragraph in block narrower by + `\_iindent` and with the last line is centered. This setting is done by + the \`\_narrowlastlinecentered` macro. + \_cod ----------------------------- + +\_def\_narrowlastlinecentered#1{% + \_leftskip=#1plus1fil + \_rightskip=#1plus-1fil + \_parfillskip=0pt plus2fil\_relax +} + + \_doc ----------------------------- + \`\eqmark` is processed in display mode (we add `\eqno` primitive) + or in internal mode when `\eqaligno` is used (we don't add `\eqno`). + \_cod ----------------------------- + +\_optdef\_eqmark []{\_trylabel \_ineqmark} +\_def\_ineqmark{\_incr\_dnum + \_ifinner\_else\_eqno \_fi + \_wlabel\_thednum \_hbox{\_thednum}% +} +\_public \eqmark ; + + \_doc ----------------------------- + The \`\numberedpar` `<letter>{<name>}` is implemented here. + \_cod ----------------------------- + +\_newcount\_counterA \_newcount\_counterB \_newcount\_counterC +\_newcount\_counterD \_newcount\_counterE + +\_def\_resetABCDE {\_counterA=0 \_counterB=0 \_counterC=0 \_counterD=0 \_counterE=0 } + +\_def \_theAnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterA} +\_def \_theBnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterB} +\_def \_theCnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterC} +\_def \_theDnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterD} +\_def \_theEnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterE} + +\_def\_numberedpar#1#2{\_ea \_incr \_csname _counter#1\_endcsname + \_def\_tmpa{#1}\_def\_tmpb{#2}\_numberedparparam} +\_optdef\_numberedparparam[]{% + \_ea \_printnumberedpar \_csname _the\_tmpa num\_ea\_endcsname\_ea{\_tmpb}} + +\_public \numberedpar ; + + \_doc ----------------------------- + The \`\_printnumberedpar` `\theXnum {<name>}` opens numbered paragraph and + prints it. The optional parameter is in `\_the\_opt`. You can re-define + it if you need another design. + + `\_printnumberedpar` needs not to be re-defined if you only want to print + Theorems in italic and to insert vertical skips (for example). You can do this + by the following code: + \begtt + \def\theorem {\medskip\bgroup\it \numberedpar A{Theorem}} + \def\endtheorem {\par\egroup\medskip} + + \theorem Let $M$ be... \endtheorem + \endtt + \_cod ----------------------------- + +\_def \_printnumberedpar #1#2{\_par + \_noindent\_wlabel #1% + {\_bf #2 #1\_istoksempty\_opt\_iffalse \_space \_the\_opt \_fi.}\_space + \_ignorespaces +} + +\_endcode % ------------------------------------- + +2021-03-03 \_captionsep introduced, \_othe used in \_thetnum, \_thefnum. +2021-02-09 \thisoutline implemented +2021-01-26 \_nl: \unskip added +2021-01-11 \secl introduced +2021-01-05 \_thednum printed in text mode in its both occurences. +2020-04-28 \_secfonts etc: \_boldify is last. +2020-04-22 \_chapx, \_secx, \_seccx rewritten +2020-03-14 introduced diff --git a/Master/texmf-dist/tex/optex/base/slides.opm b/Master/texmf-dist/tex/optex/base/slides.opm new file mode 100644 index 00000000000..94fa3afac83 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/slides.opm @@ -0,0 +1,247 @@ +% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \slideshow {Slides style for OpTeX <2021-03-10>} % loaded on demand by \slides + + \_doc ----------------------------- + Default margins and design is declared here. + The `\_ttfont` is scaled by `mag1.15` in order to balance the + ex height of Helvetica (Heros) and LM fonts Typewriter. + The `\begtt`...`\endtt` verbatim is printed by smaller text. + \_cod ----------------------------- + +\_margins/1 a5l (14,14,10,3)mm % landscape A5 format +\_def\_wideformat{\_margins/1 (263,148) (16,16,10,3)mm } % 16:9 format + +\_ifx\_fontnamegen\_undefined \_fontfam[Heros] + \_let\_ttfont=\_undefined \_famvardef\_ttfont{\_setfontsize{mag1.15}\_tt} +\_fi +\_typosize[16/19] +\_def\_urlfont{} +\_everytt={\_typosize[13/16] \_advance\_hsize by10mm} +\_fontdef\_fixbf{\_bf} + +\_nopagenumbers +\_parindent=0pt +\_ttindent=5mm +\_parskip=5pt plus 4pt minus2pt +\_rightskip=0pt plus 1fil +\_ttindent=10pt +\_def\_ttskip{\_smallskip} + +\_onlyrgb % RGB color space is better for presentations + + \_doc ----------------------------- + The bottom margin is set to 3\,mm. If we use 1\,mm, then the baseline of + `\footline` is 2\,mm from the bottom page. This is the depth of the `\Grey` + rectangle used for page numbers. It is r-lapped to `\hoffset` width because left + margin = `\hoffset` = right margin. It is 14\,mm for narrow pages or + 16\,mm for wide pages. + \_cod ----------------------------- + +\_footlinedist=1mm +\_footline={\_hss \_rlap{% + \_rlap{\Grey\_kern.2\_hoffset\_vrule height6mm depth2mm width.8\_hoffset}% + \_hbox to\_hoffset{\White\_hss\_folio\_kern3mm}}} + + \_doc ----------------------------- + The \`\subtit` is defined analogically like `\tit`. + \_cod ----------------------------- + +\_eoldef\_subtit#1{\_vskip20pt {\_leftskip=0pt plus1fill \_rightskip=\_leftskip + \_subtitfont #1\_nbpar}} + + \_doc ----------------------------- + The \`\pshow``<num>` prints the text in invisible + (transparent) font when \^`\layernum`\code{<}`<num>`. + The transparency is set by `\pdfpageresoyrces` primitive. + \_cod ----------------------------- + +\pdfpageresources{/ExtGState << /Invisible << /Type /ExtGState /ca 0 /CA 0 >> + /Visible << /Type /ExtGState /ca 1 /CA 1 >> >>} +\addto\_morepgresources{/Invisible << /Type /ExtGState /ca 0 /CA 0 >> + /Visible << /Type /ExtGState /ca 1 /CA 1 >>} +\def\Invisible {\_pdfliteral{/Invisible gs}} +\def\Visible {\_pdfliteral{/Visible gs}} +\def\Transparent {\Invisible \_aftergroup \Visible} + +\_def\_use#1#2{\_ifnum\_layernum#1\_relax#2\_fi} +\_def\_pshow#1{\_use{=#1}\Red \_use{<#1}\Transparent \_ignorespaces} + + \_doc ----------------------------- + The main level list of items is activated here. The `\_item:X` and + `\_item:x` are used and are re-defined here. + If we are in a nested level of items and `\pg+` is used then + `\egroups` macro expands to the right number of `\egroup`s + to close the page correctly. The level of nested item lists + is saved to the `\_ilevel` register and used when we start again + the next text after `\pg+`. + \_cod ----------------------------- + +\_newcount\_gilevel +\_def\*{*} +\_adef*{\_relax\_ifmmode*\_else\_ea\_startitem\_fi} +\_sdef{_item:X}{\Blue\_raise.2ex\_fullrectangle{.8ex}\_kern.5em} +\_sdef{_item:x}{\Blue\_raise.3ex\_fullrectangle{.6ex}\_kern.4em} +\_style X +\_def\_egroups{\_par\_global\_gilevel=\_ilevel \_egroup} +\_everylist={\_novspaces \_ifcase\_ilevel \_or \_style x \_else \_style - \_fi + \_addto\_egroups{\_egroup}} + + \_doc ----------------------------- + The default values of \`\pg`, i.\,e.\ `\pg;`, `\pg+` and `\pg.` are very simple. + They are used when `\showslides` is not specified. + \_cod ----------------------------- + +\_def\_pg#1{\_cs{_spg:#1}} +\_sdef{_spg:;}{\_vfil\_break \_lfnotenumreset} +\_sdef{_spg:.}{\_endslides} +\_sdef{_spg:+}{\_par} + + \_doc ----------------------------- + The \`\_endslides` is defined as `\_end` primitive, but + slide-designer can redefine it. For example, + \ulink[http://petr.olsak.net/optex/optex-tricks.html\#slider]{OpTeX trick 0029} + shows how to define clickable navigation to the pages and how to check + the data integrity at the end of the document using `\_endslides`. + + The `\bye` macro is redefined here as an alternative to `\pg.`. + \_cod ----------------------------- + +\_def\_endslides{\_end} +\_def\bye{\_pg.} + + \_doc ----------------------------- + We need no numbers and no table of contents when using slides. + The \^`\_printsec` macro is redefined in order the title is centered + and typeset in `\Blue`. + \_cod ----------------------------- + +\_def\_titfont{\_typosize[42/60]\_bf \Blue} +\_def\_subtitfont{\_typosize[20/30]\_bf} +\_def\_secfont{\_typosize[25/30]\_bf \Blue} + +\_nonum \_notoc \_let\_resetnonumnotoc=\_relax +\_def\_printsec#1{\_par + \_abovetitle{\_penalty-400}\_bigskip + {\_secfont \_noindent \_leftskip=0pt plus1fill \_rightskip=\_leftskip + \_printrefnum[@\_quad]#1\_nbpar}\_insertmark{#1}% + \_nobreak \_belowtitle{\_medskip}% +} + + \_doc ----------------------------- + When \`\slideshow` is active then each page is opened + by `\setbox\_slidepage=\vbox\bgroup` (roughly speaking) + and closed by `\egroup`. The material is + `\unvbox`ed and saved for the usage in the next usage if `\pg+` is in process. + The \`\_slidelayer` is incremented instead `\pageno` if `\pg+`. + This counter is equal to `\count1`, so it is printed to the terminal and + log file next to `\pageno`. + + The code is somewhat more complicated when \^`\layers` is used. Then + `<layered-text>` is saved to the \`\_layertext` macro, the material before + it is in \`\_slidepage` box and the material after it is in `\_slidepageB` + box. The pages are completed in the `\loop` which increments the + \`\layernum` register. + \_cod ----------------------------- + +\_newbox\_slidepage \_newbox\_slidepageB +\_countdef\_slidelayer=1 + +\_def\_slideshow{\_slidelayer=1 \_slideshowactive + \_let\slideopen=\_relax % first wins + \_setbox\_slidepage=\_vbox\_bgroup\_bgroup} + +\_def\_slideshowactive{% + \_sdef{_spg:;}{\_closepage \_global\_slidelayer=1 \_resetpage \_openslide} + \_sdef{_spg:.}{\_closepage \_endslides} + \_sdef{_spg:+}{\_closepage \_incr\_slidelayer \_decr\_pageno \_openslide} + \_let\_layers=\_layersactive + \_destboxslide % to prevent hyperlink-dests duplication +} +\_def\_destboxslide{\_def\_destbox[##1:##2]{\_isequal{##1}{ref}\_iffalse \_destboxori[##1:##2]\_fi}} + +\_def\_openslide{\_setbox\_slidepage=\_vbox\_bgroup\_bgroup \_setilevel + \_ifvoid\_slidepage \_else \_unvbox\_slidepage \_nointerlineskip\_lastbox \_fi} +\_def\_setilevel{\_loop \_decr\_gilevel \_ifnum\_gilevel<0 \_else \_begitems \_repeat} + +\_def\_closepage{\_egroups \_egroup + \_ifnum \_maxlayers=0 \_unvcopy\_slidepage \_vfil\_break + \_else \_begingroup \_setwarnslides \_layernum=0 + \_loop + \_ifnum\_layernum<\_maxlayers \_advance\_layernum by1 + \_printlayers \_vfil\_break + \_ifnum\_layernum<\_maxlayers \_incr\_slidelayer \_decr\_pageno \_fi + \_repeat + \_global\_maxlayers=0 + \_incr\_layernum \_global\_setbox\_slidepage=\_vbox{\_printlayers}% + \_endgroup + \_fi} +\_def\_resetpage{% + \_global\_setbox\_slidepage=\_box\_voidbox \_global\_setbox\_slidepageB=\_box\_voidbox + \_lfnotenumreset +} +\_def\_setwarnslides{% + \_def\pg##1{\_opwarning{\_string\pg##1 \_layersenv}\_def\pg####1{}}% + \_def\layers##1 {\_opwarning{\_string\layers\_space \_layersenv}\_def\layers####1{}}% +} +\_def\_layersenv{cannot be inside \_string\layers...\_string\endlayers, ignored} + +\_def\_printlayers{\_unvcopy\_slidepage \_nointerlineskip\_lastbox + \_layertext \_endgraf + \_ifdim\_prevdepth>-1000pt \_kern-\_prevdepth \_kern\_dp\_strutbox \_fi + \_vskip\_parskip + \_unvcopy\_slidepageB +} +\_let\_destboxori=\_destbox + +\_newcount\_layernum \_newcount\_maxlayers +\_maxlayers=0 + +\_long\_def\_layersactive #1 #2\endlayers{% + \_par\_penalty0\_egroup + \_gdef\_layertext{#2}% + \_global\_maxlayers=#1 + \_setbox\_slidepageB=\_vbox\_bgroup +} +\_def\_slideopen{\_let\slideshow=\_relax % first wins + \_sdef{_spg:;}{\_egroups\_vfil\_break \_lfnotenumreset\_bgroup \_setilevel} + \_sdef{_spg:.}{\_egroups\_endslides} + \_sdef{_spg:+}{\_egroups\_bgroup \_setilevel} + \_bgroup +} + +\_public \subtit \slideshow \slideopen \pg \wideformat \use \pshow \layernum ; + + \_doc ----------------------------- + Default \`\layers` `<num>` macro (when \^`\slideshow` is not activated) is simple. + It prints the `<layered-text>` with `\layernum=<num>+1` because we need the + result after last layer is processed. + \_cod ----------------------------- + +\_def\_layers #1 {\_par\_layernum=\_numexpr#1+1\_relax} +\_let\endlayers=\_relax + +\_def\layers{\_layers} + + \_doc ----------------------------- + We must to redefine \`\fnotenumpages` because the data from `.ref` file + are less usable for implementing such a feature: the + footnote should be in more layers repeatedly. But we can suppose that + each page starts by `\pg;` macro, so we can reset the footnote counter by + this macro. + \_cod ----------------------------- + +\_def \_fnotenumpages {\_def\_fnotenum{\_the\_lfnotenum}\_pgfnotefalse + \_def\_lfnotenumreset{\_global\_lfnotenum=0 }} +\_let \_lfnotenumreset=\_relax +\_public \fnotenumpages ; + +\_endcode % ---------------------------------------------- + +The user manual of \OpTeX/ slides are in `op-slides.tex` file. + +2021-03-10 \slideopen introduced, bug with colors in \setbox fixed +2021-03-10 \ifmmode* added to \adef* +2021-02-15 \_def\_decr removed +2021-01-16 \layers at empty page raises error: problem fixed +2020-03-19 slides introduced diff --git a/Master/texmf-dist/tex/optex/base/styles.opm b/Master/texmf-dist/tex/optex/base/styles.opm new file mode 100644 index 00000000000..534eb13663c --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/styles.opm @@ -0,0 +1,120 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \report {Basic styles of OpTeX <2021-03-10>} % preloaded in format + + \_doc ----------------------------- + We define auxiliary macro first (used by the \^`\address` macro) + \nl + The `{`\`\boxlines` `<line-1><eol><line-2><eol>...<line-n><eol>}` + returns to the outer vertical mode a box with `<line-1>`, next box with + `<line-2>` etc. Each box has its natural width. This is reason why we cannot + use paragraph mode where each resulting box has the width `\hsize`. + The `<eol>` is set active and `\everypar` starts `\hbox{` and acive <eol> + closes this `\hbox` by `}`. + \_cod ----------------------------- + +\_def\_boxlines{% + \_def\_boxlinesE{\_ifhmode\_egroup\_empty\_fi}% + \_def\_nl{\_boxlinesE}% + \_bgroup \_lccode`\~=`\^^M\_lowercase{\_egroup\_let~}\_boxlinesE + \_everypar{\_setbox0=\_lastbox\_endgraf + \_hbox\_bgroup \_catcode`\^^M=13 \_let\par=\_nl \_aftergroup\_boxlinesC}% +} +\_def\_boxlinesC{\_futurelet\_next\_boxlinesD} +\_def\_boxlinesD{\_ifx\_next\_empty\_else\_ea\_egroup\_fi} + +\_public \boxlines ; + + \_doc ----------------------------- + The \`\report` and \`\letter` style initialization macros are defined here. + \nl + The `\letter` defines \`\address` and \`\subject` macros. + \_cod ----------------------------- + +\_def\_report{ + \_typosize[11/13.2] + \_vsize=\_dimexpr \_topskip + 52\_baselineskip \_relax % added 2020-03-28 + \_let\_titfont=\_chapfont + \_titskip=3ex + \_eoldef\_author##1{\_removelastskip\_bigskip + {\_leftskip=0pt plus1fill \_rightskip=\_leftskip \_it \_noindent ##1\_par}\_nobreak\_bigskip + } + \_public \author ; + \_parindent=1.2em \_iindent=\_parindent \_ttindent=\_parindent + \_footline={\_global\_footline={\_hss\_rmfixed\_folio\_hss}} +} +\_def\_letter{ + \_def\_address{\_vtop\_bgroup\_boxlines \_parskip=0pt \_let\par=\_egroup} + \_def\_subject{{\_bf \_mtext{subj}: }} + \_public \address \subject ; + \_typosize[11/14] + \_vsize=\_dimexpr \_topskip + 49\_baselineskip \_relax % added 2020-03-28 + \_parindent=0pt + \_parskip=\_medskipamount + \_nopagenumbers +} +\_public \letter \report ; + + \_doc ----------------------------- + The \`\slides` macro reads macro file `slides.opm`, see the section~\ref[slides]. + \_cod ----------------------------- + +\_def\_slides{\_par + \_opinput{slides.opm} + \_adef*{\_relax\_ifmmode*\_else\_ea\_startitem\_fi} +} +\_public \slides ; + + +\_endcode % ------------------------------------- + +The example of `\letter` style document follows: + +\begtt %----------------------------------------------------------------- + +\letter +\fontfam[bonum] +\chyph + +\address + Vážený pan + Mgr. Bořek Byrokrat + ředitel Ústavu pro další možnosti + Úřední 789 + 123 45 Praha 1 + +\hfill V Praze dne \today + +\subject Žádost o možnost další možnosti + +Vážený pane řediteli + +na základě Vašeho dopisu č.j.~123456/78-dat a elektronické výzvy si dovoluji +Vás požádat o prozkoumání mé možnosti další možnosti. +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do +eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim +veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea +commodo consequat. + +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do +eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim +veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea +commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit +esse cillum dolore eu fugiat nulla pariatur. + +S úctou + +\hfill \address + {\it Petr Olšák} + specialista na \TeX{} + Ulice 12345 + Praha 13 + +\bye + +\endtt %--------------------------------------------------------------------- + +\endinput + +2021-03-10 \ifmmode* added to \adef* +2020-03-28 released diff --git a/Master/texmf-dist/tex/optex/base/table.opm b/Master/texmf-dist/tex/optex/base/table.opm new file mode 100644 index 00000000000..a4a6511958e --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/table.opm @@ -0,0 +1,526 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \table {Basic macros for OpTeX <2021-03-09>} % preloaded in format + + \_doc ----------------------------- + The result of the \`\table``{<declaration>}{<data>}` macro is inserted into + \`\_tablebox`. You can change default value if you want by + `\let\_tablebox=\vtop` or `\let\_tablebox=\relax`. + \_cod ----------------------------- + +\_let\_tablebox=\_vbox + + \_doc ----------------------------- + We save the `to<size>` or `pxto<size>` to `#1` and \`\_tableW` sets the + `to<size>` to the \`\_tablew` macro. + If `pxto<size>` is used then `\_tablew` is empty and `\_tmpdim` includes + given <size>. The `\_ifpxto` returns true in this case. + + The `\table` continues by reading `{<declaration>}` in the \^`\_tableA` macro. + Catcodes (for example the `|` character) have to be normal when reading + `\table` parameters. This is the reason why we use `\catcodetable` here. + \_cod ----------------------------- + +\_newifi \_ifpxto +\_def\_table#1#{\_tablebox\_bgroup \_tableW#1\_empty\_end + \_bgroup \_catcodetable\_optexcatcodes \_tableA} +\_def\_tableW#1#2\_end{\_pxtofalse + \_ifx#1\_empty \_def\_tablew{}\_else + \_ifx#1p \_def\_tablew{}\_tableWx#2\_end \_else \_def\_tablew{#1#2}\_fi\_fi} +\_def\_tableWx xto#1\_end{\_tmpdim=#1\_relax \_pxtotrue} +\_public \table ; + + \_doc ----------------------------- + The \^`\tablinespace` is implemented by enlarging given \^`\tabstrut` + by desired dimension (height and depth too) and by setting + `\_lineskip=-2\_tablinespace`. Normal table rows (where no `\hrule` is + between them) have normal baseline distance.\nl + The \`\_tableA``{<declaration>}` macro scans the `<declaration>` by + `\_scantabdata#1\_relax` and continues by processing `{<data>}` by \^`\_tableB`. + The trick `\_tmptoks={<data>}\_edef\_tmpb{\_the\_tmptoks}` + is used here in order to keep the hash marks in the <data> unchanged. + \_cod ----------------------------- + +\_def\_tableA#1{\_egroup + \_the\_thistable \_global\_thistable={}% + \_ea\_ifx\_ea^\_the\_tabstrut^\_setbox\_tstrutbox=\_null + \_else \_setbox\_tstrutbox=\_hbox{\_the\_tabstrut}% + \_setbox\_tstrutbox=\_hbox{\_vrule width\_zo + height\_dimexpr\_ht\_tstrutbox+\_tablinespace + depth\_dimexpr\_dp\_tstrutbox+\_tablinespace}% + \_offinterlineskip + \_lineskip=-2\_tablinespace + \_fi + \_colnum=0 \_let\_addtabitem=\_addtabitemx + \_def\_tmpa{}\_tabdata={\_colnum1\_relax}\_scantabdata#1\_relax + \_the\_everytable \_bgroup \_catcode`\#=12 \_tableB +} + + \_doc ----------------------------- + The \`\_tableB` saves `<data>` to `\_tmpb` + and does four \^`\replstring`s to prefix each macro \^`\crl` (etc.) + by `\_crcr`. The reason is: we want to use macros that scan its parameter + to the delimiter written in the right part of the table item declaration. + See \^`\fS` for example. The `\crcr` cannot be hidden in another macro in this case. + + The `\tabskip` value is saved for places between columns + into the \`\_tabskipmid` macro. Then it runs + \begtt \catcode`\<=13 + \tabskip=\tabskipl \halign{<converted declaration>\tabskip=\tabskipr \cr <data>\crcr} + \endtt + This sets the desired boundary values of `\tabskip`. The + \"between-columns" values are set as `\tabskip=`\^`\_tabskipmid` in the + `<converted declaration>` immediately after each column declarator. + + If `pxto` keyword was used, then we set the virtual unit \^`\tsize` to + `\hsize` first. Then the first attempt of the table is created in box 0. + Then the \^`\tsize` is re-calculated using `\wd0` and the real table is + printed by `\halign` in the second pass. + + If no `pxto` keyword was used, then we print the table using `\halign` + directly. The \^`\_tablew` macro is nonempty if the `to` keyword was used. + + Because the color selector with `\aftergroup` can be used inside the + table item, we must create the second real group for each table item. + This is reason why we start `<converted declaration>` by `\bgroup` and we + end it by `\egroup` in the \`\_tableC` macro. Each `&` character + is stored as `\egroup&\bgroup` in `<converted declaration>`. The + `\halign\_tablew\_tableC` really does: + \begtt \catcode`\<=13 + \halign\_tablew{\bgroup<converted declaration>\egroup\tabskip=\tabskipr \cr<data>\crcr} + \endtt + \relax + The <data> are re-tokenized by `\_scantextokens` in order to be more + robust to catcode changing inside the <data>. But inline verbatim cannot + work in special cases here like \code{`\{`} for example. + \_cod ----------------------------- + +\_long\_def\_tableB #1{\_egroup \_def\_tmpb{#1}% + \_replstring\_tmpb{\crl}{\_crcr\crl}\_replstring\_tmpb{\crll}{\_crcr\crll}% + \_replstring\_tmpb{\crli}{\_crcr\crli}\_replstring\_tmpb{\crlli}{\_crcr\crlli}% + \_replstring\_tmpb{\crlp}{\_crcr\crlp}% + \_edef\_tabskipmid{\_the\_tabskip}\_tabskip=\_tabskipl + \_ifpxto + \_tsize=\_hsize \_setbox0 = \_vbox{\_tablepxpreset \_halign \_tableC}% + \_tsize=\_dimexpr\_hsize-(\_wd0-\_tmpdim)\_relax + \_setbox0=\_null \_halign \_tableC + \_else + \_halign\_tablew \_tableC + \_fi \_egroup +} +\_def\_tableC{\_ea{\_ea\_bgroup\_the\_tabdata\_egroup\_tabskip=\_tabskipr\_cr + \_scantextokens\_ea{\_tmpb\_crcr}}} + +\_def\_tablepxpreset{} % can be used to de-activate references to .ref file +\_newbox\_tstrutbox % strut used in table rows +\_newtoks\_tabdata % the \halign declaration line + + \_doc ----------------------------- + The \`\_scantabdata` macro converts `\table`'s `<declaration>` to + `\halign` `<converted declaration>`. + The result is stored into \`\_tabdata` tokens list. + For example, the + following result is generated when `<declaration>=|cr||cl|`. + \begtt + tabdata: \_vrule\_the\_tabiteml\_hfil#\_unsskip\_hfil\_the\_tabitemr\_tabstrutA + &\_the\_tabiteml\_hfil#\_unsskip\_the\_tabitemr + \_vrule\_kern\_vvkern\_vrule\_tabstrutA + &\_the\_tabiteml\_hfil#\_unsskip\_hfil\_the\_tabitemr\_tabstrutA + &\_the\_tabiteml#\_unsskip\_hfil\_the\_tabitemr\_vrule\_tabstrutA + ddlinedata: &\_dditem &\_dditem\_vvitem &\_dditem &\_dditem + \endtt + The second result in the \`\_ddlinedata` macro is a template of one row of the table + used by \^`\crli` macro. + \_cod ----------------------------- + +\_def\_scantabdata#1{\_let\_next=\_scantabdata + \_ifx\_relax#1\_let\_next=\_relax + \_else\_ifx|#1\_addtabvrule + \_else\_ifx(#1\_def\_next{\_scantabdataE}% + \_else\_ifx:#1\_def\_next{\_scantabdataF}% + \_else\_isinlist{123456789}#1\_iftrue \_def\_next{\_scantabdataC#1}% + \_else \_ea\_ifx\_csname _tabdeclare#1\_endcsname \_relax + \_ea\_ifx\_csname _paramtabdeclare#1\_endcsname \_relax + \_opwarning{tab-declarator "#1" unknown, ignored}% + \_else + \_def\_next{\_ea\_scantabdataB\_csname _paramtabdeclare#1\_endcsname}\_fi + \_else \_def\_next{\_ea\_scantabdataA\_csname _tabdeclare#1\_endcsname}% + \_fi\_fi\_fi\_fi\_fi\_fi \_next +} +\_def\_scantabdataA#1{\_addtabitem + \_ea\_addtabdata\_ea{#1\_tabstrutA \_tabskip\_tabskipmid\_relax}\_scantabdata} +\_def\_scantabdataB#1#2{\_addtabitem + \_ea\_addtabdata\_ea{#1{#2}\_tabstrutA \_tabskip\_tabskipmid\_relax}\_scantabdata} +\_def\_scantabdataC {\_def\_tmpb{}\_afterassignment\_scantabdataD \_tmpnum=} +\_def\_scantabdataD#1{\_loop \_ifnum\_tmpnum>0 \_advance\_tmpnum by-1 \_addto\_tmpb{#1}\_repeat + \_ea\_scantabdata\_tmpb} +\_def\_scantabdataE#1){\_addtabdata{#1}\_scantabdata} +\_def\_scantabdataF {\_addtabitem\_def\_addtabitem{\_let\_addtabitem=\_addtabitemx}\_scantabdata} + + \_doc ----------------------------- + The \`\_addtabitemx` adds the boundary code (used between columns) + to the <converted declaration>. This code is + `\egroup &\bgroup \colnum=<value>\relax`. You can get the current number of + column from the \`\colnum` register, but you cannot write + `\the\colnum` as the first object in a <data> item because `\halign` + first expands the front of the item and the left part of the declaration + is processed after this. Use `\relax\the\colnum` instead. Or you can + write: + \begtt + \def\showcolnum{\ea\def\ea\totcolnum\ea{\the\colnum}\the\colnum/\totcolnum} + \table{ccc}{\showcolnum & \showcolnum & \showcolnum} + \endtt + This example prints 1/3 \ 2/3 \ 3/3, because the value of the `\colnum` is + equal to the total number of columns before left part of the column declaration + is processed. + \_cod ----------------------------- + +\_newcount\_colnum % number of current column in the table +\_public \colnum ; + +\_def\_addtabitemx{\_ifnum\_colnum>0 + \_addtabdata{\_egroup &\_bgroup}\_addto\_ddlinedata{&\_dditem}\_fi + \_advance\_colnum by1 \_let\_tmpa=\_relax + \_ifnum\_colnum>1 \_ea\_addtabdata\_ea{\_ea\_colnum\_the\_colnum\_relax}\_fi} +\_def\_addtabdata#1{\_tabdata\_ea{\_the\_tabdata#1}} + + \_doc ----------------------------- + This code converts `||` or `|` from `\table` <declaration> to the <converted declaration>. + \_cod ----------------------------- + +\_def\_addtabvrule{% + \_ifx\_tmpa\_vrule \_addtabdata{\_kern\_vvkern}% + \_ifnum\_colnum=0 \_addto\_vvleft{\_vvitem}\_else\_addto\_ddlinedata{\_vvitem}\_fi + \_else \_ifnum\_colnum=0 \_addto\_vvleft{\_vvitemA}\_else\_addto\_ddlinedata{\_vvitemA}\_fi\_fi + \_let\_tmpa=\_vrule \_addtabdata{\_vrule}% +} +\_def\_tabstrutA{\_copy\_tstrutbox} +\_def\_vvleft{} +\_def\_ddlinedata{} + + \_doc ----------------------------- + The default \"declaration letters" `c`, `l`, `r` and `p` are declared + by setting \`\_tabdeclarec`, \`\_tabdeclarel`, \`\_tabdeclarer` and + \`\_paramtabdeclarep` macros. In general, define + `\def\_tabdeclare<letter>{...}` for a non-parametric + letter and `\def\_paramtabdeclare<letter>{...}` for a letter with a parameter. + The double hash `##` must be in the definition, it is replaced by a real table item data. + You can declare more such \"declaration letters" if you want. + \_cod ----------------------------- + +\_def\_tabdeclarec{\_the\_tabiteml\_hfil##\_unsskip\_hfil\_the\_tabitemr} +\_def\_tabdeclarel{\_the\_tabiteml\_relax##\_unsskip\_hfil\_the\_tabitemr} +\_def\_tabdeclarer{\_the\_tabiteml\_hfil##\_unsskip\_the\_tabitemr} +\_def\_paramtabdeclarep#1{\_the\_tabiteml + \_vtop{\_hsize=#1\_relax \_baselineskip=\_normalbaselineskip + \_lineskiplimit=\_zo \_noindent##\_unsskip + \_ifvmode\_vskip\_dp\_tstrutbox \_else\_lower\_dp\_tstrutbox\_hbox{}\_fi}\_the\_tabitemr} + + \_doc ----------------------------- + Users put optional spaces around the table item typically, i.e.\ they write + `& text &` instead `&text&`. The left space is ignored by the internal \TeX/ algorithm but + the right space must be removed by macros. This is a reason why we recommend to + use \`\_unsskip` after each `##` in your definition of \"declaration letters". + This macro isn't only the primitive `\unskip` because we allow usage of plain \TeX/ + `\hideskip` macro: `&\hideskip text\hideskip&`. + \_cod ----------------------------- + +\_def\_unsskip{\_ifmmode\_else\_ifdim\_lastskip>\_zo \_unskip\_fi\_fi} + + \_doc ----------------------------- + The \`\fL`, \`\fR`, \`\fC` and \`\fX` macros only do special parameters settings + for paragraph building algorithm. The \`\fS` prints the paragraph into + box 0 first, measures the number of lines by the `\prevgraf` primitive + and use (or don't use) `\hfil` (for centering) before the first line. + \_cod ----------------------------- + +\_let\_fL=\_raggedright +\_def\_fR{\_leftskip=0pt plus 1fill \_relax} +\_def\_fC{\_leftskip=0pt plus1fill \_rightskip=0pt plus 1fill \_relax} +\_def\_fX{\_leftskip=0pt plus1fil \_rightskip=0pt plus-1fil \_parfillskip=0pt plus2fil \_relax} +\_long\_def\_fS #1\_unsskip{\_noindent \_setbox0 =\_vbox{\_noindent #1\_endgraf \_ea}% + \_ifnum\_prevgraf=1 \_hfil \_fi #1\_unsskip +} +\_public \fL \fR \fC \fX \fS ; + + \_doc ----------------------------- + The family of `\_cr*` macros + \`\crl`, \`\crll`, \`\crli`, \`\crlli`, \`\crlp` and + \`\tskip` `<dimen>` is implemented here. + The \`\_zerotabrule` is used to suppress the negative `\lineskip` + declared by \^`\tablinespace`. + \_cod ----------------------------- + +\_def\_crl{\_crcr\_noalign{\_hrule}} +\_def\_crll{\_crcr\_noalign{\_hrule\_kern\_hhkern\_hrule}} +\_def\_zerotabrule {\_noalign{\_hrule height\_zo width\_zo depth\_zo}} + +\_def\_crli{\_crcr \_zerotabrule \_omit + \_gdef\_dditem{\_omit\_tablinefil}\_gdef\_vvitem{\_kern\_vvkern\_vrule}\_gdef\_vvitemA{\_vrule}% + \_vvleft\_tablinefil\_ddlinedata\_crcr \_zerotabrule} +\_def\_crlli{\_crli\_noalign{\_kern\_hhkern}\_crli} +\_def\_tablinefil{\_leaders\_hrule\_hfil} + +\_def\_crlp#1{\_crcr \_zerotabrule \_noalign{\_kern-\_drulewidth}% + \_omit \_xdef\_crlplist{#1}\_xdef\_crlplist{,\_ea}\_ea\_crlpA\_crlplist,\_end,% + \_global\_tmpnum=0 \_gdef\_dditem{\_omit\_crlpD}% + \_gdef\_vvitem{\_kern\_vvkern\_kern\_drulewidth}\_gdef\_vvitemA{\_kern\_drulewidth}% + \_vvleft\_crlpD\_ddlinedata \_global\_tmpnum=0 \_crcr \_zerotabrule} +\_def\_crlpA#1,{\_ifx\_end#1\_else \_crlpB#1-\_end,\_ea\_crlpA\_fi} +\_def\_crlpB#1#2-#3,{\_ifx\_end#3\_xdef\_crlplist{\_crlplist#1#2,}\_else\_crlpC#1#2-#3,\_fi} +\_def\_crlpC#1-#2-#3,{\_tmpnum=#1\_relax + \_loop \_xdef\_crlplist{\_crlplist\_the\_tmpnum,}\_ifnum\_tmpnum<#2\_advance\_tmpnum by1 \_repeat} +\_def\_crlpD{\_incr\_tmpnum \_edef\_tmpa{\_noexpand\_isinlist\_noexpand\_crlplist{,\_the\_tmpnum,}}% + \_tmpa\_iftrue \_kern-\_drulewidth \_tablinefil \_kern-\_drulewidth\_else\_hfil \_fi} + +\_def\_tskip{\_afterassignment\_tskipA \_tmpdim} +\_def\_tskipA{\_gdef\_dditem{}\_gdef\_vvitem{}\_gdef\_vvitemA{}\_gdef\_tabstrutA{}% + \_vbox to\_tmpdim{}\_ddlinedata \_crcr + \_zerotabrule \_noalign{\_gdef\_tabstrutA{\_copy\_tstrutbox}}} + +\_public \crl \crll \crli \crlli \crlp \tskip ; + + \_doc ----------------------------- + The \`\mspan``{<number>}[<declaration>]{<text>}` macro generates similar `\omit\span\omit\span` + sequence as plain \TeX/ macro `\multispan`. Moreover, it uses \^`\_scantabdata` to + convert `<declaration>` from `\table` syntax to `\halign` syntax. + \_cod ----------------------------- + +\_def\_mspan{\_omit \_afterassignment\_mspanA \_mscount=} +\_def\_mspanA[#1]#2{\_loop \_ifnum\_mscount>1 \_cs{_span}\_omit \_advance\_mscount-1 \_repeat + \_count1=\_colnum \_colnum=0 \_def\_tmpa{}\_tabdata={}\_scantabdata#1\_relax + \_colnum=\_count1 \_setbox0=\_vbox{\_halign\_ea{\_ea\_bgroup\_the\_tabdata\_egroup\_cr#2\_cr}% + \_global\_setbox8=\_lastbox}% + \_setbox0=\_hbox{\_unhbox8 \_unskip \_global\_setbox8=\_lastbox}% + \_unhbox8 \_ignorespaces} +\_public \mspan ; + + \_doc ----------------------------- + The \`\vspan``<number>{<text>}` implementation is here. + We need to lower the box by + \begtt \catcode`\<=13 + (<number>-1)*(\ht+\dp of \tabstrut) / 2. + \endtt + The `#1` parameter must be a one-digit number. If you want to set more digits + then use braces. + \_cod ----------------------------- + +\_def\_vspan#1#2#{\_vspanA{#1#2}} +\_def\_vspanA#1#2{\_vtop to\_zo{\_hbox{\_lower \_dimexpr + #1\_dimexpr(\_ht\_tstrutbox+\_dp\_tstrutbox)/2\_relax + -\_dimexpr(\_ht\_tstrutbox+\_dp\_tstrutbox)/2\_relax \_hbox{#2}}\_vss}} +\_public \vspan ; + + \_doc ----------------------------- + The parameters of primitive `\vrule` and `\hrule` keeps the rule \"last wins". + If we re-define `\hrule` to `\_orihrule height1pt` then each usage + of redefined `\hrule` uses `1pt` height if this parameter isn't + overwritten by another following `height` parameter. This principle is used for + settings another default rule thickness than 0.4\,pt by the macro + \`\rulewidth`. + \_cod ----------------------------- + +\_newdimen\_drulewidth \_drulewidth=0.4pt +\_let\_orihrule=\_hrule \_let\_orivrule=\_vrule +\_def\_rulewidth{\_afterassignment\_rulewidthA \_drulewidth} +\_def\_rulewidthA{\_edef\_hrule{\_orihrule height\_drulewidth}% + \_edef\_vrule{\_orivrule width\_drulewidth}% + \_let\_rulewidth=\_drulewidth + \_public \vrule \hrule \rulewidth;} +\_public \rulewidth ; + + \_doc ----------------------------- + The \`\frame``{<text>}` uses \"\code{\\vbox} in \code{\\vtop}" trick in order to keep the + baseline of the internal text at the same level as outer baseline. + User can write `\frame{abcxyz}` in normal paragraph line, for example + and gets the expected result: \frame{abcxyz}. + The internal margins are set by `\vvkern` and `\hhkern` parameters. + \_cod ----------------------------- + +\_long\_def\_frame#1{% + \_hbox{\_vrule\_vtop{\_vbox{\_hrule\_kern\_vvkern + \_hbox{\_kern\_hhkern\_relax#1\_kern\_hhkern}% + }\_kern\_vvkern\_hrule}\_vrule}} +\_public \frame ; + + \_doc ----------------------------- + \`\eqbox` and \`\eqboxsize` are implemented here. The widths of + all `\eqbox`es are saved to the `.ref` file in the format + \`\_Xeqbox``{<label>}{<size>}`. The `.ref` file is read again and maximum + box width for each <label> is saved to `\_eqb:<label>`. + \_cod ----------------------------- + +\_def\_Xeqbox#1#2{% + \_ifcsname _eqb:#1\_endcsname + \_ifdim #2>\_cs{_eqb:#1}\_relax \_sdef{_eqb:#1}{#2}\_fi + \_else \_sdef{_eqb:#1}{#2}\_fi +} +\_def\_eqbox #1[#2]#3{\_setbox0=\_hbox{{#3}}% + \_openref \_immediate\_wref \_Xeqbox{{#2}{\_the\_wd0}}% + \_ifcsname _eqb:#2\_endcsname + \_hbox to\_cs{_eqb:#2}{\_ifx r#1\_hfill\_fi\_hss\_unhbox0\_hss\_ifx l#1\_hfill\_fi}% + \_else \_box0 \_fi +} +\_def\_eqboxsize [#1]#2{\_trycs{_eqb:#1}{#2}} + +\public \eqbox \eqboxsize ; + +\_endcode % ------------------------------------- + +\secc[table.bound] The boundary declarator \code{:} + +The `<declaration>` part of `\table{<declaration>}{<data>}` includes +column declarators (letters) and other material: the `|` or `(<cmd>)`. +If the boundary declarator `:` is not used then +the boundaries of columns are just before each column declarator +with exception of the first one. +For example, the declaration `{|c||c(xx)(yy)c}` +should be written more exactly using the boundary declarator `:` +by `{|c||:c(xx)(yy):c}`. But you can set these boundaries to +other places using the boundary declarator~`:` explicitly, +for example `{|c:||c(xx):(yy)c}`. The boundary declarator `:` +can be used only once between each pair of column declarators. + +Each table item has its group. The `(<cmd>)` are parts of the given +table item (depending on the boundary declarator position). +If you want to apply a special setting for a given column, you can do this by +`(<setting>)` followed by column declarator. But if the column is not +first, you must use `:(<setting>)`. Example. We have three centered columns, +the second one have to be in bold font and the third one have to be in red: +`\table{c:(\bf)c:(\Red)c}{<data>}` + +\secc Usage of the \code{\\tabskip} primitive + +The value of `\tabskip` primitive is used between all columns of the table. +It is glue-type, so it can be stretchable or shrinkable, see next +section~\ref[table.w]. + +By default, `\tabskip` is 0\,pt. It means that only \^`\tabiteml`, +\^`\tabitemr` and `(<cmds>)` can generate visual spaces between columns. But they +are not real spaces between columns because they are in fact the part of +the total column width. + +The `\tabskip` value declared before the \^`\table` macro (or in +\^`\everytable` or in \^`\thistable`) is used between all columns in the table. +This value is equal to all spaces between columns. But you can set each such space +individually if you use `(\tabskip=<value>)` in the <declaration> immediately +before boundary character. The boundary character represents the column pair for +which the `\tabskip` has individual value. For example +`c(\tabskip=5pt):r` gives `\tabskip` value between `c` and `r` columns. +You need not use boundary character explicitly, so `c(\tabskip=5pt)r` gives +the same result. + +Space before the first column is given by the \^`\tabskipl` +and space after the last column is equal to \^`\tabskipr`. +Default values are 0\,pt. + +Use nonzero `\tabskip` only in special applications. If `\tabskip` is +nonzero then horizontal lines generated by \^`\crli`, \^`\crlli` and \^`\crlp` +have another behavior than you probably expected: they are interrupted in +each `\tabskip` space. + +\secc[table.w] Tables to given width + +There are two possibilities how to create tables to given width: + +\begitems +* `\table to<size>{<declaration>}{<data>}` uses stretchability or + shrinkability of all spaces between columns generated by `\tabskip` value and + eventually by \^`\tabskipl`, \^`\tabskipr` values. See example below. +* `\table pxto<size>{<declaration>}{<data>}` expands the columns declared + by `p{<size>}`, if the `<size>` is given by a virtual \^`\tsize` unit. + See the example below. +\enditems + +Example of `\table to<size>`: + +\begtt \catcode`\<=13 +\thistable{\tabskip=0pt plus1fil minus1fil} +\table to\hsize {lr}{<data>} +\endtt +% +This table has its width `\hsize`. The first column starts at the left boundary of +this table and it is justified left (to the boundary). The second column ends at +the right boundary of the table and it is justified right (to the boundary). +The space between them is stretchable and shrinkable to reach +the given width `\hsize`. + +\medskip +Example of `\table pxto<size>` (means \"{\bf p}aragraphs e{\bf x}panded {\bf to}"): + +\begtt +\table pxto\hsize {|c|p{\tsize}|}{\crl + aaa & Ddkas jd dsjds ds cgha sfgs dd fddzf dfhz xxz + dras ffg hksd kds d sdjds h sd jd dsjds ds cgha + sfgs dd fddzf dfhz xxz. \crl + bb ddd ggg & Dsjds ds cgha sfgs dd fddzf dfhz xxz + ddkas jd dsjds ds cgha sfgs dd fddzf. \crl } +\endtt + +\noindent\table pxto\hsize {|c|p{\tsize}|}{\crl + aaa & Ddkas jd dsjds ds cgha sfgs dd fddzf dfhz xxz + dras ffg hksd kds d sdjds h sd jd dsjds ds cgha + sfgs dd fddzf dfhz xxz. \crl + bb ddd ggg & Dsjds ds cgha sfgs dd fddzf dfhz xxz + ddkas jd dsjds ds cgha sfgs dd fddzf. \crl } +\medskip + +The first `c` column is variable width (it gets the width of the most wide item) +and the resting space to given `\hsize` is filled by the `p` column. + +You can declare more than one `p{<coefficient>\tsize}` columns in the table +when `pxto` keyword is used. The total sum of <coefficinets> must be exactly one. +For example, + +\begtt \catcode`\<=13 +\table pxto13cm {r p{.3\tsize} p{.5\tsize} p{.2\tsize} l}{<data>} +\endtt +% +This gives the ratio of widths of individual paragraphs in the table. + +\secc `\eqbox`: boxes with equal width across the whole document + +The \^`\eqbox` `[<label>]{<text>}` behaves like `\hbox{<text>}` in the first +run of \TeX. But the widths of all boxes with the same label are saved to +`.ref` file and the maximum box width for each label is calculated at the +beginning of the next \TeX/ run. Then \^`\eqbox`~`[<label>]{<text>}` behaves +like `\hbox to <dim:label> {\hss <text>\hss}`, where <dim:label> is +the maximum width of all boxes +labeled by the same `[<label>]`. The documentation of the \LaTeX/ package +`eqparbox` includes more information and tips. + +The \^`\eqboxsize` `[<label>]{<dimen>}` expands to <dim:label> if this value is known, +else it expands to the given <dimen>. + +The optional parameter `r` or `l` can be written before `[<label>]` (for example +`\eqbox r[label]{text}`) if you want to put the text to the right or to the +left side of the box width. + +Try the following example and watch what happens after first \TeX/ run and +after the second one. + +\begtt +\def\leftitem#1{\par + \noindent \hangindent=\eqboxsize[items]{2em}\hangafter=1 + \eqbox r[items]{#1 }\ignorespaces} + +\leftitem {\bf first} \lorem[1] +\leftitem {\bf second one} \lorem[2] +\leftitem {\bf final} \lorem[3] +\endtt + + +\_endinput + +2021-03-09 \_tablepxpreset introduced +2021-02-15 \_expandafter -> \_ea +2021-01-27 \_tableB: \long\def added, \vspan syntax improved +2020-05-26 \eqbox implemented +2020-05-20 \colnum implemented. + \vspan implemented. +2020-05-19 \fL, \fR ets defined. + \table to, \table pxto implemented. +2020-05-10 \bgroup &\egroup added to tabdata (in order to \aftergroup from colors) + boundary declarator : introduced + \_unsskip: \ifmmode added. +2020-04-10 second group for items in order to \localcolors diff --git a/Master/texmf-dist/tex/optex/base/uni-lcuc.opm b/Master/texmf-dist/tex/optex/base/uni-lcuc.opm new file mode 100644 index 00000000000..2a99f52d66a --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/uni-lcuc.opm @@ -0,0 +1,15944 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +% Preloaded in format. A copy o uni-lcuc.tex fom csplain is here: + +% uni-lcuc.tex -- sets \lccodes and \uccodes for Unicode chars, nothing more +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Petr Olsak, Jul. 2014 + +\_wterm{Setting lccodes and uccodes for Unicode characters} + +\_def\_tmp #1 #2 {\_ifx^#1^\_else + \_lccode"#1="#1 + \_ifx.#2% + \_uccode"#1="#1 + \_else + \_uccode"#2="#2 + \_lccode"#2="#1 + \_uccode"#1="#2 + \_fi + \_ea \_tmp \_fi +} +\_tmp +00AA . +00B5 039C +00BA . +00E0 00C0 +00E1 00C1 +00E2 00C2 +00E3 00C3 +00E4 00C4 +00E5 00C5 +00E6 00C6 +00E7 00C7 +00E8 00C8 +00E9 00C9 +00EA 00CA +00EB 00CB +00EC 00CC +00ED 00CD +00EE 00CE +00EF 00CF +00F0 00D0 +00F1 00D1 +00F2 00D2 +00F3 00D3 +00F4 00D4 +00F5 00D5 +00F6 00D6 +00F8 00D8 +00F9 00D9 +00FA 00DA +00FB 00DB +00FC 00DC +00FD 00DD +00FE 00DE +00DF . +00FF 0178 +0101 0100 +0103 0102 +0105 0104 +0107 0106 +0109 0108 +010B 010A +010D 010C +010F 010E +0111 0110 +0113 0112 +0115 0114 +0117 0116 +0119 0118 +011B 011A +011D 011C +011F 011E +0121 0120 +0123 0122 +0125 0124 +0127 0126 +0129 0128 +012B 012A +012D 012C +012F 012E +0133 0132 +0135 0134 +0137 0136 +0138 . +013A 0139 +013C 013B +013E 013D +0140 013F +0142 0141 +0144 0143 +0146 0145 +0148 0147 +0149 . +014B 014A +014D 014C +014F 014E +0151 0150 +0153 0152 +0155 0154 +0157 0156 +0159 0158 +015B 015A +015D 015C +015F 015E +0161 0160 +0163 0162 +0165 0164 +0167 0166 +0169 0168 +016B 016A +016D 016C +016F 016E +0171 0170 +0173 0172 +0175 0174 +0177 0176 +017A 0179 +017C 017B +017E 017D +0180 0243 +0253 0181 +0183 0182 +0185 0184 +0254 0186 +0188 0187 +0256 0189 +0257 018A +018C 018B +018D . +01DD 018E +0259 018F +025B 0190 +0192 0191 +0260 0193 +0263 0194 +0195 01F6 +0269 0196 +0268 0197 +0199 0198 +019A 023D +019B . +026F 019C +0272 019D +019E 0220 +0275 019F +01A1 01A0 +01A3 01A2 +01A5 01A4 +0280 01A6 +01A8 01A7 +0283 01A9 +01AA . +01AB . +01AD 01AC +0288 01AE +01B0 01AF +028A 01B1 +028B 01B2 +01B4 01B3 +01B6 01B5 +0292 01B7 +01B9 01B8 +01BA . +01BB . +01BD 01BC +01BE . +01BF 01F7 +01C0 . +01C1 . +01C2 . +01C3 . +01C6 01C4 +01C9 01C7 +01CC 01CA +01CE 01CD +01D0 01CF +01D2 01D1 +01D4 01D3 +01D6 01D5 +01D8 01D7 +01DA 01D9 +01DC 01DB +01DF 01DE +01E1 01E0 +01E3 01E2 +01E5 01E4 +01E7 01E6 +01E9 01E8 +01EB 01EA +01ED 01EC +01EF 01EE +01F0 . +01F3 01F1 +01F5 01F4 +01F9 01F8 +01FB 01FA +01FD 01FC +01FF 01FE +0201 0200 +0203 0202 +0205 0204 +0207 0206 +0209 0208 +020B 020A +020D 020C +020F 020E +0211 0210 +0213 0212 +0215 0214 +0217 0216 +0219 0218 +021B 021A +021D 021C +021F 021E +0221 . +0223 0222 +0225 0224 +0227 0226 +0229 0228 +022B 022A +022D 022C +022F 022E +0231 0230 +0233 0232 +0234 . +0235 . +0236 . +0237 . +0238 . +0239 . +2C65 023A +023C 023B +2C66 023E +023F 2C7E +0240 2C7F +0242 0241 +0289 0244 +028C 0245 +0247 0246 +0249 0248 +024B 024A +024D 024C +024F 024E +0250 2C6F +0251 2C6D +0252 2C70 +0255 . +0258 . +025A . +025C . +025D . +025E . +025F . +0261 . +0262 . +0264 . +0265 A78D +0266 A7AA +0267 . +026A . +026B 2C62 +026C . +026D . +026E . +0270 . +0271 2C6E +0273 . +0274 . +0276 . +0277 . +0278 . +0279 . +027A . +027B . +027C . +027D 2C64 +027E . +027F . +0281 . +0282 . +0284 . +0285 . +0286 . +0287 . +028D . +028E . +028F . +0290 . +0291 . +0293 . +0294 . +0295 . +0296 . +0297 . +0298 . +0299 . +029A . +029B . +029C . +029D . +029E . +029F . +02A0 . +02A1 . +02A2 . +02A3 . +02A4 . +02A5 . +02A6 . +02A7 . +02A8 . +02A9 . +02AA . +02AB . +02AC . +02AD . +02AE . +02AF . +02B0 . +02B1 . +02B2 . +02B3 . +02B4 . +02B5 . +02B6 . +02B7 . +02B8 . +02B9 . +02BA . +02BB . +02BC . +02BD . +02BE . +02BF . +02C0 . +02C1 . +02C6 . +02C7 . +02C8 . +02C9 . +02CA . +02CB . +02CC . +02CD . +02CE . +02CF . +02D0 . +02D1 . +02E0 . +02E1 . +02E2 . +02E3 . +02E4 . +02EC . +02EE . +0371 0370 +0373 0372 +0374 . +0377 0376 +037A . +037B 03FD +037C 03FE +037D 03FF +03AC 0386 +03AD 0388 +03AE 0389 +03AF 038A +03CC 038C +03CD 038E +03CE 038F +0390 . +03B1 0391 +03B2 0392 +03B3 0393 +03B4 0394 +03B5 0395 +03B6 0396 +03B7 0397 +03B8 0398 +03B9 0399 +03BA 039A +03BB 039B +03BD 039D +03BE 039E +03BF 039F +03C0 03A0 +03C1 03A1 +03C3 03A3 +03C4 03A4 +03C5 03A5 +03C6 03A6 +03C7 03A7 +03C8 03A8 +03C9 03A9 +03CA 03AA +03CB 03AB +03B0 . +03D7 03CF +03D2 . +03D3 . +03D4 . +03D9 03D8 +03DB 03DA +03DD 03DC +03DF 03DE +03E1 03E0 +03E3 03E2 +03E5 03E4 +03E7 03E6 +03E9 03E8 +03EB 03EA +03ED 03EC +03EF 03EE +03F2 03F9 +03F3 . +03F8 03F7 +03FB 03FA +03FC . +0450 0400 +0451 0401 +0452 0402 +0453 0403 +0454 0404 +0455 0405 +0456 0406 +0457 0407 +0458 0408 +0459 0409 +045A 040A +045B 040B +045C 040C +045D 040D +045E 040E +045F 040F +0430 0410 +0431 0411 +0432 0412 +0433 0413 +0434 0414 +0435 0415 +0436 0416 +0437 0417 +0438 0418 +0439 0419 +043A 041A +043B 041B +043C 041C +043D 041D +043E 041E +043F 041F +0440 0420 +0441 0421 +0442 0422 +0443 0423 +0444 0424 +0445 0425 +0446 0426 +0447 0427 +0448 0428 +0449 0429 +044A 042A +044B 042B +044C 042C +044D 042D +044E 042E +044F 042F +0461 0460 +0463 0462 +0465 0464 +0467 0466 +0469 0468 +046B 046A +046D 046C +046F 046E +0471 0470 +0473 0472 +0475 0474 +0477 0476 +0479 0478 +047B 047A +047D 047C +047F 047E +0481 0480 +048B 048A +048D 048C +048F 048E +0491 0490 +0493 0492 +0495 0494 +0497 0496 +0499 0498 +049B 049A +049D 049C +049F 049E +04A1 04A0 +04A3 04A2 +04A5 04A4 +04A7 04A6 +04A9 04A8 +04AB 04AA +04AD 04AC +04AF 04AE +04B1 04B0 +04B3 04B2 +04B5 04B4 +04B7 04B6 +04B9 04B8 +04BB 04BA +04BD 04BC +04BF 04BE +04CF 04C0 +04C2 04C1 +04C4 04C3 +04C6 04C5 +04C8 04C7 +04CA 04C9 +04CC 04CB +04CE 04CD +04D1 04D0 +04D3 04D2 +04D5 04D4 +04D7 04D6 +04D9 04D8 +04DB 04DA +04DD 04DC +04DF 04DE +04E1 04E0 +04E3 04E2 +04E5 04E4 +04E7 04E6 +04E9 04E8 +04EB 04EA +04ED 04EC +04EF 04EE +04F1 04F0 +04F3 04F2 +04F5 04F4 +04F7 04F6 +04F9 04F8 +04FB 04FA +04FD 04FC +04FF 04FE +0501 0500 +0503 0502 +0505 0504 +0507 0506 +0509 0508 +050B 050A +050D 050C +050F 050E +0511 0510 +0513 0512 +0515 0514 +0517 0516 +0519 0518 +051B 051A +051D 051C +051F 051E +0521 0520 +0523 0522 +0525 0524 +0527 0526 +0561 0531 +0562 0532 +0563 0533 +0564 0534 +0565 0535 +0566 0536 +0567 0537 +0568 0538 +0569 0539 +056A 053A +056B 053B +056C 053C +056D 053D +056E 053E +056F 053F +0570 0540 +0571 0541 +0572 0542 +0573 0543 +0574 0544 +0575 0545 +0576 0546 +0577 0547 +0578 0548 +0579 0549 +057A 054A +057B 054B +057C 054C +057D 054D +057E 054E +057F 054F +0580 0550 +0581 0551 +0582 0552 +0583 0553 +0584 0554 +0585 0555 +0586 0556 +0559 . +0587 . +05D0 . +05D1 . +05D2 . +05D3 . +05D4 . +05D5 . +05D6 . +05D7 . +05D8 . +05D9 . +05DA . +05DB . +05DC . +05DD . +05DE . +05DF . +05E0 . +05E1 . +05E2 . +05E3 . +05E4 . +05E5 . +05E6 . +05E7 . +05E8 . +05E9 . +05EA . +05F0 . +05F1 . +05F2 . +0620 . +0621 . +0622 . +0623 . +0624 . +0625 . +0626 . +0627 . +0628 . +0629 . +062A . +062B . +062C . +062D . +062E . +062F . +0630 . +0631 . +0632 . +0633 . +0634 . +0635 . +0636 . +0637 . +0638 . +0639 . +063A . +063B . +063C . +063D . +063E . +063F . +0640 . +0641 . +0642 . +0643 . +0644 . +0645 . +0646 . +0647 . +0648 . +0649 . +064A . +066E . +066F . +0671 . +0672 . +0673 . +0674 . +0675 . +0676 . +0677 . +0678 . +0679 . +067A . +067B . +067C . +067D . +067E . +067F . +0680 . +0681 . +0682 . +0683 . +0684 . +0685 . +0686 . +0687 . +0688 . +0689 . +068A . +068B . +068C . +068D . +068E . +068F . +0690 . +0691 . +0692 . +0693 . +0694 . +0695 . +0696 . +0697 . +0698 . +0699 . +069A . +069B . +069C . +069D . +069E . +069F . +06A0 . +06A1 . +06A2 . +06A3 . +06A4 . +06A5 . +06A6 . +06A7 . +06A8 . +06A9 . +06AA . +06AB . +06AC . +06AD . +06AE . +06AF . +06B0 . +06B1 . +06B2 . +06B3 . +06B4 . +06B5 . +06B6 . +06B7 . +06B8 . +06B9 . +06BA . +06BB . +06BC . +06BD . +06BE . +06BF . +06C0 . +06C1 . +06C2 . +06C3 . +06C4 . +06C5 . +06C6 . +06C7 . +06C8 . +06C9 . +06CA . +06CB . +06CC . +06CD . +06CE . +06CF . +06D0 . +06D1 . +06D2 . +06D3 . +06D5 . +06E5 . +06E6 . +06EE . +06EF . +06FA . +06FB . +06FC . +06FF . +0710 . +0712 . +0713 . +0714 . +0715 . +0716 . +0717 . +0718 . +0719 . +071A . +071B . +071C . +071D . +071E . +071F . +0720 . +0721 . +0722 . +0723 . +0724 . +0725 . +0726 . +0727 . +0728 . +0729 . +072A . +072B . +072C . +072D . +072E . +072F . +074D . +074E . +074F . +0750 . +0751 . +0752 . +0753 . +0754 . +0755 . +0756 . +0757 . +0758 . +0759 . +075A . +075B . +075C . +075D . +075E . +075F . +0760 . +0761 . +0762 . +0763 . +0764 . +0765 . +0766 . +0767 . +0768 . +0769 . +076A . +076B . +076C . +076D . +076E . +076F . +0770 . +0771 . +0772 . +0773 . +0774 . +0775 . +0776 . +0777 . +0778 . +0779 . +077A . +077B . +077C . +077D . +077E . +077F . +0780 . +0781 . +0782 . +0783 . +0784 . +0785 . +0786 . +0787 . +0788 . +0789 . +078A . +078B . +078C . +078D . +078E . +078F . +0790 . +0791 . +0792 . +0793 . +0794 . +0795 . +0796 . +0797 . +0798 . +0799 . +079A . +079B . +079C . +079D . +079E . +079F . +07A0 . +07A1 . +07A2 . +07A3 . +07A4 . +07A5 . +07B1 . +07CA . +07CB . +07CC . +07CD . +07CE . +07CF . +07D0 . +07D1 . +07D2 . +07D3 . +07D4 . +07D5 . +07D6 . +07D7 . +07D8 . +07D9 . +07DA . +07DB . +07DC . +07DD . +07DE . +07DF . +07E0 . +07E1 . +07E2 . +07E3 . +07E4 . +07E5 . +07E6 . +07E7 . +07E8 . +07E9 . +07EA . +07F4 . +07F5 . +07FA . +0800 . +0801 . +0802 . +0803 . +0804 . +0805 . +0806 . +0807 . +0808 . +0809 . +080A . +080B . +080C . +080D . +080E . +080F . +0810 . +0811 . +0812 . +0813 . +0814 . +0815 . +081A . +0824 . +0828 . +0840 . +0841 . +0842 . +0843 . +0844 . +0845 . +0846 . +0847 . +0848 . +0849 . +084A . +084B . +084C . +084D . +084E . +084F . +0850 . +0851 . +0852 . +0853 . +0854 . +0855 . +0856 . +0857 . +0858 . +08A0 . +08A2 . +08A3 . +08A4 . +08A5 . +08A6 . +08A7 . +08A8 . +08A9 . +08AA . +08AB . +08AC . +0904 . +0905 . +0906 . +0907 . +0908 . +0909 . +090A . +090B . +090C . +090D . +090E . +090F . +0910 . +0911 . +0912 . +0913 . +0914 . +0915 . +0916 . +0917 . +0918 . +0919 . +091A . +091B . +091C . +091D . +091E . +091F . +0920 . +0921 . +0922 . +0923 . +0924 . +0925 . +0926 . +0927 . +0928 . +0929 . +092A . +092B . +092C . +092D . +092E . +092F . +0930 . +0931 . +0932 . +0933 . +0934 . +0935 . +0936 . +0937 . +0938 . +0939 . +093D . +0950 . +0958 . +0959 . +095A . +095B . +095C . +095D . +095E . +095F . +0960 . +0961 . +0971 . +0972 . +0973 . +0974 . +0975 . +0976 . +0977 . +0979 . +097A . +097B . +097C . +097D . +097E . +097F . +0985 . +0986 . +0987 . +0988 . +0989 . +098A . +098B . +098C . +098F . +0990 . +0993 . +0994 . +0995 . +0996 . +0997 . +0998 . +0999 . +099A . +099B . +099C . +099D . +099E . +099F . +09A0 . +09A1 . +09A2 . +09A3 . +09A4 . +09A5 . +09A6 . +09A7 . +09A8 . +09AA . +09AB . +09AC . +09AD . +09AE . +09AF . +09B0 . +09B2 . +09B6 . +09B7 . +09B8 . +09B9 . +09BD . +09CE . +09DC . +09DD . +09DF . +09E0 . +09E1 . +09F0 . +09F1 . +0A05 . +0A06 . +0A07 . +0A08 . +0A09 . +0A0A . +0A0F . +0A10 . +0A13 . +0A14 . +0A15 . +0A16 . +0A17 . +0A18 . +0A19 . +0A1A . +0A1B . +0A1C . +0A1D . +0A1E . +0A1F . +0A20 . +0A21 . +0A22 . +0A23 . +0A24 . +0A25 . +0A26 . +0A27 . +0A28 . +0A2A . +0A2B . +0A2C . +0A2D . +0A2E . +0A2F . +0A30 . +0A32 . +0A33 . +0A35 . +0A36 . +0A38 . +0A39 . +0A59 . +0A5A . +0A5B . +0A5C . +0A5E . +0A72 . +0A73 . +0A74 . +0A85 . +0A86 . +0A87 . +0A88 . +0A89 . +0A8A . +0A8B . +0A8C . +0A8D . +0A8F . +0A90 . +0A91 . +0A93 . +0A94 . +0A95 . +0A96 . +0A97 . +0A98 . +0A99 . +0A9A . +0A9B . +0A9C . +0A9D . +0A9E . +0A9F . +0AA0 . +0AA1 . +0AA2 . +0AA3 . +0AA4 . +0AA5 . +0AA6 . +0AA7 . +0AA8 . +0AAA . +0AAB . +0AAC . +0AAD . +0AAE . +0AAF . +0AB0 . +0AB2 . +0AB3 . +0AB5 . +0AB6 . +0AB7 . +0AB8 . +0AB9 . +0ABD . +0AD0 . +0AE0 . +0AE1 . +0B05 . +0B06 . +0B07 . +0B08 . +0B09 . +0B0A . +0B0B . +0B0C . +0B0F . +0B10 . +0B13 . +0B14 . +0B15 . +0B16 . +0B17 . +0B18 . +0B19 . +0B1A . +0B1B . +0B1C . +0B1D . +0B1E . +0B1F . +0B20 . +0B21 . +0B22 . +0B23 . +0B24 . +0B25 . +0B26 . +0B27 . +0B28 . +0B2A . +0B2B . +0B2C . +0B2D . +0B2E . +0B2F . +0B30 . +0B32 . +0B33 . +0B35 . +0B36 . +0B37 . +0B38 . +0B39 . +0B3D . +0B5C . +0B5D . +0B5F . +0B60 . +0B61 . +0B71 . +0B83 . +0B85 . +0B86 . +0B87 . +0B88 . +0B89 . +0B8A . +0B8E . +0B8F . +0B90 . +0B92 . +0B93 . +0B94 . +0B95 . +0B99 . +0B9A . +0B9C . +0B9E . +0B9F . +0BA3 . +0BA4 . +0BA8 . +0BA9 . +0BAA . +0BAE . +0BAF . +0BB0 . +0BB1 . +0BB2 . +0BB3 . +0BB4 . +0BB5 . +0BB6 . +0BB7 . +0BB8 . +0BB9 . +0BD0 . +0C05 . +0C06 . +0C07 . +0C08 . +0C09 . +0C0A . +0C0B . +0C0C . +0C0E . +0C0F . +0C10 . +0C12 . +0C13 . +0C14 . +0C15 . +0C16 . +0C17 . +0C18 . +0C19 . +0C1A . +0C1B . +0C1C . +0C1D . +0C1E . +0C1F . +0C20 . +0C21 . +0C22 . +0C23 . +0C24 . +0C25 . +0C26 . +0C27 . +0C28 . +0C2A . +0C2B . +0C2C . +0C2D . +0C2E . +0C2F . +0C30 . +0C31 . +0C32 . +0C33 . +0C35 . +0C36 . +0C37 . +0C38 . +0C39 . +0C3D . +0C58 . +0C59 . +0C60 . +0C61 . +0C85 . +0C86 . +0C87 . +0C88 . +0C89 . +0C8A . +0C8B . +0C8C . +0C8E . +0C8F . +0C90 . +0C92 . +0C93 . +0C94 . +0C95 . +0C96 . +0C97 . +0C98 . +0C99 . +0C9A . +0C9B . +0C9C . +0C9D . +0C9E . +0C9F . +0CA0 . +0CA1 . +0CA2 . +0CA3 . +0CA4 . +0CA5 . +0CA6 . +0CA7 . +0CA8 . +0CAA . +0CAB . +0CAC . +0CAD . +0CAE . +0CAF . +0CB0 . +0CB1 . +0CB2 . +0CB3 . +0CB5 . +0CB6 . +0CB7 . +0CB8 . +0CB9 . +0CBD . +0CDE . +0CE0 . +0CE1 . +0CF1 . +0CF2 . +0D05 . +0D06 . +0D07 . +0D08 . +0D09 . +0D0A . +0D0B . +0D0C . +0D0E . +0D0F . +0D10 . +0D12 . +0D13 . +0D14 . +0D15 . +0D16 . +0D17 . +0D18 . +0D19 . +0D1A . +0D1B . +0D1C . +0D1D . +0D1E . +0D1F . +0D20 . +0D21 . +0D22 . +0D23 . +0D24 . +0D25 . +0D26 . +0D27 . +0D28 . +0D29 . +0D2A . +0D2B . +0D2C . +0D2D . +0D2E . +0D2F . +0D30 . +0D31 . +0D32 . +0D33 . +0D34 . +0D35 . +0D36 . +0D37 . +0D38 . +0D39 . +0D3A . +0D3D . +0D4E . +0D60 . +0D61 . +0D7A . +0D7B . +0D7C . +0D7D . +0D7E . +0D7F . +0D85 . +0D86 . +0D87 . +0D88 . +0D89 . +0D8A . +0D8B . +0D8C . +0D8D . +0D8E . +0D8F . +0D90 . +0D91 . +0D92 . +0D93 . +0D94 . +0D95 . +0D96 . +0D9A . +0D9B . +0D9C . +0D9D . +0D9E . +0D9F . +0DA0 . +0DA1 . +0DA2 . +0DA3 . +0DA4 . +0DA5 . +0DA6 . +0DA7 . +0DA8 . +0DA9 . +0DAA . +0DAB . +0DAC . +0DAD . +0DAE . +0DAF . +0DB0 . +0DB1 . +0DB3 . +0DB4 . +0DB5 . +0DB6 . +0DB7 . +0DB8 . +0DB9 . +0DBA . +0DBB . +0DBD . +0DC0 . +0DC1 . +0DC2 . +0DC3 . +0DC4 . +0DC5 . +0DC6 . +0E01 . +0E02 . +0E03 . +0E04 . +0E05 . +0E06 . +0E07 . +0E08 . +0E09 . +0E0A . +0E0B . +0E0C . +0E0D . +0E0E . +0E0F . +0E10 . +0E11 . +0E12 . +0E13 . +0E14 . +0E15 . +0E16 . +0E17 . +0E18 . +0E19 . +0E1A . +0E1B . +0E1C . +0E1D . +0E1E . +0E1F . +0E20 . +0E21 . +0E22 . +0E23 . +0E24 . +0E25 . +0E26 . +0E27 . +0E28 . +0E29 . +0E2A . +0E2B . +0E2C . +0E2D . +0E2E . +0E2F . +0E30 . +0E32 . +0E33 . +0E40 . +0E41 . +0E42 . +0E43 . +0E44 . +0E45 . +0E46 . +0E81 . +0E82 . +0E84 . +0E87 . +0E88 . +0E8A . +0E8D . +0E94 . +0E95 . +0E96 . +0E97 . +0E99 . +0E9A . +0E9B . +0E9C . +0E9D . +0E9E . +0E9F . +0EA1 . +0EA2 . +0EA3 . +0EA5 . +0EA7 . +0EAA . +0EAB . +0EAD . +0EAE . +0EAF . +0EB0 . +0EB2 . +0EB3 . +0EBD . +0EC0 . +0EC1 . +0EC2 . +0EC3 . +0EC4 . +0EC6 . +0EDC . +0EDD . +0EDE . +0EDF . +0F00 . +0F40 . +0F41 . +0F42 . +0F43 . +0F44 . +0F45 . +0F46 . +0F47 . +0F49 . +0F4A . +0F4B . +0F4C . +0F4D . +0F4E . +0F4F . +0F50 . +0F51 . +0F52 . +0F53 . +0F54 . +0F55 . +0F56 . +0F57 . +0F58 . +0F59 . +0F5A . +0F5B . +0F5C . +0F5D . +0F5E . +0F5F . +0F60 . +0F61 . +0F62 . +0F63 . +0F64 . +0F65 . +0F66 . +0F67 . +0F68 . +0F69 . +0F6A . +0F6B . +0F6C . +0F88 . +0F89 . +0F8A . +0F8B . +0F8C . +1000 . +1001 . +1002 . +1003 . +1004 . +1005 . +1006 . +1007 . +1008 . +1009 . +100A . +100B . +100C . +100D . +100E . +100F . +1010 . +1011 . +1012 . +1013 . +1014 . +1015 . +1016 . +1017 . +1018 . +1019 . +101A . +101B . +101C . +101D . +101E . +101F . +1020 . +1021 . +1022 . +1023 . +1024 . +1025 . +1026 . +1027 . +1028 . +1029 . +102A . +103F . +1050 . +1051 . +1052 . +1053 . +1054 . +1055 . +105A . +105B . +105C . +105D . +1061 . +1065 . +1066 . +106E . +106F . +1070 . +1075 . +1076 . +1077 . +1078 . +1079 . +107A . +107B . +107C . +107D . +107E . +107F . +1080 . +1081 . +108E . +2D00 10A0 +2D01 10A1 +2D02 10A2 +2D03 10A3 +2D04 10A4 +2D05 10A5 +2D06 10A6 +2D07 10A7 +2D08 10A8 +2D09 10A9 +2D0A 10AA +2D0B 10AB +2D0C 10AC +2D0D 10AD +2D0E 10AE +2D0F 10AF +2D10 10B0 +2D11 10B1 +2D12 10B2 +2D13 10B3 +2D14 10B4 +2D15 10B5 +2D16 10B6 +2D17 10B7 +2D18 10B8 +2D19 10B9 +2D1A 10BA +2D1B 10BB +2D1C 10BC +2D1D 10BD +2D1E 10BE +2D1F 10BF +2D20 10C0 +2D21 10C1 +2D22 10C2 +2D23 10C3 +2D24 10C4 +2D25 10C5 +2D27 10C7 +2D2D 10CD +10D0 . +10D1 . +10D2 . +10D3 . +10D4 . +10D5 . +10D6 . +10D7 . +10D8 . +10D9 . +10DA . +10DB . +10DC . +10DD . +10DE . +10DF . +10E0 . +10E1 . +10E2 . +10E3 . +10E4 . +10E5 . +10E6 . +10E7 . +10E8 . +10E9 . +10EA . +10EB . +10EC . +10ED . +10EE . +10EF . +10F0 . +10F1 . +10F2 . +10F3 . +10F4 . +10F5 . +10F6 . +10F7 . +10F8 . +10F9 . +10FA . +10FC . +10FD . +10FE . +10FF . +1100 . +1101 . +1102 . +1103 . +1104 . +1105 . +1106 . +1107 . +1108 . +1109 . +110A . +110B . +110C . +110D . +110E . +110F . +1110 . +1111 . +1112 . +1113 . +1114 . +1115 . +1116 . +1117 . +1118 . +1119 . +111A . +111B . +111C . +111D . +111E . +111F . +1120 . +1121 . +1122 . +1123 . +1124 . +1125 . +1126 . +1127 . +1128 . +1129 . +112A . +112B . +112C . +112D . +112E . +112F . +1130 . +1131 . +1132 . +1133 . +1134 . +1135 . +1136 . +1137 . +1138 . +1139 . +113A . +113B . +113C . +113D . +113E . +113F . +1140 . +1141 . +1142 . +1143 . +1144 . +1145 . +1146 . +1147 . +1148 . +1149 . +114A . +114B . +114C . +114D . +114E . +114F . +1150 . +1151 . +1152 . +1153 . +1154 . +1155 . +1156 . +1157 . +1158 . +1159 . +115A . +115B . +115C . +115D . +115E . +115F . +1160 . +1161 . +1162 . +1163 . +1164 . +1165 . +1166 . +1167 . +1168 . +1169 . +116A . +116B . +116C . +116D . +116E . +116F . +1170 . +1171 . +1172 . +1173 . +1174 . +1175 . +1176 . +1177 . +1178 . +1179 . +117A . +117B . +117C . +117D . +117E . +117F . +1180 . +1181 . +1182 . +1183 . +1184 . +1185 . +1186 . +1187 . +1188 . +1189 . +118A . +118B . +118C . +118D . +118E . +118F . +1190 . +1191 . +1192 . +1193 . +1194 . +1195 . +1196 . +1197 . +1198 . +1199 . +119A . +119B . +119C . +119D . +119E . +119F . +11A0 . +11A1 . +11A2 . +11A3 . +11A4 . +11A5 . +11A6 . +11A7 . +11A8 . +11A9 . +11AA . +11AB . +11AC . +11AD . +11AE . +11AF . +11B0 . +11B1 . +11B2 . +11B3 . +11B4 . +11B5 . +11B6 . +11B7 . +11B8 . +11B9 . +11BA . +11BB . +11BC . +11BD . +11BE . +11BF . +11C0 . +11C1 . +11C2 . +11C3 . +11C4 . +11C5 . +11C6 . +11C7 . +11C8 . +11C9 . +11CA . +11CB . +11CC . +11CD . +11CE . +11CF . +11D0 . +11D1 . +11D2 . +11D3 . +11D4 . +11D5 . +11D6 . +11D7 . +11D8 . +11D9 . +11DA . +11DB . +11DC . +11DD . +11DE . +11DF . +11E0 . +11E1 . +11E2 . +11E3 . +11E4 . +11E5 . +11E6 . +11E7 . +11E8 . +11E9 . +11EA . +11EB . +11EC . +11ED . +11EE . +11EF . +11F0 . +11F1 . +11F2 . +11F3 . +11F4 . +11F5 . +11F6 . +11F7 . +11F8 . +11F9 . +11FA . +11FB . +11FC . +11FD . +11FE . +11FF . +1200 . +1201 . +1202 . +1203 . +1204 . +1205 . +1206 . +1207 . +1208 . +1209 . +120A . +120B . +120C . +120D . +120E . +120F . +1210 . +1211 . +1212 . +1213 . +1214 . +1215 . +1216 . +1217 . +1218 . +1219 . +121A . +121B . +121C . +121D . +121E . +121F . +1220 . +1221 . +1222 . +1223 . +1224 . +1225 . +1226 . +1227 . +1228 . +1229 . +122A . +122B . +122C . +122D . +122E . +122F . +1230 . +1231 . +1232 . +1233 . +1234 . +1235 . +1236 . +1237 . +1238 . +1239 . +123A . +123B . +123C . +123D . +123E . +123F . +1240 . +1241 . +1242 . +1243 . +1244 . +1245 . +1246 . +1247 . +1248 . +124A . +124B . +124C . +124D . +1250 . +1251 . +1252 . +1253 . +1254 . +1255 . +1256 . +1258 . +125A . +125B . +125C . +125D . +1260 . +1261 . +1262 . +1263 . +1264 . +1265 . +1266 . +1267 . +1268 . +1269 . +126A . +126B . +126C . +126D . +126E . +126F . +1270 . +1271 . +1272 . +1273 . +1274 . +1275 . +1276 . +1277 . +1278 . +1279 . +127A . +127B . +127C . +127D . +127E . +127F . +1280 . +1281 . +1282 . +1283 . +1284 . +1285 . +1286 . +1287 . +1288 . +128A . +128B . +128C . +128D . +1290 . +1291 . +1292 . +1293 . +1294 . +1295 . +1296 . +1297 . +1298 . +1299 . +129A . +129B . +129C . +129D . +129E . +129F . +12A0 . +12A1 . +12A2 . +12A3 . +12A4 . +12A5 . +12A6 . +12A7 . +12A8 . +12A9 . +12AA . +12AB . +12AC . +12AD . +12AE . +12AF . +12B0 . +12B2 . +12B3 . +12B4 . +12B5 . +12B8 . +12B9 . +12BA . +12BB . +12BC . +12BD . +12BE . +12C0 . +12C2 . +12C3 . +12C4 . +12C5 . +12C8 . +12C9 . +12CA . +12CB . +12CC . +12CD . +12CE . +12CF . +12D0 . +12D1 . +12D2 . +12D3 . +12D4 . +12D5 . +12D6 . +12D8 . +12D9 . +12DA . +12DB . +12DC . +12DD . +12DE . +12DF . +12E0 . +12E1 . +12E2 . +12E3 . +12E4 . +12E5 . +12E6 . +12E7 . +12E8 . +12E9 . +12EA . +12EB . +12EC . +12ED . +12EE . +12EF . +12F0 . +12F1 . +12F2 . +12F3 . +12F4 . +12F5 . +12F6 . +12F7 . +12F8 . +12F9 . +12FA . +12FB . +12FC . +12FD . +12FE . +12FF . +1300 . +1301 . +1302 . +1303 . +1304 . +1305 . +1306 . +1307 . +1308 . +1309 . +130A . +130B . +130C . +130D . +130E . +130F . +1310 . +1312 . +1313 . +1314 . +1315 . +1318 . +1319 . +131A . +131B . +131C . +131D . +131E . +131F . +1320 . +1321 . +1322 . +1323 . +1324 . +1325 . +1326 . +1327 . +1328 . +1329 . +132A . +132B . +132C . +132D . +132E . +132F . +1330 . +1331 . +1332 . +1333 . +1334 . +1335 . +1336 . +1337 . +1338 . +1339 . +133A . +133B . +133C . +133D . +133E . +133F . +1340 . +1341 . +1342 . +1343 . +1344 . +1345 . +1346 . +1347 . +1348 . +1349 . +134A . +134B . +134C . +134D . +134E . +134F . +1350 . +1351 . +1352 . +1353 . +1354 . +1355 . +1356 . +1357 . +1358 . +1359 . +135A . +1380 . +1381 . +1382 . +1383 . +1384 . +1385 . +1386 . +1387 . +1388 . +1389 . +138A . +138B . +138C . +138D . +138E . +138F . +13A0 . +13A1 . +13A2 . +13A3 . +13A4 . +13A5 . +13A6 . +13A7 . +13A8 . +13A9 . +13AA . +13AB . +13AC . +13AD . +13AE . +13AF . +13B0 . +13B1 . +13B2 . +13B3 . +13B4 . +13B5 . +13B6 . +13B7 . +13B8 . +13B9 . +13BA . +13BB . +13BC . +13BD . +13BE . +13BF . +13C0 . +13C1 . +13C2 . +13C3 . +13C4 . +13C5 . +13C6 . +13C7 . +13C8 . +13C9 . +13CA . +13CB . +13CC . +13CD . +13CE . +13CF . +13D0 . +13D1 . +13D2 . +13D3 . +13D4 . +13D5 . +13D6 . +13D7 . +13D8 . +13D9 . +13DA . +13DB . +13DC . +13DD . +13DE . +13DF . +13E0 . +13E1 . +13E2 . +13E3 . +13E4 . +13E5 . +13E6 . +13E7 . +13E8 . +13E9 . +13EA . +13EB . +13EC . +13ED . +13EE . +13EF . +13F0 . +13F1 . +13F2 . +13F3 . +13F4 . +1401 . +1402 . +1403 . +1404 . +1405 . +1406 . +1407 . +1408 . +1409 . +140A . +140B . +140C . +140D . +140E . +140F . +1410 . +1411 . +1412 . +1413 . +1414 . +1415 . +1416 . +1417 . +1418 . +1419 . +141A . +141B . +141C . +141D . +141E . +141F . +1420 . +1421 . +1422 . +1423 . +1424 . +1425 . +1426 . +1427 . +1428 . +1429 . +142A . +142B . +142C . +142D . +142E . +142F . +1430 . +1431 . +1432 . +1433 . +1434 . +1435 . +1436 . +1437 . +1438 . +1439 . +143A . +143B . +143C . +143D . +143E . +143F . +1440 . +1441 . +1442 . +1443 . +1444 . +1445 . +1446 . +1447 . +1448 . +1449 . +144A . +144B . +144C . +144D . +144E . +144F . +1450 . +1451 . +1452 . +1453 . +1454 . +1455 . +1456 . +1457 . +1458 . +1459 . +145A . +145B . +145C . +145D . +145E . +145F . +1460 . +1461 . +1462 . +1463 . +1464 . +1465 . +1466 . +1467 . +1468 . +1469 . +146A . +146B . +146C . +146D . +146E . +146F . +1470 . +1471 . +1472 . +1473 . +1474 . +1475 . +1476 . +1477 . +1478 . +1479 . +147A . +147B . +147C . +147D . +147E . +147F . +1480 . +1481 . +1482 . +1483 . +1484 . +1485 . +1486 . +1487 . +1488 . +1489 . +148A . +148B . +148C . +148D . +148E . +148F . +1490 . +1491 . +1492 . +1493 . +1494 . +1495 . +1496 . +1497 . +1498 . +1499 . +149A . +149B . +149C . +149D . +149E . +149F . +14A0 . +14A1 . +14A2 . +14A3 . +14A4 . +14A5 . +14A6 . +14A7 . +14A8 . +14A9 . +14AA . +14AB . +14AC . +14AD . +14AE . +14AF . +14B0 . +14B1 . +14B2 . +14B3 . +14B4 . +14B5 . +14B6 . +14B7 . +14B8 . +14B9 . +14BA . +14BB . +14BC . +14BD . +14BE . +14BF . +14C0 . +14C1 . +14C2 . +14C3 . +14C4 . +14C5 . +14C6 . +14C7 . +14C8 . +14C9 . +14CA . +14CB . +14CC . +14CD . +14CE . +14CF . +14D0 . +14D1 . +14D2 . +14D3 . +14D4 . +14D5 . +14D6 . +14D7 . +14D8 . +14D9 . +14DA . +14DB . +14DC . +14DD . +14DE . +14DF . +14E0 . +14E1 . +14E2 . +14E3 . +14E4 . +14E5 . +14E6 . +14E7 . +14E8 . +14E9 . +14EA . +14EB . +14EC . +14ED . +14EE . +14EF . +14F0 . +14F1 . +14F2 . +14F3 . +14F4 . +14F5 . +14F6 . +14F7 . +14F8 . +14F9 . +14FA . +14FB . +14FC . +14FD . +14FE . +14FF . +1500 . +1501 . +1502 . +1503 . +1504 . +1505 . +1506 . +1507 . +1508 . +1509 . +150A . +150B . +150C . +150D . +150E . +150F . +1510 . +1511 . +1512 . +1513 . +1514 . +1515 . +1516 . +1517 . +1518 . +1519 . +151A . +151B . +151C . +151D . +151E . +151F . +1520 . +1521 . +1522 . +1523 . +1524 . +1525 . +1526 . +1527 . +1528 . +1529 . +152A . +152B . +152C . +152D . +152E . +152F . +1530 . +1531 . +1532 . +1533 . +1534 . +1535 . +1536 . +1537 . +1538 . +1539 . +153A . +153B . +153C . +153D . +153E . +153F . +1540 . +1541 . +1542 . +1543 . +1544 . +1545 . +1546 . +1547 . +1548 . +1549 . +154A . +154B . +154C . +154D . +154E . +154F . +1550 . +1551 . +1552 . +1553 . +1554 . +1555 . +1556 . +1557 . +1558 . +1559 . +155A . +155B . +155C . +155D . +155E . +155F . +1560 . +1561 . +1562 . +1563 . +1564 . +1565 . +1566 . +1567 . +1568 . +1569 . +156A . +156B . +156C . +156D . +156E . +156F . +1570 . +1571 . +1572 . +1573 . +1574 . +1575 . +1576 . +1577 . +1578 . +1579 . +157A . +157B . +157C . +157D . +157E . +157F . +1580 . +1581 . +1582 . +1583 . +1584 . +1585 . +1586 . +1587 . +1588 . +1589 . +158A . +158B . +158C . +158D . +158E . +158F . +1590 . +1591 . +1592 . +1593 . +1594 . +1595 . +1596 . +1597 . +1598 . +1599 . +159A . +159B . +159C . +159D . +159E . +159F . +15A0 . +15A1 . +15A2 . +15A3 . +15A4 . +15A5 . +15A6 . +15A7 . +15A8 . +15A9 . +15AA . +15AB . +15AC . +15AD . +15AE . +15AF . +15B0 . +15B1 . +15B2 . +15B3 . +15B4 . +15B5 . +15B6 . +15B7 . +15B8 . +15B9 . +15BA . +15BB . +15BC . +15BD . +15BE . +15BF . +15C0 . +15C1 . +15C2 . +15C3 . +15C4 . +15C5 . +15C6 . +15C7 . +15C8 . +15C9 . +15CA . +15CB . +15CC . +15CD . +15CE . +15CF . +15D0 . +15D1 . +15D2 . +15D3 . +15D4 . +15D5 . +15D6 . +15D7 . +15D8 . +15D9 . +15DA . +15DB . +15DC . +15DD . +15DE . +15DF . +15E0 . +15E1 . +15E2 . +15E3 . +15E4 . +15E5 . +15E6 . +15E7 . +15E8 . +15E9 . +15EA . +15EB . +15EC . +15ED . +15EE . +15EF . +15F0 . +15F1 . +15F2 . +15F3 . +15F4 . +15F5 . +15F6 . +15F7 . +15F8 . +15F9 . +15FA . +15FB . +15FC . +15FD . +15FE . +15FF . +1600 . +1601 . +1602 . +1603 . +1604 . +1605 . +1606 . +1607 . +1608 . +1609 . +160A . +160B . +160C . +160D . +160E . +160F . +1610 . +1611 . +1612 . +1613 . +1614 . +1615 . +1616 . +1617 . +1618 . +1619 . +161A . +161B . +161C . +161D . +161E . +161F . +1620 . +1621 . +1622 . +1623 . +1624 . +1625 . +1626 . +1627 . +1628 . +1629 . +162A . +162B . +162C . +162D . +162E . +162F . +1630 . +1631 . +1632 . +1633 . +1634 . +1635 . +1636 . +1637 . +1638 . +1639 . +163A . +163B . +163C . +163D . +163E . +163F . +1640 . +1641 . +1642 . +1643 . +1644 . +1645 . +1646 . +1647 . +1648 . +1649 . +164A . +164B . +164C . +164D . +164E . +164F . +1650 . +1651 . +1652 . +1653 . +1654 . +1655 . +1656 . +1657 . +1658 . +1659 . +165A . +165B . +165C . +165D . +165E . +165F . +1660 . +1661 . +1662 . +1663 . +1664 . +1665 . +1666 . +1667 . +1668 . +1669 . +166A . +166B . +166C . +166F . +1670 . +1671 . +1672 . +1673 . +1674 . +1675 . +1676 . +1677 . +1678 . +1679 . +167A . +167B . +167C . +167D . +167E . +167F . +1681 . +1682 . +1683 . +1684 . +1685 . +1686 . +1687 . +1688 . +1689 . +168A . +168B . +168C . +168D . +168E . +168F . +1690 . +1691 . +1692 . +1693 . +1694 . +1695 . +1696 . +1697 . +1698 . +1699 . +169A . +16A0 . +16A1 . +16A2 . +16A3 . +16A4 . +16A5 . +16A6 . +16A7 . +16A8 . +16A9 . +16AA . +16AB . +16AC . +16AD . +16AE . +16AF . +16B0 . +16B1 . +16B2 . +16B3 . +16B4 . +16B5 . +16B6 . +16B7 . +16B8 . +16B9 . +16BA . +16BB . +16BC . +16BD . +16BE . +16BF . +16C0 . +16C1 . +16C2 . +16C3 . +16C4 . +16C5 . +16C6 . +16C7 . +16C8 . +16C9 . +16CA . +16CB . +16CC . +16CD . +16CE . +16CF . +16D0 . +16D1 . +16D2 . +16D3 . +16D4 . +16D5 . +16D6 . +16D7 . +16D8 . +16D9 . +16DA . +16DB . +16DC . +16DD . +16DE . +16DF . +16E0 . +16E1 . +16E2 . +16E3 . +16E4 . +16E5 . +16E6 . +16E7 . +16E8 . +16E9 . +16EA . +1700 . +1701 . +1702 . +1703 . +1704 . +1705 . +1706 . +1707 . +1708 . +1709 . +170A . +170B . +170C . +170E . +170F . +1710 . +1711 . +1720 . +1721 . +1722 . +1723 . +1724 . +1725 . +1726 . +1727 . +1728 . +1729 . +172A . +172B . +172C . +172D . +172E . +172F . +1730 . +1731 . +1740 . +1741 . +1742 . +1743 . +1744 . +1745 . +1746 . +1747 . +1748 . +1749 . +174A . +174B . +174C . +174D . +174E . +174F . +1750 . +1751 . +1760 . +1761 . +1762 . +1763 . +1764 . +1765 . +1766 . +1767 . +1768 . +1769 . +176A . +176B . +176C . +176E . +176F . +1770 . +1780 . +1781 . +1782 . +1783 . +1784 . +1785 . +1786 . +1787 . +1788 . +1789 . +178A . +178B . +178C . +178D . +178E . +178F . +1790 . +1791 . +1792 . +1793 . +1794 . +1795 . +1796 . +1797 . +1798 . +1799 . +179A . +179B . +179C . +179D . +179E . +179F . +17A0 . +17A1 . +17A2 . +17A3 . +17A4 . +17A5 . +17A6 . +17A7 . +17A8 . +17A9 . +17AA . +17AB . +17AC . +17AD . +17AE . +17AF . +17B0 . +17B1 . +17B2 . +17B3 . +17D7 . +17DC . +1820 . +1821 . +1822 . +1823 . +1824 . +1825 . +1826 . +1827 . +1828 . +1829 . +182A . +182B . +182C . +182D . +182E . +182F . +1830 . +1831 . +1832 . +1833 . +1834 . +1835 . +1836 . +1837 . +1838 . +1839 . +183A . +183B . +183C . +183D . +183E . +183F . +1840 . +1841 . +1842 . +1843 . +1844 . +1845 . +1846 . +1847 . +1848 . +1849 . +184A . +184B . +184C . +184D . +184E . +184F . +1850 . +1851 . +1852 . +1853 . +1854 . +1855 . +1856 . +1857 . +1858 . +1859 . +185A . +185B . +185C . +185D . +185E . +185F . +1860 . +1861 . +1862 . +1863 . +1864 . +1865 . +1866 . +1867 . +1868 . +1869 . +186A . +186B . +186C . +186D . +186E . +186F . +1870 . +1871 . +1872 . +1873 . +1874 . +1875 . +1876 . +1877 . +1880 . +1881 . +1882 . +1883 . +1884 . +1885 . +1886 . +1887 . +1888 . +1889 . +188A . +188B . +188C . +188D . +188E . +188F . +1890 . +1891 . +1892 . +1893 . +1894 . +1895 . +1896 . +1897 . +1898 . +1899 . +189A . +189B . +189C . +189D . +189E . +189F . +18A0 . +18A1 . +18A2 . +18A3 . +18A4 . +18A5 . +18A6 . +18A7 . +18A8 . +18AA . +18B0 . +18B1 . +18B2 . +18B3 . +18B4 . +18B5 . +18B6 . +18B7 . +18B8 . +18B9 . +18BA . +18BB . +18BC . +18BD . +18BE . +18BF . +18C0 . +18C1 . +18C2 . +18C3 . +18C4 . +18C5 . +18C6 . +18C7 . +18C8 . +18C9 . +18CA . +18CB . +18CC . +18CD . +18CE . +18CF . +18D0 . +18D1 . +18D2 . +18D3 . +18D4 . +18D5 . +18D6 . +18D7 . +18D8 . +18D9 . +18DA . +18DB . +18DC . +18DD . +18DE . +18DF . +18E0 . +18E1 . +18E2 . +18E3 . +18E4 . +18E5 . +18E6 . +18E7 . +18E8 . +18E9 . +18EA . +18EB . +18EC . +18ED . +18EE . +18EF . +18F0 . +18F1 . +18F2 . +18F3 . +18F4 . +18F5 . +1900 . +1901 . +1902 . +1903 . +1904 . +1905 . +1906 . +1907 . +1908 . +1909 . +190A . +190B . +190C . +190D . +190E . +190F . +1910 . +1911 . +1912 . +1913 . +1914 . +1915 . +1916 . +1917 . +1918 . +1919 . +191A . +191B . +191C . +1950 . +1951 . +1952 . +1953 . +1954 . +1955 . +1956 . +1957 . +1958 . +1959 . +195A . +195B . +195C . +195D . +195E . +195F . +1960 . +1961 . +1962 . +1963 . +1964 . +1965 . +1966 . +1967 . +1968 . +1969 . +196A . +196B . +196C . +196D . +1970 . +1971 . +1972 . +1973 . +1974 . +1980 . +1981 . +1982 . +1983 . +1984 . +1985 . +1986 . +1987 . +1988 . +1989 . +198A . +198B . +198C . +198D . +198E . +198F . +1990 . +1991 . +1992 . +1993 . +1994 . +1995 . +1996 . +1997 . +1998 . +1999 . +199A . +199B . +199C . +199D . +199E . +199F . +19A0 . +19A1 . +19A2 . +19A3 . +19A4 . +19A5 . +19A6 . +19A7 . +19A8 . +19A9 . +19AA . +19AB . +19C1 . +19C2 . +19C3 . +19C4 . +19C5 . +19C6 . +19C7 . +1A00 . +1A01 . +1A02 . +1A03 . +1A04 . +1A05 . +1A06 . +1A07 . +1A08 . +1A09 . +1A0A . +1A0B . +1A0C . +1A0D . +1A0E . +1A0F . +1A10 . +1A11 . +1A12 . +1A13 . +1A14 . +1A15 . +1A16 . +1A20 . +1A21 . +1A22 . +1A23 . +1A24 . +1A25 . +1A26 . +1A27 . +1A28 . +1A29 . +1A2A . +1A2B . +1A2C . +1A2D . +1A2E . +1A2F . +1A30 . +1A31 . +1A32 . +1A33 . +1A34 . +1A35 . +1A36 . +1A37 . +1A38 . +1A39 . +1A3A . +1A3B . +1A3C . +1A3D . +1A3E . +1A3F . +1A40 . +1A41 . +1A42 . +1A43 . +1A44 . +1A45 . +1A46 . +1A47 . +1A48 . +1A49 . +1A4A . +1A4B . +1A4C . +1A4D . +1A4E . +1A4F . +1A50 . +1A51 . +1A52 . +1A53 . +1A54 . +1AA7 . +1B05 . +1B06 . +1B07 . +1B08 . +1B09 . +1B0A . +1B0B . +1B0C . +1B0D . +1B0E . +1B0F . +1B10 . +1B11 . +1B12 . +1B13 . +1B14 . +1B15 . +1B16 . +1B17 . +1B18 . +1B19 . +1B1A . +1B1B . +1B1C . +1B1D . +1B1E . +1B1F . +1B20 . +1B21 . +1B22 . +1B23 . +1B24 . +1B25 . +1B26 . +1B27 . +1B28 . +1B29 . +1B2A . +1B2B . +1B2C . +1B2D . +1B2E . +1B2F . +1B30 . +1B31 . +1B32 . +1B33 . +1B45 . +1B46 . +1B47 . +1B48 . +1B49 . +1B4A . +1B4B . +1B83 . +1B84 . +1B85 . +1B86 . +1B87 . +1B88 . +1B89 . +1B8A . +1B8B . +1B8C . +1B8D . +1B8E . +1B8F . +1B90 . +1B91 . +1B92 . +1B93 . +1B94 . +1B95 . +1B96 . +1B97 . +1B98 . +1B99 . +1B9A . +1B9B . +1B9C . +1B9D . +1B9E . +1B9F . +1BA0 . +1BAE . +1BAF . +1BBA . +1BBB . +1BBC . +1BBD . +1BBE . +1BBF . +1BC0 . +1BC1 . +1BC2 . +1BC3 . +1BC4 . +1BC5 . +1BC6 . +1BC7 . +1BC8 . +1BC9 . +1BCA . +1BCB . +1BCC . +1BCD . +1BCE . +1BCF . +1BD0 . +1BD1 . +1BD2 . +1BD3 . +1BD4 . +1BD5 . +1BD6 . +1BD7 . +1BD8 . +1BD9 . +1BDA . +1BDB . +1BDC . +1BDD . +1BDE . +1BDF . +1BE0 . +1BE1 . +1BE2 . +1BE3 . +1BE4 . +1BE5 . +1C00 . +1C01 . +1C02 . +1C03 . +1C04 . +1C05 . +1C06 . +1C07 . +1C08 . +1C09 . +1C0A . +1C0B . +1C0C . +1C0D . +1C0E . +1C0F . +1C10 . +1C11 . +1C12 . +1C13 . +1C14 . +1C15 . +1C16 . +1C17 . +1C18 . +1C19 . +1C1A . +1C1B . +1C1C . +1C1D . +1C1E . +1C1F . +1C20 . +1C21 . +1C22 . +1C23 . +1C4D . +1C4E . +1C4F . +1C5A . +1C5B . +1C5C . +1C5D . +1C5E . +1C5F . +1C60 . +1C61 . +1C62 . +1C63 . +1C64 . +1C65 . +1C66 . +1C67 . +1C68 . +1C69 . +1C6A . +1C6B . +1C6C . +1C6D . +1C6E . +1C6F . +1C70 . +1C71 . +1C72 . +1C73 . +1C74 . +1C75 . +1C76 . +1C77 . +1C78 . +1C79 . +1C7A . +1C7B . +1C7C . +1C7D . +1CE9 . +1CEA . +1CEB . +1CEC . +1CEE . +1CEF . +1CF0 . +1CF1 . +1CF5 . +1CF6 . +1D00 . +1D01 . +1D02 . +1D03 . +1D04 . +1D05 . +1D06 . +1D07 . +1D08 . +1D09 . +1D0A . +1D0B . +1D0C . +1D0D . +1D0E . +1D0F . +1D10 . +1D11 . +1D12 . +1D13 . +1D14 . +1D15 . +1D16 . +1D17 . +1D18 . +1D19 . +1D1A . +1D1B . +1D1C . +1D1D . +1D1E . +1D1F . +1D20 . +1D21 . +1D22 . +1D23 . +1D24 . +1D25 . +1D26 . +1D27 . +1D28 . +1D29 . +1D2A . +1D2B . +1D2C . +1D2D . +1D2E . +1D2F . +1D30 . +1D31 . +1D32 . +1D33 . +1D34 . +1D35 . +1D36 . +1D37 . +1D38 . +1D39 . +1D3A . +1D3B . +1D3C . +1D3D . +1D3E . +1D3F . +1D40 . +1D41 . +1D42 . +1D43 . +1D44 . +1D45 . +1D46 . +1D47 . +1D48 . +1D49 . +1D4A . +1D4B . +1D4C . +1D4D . +1D4E . +1D4F . +1D50 . +1D51 . +1D52 . +1D53 . +1D54 . +1D55 . +1D56 . +1D57 . +1D58 . +1D59 . +1D5A . +1D5B . +1D5C . +1D5D . +1D5E . +1D5F . +1D60 . +1D61 . +1D62 . +1D63 . +1D64 . +1D65 . +1D66 . +1D67 . +1D68 . +1D69 . +1D6A . +1D6B . +1D6C . +1D6D . +1D6E . +1D6F . +1D70 . +1D71 . +1D72 . +1D73 . +1D74 . +1D75 . +1D76 . +1D77 . +1D78 . +1D79 A77D +1D7A . +1D7B . +1D7C . +1D7D 2C63 +1D7E . +1D7F . +1D80 . +1D81 . +1D82 . +1D83 . +1D84 . +1D85 . +1D86 . +1D87 . +1D88 . +1D89 . +1D8A . +1D8B . +1D8C . +1D8D . +1D8E . +1D8F . +1D90 . +1D91 . +1D92 . +1D93 . +1D94 . +1D95 . +1D96 . +1D97 . +1D98 . +1D99 . +1D9A . +1D9B . +1D9C . +1D9D . +1D9E . +1D9F . +1DA0 . +1DA1 . +1DA2 . +1DA3 . +1DA4 . +1DA5 . +1DA6 . +1DA7 . +1DA8 . +1DA9 . +1DAA . +1DAB . +1DAC . +1DAD . +1DAE . +1DAF . +1DB0 . +1DB1 . +1DB2 . +1DB3 . +1DB4 . +1DB5 . +1DB6 . +1DB7 . +1DB8 . +1DB9 . +1DBA . +1DBB . +1DBC . +1DBD . +1DBE . +1DBF . +1E01 1E00 +1E03 1E02 +1E05 1E04 +1E07 1E06 +1E09 1E08 +1E0B 1E0A +1E0D 1E0C +1E0F 1E0E +1E11 1E10 +1E13 1E12 +1E15 1E14 +1E17 1E16 +1E19 1E18 +1E1B 1E1A +1E1D 1E1C +1E1F 1E1E +1E21 1E20 +1E23 1E22 +1E25 1E24 +1E27 1E26 +1E29 1E28 +1E2B 1E2A +1E2D 1E2C +1E2F 1E2E +1E31 1E30 +1E33 1E32 +1E35 1E34 +1E37 1E36 +1E39 1E38 +1E3B 1E3A +1E3D 1E3C +1E3F 1E3E +1E41 1E40 +1E43 1E42 +1E45 1E44 +1E47 1E46 +1E49 1E48 +1E4B 1E4A +1E4D 1E4C +1E4F 1E4E +1E51 1E50 +1E53 1E52 +1E55 1E54 +1E57 1E56 +1E59 1E58 +1E5B 1E5A +1E5D 1E5C +1E5F 1E5E +1E61 1E60 +1E63 1E62 +1E65 1E64 +1E67 1E66 +1E69 1E68 +1E6B 1E6A +1E6D 1E6C +1E6F 1E6E +1E71 1E70 +1E73 1E72 +1E75 1E74 +1E77 1E76 +1E79 1E78 +1E7B 1E7A +1E7D 1E7C +1E7F 1E7E +1E81 1E80 +1E83 1E82 +1E85 1E84 +1E87 1E86 +1E89 1E88 +1E8B 1E8A +1E8D 1E8C +1E8F 1E8E +1E91 1E90 +1E93 1E92 +1E95 1E94 +1E96 . +1E97 . +1E98 . +1E99 . +1E9A . +1E9C . +1E9D . +1E9F . +1EA1 1EA0 +1EA3 1EA2 +1EA5 1EA4 +1EA7 1EA6 +1EA9 1EA8 +1EAB 1EAA +1EAD 1EAC +1EAF 1EAE +1EB1 1EB0 +1EB3 1EB2 +1EB5 1EB4 +1EB7 1EB6 +1EB9 1EB8 +1EBB 1EBA +1EBD 1EBC +1EBF 1EBE +1EC1 1EC0 +1EC3 1EC2 +1EC5 1EC4 +1EC7 1EC6 +1EC9 1EC8 +1ECB 1ECA +1ECD 1ECC +1ECF 1ECE +1ED1 1ED0 +1ED3 1ED2 +1ED5 1ED4 +1ED7 1ED6 +1ED9 1ED8 +1EDB 1EDA +1EDD 1EDC +1EDF 1EDE +1EE1 1EE0 +1EE3 1EE2 +1EE5 1EE4 +1EE7 1EE6 +1EE9 1EE8 +1EEB 1EEA +1EED 1EEC +1EEF 1EEE +1EF1 1EF0 +1EF3 1EF2 +1EF5 1EF4 +1EF7 1EF6 +1EF9 1EF8 +1EFB 1EFA +1EFD 1EFC +1EFF 1EFE +1F00 1F08 +1F01 1F09 +1F02 1F0A +1F03 1F0B +1F04 1F0C +1F05 1F0D +1F06 1F0E +1F07 1F0F +1F10 1F18 +1F11 1F19 +1F12 1F1A +1F13 1F1B +1F14 1F1C +1F15 1F1D +1F20 1F28 +1F21 1F29 +1F22 1F2A +1F23 1F2B +1F24 1F2C +1F25 1F2D +1F26 1F2E +1F27 1F2F +1F30 1F38 +1F31 1F39 +1F32 1F3A +1F33 1F3B +1F34 1F3C +1F35 1F3D +1F36 1F3E +1F37 1F3F +1F40 1F48 +1F41 1F49 +1F42 1F4A +1F43 1F4B +1F44 1F4C +1F45 1F4D +1F50 . +1F51 1F59 +1F52 . +1F53 1F5B +1F54 . +1F55 1F5D +1F56 . +1F57 1F5F +1F60 1F68 +1F61 1F69 +1F62 1F6A +1F63 1F6B +1F64 1F6C +1F65 1F6D +1F66 1F6E +1F67 1F6F +1F70 1FBA +1F71 1FBB +1F72 1FC8 +1F73 1FC9 +1F74 1FCA +1F75 1FCB +1F76 1FDA +1F77 1FDB +1F78 1FF8 +1F79 1FF9 +1F7A 1FEA +1F7B 1FEB +1F7C 1FFA +1F7D 1FFB +1F80 1F88 +1F81 1F89 +1F82 1F8A +1F83 1F8B +1F84 1F8C +1F85 1F8D +1F86 1F8E +1F87 1F8F +1F90 1F98 +1F91 1F99 +1F92 1F9A +1F93 1F9B +1F94 1F9C +1F95 1F9D +1F96 1F9E +1F97 1F9F +1FA0 1FA8 +1FA1 1FA9 +1FA2 1FAA +1FA3 1FAB +1FA4 1FAC +1FA5 1FAD +1FA6 1FAE +1FA7 1FAF +1FB0 1FB8 +1FB1 1FB9 +1FB2 . +1FB3 1FBC +1FB4 . +1FB6 . +1FB7 . +1FC2 . +1FC3 1FCC +1FC4 . +1FC6 . +1FC7 . +1FD0 1FD8 +1FD1 1FD9 +1FD2 . +1FD3 . +1FD6 . +1FD7 . +1FE0 1FE8 +1FE1 1FE9 +1FE2 . +1FE3 . +1FE4 . +1FE5 1FEC +1FE6 . +1FE7 . +1FF2 . +1FF3 1FFC +1FF4 . +1FF6 . +1FF7 . +2071 . +207F . +2090 . +2091 . +2092 . +2093 . +2094 . +2095 . +2096 . +2097 . +2098 . +2099 . +209A . +209B . +209C . +2102 . +2107 . +210A . +210B . +210C . +210D . +210E . +210F . +2110 . +2111 . +2112 . +2113 . +2115 . +2119 . +211A . +211B . +211C . +211D . +2124 . +2128 . +212C . +212D . +212F . +2130 . +2131 . +214E 2132 +2133 . +2134 . +2135 . +2136 . +2137 . +2138 . +2139 . +213C . +213D . +213E . +213F . +2145 . +2146 . +2147 . +2148 . +2149 . +2184 2183 +2C30 2C00 +2C31 2C01 +2C32 2C02 +2C33 2C03 +2C34 2C04 +2C35 2C05 +2C36 2C06 +2C37 2C07 +2C38 2C08 +2C39 2C09 +2C3A 2C0A +2C3B 2C0B +2C3C 2C0C +2C3D 2C0D +2C3E 2C0E +2C3F 2C0F +2C40 2C10 +2C41 2C11 +2C42 2C12 +2C43 2C13 +2C44 2C14 +2C45 2C15 +2C46 2C16 +2C47 2C17 +2C48 2C18 +2C49 2C19 +2C4A 2C1A +2C4B 2C1B +2C4C 2C1C +2C4D 2C1D +2C4E 2C1E +2C4F 2C1F +2C50 2C20 +2C51 2C21 +2C52 2C22 +2C53 2C23 +2C54 2C24 +2C55 2C25 +2C56 2C26 +2C57 2C27 +2C58 2C28 +2C59 2C29 +2C5A 2C2A +2C5B 2C2B +2C5C 2C2C +2C5D 2C2D +2C5E 2C2E +2C61 2C60 +2C68 2C67 +2C6A 2C69 +2C6C 2C6B +2C71 . +2C73 2C72 +2C74 . +2C76 2C75 +2C77 . +2C78 . +2C79 . +2C7A . +2C7B . +2C7C . +2C7D . +2C81 2C80 +2C83 2C82 +2C85 2C84 +2C87 2C86 +2C89 2C88 +2C8B 2C8A +2C8D 2C8C +2C8F 2C8E +2C91 2C90 +2C93 2C92 +2C95 2C94 +2C97 2C96 +2C99 2C98 +2C9B 2C9A +2C9D 2C9C +2C9F 2C9E +2CA1 2CA0 +2CA3 2CA2 +2CA5 2CA4 +2CA7 2CA6 +2CA9 2CA8 +2CAB 2CAA +2CAD 2CAC +2CAF 2CAE +2CB1 2CB0 +2CB3 2CB2 +2CB5 2CB4 +2CB7 2CB6 +2CB9 2CB8 +2CBB 2CBA +2CBD 2CBC +2CBF 2CBE +2CC1 2CC0 +2CC3 2CC2 +2CC5 2CC4 +2CC7 2CC6 +2CC9 2CC8 +2CCB 2CCA +2CCD 2CCC +2CCF 2CCE +2CD1 2CD0 +2CD3 2CD2 +2CD5 2CD4 +2CD7 2CD6 +2CD9 2CD8 +2CDB 2CDA +2CDD 2CDC +2CDF 2CDE +2CE1 2CE0 +2CE3 2CE2 +2CE4 . +2CEC 2CEB +2CEE 2CED +2CF3 2CF2 +2D30 . +2D31 . +2D32 . +2D33 . +2D34 . +2D35 . +2D36 . +2D37 . +2D38 . +2D39 . +2D3A . +2D3B . +2D3C . +2D3D . +2D3E . +2D3F . +2D40 . +2D41 . +2D42 . +2D43 . +2D44 . +2D45 . +2D46 . +2D47 . +2D48 . +2D49 . +2D4A . +2D4B . +2D4C . +2D4D . +2D4E . +2D4F . +2D50 . +2D51 . +2D52 . +2D53 . +2D54 . +2D55 . +2D56 . +2D57 . +2D58 . +2D59 . +2D5A . +2D5B . +2D5C . +2D5D . +2D5E . +2D5F . +2D60 . +2D61 . +2D62 . +2D63 . +2D64 . +2D65 . +2D66 . +2D67 . +2D6F . +2D80 . +2D81 . +2D82 . +2D83 . +2D84 . +2D85 . +2D86 . +2D87 . +2D88 . +2D89 . +2D8A . +2D8B . +2D8C . +2D8D . +2D8E . +2D8F . +2D90 . +2D91 . +2D92 . +2D93 . +2D94 . +2D95 . +2D96 . +2DA0 . +2DA1 . +2DA2 . +2DA3 . +2DA4 . +2DA5 . +2DA6 . +2DA8 . +2DA9 . +2DAA . +2DAB . +2DAC . +2DAD . +2DAE . +2DB0 . +2DB1 . +2DB2 . +2DB3 . +2DB4 . +2DB5 . +2DB6 . +2DB8 . +2DB9 . +2DBA . +2DBB . +2DBC . +2DBD . +2DBE . +2DC0 . +2DC1 . +2DC2 . +2DC3 . +2DC4 . +2DC5 . +2DC6 . +2DC8 . +2DC9 . +2DCA . +2DCB . +2DCC . +2DCD . +2DCE . +2DD0 . +2DD1 . +2DD2 . +2DD3 . +2DD4 . +2DD5 . +2DD6 . +2DD8 . +2DD9 . +2DDA . +2DDB . +2DDC . +2DDD . +2DDE . +2E2F . +3005 . +3006 . +3031 . +3032 . +3033 . +3034 . +3035 . +303B . +303C . +3041 . +3042 . +3043 . +3044 . +3045 . +3046 . +3047 . +3048 . +3049 . +304A . +304B . +304C . +304D . +304E . +304F . +3050 . +3051 . +3052 . +3053 . +3054 . +3055 . +3056 . +3057 . +3058 . +3059 . +305A . +305B . +305C . +305D . +305E . +305F . +3060 . +3061 . +3062 . +3063 . +3064 . +3065 . +3066 . +3067 . +3068 . +3069 . +306A . +306B . +306C . +306D . +306E . +306F . +3070 . +3071 . +3072 . +3073 . +3074 . +3075 . +3076 . +3077 . +3078 . +3079 . +307A . +307B . +307C . +307D . +307E . +307F . +3080 . +3081 . +3082 . +3083 . +3084 . +3085 . +3086 . +3087 . +3088 . +3089 . +308A . +308B . +308C . +308D . +308E . +308F . +3090 . +3091 . +3092 . +3093 . +3094 . +3095 . +3096 . +309D . +309E . +309F . +30A1 . +30A2 . +30A3 . +30A4 . +30A5 . +30A6 . +30A7 . +30A8 . +30A9 . +30AA . +30AB . +30AC . +30AD . +30AE . +30AF . +30B0 . +30B1 . +30B2 . +30B3 . +30B4 . +30B5 . +30B6 . +30B7 . +30B8 . +30B9 . +30BA . +30BB . +30BC . +30BD . +30BE . +30BF . +30C0 . +30C1 . +30C2 . +30C3 . +30C4 . +30C5 . +30C6 . +30C7 . +30C8 . +30C9 . +30CA . +30CB . +30CC . +30CD . +30CE . +30CF . +30D0 . +30D1 . +30D2 . +30D3 . +30D4 . +30D5 . +30D6 . +30D7 . +30D8 . +30D9 . +30DA . +30DB . +30DC . +30DD . +30DE . +30DF . +30E0 . +30E1 . +30E2 . +30E3 . +30E4 . +30E5 . +30E6 . +30E7 . +30E8 . +30E9 . +30EA . +30EB . +30EC . +30ED . +30EE . +30EF . +30F0 . +30F1 . +30F2 . +30F3 . +30F4 . +30F5 . +30F6 . +30F7 . +30F8 . +30F9 . +30FA . +30FC . +30FD . +30FE . +30FF . +3105 . +3106 . +3107 . +3108 . +3109 . +310A . +310B . +310C . +310D . +310E . +310F . +3110 . +3111 . +3112 . +3113 . +3114 . +3115 . +3116 . +3117 . +3118 . +3119 . +311A . +311B . +311C . +311D . +311E . +311F . +3120 . +3121 . +3122 . +3123 . +3124 . +3125 . +3126 . +3127 . +3128 . +3129 . +312A . +312B . +312C . +312D . +3131 . +3132 . +3133 . +3134 . +3135 . +3136 . +3137 . +3138 . +3139 . +313A . +313B . +313C . +313D . +313E . +313F . +3140 . +3141 . +3142 . +3143 . +3144 . +3145 . +3146 . +3147 . +3148 . +3149 . +314A . +314B . +314C . +314D . +314E . +314F . +3150 . +3151 . +3152 . +3153 . +3154 . +3155 . +3156 . +3157 . +3158 . +3159 . +315A . +315B . +315C . +315D . +315E . +315F . +3160 . +3161 . +3162 . +3163 . +3164 . +3165 . +3166 . +3167 . +3168 . +3169 . +316A . +316B . +316C . +316D . +316E . +316F . +3170 . +3171 . +3172 . +3173 . +3174 . +3175 . +3176 . +3177 . +3178 . +3179 . +317A . +317B . +317C . +317D . +317E . +317F . +3180 . +3181 . +3182 . +3183 . +3184 . +3185 . +3186 . +3187 . +3188 . +3189 . +318A . +318B . +318C . +318D . +318E . +31A0 . +31A1 . +31A2 . +31A3 . +31A4 . +31A5 . +31A6 . +31A7 . +31A8 . +31A9 . +31AA . +31AB . +31AC . +31AD . +31AE . +31AF . +31B0 . +31B1 . +31B2 . +31B3 . +31B4 . +31B5 . +31B6 . +31B7 . +31B8 . +31B9 . +31BA . +31F0 . +31F1 . +31F2 . +31F3 . +31F4 . +31F5 . +31F6 . +31F7 . +31F8 . +31F9 . +31FA . +31FB . +31FC . +31FD . +31FE . +31FF . +A000 . +A001 . +A002 . +A003 . +A004 . +A005 . +A006 . +A007 . +A008 . +A009 . +A00A . +A00B . +A00C . +A00D . +A00E . +A00F . +A010 . +A011 . +A012 . +A013 . +A014 . +A015 . +A016 . +A017 . +A018 . +A019 . +A01A . +A01B . +A01C . +A01D . +A01E . +A01F . +A020 . +A021 . +A022 . +A023 . +A024 . +A025 . +A026 . +A027 . +A028 . +A029 . +A02A . +A02B . +A02C . +A02D . +A02E . +A02F . +A030 . +A031 . +A032 . +A033 . +A034 . +A035 . +A036 . +A037 . +A038 . +A039 . +A03A . +A03B . +A03C . +A03D . +A03E . +A03F . +A040 . +A041 . +A042 . +A043 . +A044 . +A045 . +A046 . +A047 . +A048 . +A049 . +A04A . +A04B . +A04C . +A04D . +A04E . +A04F . +A050 . +A051 . +A052 . +A053 . +A054 . +A055 . +A056 . +A057 . +A058 . +A059 . +A05A . +A05B . +A05C . +A05D . +A05E . +A05F . +A060 . +A061 . +A062 . +A063 . +A064 . +A065 . +A066 . +A067 . +A068 . +A069 . +A06A . +A06B . +A06C . +A06D . +A06E . +A06F . +A070 . +A071 . +A072 . +A073 . +A074 . +A075 . +A076 . +A077 . +A078 . +A079 . +A07A . +A07B . +A07C . +A07D . +A07E . +A07F . +A080 . +A081 . +A082 . +A083 . +A084 . +A085 . +A086 . +A087 . +A088 . +A089 . +A08A . +A08B . +A08C . +A08D . +A08E . +A08F . +A090 . +A091 . +A092 . +A093 . +A094 . +A095 . +A096 . +A097 . +A098 . +A099 . +A09A . +A09B . +A09C . +A09D . +A09E . +A09F . +A0A0 . +A0A1 . +A0A2 . +A0A3 . +A0A4 . +A0A5 . +A0A6 . +A0A7 . +A0A8 . +A0A9 . +A0AA . +A0AB . +A0AC . +A0AD . +A0AE . +A0AF . +A0B0 . +A0B1 . +A0B2 . +A0B3 . +A0B4 . +A0B5 . +A0B6 . +A0B7 . +A0B8 . +A0B9 . +A0BA . +A0BB . +A0BC . +A0BD . +A0BE . +A0BF . +A0C0 . +A0C1 . +A0C2 . +A0C3 . +A0C4 . +A0C5 . +A0C6 . +A0C7 . +A0C8 . +A0C9 . +A0CA . +A0CB . +A0CC . +A0CD . +A0CE . +A0CF . +A0D0 . +A0D1 . +A0D2 . +A0D3 . +A0D4 . +A0D5 . +A0D6 . +A0D7 . +A0D8 . +A0D9 . +A0DA . +A0DB . +A0DC . +A0DD . +A0DE . +A0DF . +A0E0 . +A0E1 . +A0E2 . +A0E3 . +A0E4 . +A0E5 . +A0E6 . +A0E7 . +A0E8 . +A0E9 . +A0EA . +A0EB . +A0EC . +A0ED . +A0EE . +A0EF . +A0F0 . +A0F1 . +A0F2 . +A0F3 . +A0F4 . +A0F5 . +A0F6 . +A0F7 . +A0F8 . +A0F9 . +A0FA . +A0FB . +A0FC . +A0FD . +A0FE . +A0FF . +A100 . +A101 . +A102 . +A103 . +A104 . +A105 . +A106 . +A107 . +A108 . +A109 . +A10A . +A10B . +A10C . +A10D . +A10E . +A10F . +A110 . +A111 . +A112 . +A113 . +A114 . +A115 . +A116 . +A117 . +A118 . +A119 . +A11A . +A11B . +A11C . +A11D . +A11E . +A11F . +A120 . +A121 . +A122 . +A123 . +A124 . +A125 . +A126 . +A127 . +A128 . +A129 . +A12A . +A12B . +A12C . +A12D . +A12E . +A12F . +A130 . +A131 . +A132 . +A133 . +A134 . +A135 . +A136 . +A137 . +A138 . +A139 . +A13A . +A13B . +A13C . +A13D . +A13E . +A13F . +A140 . +A141 . +A142 . +A143 . +A144 . +A145 . +A146 . +A147 . +A148 . +A149 . +A14A . +A14B . +A14C . +A14D . +A14E . +A14F . +A150 . +A151 . +A152 . +A153 . +A154 . +A155 . +A156 . +A157 . +A158 . +A159 . +A15A . +A15B . +A15C . +A15D . +A15E . +A15F . +A160 . +A161 . +A162 . +A163 . +A164 . +A165 . +A166 . +A167 . +A168 . +A169 . +A16A . +A16B . +A16C . +A16D . +A16E . +A16F . +A170 . +A171 . +A172 . +A173 . +A174 . +A175 . +A176 . +A177 . +A178 . +A179 . +A17A . +A17B . +A17C . +A17D . +A17E . +A17F . +A180 . +A181 . +A182 . +A183 . +A184 . +A185 . +A186 . +A187 . +A188 . +A189 . +A18A . +A18B . +A18C . +A18D . +A18E . +A18F . +A190 . +A191 . +A192 . +A193 . +A194 . +A195 . +A196 . +A197 . +A198 . +A199 . +A19A . +A19B . +A19C . +A19D . +A19E . +A19F . +A1A0 . +A1A1 . +A1A2 . +A1A3 . +A1A4 . +A1A5 . +A1A6 . +A1A7 . +A1A8 . +A1A9 . +A1AA . +A1AB . +A1AC . +A1AD . +A1AE . +A1AF . +A1B0 . +A1B1 . +A1B2 . +A1B3 . +A1B4 . +A1B5 . +A1B6 . +A1B7 . +A1B8 . +A1B9 . +A1BA . +A1BB . +A1BC . +A1BD . +A1BE . +A1BF . +A1C0 . +A1C1 . +A1C2 . +A1C3 . +A1C4 . +A1C5 . +A1C6 . +A1C7 . +A1C8 . +A1C9 . +A1CA . +A1CB . +A1CC . +A1CD . +A1CE . +A1CF . +A1D0 . +A1D1 . +A1D2 . +A1D3 . +A1D4 . +A1D5 . +A1D6 . +A1D7 . +A1D8 . +A1D9 . +A1DA . +A1DB . +A1DC . +A1DD . +A1DE . +A1DF . +A1E0 . +A1E1 . +A1E2 . +A1E3 . +A1E4 . +A1E5 . +A1E6 . +A1E7 . +A1E8 . +A1E9 . +A1EA . +A1EB . +A1EC . +A1ED . +A1EE . +A1EF . +A1F0 . +A1F1 . +A1F2 . +A1F3 . +A1F4 . +A1F5 . +A1F6 . +A1F7 . +A1F8 . +A1F9 . +A1FA . +A1FB . +A1FC . +A1FD . +A1FE . +A1FF . +A200 . +A201 . +A202 . +A203 . +A204 . +A205 . +A206 . +A207 . +A208 . +A209 . +A20A . +A20B . +A20C . +A20D . +A20E . +A20F . +A210 . +A211 . +A212 . +A213 . +A214 . +A215 . +A216 . +A217 . +A218 . +A219 . +A21A . +A21B . +A21C . +A21D . +A21E . +A21F . +A220 . +A221 . +A222 . +A223 . +A224 . +A225 . +A226 . +A227 . +A228 . +A229 . +A22A . +A22B . +A22C . +A22D . +A22E . +A22F . +A230 . +A231 . +A232 . +A233 . +A234 . +A235 . +A236 . +A237 . +A238 . +A239 . +A23A . +A23B . +A23C . +A23D . +A23E . +A23F . +A240 . +A241 . +A242 . +A243 . +A244 . +A245 . +A246 . +A247 . +A248 . +A249 . +A24A . +A24B . +A24C . +A24D . +A24E . +A24F . +A250 . +A251 . +A252 . +A253 . +A254 . +A255 . +A256 . +A257 . +A258 . +A259 . +A25A . +A25B . +A25C . +A25D . +A25E . +A25F . +A260 . +A261 . +A262 . +A263 . +A264 . +A265 . +A266 . +A267 . +A268 . +A269 . +A26A . +A26B . +A26C . +A26D . +A26E . +A26F . +A270 . +A271 . +A272 . +A273 . +A274 . +A275 . +A276 . +A277 . +A278 . +A279 . +A27A . +A27B . +A27C . +A27D . +A27E . +A27F . +A280 . +A281 . +A282 . +A283 . +A284 . +A285 . +A286 . +A287 . +A288 . +A289 . +A28A . +A28B . +A28C . +A28D . +A28E . +A28F . +A290 . +A291 . +A292 . +A293 . +A294 . +A295 . +A296 . +A297 . +A298 . +A299 . +A29A . +A29B . +A29C . +A29D . +A29E . +A29F . +A2A0 . +A2A1 . +A2A2 . +A2A3 . +A2A4 . +A2A5 . +A2A6 . +A2A7 . +A2A8 . +A2A9 . +A2AA . +A2AB . +A2AC . +A2AD . +A2AE . +A2AF . +A2B0 . +A2B1 . +A2B2 . +A2B3 . +A2B4 . +A2B5 . +A2B6 . +A2B7 . +A2B8 . +A2B9 . +A2BA . +A2BB . +A2BC . +A2BD . +A2BE . +A2BF . +A2C0 . +A2C1 . +A2C2 . +A2C3 . +A2C4 . +A2C5 . +A2C6 . +A2C7 . +A2C8 . +A2C9 . +A2CA . +A2CB . +A2CC . +A2CD . +A2CE . +A2CF . +A2D0 . +A2D1 . +A2D2 . +A2D3 . +A2D4 . +A2D5 . +A2D6 . +A2D7 . +A2D8 . +A2D9 . +A2DA . +A2DB . +A2DC . +A2DD . +A2DE . +A2DF . +A2E0 . +A2E1 . +A2E2 . +A2E3 . +A2E4 . +A2E5 . +A2E6 . +A2E7 . +A2E8 . +A2E9 . +A2EA . +A2EB . +A2EC . +A2ED . +A2EE . +A2EF . +A2F0 . +A2F1 . +A2F2 . +A2F3 . +A2F4 . +A2F5 . +A2F6 . +A2F7 . +A2F8 . +A2F9 . +A2FA . +A2FB . +A2FC . +A2FD . +A2FE . +A2FF . +A300 . +A301 . +A302 . +A303 . +A304 . +A305 . +A306 . +A307 . +A308 . +A309 . +A30A . +A30B . +A30C . +A30D . +A30E . +A30F . +A310 . +A311 . +A312 . +A313 . +A314 . +A315 . +A316 . +A317 . +A318 . +A319 . +A31A . +A31B . +A31C . +A31D . +A31E . +A31F . +A320 . +A321 . +A322 . +A323 . +A324 . +A325 . +A326 . +A327 . +A328 . +A329 . +A32A . +A32B . +A32C . +A32D . +A32E . +A32F . +A330 . +A331 . +A332 . +A333 . +A334 . +A335 . +A336 . +A337 . +A338 . +A339 . +A33A . +A33B . +A33C . +A33D . +A33E . +A33F . +A340 . +A341 . +A342 . +A343 . +A344 . +A345 . +A346 . +A347 . +A348 . +A349 . +A34A . +A34B . +A34C . +A34D . +A34E . +A34F . +A350 . +A351 . +A352 . +A353 . +A354 . +A355 . +A356 . +A357 . +A358 . +A359 . +A35A . +A35B . +A35C . +A35D . +A35E . +A35F . +A360 . +A361 . +A362 . +A363 . +A364 . +A365 . +A366 . +A367 . +A368 . +A369 . +A36A . +A36B . +A36C . +A36D . +A36E . +A36F . +A370 . +A371 . +A372 . +A373 . +A374 . +A375 . +A376 . +A377 . +A378 . +A379 . +A37A . +A37B . +A37C . +A37D . +A37E . +A37F . +A380 . +A381 . +A382 . +A383 . +A384 . +A385 . +A386 . +A387 . +A388 . +A389 . +A38A . +A38B . +A38C . +A38D . +A38E . +A38F . +A390 . +A391 . +A392 . +A393 . +A394 . +A395 . +A396 . +A397 . +A398 . +A399 . +A39A . +A39B . +A39C . +A39D . +A39E . +A39F . +A3A0 . +A3A1 . +A3A2 . +A3A3 . +A3A4 . +A3A5 . +A3A6 . +A3A7 . +A3A8 . +A3A9 . +A3AA . +A3AB . +A3AC . +A3AD . +A3AE . +A3AF . +A3B0 . +A3B1 . +A3B2 . +A3B3 . +A3B4 . +A3B5 . +A3B6 . +A3B7 . +A3B8 . +A3B9 . +A3BA . +A3BB . +A3BC . +A3BD . +A3BE . +A3BF . +A3C0 . +A3C1 . +A3C2 . +A3C3 . +A3C4 . +A3C5 . +A3C6 . +A3C7 . +A3C8 . +A3C9 . +A3CA . +A3CB . +A3CC . +A3CD . +A3CE . +A3CF . +A3D0 . +A3D1 . +A3D2 . +A3D3 . +A3D4 . +A3D5 . +A3D6 . +A3D7 . +A3D8 . +A3D9 . +A3DA . +A3DB . +A3DC . +A3DD . +A3DE . +A3DF . +A3E0 . +A3E1 . +A3E2 . +A3E3 . +A3E4 . +A3E5 . +A3E6 . +A3E7 . +A3E8 . +A3E9 . +A3EA . +A3EB . +A3EC . +A3ED . +A3EE . +A3EF . +A3F0 . +A3F1 . +A3F2 . +A3F3 . +A3F4 . +A3F5 . +A3F6 . +A3F7 . +A3F8 . +A3F9 . +A3FA . +A3FB . +A3FC . +A3FD . +A3FE . +A3FF . +A400 . +A401 . +A402 . +A403 . +A404 . +A405 . +A406 . +A407 . +A408 . +A409 . +A40A . +A40B . +A40C . +A40D . +A40E . +A40F . +A410 . +A411 . +A412 . +A413 . +A414 . +A415 . +A416 . +A417 . +A418 . +A419 . +A41A . +A41B . +A41C . +A41D . +A41E . +A41F . +A420 . +A421 . +A422 . +A423 . +A424 . +A425 . +A426 . +A427 . +A428 . +A429 . +A42A . +A42B . +A42C . +A42D . +A42E . +A42F . +A430 . +A431 . +A432 . +A433 . +A434 . +A435 . +A436 . +A437 . +A438 . +A439 . +A43A . +A43B . +A43C . +A43D . +A43E . +A43F . +A440 . +A441 . +A442 . +A443 . +A444 . +A445 . +A446 . +A447 . +A448 . +A449 . +A44A . +A44B . +A44C . +A44D . +A44E . +A44F . +A450 . +A451 . +A452 . +A453 . +A454 . +A455 . +A456 . +A457 . +A458 . +A459 . +A45A . +A45B . +A45C . +A45D . +A45E . +A45F . +A460 . +A461 . +A462 . +A463 . +A464 . +A465 . +A466 . +A467 . +A468 . +A469 . +A46A . +A46B . +A46C . +A46D . +A46E . +A46F . +A470 . +A471 . +A472 . +A473 . +A474 . +A475 . +A476 . +A477 . +A478 . +A479 . +A47A . +A47B . +A47C . +A47D . +A47E . +A47F . +A480 . +A481 . +A482 . +A483 . +A484 . +A485 . +A486 . +A487 . +A488 . +A489 . +A48A . +A48B . +A48C . +A4D0 . +A4D1 . +A4D2 . +A4D3 . +A4D4 . +A4D5 . +A4D6 . +A4D7 . +A4D8 . +A4D9 . +A4DA . +A4DB . +A4DC . +A4DD . +A4DE . +A4DF . +A4E0 . +A4E1 . +A4E2 . +A4E3 . +A4E4 . +A4E5 . +A4E6 . +A4E7 . +A4E8 . +A4E9 . +A4EA . +A4EB . +A4EC . +A4ED . +A4EE . +A4EF . +A4F0 . +A4F1 . +A4F2 . +A4F3 . +A4F4 . +A4F5 . +A4F6 . +A4F7 . +A4F8 . +A4F9 . +A4FA . +A4FB . +A4FC . +A4FD . +A500 . +A501 . +A502 . +A503 . +A504 . +A505 . +A506 . +A507 . +A508 . +A509 . +A50A . +A50B . +A50C . +A50D . +A50E . +A50F . +A510 . +A511 . +A512 . +A513 . +A514 . +A515 . +A516 . +A517 . +A518 . +A519 . +A51A . +A51B . +A51C . +A51D . +A51E . +A51F . +A520 . +A521 . +A522 . +A523 . +A524 . +A525 . +A526 . +A527 . +A528 . +A529 . +A52A . +A52B . +A52C . +A52D . +A52E . +A52F . +A530 . +A531 . +A532 . +A533 . +A534 . +A535 . +A536 . +A537 . +A538 . +A539 . +A53A . +A53B . +A53C . +A53D . +A53E . +A53F . +A540 . +A541 . +A542 . +A543 . +A544 . +A545 . +A546 . +A547 . +A548 . +A549 . +A54A . +A54B . +A54C . +A54D . +A54E . +A54F . +A550 . +A551 . +A552 . +A553 . +A554 . +A555 . +A556 . +A557 . +A558 . +A559 . +A55A . +A55B . +A55C . +A55D . +A55E . +A55F . +A560 . +A561 . +A562 . +A563 . +A564 . +A565 . +A566 . +A567 . +A568 . +A569 . +A56A . +A56B . +A56C . +A56D . +A56E . +A56F . +A570 . +A571 . +A572 . +A573 . +A574 . +A575 . +A576 . +A577 . +A578 . +A579 . +A57A . +A57B . +A57C . +A57D . +A57E . +A57F . +A580 . +A581 . +A582 . +A583 . +A584 . +A585 . +A586 . +A587 . +A588 . +A589 . +A58A . +A58B . +A58C . +A58D . +A58E . +A58F . +A590 . +A591 . +A592 . +A593 . +A594 . +A595 . +A596 . +A597 . +A598 . +A599 . +A59A . +A59B . +A59C . +A59D . +A59E . +A59F . +A5A0 . +A5A1 . +A5A2 . +A5A3 . +A5A4 . +A5A5 . +A5A6 . +A5A7 . +A5A8 . +A5A9 . +A5AA . +A5AB . +A5AC . +A5AD . +A5AE . +A5AF . +A5B0 . +A5B1 . +A5B2 . +A5B3 . +A5B4 . +A5B5 . +A5B6 . +A5B7 . +A5B8 . +A5B9 . +A5BA . +A5BB . +A5BC . +A5BD . +A5BE . +A5BF . +A5C0 . +A5C1 . +A5C2 . +A5C3 . +A5C4 . +A5C5 . +A5C6 . +A5C7 . +A5C8 . +A5C9 . +A5CA . +A5CB . +A5CC . +A5CD . +A5CE . +A5CF . +A5D0 . +A5D1 . +A5D2 . +A5D3 . +A5D4 . +A5D5 . +A5D6 . +A5D7 . +A5D8 . +A5D9 . +A5DA . +A5DB . +A5DC . +A5DD . +A5DE . +A5DF . +A5E0 . +A5E1 . +A5E2 . +A5E3 . +A5E4 . +A5E5 . +A5E6 . +A5E7 . +A5E8 . +A5E9 . +A5EA . +A5EB . +A5EC . +A5ED . +A5EE . +A5EF . +A5F0 . +A5F1 . +A5F2 . +A5F3 . +A5F4 . +A5F5 . +A5F6 . +A5F7 . +A5F8 . +A5F9 . +A5FA . +A5FB . +A5FC . +A5FD . +A5FE . +A5FF . +A600 . +A601 . +A602 . +A603 . +A604 . +A605 . +A606 . +A607 . +A608 . +A609 . +A60A . +A60B . +A60C . +A610 . +A611 . +A612 . +A613 . +A614 . +A615 . +A616 . +A617 . +A618 . +A619 . +A61A . +A61B . +A61C . +A61D . +A61E . +A61F . +A62A . +A62B . +A641 A640 +A643 A642 +A645 A644 +A647 A646 +A649 A648 +A64B A64A +A64D A64C +A64F A64E +A651 A650 +A653 A652 +A655 A654 +A657 A656 +A659 A658 +A65B A65A +A65D A65C +A65F A65E +A661 A660 +A663 A662 +A665 A664 +A667 A666 +A669 A668 +A66B A66A +A66D A66C +A66E . +A67F . +A681 A680 +A683 A682 +A685 A684 +A687 A686 +A689 A688 +A68B A68A +A68D A68C +A68F A68E +A691 A690 +A693 A692 +A695 A694 +A697 A696 +A6A0 . +A6A1 . +A6A2 . +A6A3 . +A6A4 . +A6A5 . +A6A6 . +A6A7 . +A6A8 . +A6A9 . +A6AA . +A6AB . +A6AC . +A6AD . +A6AE . +A6AF . +A6B0 . +A6B1 . +A6B2 . +A6B3 . +A6B4 . +A6B5 . +A6B6 . +A6B7 . +A6B8 . +A6B9 . +A6BA . +A6BB . +A6BC . +A6BD . +A6BE . +A6BF . +A6C0 . +A6C1 . +A6C2 . +A6C3 . +A6C4 . +A6C5 . +A6C6 . +A6C7 . +A6C8 . +A6C9 . +A6CA . +A6CB . +A6CC . +A6CD . +A6CE . +A6CF . +A6D0 . +A6D1 . +A6D2 . +A6D3 . +A6D4 . +A6D5 . +A6D6 . +A6D7 . +A6D8 . +A6D9 . +A6DA . +A6DB . +A6DC . +A6DD . +A6DE . +A6DF . +A6E0 . +A6E1 . +A6E2 . +A6E3 . +A6E4 . +A6E5 . +A717 . +A718 . +A719 . +A71A . +A71B . +A71C . +A71D . +A71E . +A71F . +A723 A722 +A725 A724 +A727 A726 +A729 A728 +A72B A72A +A72D A72C +A72F A72E +A730 . +A731 . +A733 A732 +A735 A734 +A737 A736 +A739 A738 +A73B A73A +A73D A73C +A73F A73E +A741 A740 +A743 A742 +A745 A744 +A747 A746 +A749 A748 +A74B A74A +A74D A74C +A74F A74E +A751 A750 +A753 A752 +A755 A754 +A757 A756 +A759 A758 +A75B A75A +A75D A75C +A75F A75E +A761 A760 +A763 A762 +A765 A764 +A767 A766 +A769 A768 +A76B A76A +A76D A76C +A76F A76E +A770 . +A771 . +A772 . +A773 . +A774 . +A775 . +A776 . +A777 . +A778 . +A77A A779 +A77C A77B +A77F A77E +A781 A780 +A783 A782 +A785 A784 +A787 A786 +A788 . +A78C A78B +A78E . +A791 A790 +A793 A792 +A7A1 A7A0 +A7A3 A7A2 +A7A5 A7A4 +A7A7 A7A6 +A7A9 A7A8 +A7F8 . +A7F9 . +A7FA . +A7FB . +A7FC . +A7FD . +A7FE . +A7FF . +A800 . +A801 . +A803 . +A804 . +A805 . +A807 . +A808 . +A809 . +A80A . +A80C . +A80D . +A80E . +A80F . +A810 . +A811 . +A812 . +A813 . +A814 . +A815 . +A816 . +A817 . +A818 . +A819 . +A81A . +A81B . +A81C . +A81D . +A81E . +A81F . +A820 . +A821 . +A822 . +A840 . +A841 . +A842 . +A843 . +A844 . +A845 . +A846 . +A847 . +A848 . +A849 . +A84A . +A84B . +A84C . +A84D . +A84E . +A84F . +A850 . +A851 . +A852 . +A853 . +A854 . +A855 . +A856 . +A857 . +A858 . +A859 . +A85A . +A85B . +A85C . +A85D . +A85E . +A85F . +A860 . +A861 . +A862 . +A863 . +A864 . +A865 . +A866 . +A867 . +A868 . +A869 . +A86A . +A86B . +A86C . +A86D . +A86E . +A86F . +A870 . +A871 . +A872 . +A873 . +A882 . +A883 . +A884 . +A885 . +A886 . +A887 . +A888 . +A889 . +A88A . +A88B . +A88C . +A88D . +A88E . +A88F . +A890 . +A891 . +A892 . +A893 . +A894 . +A895 . +A896 . +A897 . +A898 . +A899 . +A89A . +A89B . +A89C . +A89D . +A89E . +A89F . +A8A0 . +A8A1 . +A8A2 . +A8A3 . +A8A4 . +A8A5 . +A8A6 . +A8A7 . +A8A8 . +A8A9 . +A8AA . +A8AB . +A8AC . +A8AD . +A8AE . +A8AF . +A8B0 . +A8B1 . +A8B2 . +A8B3 . +A8F2 . +A8F3 . +A8F4 . +A8F5 . +A8F6 . +A8F7 . +A8FB . +A90A . +A90B . +A90C . +A90D . +A90E . +A90F . +A910 . +A911 . +A912 . +A913 . +A914 . +A915 . +A916 . +A917 . +A918 . +A919 . +A91A . +A91B . +A91C . +A91D . +A91E . +A91F . +A920 . +A921 . +A922 . +A923 . +A924 . +A925 . +A930 . +A931 . +A932 . +A933 . +A934 . +A935 . +A936 . +A937 . +A938 . +A939 . +A93A . +A93B . +A93C . +A93D . +A93E . +A93F . +A940 . +A941 . +A942 . +A943 . +A944 . +A945 . +A946 . +A960 . +A961 . +A962 . +A963 . +A964 . +A965 . +A966 . +A967 . +A968 . +A969 . +A96A . +A96B . +A96C . +A96D . +A96E . +A96F . +A970 . +A971 . +A972 . +A973 . +A974 . +A975 . +A976 . +A977 . +A978 . +A979 . +A97A . +A97B . +A97C . +A984 . +A985 . +A986 . +A987 . +A988 . +A989 . +A98A . +A98B . +A98C . +A98D . +A98E . +A98F . +A990 . +A991 . +A992 . +A993 . +A994 . +A995 . +A996 . +A997 . +A998 . +A999 . +A99A . +A99B . +A99C . +A99D . +A99E . +A99F . +A9A0 . +A9A1 . +A9A2 . +A9A3 . +A9A4 . +A9A5 . +A9A6 . +A9A7 . +A9A8 . +A9A9 . +A9AA . +A9AB . +A9AC . +A9AD . +A9AE . +A9AF . +A9B0 . +A9B1 . +A9B2 . +A9CF . +AA00 . +AA01 . +AA02 . +AA03 . +AA04 . +AA05 . +AA06 . +AA07 . +AA08 . +AA09 . +AA0A . +AA0B . +AA0C . +AA0D . +AA0E . +AA0F . +AA10 . +AA11 . +AA12 . +AA13 . +AA14 . +AA15 . +AA16 . +AA17 . +AA18 . +AA19 . +AA1A . +AA1B . +AA1C . +AA1D . +AA1E . +AA1F . +AA20 . +AA21 . +AA22 . +AA23 . +AA24 . +AA25 . +AA26 . +AA27 . +AA28 . +AA40 . +AA41 . +AA42 . +AA44 . +AA45 . +AA46 . +AA47 . +AA48 . +AA49 . +AA4A . +AA4B . +AA60 . +AA61 . +AA62 . +AA63 . +AA64 . +AA65 . +AA66 . +AA67 . +AA68 . +AA69 . +AA6A . +AA6B . +AA6C . +AA6D . +AA6E . +AA6F . +AA70 . +AA71 . +AA72 . +AA73 . +AA74 . +AA75 . +AA76 . +AA7A . +AA80 . +AA81 . +AA82 . +AA83 . +AA84 . +AA85 . +AA86 . +AA87 . +AA88 . +AA89 . +AA8A . +AA8B . +AA8C . +AA8D . +AA8E . +AA8F . +AA90 . +AA91 . +AA92 . +AA93 . +AA94 . +AA95 . +AA96 . +AA97 . +AA98 . +AA99 . +AA9A . +AA9B . +AA9C . +AA9D . +AA9E . +AA9F . +AAA0 . +AAA1 . +AAA2 . +AAA3 . +AAA4 . +AAA5 . +AAA6 . +AAA7 . +AAA8 . +AAA9 . +AAAA . +AAAB . +AAAC . +AAAD . +AAAE . +AAAF . +AAB1 . +AAB5 . +AAB6 . +AAB9 . +AABA . +AABB . +AABC . +AABD . +AAC0 . +AAC2 . +AADB . +AADC . +AADD . +AAE0 . +AAE1 . +AAE2 . +AAE3 . +AAE4 . +AAE5 . +AAE6 . +AAE7 . +AAE8 . +AAE9 . +AAEA . +AAF2 . +AAF3 . +AAF4 . +AB01 . +AB02 . +AB03 . +AB04 . +AB05 . +AB06 . +AB09 . +AB0A . +AB0B . +AB0C . +AB0D . +AB0E . +AB11 . +AB12 . +AB13 . +AB14 . +AB15 . +AB16 . +AB20 . +AB21 . +AB22 . +AB23 . +AB24 . +AB25 . +AB26 . +AB28 . +AB29 . +AB2A . +AB2B . +AB2C . +AB2D . +AB2E . +ABC0 . +ABC1 . +ABC2 . +ABC3 . +ABC4 . +ABC5 . +ABC6 . +ABC7 . +ABC8 . +ABC9 . +ABCA . +ABCB . +ABCC . +ABCD . +ABCE . +ABCF . +ABD0 . +ABD1 . +ABD2 . +ABD3 . +ABD4 . +ABD5 . +ABD6 . +ABD7 . +ABD8 . +ABD9 . +ABDA . +ABDB . +ABDC . +ABDD . +ABDE . +ABDF . +ABE0 . +ABE1 . +ABE2 . +D7B0 . +D7B1 . +D7B2 . +D7B3 . +D7B4 . +D7B5 . +D7B6 . +D7B7 . +D7B8 . +D7B9 . +D7BA . +D7BB . +D7BC . +D7BD . +D7BE . +D7BF . +D7C0 . +D7C1 . +D7C2 . +D7C3 . +D7C4 . +D7C5 . +D7C6 . +D7CB . +D7CC . +D7CD . +D7CE . +D7CF . +D7D0 . +D7D1 . +D7D2 . +D7D3 . +D7D4 . +D7D5 . +D7D6 . +D7D7 . +D7D8 . +D7D9 . +D7DA . +D7DB . +D7DC . +D7DD . +D7DE . +D7DF . +D7E0 . +D7E1 . +D7E2 . +D7E3 . +D7E4 . +D7E5 . +D7E6 . +D7E7 . +D7E8 . +D7E9 . +D7EA . +D7EB . +D7EC . +D7ED . +D7EE . +D7EF . +D7F0 . +D7F1 . +D7F2 . +D7F3 . +D7F4 . +D7F5 . +D7F6 . +D7F7 . +D7F8 . +D7F9 . +D7FA . +D7FB . +F900 . +F901 . +F902 . +F903 . +F904 . +F905 . +F906 . +F907 . +F908 . +F909 . +F90A . +F90B . +F90C . +F90D . +F90E . +F90F . +F910 . +F911 . +F912 . +F913 . +F914 . +F915 . +F916 . +F917 . +F918 . +F919 . +F91A . +F91B . +F91C . +F91D . +F91E . +F91F . +F920 . +F921 . +F922 . +F923 . +F924 . +F925 . +F926 . +F927 . +F928 . +F929 . +F92A . +F92B . +F92C . +F92D . +F92E . +F92F . +F930 . +F931 . +F932 . +F933 . +F934 . +F935 . +F936 . +F937 . +F938 . +F939 . +F93A . +F93B . +F93C . +F93D . +F93E . +F93F . +F940 . +F941 . +F942 . +F943 . +F944 . +F945 . +F946 . +F947 . +F948 . +F949 . +F94A . +F94B . +F94C . +F94D . +F94E . +F94F . +F950 . +F951 . +F952 . +F953 . +F954 . +F955 . +F956 . +F957 . +F958 . +F959 . +F95A . +F95B . +F95C . +F95D . +F95E . +F95F . +F960 . +F961 . +F962 . +F963 . +F964 . +F965 . +F966 . +F967 . +F968 . +F969 . +F96A . +F96B . +F96C . +F96D . +F96E . +F96F . +F970 . +F971 . +F972 . +F973 . +F974 . +F975 . +F976 . +F977 . +F978 . +F979 . +F97A . +F97B . +F97C . +F97D . +F97E . +F97F . +F980 . +F981 . +F982 . +F983 . +F984 . +F985 . +F986 . +F987 . +F988 . +F989 . +F98A . +F98B . +F98C . +F98D . +F98E . +F98F . +F990 . +F991 . +F992 . +F993 . +F994 . +F995 . +F996 . +F997 . +F998 . +F999 . +F99A . +F99B . +F99C . +F99D . +F99E . +F99F . +F9A0 . +F9A1 . +F9A2 . +F9A3 . +F9A4 . +F9A5 . +F9A6 . +F9A7 . +F9A8 . +F9A9 . +F9AA . +F9AB . +F9AC . +F9AD . +F9AE . +F9AF . +F9B0 . +F9B1 . +F9B2 . +F9B3 . +F9B4 . +F9B5 . +F9B6 . +F9B7 . +F9B8 . +F9B9 . +F9BA . +F9BB . +F9BC . +F9BD . +F9BE . +F9BF . +F9C0 . +F9C1 . +F9C2 . +F9C3 . +F9C4 . +F9C5 . +F9C6 . +F9C7 . +F9C8 . +F9C9 . +F9CA . +F9CB . +F9CC . +F9CD . +F9CE . +F9CF . +F9D0 . +F9D1 . +F9D2 . +F9D3 . +F9D4 . +F9D5 . +F9D6 . +F9D7 . +F9D8 . +F9D9 . +F9DA . +F9DB . +F9DC . +F9DD . +F9DE . +F9DF . +F9E0 . +F9E1 . +F9E2 . +F9E3 . +F9E4 . +F9E5 . +F9E6 . +F9E7 . +F9E8 . +F9E9 . +F9EA . +F9EB . +F9EC . +F9ED . +F9EE . +F9EF . +F9F0 . +F9F1 . +F9F2 . +F9F3 . +F9F4 . +F9F5 . +F9F6 . +F9F7 . +F9F8 . +F9F9 . +F9FA . +F9FB . +F9FC . +F9FD . +F9FE . +F9FF . +FA00 . +FA01 . +FA02 . +FA03 . +FA04 . +FA05 . +FA06 . +FA07 . +FA08 . +FA09 . +FA0A . +FA0B . +FA0C . +FA0D . +FA0E . +FA0F . +FA10 . +FA11 . +FA12 . +FA13 . +FA14 . +FA15 . +FA16 . +FA17 . +FA18 . +FA19 . +FA1A . +FA1B . +FA1C . +FA1D . +FA1E . +FA1F . +FA20 . +FA21 . +FA22 . +FA23 . +FA24 . +FA25 . +FA26 . +FA27 . +FA28 . +FA29 . +FA2A . +FA2B . +FA2C . +FA2D . +FA2E . +FA2F . +FA30 . +FA31 . +FA32 . +FA33 . +FA34 . +FA35 . +FA36 . +FA37 . +FA38 . +FA39 . +FA3A . +FA3B . +FA3C . +FA3D . +FA3E . +FA3F . +FA40 . +FA41 . +FA42 . +FA43 . +FA44 . +FA45 . +FA46 . +FA47 . +FA48 . +FA49 . +FA4A . +FA4B . +FA4C . +FA4D . +FA4E . +FA4F . +FA50 . +FA51 . +FA52 . +FA53 . +FA54 . +FA55 . +FA56 . +FA57 . +FA58 . +FA59 . +FA5A . +FA5B . +FA5C . +FA5D . +FA5E . +FA5F . +FA60 . +FA61 . +FA62 . +FA63 . +FA64 . +FA65 . +FA66 . +FA67 . +FA68 . +FA69 . +FA6A . +FA6B . +FA6C . +FA6D . +FA70 . +FA71 . +FA72 . +FA73 . +FA74 . +FA75 . +FA76 . +FA77 . +FA78 . +FA79 . +FA7A . +FA7B . +FA7C . +FA7D . +FA7E . +FA7F . +FA80 . +FA81 . +FA82 . +FA83 . +FA84 . +FA85 . +FA86 . +FA87 . +FA88 . +FA89 . +FA8A . +FA8B . +FA8C . +FA8D . +FA8E . +FA8F . +FA90 . +FA91 . +FA92 . +FA93 . +FA94 . +FA95 . +FA96 . +FA97 . +FA98 . +FA99 . +FA9A . +FA9B . +FA9C . +FA9D . +FA9E . +FA9F . +FAA0 . +FAA1 . +FAA2 . +FAA3 . +FAA4 . +FAA5 . +FAA6 . +FAA7 . +FAA8 . +FAA9 . +FAAA . +FAAB . +FAAC . +FAAD . +FAAE . +FAAF . +FAB0 . +FAB1 . +FAB2 . +FAB3 . +FAB4 . +FAB5 . +FAB6 . +FAB7 . +FAB8 . +FAB9 . +FABA . +FABB . +FABC . +FABD . +FABE . +FABF . +FAC0 . +FAC1 . +FAC2 . +FAC3 . +FAC4 . +FAC5 . +FAC6 . +FAC7 . +FAC8 . +FAC9 . +FACA . +FACB . +FACC . +FACD . +FACE . +FACF . +FAD0 . +FAD1 . +FAD2 . +FAD3 . +FAD4 . +FAD5 . +FAD6 . +FAD7 . +FAD8 . +FAD9 . +FB00 . +FB01 . +FB02 . +FB03 . +FB04 . +FB05 . +FB06 . +FB13 . +FB14 . +FB15 . +FB16 . +FB17 . +FB1D . +FB1F . +FB20 . +FB21 . +FB22 . +FB23 . +FB24 . +FB25 . +FB26 . +FB27 . +FB28 . +FB2A . +FB2B . +FB2C . +FB2D . +FB2E . +FB2F . +FB30 . +FB31 . +FB32 . +FB33 . +FB34 . +FB35 . +FB36 . +FB38 . +FB39 . +FB3A . +FB3B . +FB3C . +FB3E . +FB40 . +FB41 . +FB43 . +FB44 . +FB46 . +FB47 . +FB48 . +FB49 . +FB4A . +FB4B . +FB4C . +FB4D . +FB4E . +FB4F . +FB50 . +FB51 . +FB52 . +FB53 . +FB54 . +FB55 . +FB56 . +FB57 . +FB58 . +FB59 . +FB5A . +FB5B . +FB5C . +FB5D . +FB5E . +FB5F . +FB60 . +FB61 . +FB62 . +FB63 . +FB64 . +FB65 . +FB66 . +FB67 . +FB68 . +FB69 . +FB6A . +FB6B . +FB6C . +FB6D . +FB6E . +FB6F . +FB70 . +FB71 . +FB72 . +FB73 . +FB74 . +FB75 . +FB76 . +FB77 . +FB78 . +FB79 . +FB7A . +FB7B . +FB7C . +FB7D . +FB7E . +FB7F . +FB80 . +FB81 . +FB82 . +FB83 . +FB84 . +FB85 . +FB86 . +FB87 . +FB88 . +FB89 . +FB8A . +FB8B . +FB8C . +FB8D . +FB8E . +FB8F . +FB90 . +FB91 . +FB92 . +FB93 . +FB94 . +FB95 . +FB96 . +FB97 . +FB98 . +FB99 . +FB9A . +FB9B . +FB9C . +FB9D . +FB9E . +FB9F . +FBA0 . +FBA1 . +FBA2 . +FBA3 . +FBA4 . +FBA5 . +FBA6 . +FBA7 . +FBA8 . +FBA9 . +FBAA . +FBAB . +FBAC . +FBAD . +FBAE . +FBAF . +FBB0 . +FBB1 . +FBD3 . +FBD4 . +FBD5 . +FBD6 . +FBD7 . +FBD8 . +FBD9 . +FBDA . +FBDB . +FBDC . +FBDD . +FBDE . +FBDF . +FBE0 . +FBE1 . +FBE2 . +FBE3 . +FBE4 . +FBE5 . +FBE6 . +FBE7 . +FBE8 . +FBE9 . +FBEA . +FBEB . +FBEC . +FBED . +FBEE . +FBEF . +FBF0 . +FBF1 . +FBF2 . +FBF3 . +FBF4 . +FBF5 . +FBF6 . +FBF7 . +FBF8 . +FBF9 . +FBFA . +FBFB . +FBFC . +FBFD . +FBFE . +FBFF . +FC00 . +FC01 . +FC02 . +FC03 . +FC04 . +FC05 . +FC06 . +FC07 . +FC08 . +FC09 . +FC0A . +FC0B . +FC0C . +FC0D . +FC0E . +FC0F . +FC10 . +FC11 . +FC12 . +FC13 . +FC14 . +FC15 . +FC16 . +FC17 . +FC18 . +FC19 . +FC1A . +FC1B . +FC1C . +FC1D . +FC1E . +FC1F . +FC20 . +FC21 . +FC22 . +FC23 . +FC24 . +FC25 . +FC26 . +FC27 . +FC28 . +FC29 . +FC2A . +FC2B . +FC2C . +FC2D . +FC2E . +FC2F . +FC30 . +FC31 . +FC32 . +FC33 . +FC34 . +FC35 . +FC36 . +FC37 . +FC38 . +FC39 . +FC3A . +FC3B . +FC3C . +FC3D . +FC3E . +FC3F . +FC40 . +FC41 . +FC42 . +FC43 . +FC44 . +FC45 . +FC46 . +FC47 . +FC48 . +FC49 . +FC4A . +FC4B . +FC4C . +FC4D . +FC4E . +FC4F . +FC50 . +FC51 . +FC52 . +FC53 . +FC54 . +FC55 . +FC56 . +FC57 . +FC58 . +FC59 . +FC5A . +FC5B . +FC5C . +FC5D . +FC5E . +FC5F . +FC60 . +FC61 . +FC62 . +FC63 . +FC64 . +FC65 . +FC66 . +FC67 . +FC68 . +FC69 . +FC6A . +FC6B . +FC6C . +FC6D . +FC6E . +FC6F . +FC70 . +FC71 . +FC72 . +FC73 . +FC74 . +FC75 . +FC76 . +FC77 . +FC78 . +FC79 . +FC7A . +FC7B . +FC7C . +FC7D . +FC7E . +FC7F . +FC80 . +FC81 . +FC82 . +FC83 . +FC84 . +FC85 . +FC86 . +FC87 . +FC88 . +FC89 . +FC8A . +FC8B . +FC8C . +FC8D . +FC8E . +FC8F . +FC90 . +FC91 . +FC92 . +FC93 . +FC94 . +FC95 . +FC96 . +FC97 . +FC98 . +FC99 . +FC9A . +FC9B . +FC9C . +FC9D . +FC9E . +FC9F . +FCA0 . +FCA1 . +FCA2 . +FCA3 . +FCA4 . +FCA5 . +FCA6 . +FCA7 . +FCA8 . +FCA9 . +FCAA . +FCAB . +FCAC . +FCAD . +FCAE . +FCAF . +FCB0 . +FCB1 . +FCB2 . +FCB3 . +FCB4 . +FCB5 . +FCB6 . +FCB7 . +FCB8 . +FCB9 . +FCBA . +FCBB . +FCBC . +FCBD . +FCBE . +FCBF . +FCC0 . +FCC1 . +FCC2 . +FCC3 . +FCC4 . +FCC5 . +FCC6 . +FCC7 . +FCC8 . +FCC9 . +FCCA . +FCCB . +FCCC . +FCCD . +FCCE . +FCCF . +FCD0 . +FCD1 . +FCD2 . +FCD3 . +FCD4 . +FCD5 . +FCD6 . +FCD7 . +FCD8 . +FCD9 . +FCDA . +FCDB . +FCDC . +FCDD . +FCDE . +FCDF . +FCE0 . +FCE1 . +FCE2 . +FCE3 . +FCE4 . +FCE5 . +FCE6 . +FCE7 . +FCE8 . +FCE9 . +FCEA . +FCEB . +FCEC . +FCED . +FCEE . +FCEF . +FCF0 . +FCF1 . +FCF2 . +FCF3 . +FCF4 . +FCF5 . +FCF6 . +FCF7 . +FCF8 . +FCF9 . +FCFA . +FCFB . +FCFC . +FCFD . +FCFE . +FCFF . +FD00 . +FD01 . +FD02 . +FD03 . +FD04 . +FD05 . +FD06 . +FD07 . +FD08 . +FD09 . +FD0A . +FD0B . +FD0C . +FD0D . +FD0E . +FD0F . +FD10 . +FD11 . +FD12 . +FD13 . +FD14 . +FD15 . +FD16 . +FD17 . +FD18 . +FD19 . +FD1A . +FD1B . +FD1C . +FD1D . +FD1E . +FD1F . +FD20 . +FD21 . +FD22 . +FD23 . +FD24 . +FD25 . +FD26 . +FD27 . +FD28 . +FD29 . +FD2A . +FD2B . +FD2C . +FD2D . +FD2E . +FD2F . +FD30 . +FD31 . +FD32 . +FD33 . +FD34 . +FD35 . +FD36 . +FD37 . +FD38 . +FD39 . +FD3A . +FD3B . +FD3C . +FD3D . +FD50 . +FD51 . +FD52 . +FD53 . +FD54 . +FD55 . +FD56 . +FD57 . +FD58 . +FD59 . +FD5A . +FD5B . +FD5C . +FD5D . +FD5E . +FD5F . +FD60 . +FD61 . +FD62 . +FD63 . +FD64 . +FD65 . +FD66 . +FD67 . +FD68 . +FD69 . +FD6A . +FD6B . +FD6C . +FD6D . +FD6E . +FD6F . +FD70 . +FD71 . +FD72 . +FD73 . +FD74 . +FD75 . +FD76 . +FD77 . +FD78 . +FD79 . +FD7A . +FD7B . +FD7C . +FD7D . +FD7E . +FD7F . +FD80 . +FD81 . +FD82 . +FD83 . +FD84 . +FD85 . +FD86 . +FD87 . +FD88 . +FD89 . +FD8A . +FD8B . +FD8C . +FD8D . +FD8E . +FD8F . +FD92 . +FD93 . +FD94 . +FD95 . +FD96 . +FD97 . +FD98 . +FD99 . +FD9A . +FD9B . +FD9C . +FD9D . +FD9E . +FD9F . +FDA0 . +FDA1 . +FDA2 . +FDA3 . +FDA4 . +FDA5 . +FDA6 . +FDA7 . +FDA8 . +FDA9 . +FDAA . +FDAB . +FDAC . +FDAD . +FDAE . +FDAF . +FDB0 . +FDB1 . +FDB2 . +FDB3 . +FDB4 . +FDB5 . +FDB6 . +FDB7 . +FDB8 . +FDB9 . +FDBA . +FDBB . +FDBC . +FDBD . +FDBE . +FDBF . +FDC0 . +FDC1 . +FDC2 . +FDC3 . +FDC4 . +FDC5 . +FDC6 . +FDC7 . +FDF0 . +FDF1 . +FDF2 . +FDF3 . +FDF4 . +FDF5 . +FDF6 . +FDF7 . +FDF8 . +FDF9 . +FDFA . +FDFB . +FE70 . +FE71 . +FE72 . +FE73 . +FE74 . +FE76 . +FE77 . +FE78 . +FE79 . +FE7A . +FE7B . +FE7C . +FE7D . +FE7E . +FE7F . +FE80 . +FE81 . +FE82 . +FE83 . +FE84 . +FE85 . +FE86 . +FE87 . +FE88 . +FE89 . +FE8A . +FE8B . +FE8C . +FE8D . +FE8E . +FE8F . +FE90 . +FE91 . +FE92 . +FE93 . +FE94 . +FE95 . +FE96 . +FE97 . +FE98 . +FE99 . +FE9A . +FE9B . +FE9C . +FE9D . +FE9E . +FE9F . +FEA0 . +FEA1 . +FEA2 . +FEA3 . +FEA4 . +FEA5 . +FEA6 . +FEA7 . +FEA8 . +FEA9 . +FEAA . +FEAB . +FEAC . +FEAD . +FEAE . +FEAF . +FEB0 . +FEB1 . +FEB2 . +FEB3 . +FEB4 . +FEB5 . +FEB6 . +FEB7 . +FEB8 . +FEB9 . +FEBA . +FEBB . +FEBC . +FEBD . +FEBE . +FEBF . +FEC0 . +FEC1 . +FEC2 . +FEC3 . +FEC4 . +FEC5 . +FEC6 . +FEC7 . +FEC8 . +FEC9 . +FECA . +FECB . +FECC . +FECD . +FECE . +FECF . +FED0 . +FED1 . +FED2 . +FED3 . +FED4 . +FED5 . +FED6 . +FED7 . +FED8 . +FED9 . +FEDA . +FEDB . +FEDC . +FEDD . +FEDE . +FEDF . +FEE0 . +FEE1 . +FEE2 . +FEE3 . +FEE4 . +FEE5 . +FEE6 . +FEE7 . +FEE8 . +FEE9 . +FEEA . +FEEB . +FEEC . +FEED . +FEEE . +FEEF . +FEF0 . +FEF1 . +FEF2 . +FEF3 . +FEF4 . +FEF5 . +FEF6 . +FEF7 . +FEF8 . +FEF9 . +FEFA . +FEFB . +FEFC . +FF41 FF21 +FF42 FF22 +FF43 FF23 +FF44 FF24 +FF45 FF25 +FF46 FF26 +FF47 FF27 +FF48 FF28 +FF49 FF29 +FF4A FF2A +FF4B FF2B +FF4C FF2C +FF4D FF2D +FF4E FF2E +FF4F FF2F +FF50 FF30 +FF51 FF31 +FF52 FF32 +FF53 FF33 +FF54 FF34 +FF55 FF35 +FF56 FF36 +FF57 FF37 +FF58 FF38 +FF59 FF39 +FF5A FF3A +FF66 . +FF67 . +FF68 . +FF69 . +FF6A . +FF6B . +FF6C . +FF6D . +FF6E . +FF6F . +FF70 . +FF71 . +FF72 . +FF73 . +FF74 . +FF75 . +FF76 . +FF77 . +FF78 . +FF79 . +FF7A . +FF7B . +FF7C . +FF7D . +FF7E . +FF7F . +FF80 . +FF81 . +FF82 . +FF83 . +FF84 . +FF85 . +FF86 . +FF87 . +FF88 . +FF89 . +FF8A . +FF8B . +FF8C . +FF8D . +FF8E . +FF8F . +FF90 . +FF91 . +FF92 . +FF93 . +FF94 . +FF95 . +FF96 . +FF97 . +FF98 . +FF99 . +FF9A . +FF9B . +FF9C . +FF9D . +FF9E . +FF9F . +FFA0 . +FFA1 . +FFA2 . +FFA3 . +FFA4 . +FFA5 . +FFA6 . +FFA7 . +FFA8 . +FFA9 . +FFAA . +FFAB . +FFAC . +FFAD . +FFAE . +FFAF . +FFB0 . +FFB1 . +FFB2 . +FFB3 . +FFB4 . +FFB5 . +FFB6 . +FFB7 . +FFB8 . +FFB9 . +FFBA . +FFBB . +FFBC . +FFBD . +FFBE . +FFC2 . +FFC3 . +FFC4 . +FFC5 . +FFC6 . +FFC7 . +FFCA . +FFCB . +FFCC . +FFCD . +FFCE . +FFCF . +FFD2 . +FFD3 . +FFD4 . +FFD5 . +FFD6 . +FFD7 . +FFDA . +FFDB . +FFDC . +10000 . +10001 . +10002 . +10003 . +10004 . +10005 . +10006 . +10007 . +10008 . +10009 . +1000A . +1000B . +1000D . +1000E . +1000F . +10010 . +10011 . +10012 . +10013 . +10014 . +10015 . +10016 . +10017 . +10018 . +10019 . +1001A . +1001B . +1001C . +1001D . +1001E . +1001F . +10020 . +10021 . +10022 . +10023 . +10024 . +10025 . +10026 . +10028 . +10029 . +1002A . +1002B . +1002C . +1002D . +1002E . +1002F . +10030 . +10031 . +10032 . +10033 . +10034 . +10035 . +10036 . +10037 . +10038 . +10039 . +1003A . +1003C . +1003D . +1003F . +10040 . +10041 . +10042 . +10043 . +10044 . +10045 . +10046 . +10047 . +10048 . +10049 . +1004A . +1004B . +1004C . +1004D . +10050 . +10051 . +10052 . +10053 . +10054 . +10055 . +10056 . +10057 . +10058 . +10059 . +1005A . +1005B . +1005C . +1005D . +10080 . +10081 . +10082 . +10083 . +10084 . +10085 . +10086 . +10087 . +10088 . +10089 . +1008A . +1008B . +1008C . +1008D . +1008E . +1008F . +10090 . +10091 . +10092 . +10093 . +10094 . +10095 . +10096 . +10097 . +10098 . +10099 . +1009A . +1009B . +1009C . +1009D . +1009E . +1009F . +100A0 . +100A1 . +100A2 . +100A3 . +100A4 . +100A5 . +100A6 . +100A7 . +100A8 . +100A9 . +100AA . +100AB . +100AC . +100AD . +100AE . +100AF . +100B0 . +100B1 . +100B2 . +100B3 . +100B4 . +100B5 . +100B6 . +100B7 . +100B8 . +100B9 . +100BA . +100BB . +100BC . +100BD . +100BE . +100BF . +100C0 . +100C1 . +100C2 . +100C3 . +100C4 . +100C5 . +100C6 . +100C7 . +100C8 . +100C9 . +100CA . +100CB . +100CC . +100CD . +100CE . +100CF . +100D0 . +100D1 . +100D2 . +100D3 . +100D4 . +100D5 . +100D6 . +100D7 . +100D8 . +100D9 . +100DA . +100DB . +100DC . +100DD . +100DE . +100DF . +100E0 . +100E1 . +100E2 . +100E3 . +100E4 . +100E5 . +100E6 . +100E7 . +100E8 . +100E9 . +100EA . +100EB . +100EC . +100ED . +100EE . +100EF . +100F0 . +100F1 . +100F2 . +100F3 . +100F4 . +100F5 . +100F6 . +100F7 . +100F8 . +100F9 . +100FA . +10280 . +10281 . +10282 . +10283 . +10284 . +10285 . +10286 . +10287 . +10288 . +10289 . +1028A . +1028B . +1028C . +1028D . +1028E . +1028F . +10290 . +10291 . +10292 . +10293 . +10294 . +10295 . +10296 . +10297 . +10298 . +10299 . +1029A . +1029B . +1029C . +102A0 . +102A1 . +102A2 . +102A3 . +102A4 . +102A5 . +102A6 . +102A7 . +102A8 . +102A9 . +102AA . +102AB . +102AC . +102AD . +102AE . +102AF . +102B0 . +102B1 . +102B2 . +102B3 . +102B4 . +102B5 . +102B6 . +102B7 . +102B8 . +102B9 . +102BA . +102BB . +102BC . +102BD . +102BE . +102BF . +102C0 . +102C1 . +102C2 . +102C3 . +102C4 . +102C5 . +102C6 . +102C7 . +102C8 . +102C9 . +102CA . +102CB . +102CC . +102CD . +102CE . +102CF . +102D0 . +10300 . +10301 . +10302 . +10303 . +10304 . +10305 . +10306 . +10307 . +10308 . +10309 . +1030A . +1030B . +1030C . +1030D . +1030E . +1030F . +10310 . +10311 . +10312 . +10313 . +10314 . +10315 . +10316 . +10317 . +10318 . +10319 . +1031A . +1031B . +1031C . +1031D . +1031E . +10330 . +10331 . +10332 . +10333 . +10334 . +10335 . +10336 . +10337 . +10338 . +10339 . +1033A . +1033B . +1033C . +1033D . +1033E . +1033F . +10340 . +10342 . +10343 . +10344 . +10345 . +10346 . +10347 . +10348 . +10349 . +10380 . +10381 . +10382 . +10383 . +10384 . +10385 . +10386 . +10387 . +10388 . +10389 . +1038A . +1038B . +1038C . +1038D . +1038E . +1038F . +10390 . +10391 . +10392 . +10393 . +10394 . +10395 . +10396 . +10397 . +10398 . +10399 . +1039A . +1039B . +1039C . +1039D . +103A0 . +103A1 . +103A2 . +103A3 . +103A4 . +103A5 . +103A6 . +103A7 . +103A8 . +103A9 . +103AA . +103AB . +103AC . +103AD . +103AE . +103AF . +103B0 . +103B1 . +103B2 . +103B3 . +103B4 . +103B5 . +103B6 . +103B7 . +103B8 . +103B9 . +103BA . +103BB . +103BC . +103BD . +103BE . +103BF . +103C0 . +103C1 . +103C2 . +103C3 . +103C8 . +103C9 . +103CA . +103CB . +103CC . +103CD . +103CE . +103CF . +10428 10400 +10429 10401 +1042A 10402 +1042B 10403 +1042C 10404 +1042D 10405 +1042E 10406 +1042F 10407 +10430 10408 +10431 10409 +10432 1040A +10433 1040B +10434 1040C +10435 1040D +10436 1040E +10437 1040F +10438 10410 +10439 10411 +1043A 10412 +1043B 10413 +1043C 10414 +1043D 10415 +1043E 10416 +1043F 10417 +10440 10418 +10441 10419 +10442 1041A +10443 1041B +10444 1041C +10445 1041D +10446 1041E +10447 1041F +10448 10420 +10449 10421 +1044A 10422 +1044B 10423 +1044C 10424 +1044D 10425 +1044E 10426 +1044F 10427 +10450 . +10451 . +10452 . +10453 . +10454 . +10455 . +10456 . +10457 . +10458 . +10459 . +1045A . +1045B . +1045C . +1045D . +1045E . +1045F . +10460 . +10461 . +10462 . +10463 . +10464 . +10465 . +10466 . +10467 . +10468 . +10469 . +1046A . +1046B . +1046C . +1046D . +1046E . +1046F . +10470 . +10471 . +10472 . +10473 . +10474 . +10475 . +10476 . +10477 . +10478 . +10479 . +1047A . +1047B . +1047C . +1047D . +1047E . +1047F . +10480 . +10481 . +10482 . +10483 . +10484 . +10485 . +10486 . +10487 . +10488 . +10489 . +1048A . +1048B . +1048C . +1048D . +1048E . +1048F . +10490 . +10491 . +10492 . +10493 . +10494 . +10495 . +10496 . +10497 . +10498 . +10499 . +1049A . +1049B . +1049C . +1049D . +10800 . +10801 . +10802 . +10803 . +10804 . +10805 . +10808 . +1080A . +1080B . +1080C . +1080D . +1080E . +1080F . +10810 . +10811 . +10812 . +10813 . +10814 . +10815 . +10816 . +10817 . +10818 . +10819 . +1081A . +1081B . +1081C . +1081D . +1081E . +1081F . +10820 . +10821 . +10822 . +10823 . +10824 . +10825 . +10826 . +10827 . +10828 . +10829 . +1082A . +1082B . +1082C . +1082D . +1082E . +1082F . +10830 . +10831 . +10832 . +10833 . +10834 . +10835 . +10837 . +10838 . +1083C . +1083F . +10840 . +10841 . +10842 . +10843 . +10844 . +10845 . +10846 . +10847 . +10848 . +10849 . +1084A . +1084B . +1084C . +1084D . +1084E . +1084F . +10850 . +10851 . +10852 . +10853 . +10854 . +10855 . +10900 . +10901 . +10902 . +10903 . +10904 . +10905 . +10906 . +10907 . +10908 . +10909 . +1090A . +1090B . +1090C . +1090D . +1090E . +1090F . +10910 . +10911 . +10912 . +10913 . +10914 . +10915 . +10920 . +10921 . +10922 . +10923 . +10924 . +10925 . +10926 . +10927 . +10928 . +10929 . +1092A . +1092B . +1092C . +1092D . +1092E . +1092F . +10930 . +10931 . +10932 . +10933 . +10934 . +10935 . +10936 . +10937 . +10938 . +10939 . +10980 . +10981 . +10982 . +10983 . +10984 . +10985 . +10986 . +10987 . +10988 . +10989 . +1098A . +1098B . +1098C . +1098D . +1098E . +1098F . +10990 . +10991 . +10992 . +10993 . +10994 . +10995 . +10996 . +10997 . +10998 . +10999 . +1099A . +1099B . +1099C . +1099D . +1099E . +1099F . +109A0 . +109A1 . +109A2 . +109A3 . +109A4 . +109A5 . +109A6 . +109A7 . +109A8 . +109A9 . +109AA . +109AB . +109AC . +109AD . +109AE . +109AF . +109B0 . +109B1 . +109B2 . +109B3 . +109B4 . +109B5 . +109B6 . +109B7 . +109BE . +109BF . +10A00 . +10A10 . +10A11 . +10A12 . +10A13 . +10A15 . +10A16 . +10A17 . +10A19 . +10A1A . +10A1B . +10A1C . +10A1D . +10A1E . +10A1F . +10A20 . +10A21 . +10A22 . +10A23 . +10A24 . +10A25 . +10A26 . +10A27 . +10A28 . +10A29 . +10A2A . +10A2B . +10A2C . +10A2D . +10A2E . +10A2F . +10A30 . +10A31 . +10A32 . +10A33 . +10A60 . +10A61 . +10A62 . +10A63 . +10A64 . +10A65 . +10A66 . +10A67 . +10A68 . +10A69 . +10A6A . +10A6B . +10A6C . +10A6D . +10A6E . +10A6F . +10A70 . +10A71 . +10A72 . +10A73 . +10A74 . +10A75 . +10A76 . +10A77 . +10A78 . +10A79 . +10A7A . +10A7B . +10A7C . +10B00 . +10B01 . +10B02 . +10B03 . +10B04 . +10B05 . +10B06 . +10B07 . +10B08 . +10B09 . +10B0A . +10B0B . +10B0C . +10B0D . +10B0E . +10B0F . +10B10 . +10B11 . +10B12 . +10B13 . +10B14 . +10B15 . +10B16 . +10B17 . +10B18 . +10B19 . +10B1A . +10B1B . +10B1C . +10B1D . +10B1E . +10B1F . +10B20 . +10B21 . +10B22 . +10B23 . +10B24 . +10B25 . +10B26 . +10B27 . +10B28 . +10B29 . +10B2A . +10B2B . +10B2C . +10B2D . +10B2E . +10B2F . +10B30 . +10B31 . +10B32 . +10B33 . +10B34 . +10B35 . +10B40 . +10B41 . +10B42 . +10B43 . +10B44 . +10B45 . +10B46 . +10B47 . +10B48 . +10B49 . +10B4A . +10B4B . +10B4C . +10B4D . +10B4E . +10B4F . +10B50 . +10B51 . +10B52 . +10B53 . +10B54 . +10B55 . +10B60 . +10B61 . +10B62 . +10B63 . +10B64 . +10B65 . +10B66 . +10B67 . +10B68 . +10B69 . +10B6A . +10B6B . +10B6C . +10B6D . +10B6E . +10B6F . +10B70 . +10B71 . +10B72 . +10C00 . +10C01 . +10C02 . +10C03 . +10C04 . +10C05 . +10C06 . +10C07 . +10C08 . +10C09 . +10C0A . +10C0B . +10C0C . +10C0D . +10C0E . +10C0F . +10C10 . +10C11 . +10C12 . +10C13 . +10C14 . +10C15 . +10C16 . +10C17 . +10C18 . +10C19 . +10C1A . +10C1B . +10C1C . +10C1D . +10C1E . +10C1F . +10C20 . +10C21 . +10C22 . +10C23 . +10C24 . +10C25 . +10C26 . +10C27 . +10C28 . +10C29 . +10C2A . +10C2B . +10C2C . +10C2D . +10C2E . +10C2F . +10C30 . +10C31 . +10C32 . +10C33 . +10C34 . +10C35 . +10C36 . +10C37 . +10C38 . +10C39 . +10C3A . +10C3B . +10C3C . +10C3D . +10C3E . +10C3F . +10C40 . +10C41 . +10C42 . +10C43 . +10C44 . +10C45 . +10C46 . +10C47 . +10C48 . +11003 . +11004 . +11005 . +11006 . +11007 . +11008 . +11009 . +1100A . +1100B . +1100C . +1100D . +1100E . +1100F . +11010 . +11011 . +11012 . +11013 . +11014 . +11015 . +11016 . +11017 . +11018 . +11019 . +1101A . +1101B . +1101C . +1101D . +1101E . +1101F . +11020 . +11021 . +11022 . +11023 . +11024 . +11025 . +11026 . +11027 . +11028 . +11029 . +1102A . +1102B . +1102C . +1102D . +1102E . +1102F . +11030 . +11031 . +11032 . +11033 . +11034 . +11035 . +11036 . +11037 . +11083 . +11084 . +11085 . +11086 . +11087 . +11088 . +11089 . +1108A . +1108B . +1108C . +1108D . +1108E . +1108F . +11090 . +11091 . +11092 . +11093 . +11094 . +11095 . +11096 . +11097 . +11098 . +11099 . +1109A . +1109B . +1109C . +1109D . +1109E . +1109F . +110A0 . +110A1 . +110A2 . +110A3 . +110A4 . +110A5 . +110A6 . +110A7 . +110A8 . +110A9 . +110AA . +110AB . +110AC . +110AD . +110AE . +110AF . +110D0 . +110D1 . +110D2 . +110D3 . +110D4 . +110D5 . +110D6 . +110D7 . +110D8 . +110D9 . +110DA . +110DB . +110DC . +110DD . +110DE . +110DF . +110E0 . +110E1 . +110E2 . +110E3 . +110E4 . +110E5 . +110E6 . +110E7 . +110E8 . +11103 . +11104 . +11105 . +11106 . +11107 . +11108 . +11109 . +1110A . +1110B . +1110C . +1110D . +1110E . +1110F . +11110 . +11111 . +11112 . +11113 . +11114 . +11115 . +11116 . +11117 . +11118 . +11119 . +1111A . +1111B . +1111C . +1111D . +1111E . +1111F . +11120 . +11121 . +11122 . +11123 . +11124 . +11125 . +11126 . +11183 . +11184 . +11185 . +11186 . +11187 . +11188 . +11189 . +1118A . +1118B . +1118C . +1118D . +1118E . +1118F . +11190 . +11191 . +11192 . +11193 . +11194 . +11195 . +11196 . +11197 . +11198 . +11199 . +1119A . +1119B . +1119C . +1119D . +1119E . +1119F . +111A0 . +111A1 . +111A2 . +111A3 . +111A4 . +111A5 . +111A6 . +111A7 . +111A8 . +111A9 . +111AA . +111AB . +111AC . +111AD . +111AE . +111AF . +111B0 . +111B1 . +111B2 . +111C1 . +111C2 . +111C3 . +111C4 . +11680 . +11681 . +11682 . +11683 . +11684 . +11685 . +11686 . +11687 . +11688 . +11689 . +1168A . +1168B . +1168C . +1168D . +1168E . +1168F . +11690 . +11691 . +11692 . +11693 . +11694 . +11695 . +11696 . +11697 . +11698 . +11699 . +1169A . +1169B . +1169C . +1169D . +1169E . +1169F . +116A0 . +116A1 . +116A2 . +116A3 . +116A4 . +116A5 . +116A6 . +116A7 . +116A8 . +116A9 . +116AA . +12000 . +12001 . +12002 . +12003 . +12004 . +12005 . +12006 . +12007 . +12008 . +12009 . +1200A . +1200B . +1200C . +1200D . +1200E . +1200F . +12010 . +12011 . +12012 . +12013 . +12014 . +12015 . +12016 . +12017 . +12018 . +12019 . +1201A . +1201B . +1201C . +1201D . +1201E . +1201F . +12020 . +12021 . +12022 . +12023 . +12024 . +12025 . +12026 . +12027 . +12028 . +12029 . +1202A . +1202B . +1202C . +1202D . +1202E . +1202F . +12030 . +12031 . +12032 . +12033 . +12034 . +12035 . +12036 . +12037 . +12038 . +12039 . +1203A . +1203B . +1203C . +1203D . +1203E . +1203F . +12040 . +12041 . +12042 . +12043 . +12044 . +12045 . +12046 . +12047 . +12048 . +12049 . +1204A . +1204B . +1204C . +1204D . +1204E . +1204F . +12050 . +12051 . +12052 . +12053 . +12054 . +12055 . +12056 . +12057 . +12058 . +12059 . +1205A . +1205B . +1205C . +1205D . +1205E . +1205F . +12060 . +12061 . +12062 . +12063 . +12064 . +12065 . +12066 . +12067 . +12068 . +12069 . +1206A . +1206B . +1206C . +1206D . +1206E . +1206F . +12070 . +12071 . +12072 . +12073 . +12074 . +12075 . +12076 . +12077 . +12078 . +12079 . +1207A . +1207B . +1207C . +1207D . +1207E . +1207F . +12080 . +12081 . +12082 . +12083 . +12084 . +12085 . +12086 . +12087 . +12088 . +12089 . +1208A . +1208B . +1208C . +1208D . +1208E . +1208F . +12090 . +12091 . +12092 . +12093 . +12094 . +12095 . +12096 . +12097 . +12098 . +12099 . +1209A . +1209B . +1209C . +1209D . +1209E . +1209F . +120A0 . +120A1 . +120A2 . +120A3 . +120A4 . +120A5 . +120A6 . +120A7 . +120A8 . +120A9 . +120AA . +120AB . +120AC . +120AD . +120AE . +120AF . +120B0 . +120B1 . +120B2 . +120B3 . +120B4 . +120B5 . +120B6 . +120B7 . +120B8 . +120B9 . +120BA . +120BB . +120BC . +120BD . +120BE . +120BF . +120C0 . +120C1 . +120C2 . +120C3 . +120C4 . +120C5 . +120C6 . +120C7 . +120C8 . +120C9 . +120CA . +120CB . +120CC . +120CD . +120CE . +120CF . +120D0 . +120D1 . +120D2 . +120D3 . +120D4 . +120D5 . +120D6 . +120D7 . +120D8 . +120D9 . +120DA . +120DB . +120DC . +120DD . +120DE . +120DF . +120E0 . +120E1 . +120E2 . +120E3 . +120E4 . +120E5 . +120E6 . +120E7 . +120E8 . +120E9 . +120EA . +120EB . +120EC . +120ED . +120EE . +120EF . +120F0 . +120F1 . +120F2 . +120F3 . +120F4 . +120F5 . +120F6 . +120F7 . +120F8 . +120F9 . +120FA . +120FB . +120FC . +120FD . +120FE . +120FF . +12100 . +12101 . +12102 . +12103 . +12104 . +12105 . +12106 . +12107 . +12108 . +12109 . +1210A . +1210B . +1210C . +1210D . +1210E . +1210F . +12110 . +12111 . +12112 . +12113 . +12114 . +12115 . +12116 . +12117 . +12118 . +12119 . +1211A . +1211B . +1211C . +1211D . +1211E . +1211F . +12120 . +12121 . +12122 . +12123 . +12124 . +12125 . +12126 . +12127 . +12128 . +12129 . +1212A . +1212B . +1212C . +1212D . +1212E . +1212F . +12130 . +12131 . +12132 . +12133 . +12134 . +12135 . +12136 . +12137 . +12138 . +12139 . +1213A . +1213B . +1213C . +1213D . +1213E . +1213F . +12140 . +12141 . +12142 . +12143 . +12144 . +12145 . +12146 . +12147 . +12148 . +12149 . +1214A . +1214B . +1214C . +1214D . +1214E . +1214F . +12150 . +12151 . +12152 . +12153 . +12154 . +12155 . +12156 . +12157 . +12158 . +12159 . +1215A . +1215B . +1215C . +1215D . +1215E . +1215F . +12160 . +12161 . +12162 . +12163 . +12164 . +12165 . +12166 . +12167 . +12168 . +12169 . +1216A . +1216B . +1216C . +1216D . +1216E . +1216F . +12170 . +12171 . +12172 . +12173 . +12174 . +12175 . +12176 . +12177 . +12178 . +12179 . +1217A . +1217B . +1217C . +1217D . +1217E . +1217F . +12180 . +12181 . +12182 . +12183 . +12184 . +12185 . +12186 . +12187 . +12188 . +12189 . +1218A . +1218B . +1218C . +1218D . +1218E . +1218F . +12190 . +12191 . +12192 . +12193 . +12194 . +12195 . +12196 . +12197 . +12198 . +12199 . +1219A . +1219B . +1219C . +1219D . +1219E . +1219F . +121A0 . +121A1 . +121A2 . +121A3 . +121A4 . +121A5 . +121A6 . +121A7 . +121A8 . +121A9 . +121AA . +121AB . +121AC . +121AD . +121AE . +121AF . +121B0 . +121B1 . +121B2 . +121B3 . +121B4 . +121B5 . +121B6 . +121B7 . +121B8 . +121B9 . +121BA . +121BB . +121BC . +121BD . +121BE . +121BF . +121C0 . +121C1 . +121C2 . +121C3 . +121C4 . +121C5 . +121C6 . +121C7 . +121C8 . +121C9 . +121CA . +121CB . +121CC . +121CD . +121CE . +121CF . +121D0 . +121D1 . +121D2 . +121D3 . +121D4 . +121D5 . +121D6 . +121D7 . +121D8 . +121D9 . +121DA . +121DB . +121DC . +121DD . +121DE . +121DF . +121E0 . +121E1 . +121E2 . +121E3 . +121E4 . +121E5 . +121E6 . +121E7 . +121E8 . +121E9 . +121EA . +121EB . +121EC . +121ED . +121EE . +121EF . +121F0 . +121F1 . +121F2 . +121F3 . +121F4 . +121F5 . +121F6 . +121F7 . +121F8 . +121F9 . +121FA . +121FB . +121FC . +121FD . +121FE . +121FF . +12200 . +12201 . +12202 . +12203 . +12204 . +12205 . +12206 . +12207 . +12208 . +12209 . +1220A . +1220B . +1220C . +1220D . +1220E . +1220F . +12210 . +12211 . +12212 . +12213 . +12214 . +12215 . +12216 . +12217 . +12218 . +12219 . +1221A . +1221B . +1221C . +1221D . +1221E . +1221F . +12220 . +12221 . +12222 . +12223 . +12224 . +12225 . +12226 . +12227 . +12228 . +12229 . +1222A . +1222B . +1222C . +1222D . +1222E . +1222F . +12230 . +12231 . +12232 . +12233 . +12234 . +12235 . +12236 . +12237 . +12238 . +12239 . +1223A . +1223B . +1223C . +1223D . +1223E . +1223F . +12240 . +12241 . +12242 . +12243 . +12244 . +12245 . +12246 . +12247 . +12248 . +12249 . +1224A . +1224B . +1224C . +1224D . +1224E . +1224F . +12250 . +12251 . +12252 . +12253 . +12254 . +12255 . +12256 . +12257 . +12258 . +12259 . +1225A . +1225B . +1225C . +1225D . +1225E . +1225F . +12260 . +12261 . +12262 . +12263 . +12264 . +12265 . +12266 . +12267 . +12268 . +12269 . +1226A . +1226B . +1226C . +1226D . +1226E . +1226F . +12270 . +12271 . +12272 . +12273 . +12274 . +12275 . +12276 . +12277 . +12278 . +12279 . +1227A . +1227B . +1227C . +1227D . +1227E . +1227F . +12280 . +12281 . +12282 . +12283 . +12284 . +12285 . +12286 . +12287 . +12288 . +12289 . +1228A . +1228B . +1228C . +1228D . +1228E . +1228F . +12290 . +12291 . +12292 . +12293 . +12294 . +12295 . +12296 . +12297 . +12298 . +12299 . +1229A . +1229B . +1229C . +1229D . +1229E . +1229F . +122A0 . +122A1 . +122A2 . +122A3 . +122A4 . +122A5 . +122A6 . +122A7 . +122A8 . +122A9 . +122AA . +122AB . +122AC . +122AD . +122AE . +122AF . +122B0 . +122B1 . +122B2 . +122B3 . +122B4 . +122B5 . +122B6 . +122B7 . +122B8 . +122B9 . +122BA . +122BB . +122BC . +122BD . +122BE . +122BF . +122C0 . +122C1 . +122C2 . +122C3 . +122C4 . +122C5 . +122C6 . +122C7 . +122C8 . +122C9 . +122CA . +122CB . +122CC . +122CD . +122CE . +122CF . +122D0 . +122D1 . +122D2 . +122D3 . +122D4 . +122D5 . +122D6 . +122D7 . +122D8 . +122D9 . +122DA . +122DB . +122DC . +122DD . +122DE . +122DF . +122E0 . +122E1 . +122E2 . +122E3 . +122E4 . +122E5 . +122E6 . +122E7 . +122E8 . +122E9 . +122EA . +122EB . +122EC . +122ED . +122EE . +122EF . +122F0 . +122F1 . +122F2 . +122F3 . +122F4 . +122F5 . +122F6 . +122F7 . +122F8 . +122F9 . +122FA . +122FB . +122FC . +122FD . +122FE . +122FF . +12300 . +12301 . +12302 . +12303 . +12304 . +12305 . +12306 . +12307 . +12308 . +12309 . +1230A . +1230B . +1230C . +1230D . +1230E . +1230F . +12310 . +12311 . +12312 . +12313 . +12314 . +12315 . +12316 . +12317 . +12318 . +12319 . +1231A . +1231B . +1231C . +1231D . +1231E . +1231F . +12320 . +12321 . +12322 . +12323 . +12324 . +12325 . +12326 . +12327 . +12328 . +12329 . +1232A . +1232B . +1232C . +1232D . +1232E . +1232F . +12330 . +12331 . +12332 . +12333 . +12334 . +12335 . +12336 . +12337 . +12338 . +12339 . +1233A . +1233B . +1233C . +1233D . +1233E . +1233F . +12340 . +12341 . +12342 . +12343 . +12344 . +12345 . +12346 . +12347 . +12348 . +12349 . +1234A . +1234B . +1234C . +1234D . +1234E . +1234F . +12350 . +12351 . +12352 . +12353 . +12354 . +12355 . +12356 . +12357 . +12358 . +12359 . +1235A . +1235B . +1235C . +1235D . +1235E . +1235F . +12360 . +12361 . +12362 . +12363 . +12364 . +12365 . +12366 . +12367 . +12368 . +12369 . +1236A . +1236B . +1236C . +1236D . +1236E . +13000 . +13001 . +13002 . +13003 . +13004 . +13005 . +13006 . +13007 . +13008 . +13009 . +1300A . +1300B . +1300C . +1300D . +1300E . +1300F . +13010 . +13011 . +13012 . +13013 . +13014 . +13015 . +13016 . +13017 . +13018 . +13019 . +1301A . +1301B . +1301C . +1301D . +1301E . +1301F . +13020 . +13021 . +13022 . +13023 . +13024 . +13025 . +13026 . +13027 . +13028 . +13029 . +1302A . +1302B . +1302C . +1302D . +1302E . +1302F . +13030 . +13031 . +13032 . +13033 . +13034 . +13035 . +13036 . +13037 . +13038 . +13039 . +1303A . +1303B . +1303C . +1303D . +1303E . +1303F . +13040 . +13041 . +13042 . +13043 . +13044 . +13045 . +13046 . +13047 . +13048 . +13049 . +1304A . +1304B . +1304C . +1304D . +1304E . +1304F . +13050 . +13051 . +13052 . +13053 . +13054 . +13055 . +13056 . +13057 . +13058 . +13059 . +1305A . +1305B . +1305C . +1305D . +1305E . +1305F . +13060 . +13061 . +13062 . +13063 . +13064 . +13065 . +13066 . +13067 . +13068 . +13069 . +1306A . +1306B . +1306C . +1306D . +1306E . +1306F . +13070 . +13071 . +13072 . +13073 . +13074 . +13075 . +13076 . +13077 . +13078 . +13079 . +1307A . +1307B . +1307C . +1307D . +1307E . +1307F . +13080 . +13081 . +13082 . +13083 . +13084 . +13085 . +13086 . +13087 . +13088 . +13089 . +1308A . +1308B . +1308C . +1308D . +1308E . +1308F . +13090 . +13091 . +13092 . +13093 . +13094 . +13095 . +13096 . +13097 . +13098 . +13099 . +1309A . +1309B . +1309C . +1309D . +1309E . +1309F . +130A0 . +130A1 . +130A2 . +130A3 . +130A4 . +130A5 . +130A6 . +130A7 . +130A8 . +130A9 . +130AA . +130AB . +130AC . +130AD . +130AE . +130AF . +130B0 . +130B1 . +130B2 . +130B3 . +130B4 . +130B5 . +130B6 . +130B7 . +130B8 . +130B9 . +130BA . +130BB . +130BC . +130BD . +130BE . +130BF . +130C0 . +130C1 . +130C2 . +130C3 . +130C4 . +130C5 . +130C6 . +130C7 . +130C8 . +130C9 . +130CA . +130CB . +130CC . +130CD . +130CE . +130CF . +130D0 . +130D1 . +130D2 . +130D3 . +130D4 . +130D5 . +130D6 . +130D7 . +130D8 . +130D9 . +130DA . +130DB . +130DC . +130DD . +130DE . +130DF . +130E0 . +130E1 . +130E2 . +130E3 . +130E4 . +130E5 . +130E6 . +130E7 . +130E8 . +130E9 . +130EA . +130EB . +130EC . +130ED . +130EE . +130EF . +130F0 . +130F1 . +130F2 . +130F3 . +130F4 . +130F5 . +130F6 . +130F7 . +130F8 . +130F9 . +130FA . +130FB . +130FC . +130FD . +130FE . +130FF . +13100 . +13101 . +13102 . +13103 . +13104 . +13105 . +13106 . +13107 . +13108 . +13109 . +1310A . +1310B . +1310C . +1310D . +1310E . +1310F . +13110 . +13111 . +13112 . +13113 . +13114 . +13115 . +13116 . +13117 . +13118 . +13119 . +1311A . +1311B . +1311C . +1311D . +1311E . +1311F . +13120 . +13121 . +13122 . +13123 . +13124 . +13125 . +13126 . +13127 . +13128 . +13129 . +1312A . +1312B . +1312C . +1312D . +1312E . +1312F . +13130 . +13131 . +13132 . +13133 . +13134 . +13135 . +13136 . +13137 . +13138 . +13139 . +1313A . +1313B . +1313C . +1313D . +1313E . +1313F . +13140 . +13141 . +13142 . +13143 . +13144 . +13145 . +13146 . +13147 . +13148 . +13149 . +1314A . +1314B . +1314C . +1314D . +1314E . +1314F . +13150 . +13151 . +13152 . +13153 . +13154 . +13155 . +13156 . +13157 . +13158 . +13159 . +1315A . +1315B . +1315C . +1315D . +1315E . +1315F . +13160 . +13161 . +13162 . +13163 . +13164 . +13165 . +13166 . +13167 . +13168 . +13169 . +1316A . +1316B . +1316C . +1316D . +1316E . +1316F . +13170 . +13171 . +13172 . +13173 . +13174 . +13175 . +13176 . +13177 . +13178 . +13179 . +1317A . +1317B . +1317C . +1317D . +1317E . +1317F . +13180 . +13181 . +13182 . +13183 . +13184 . +13185 . +13186 . +13187 . +13188 . +13189 . +1318A . +1318B . +1318C . +1318D . +1318E . +1318F . +13190 . +13191 . +13192 . +13193 . +13194 . +13195 . +13196 . +13197 . +13198 . +13199 . +1319A . +1319B . +1319C . +1319D . +1319E . +1319F . +131A0 . +131A1 . +131A2 . +131A3 . +131A4 . +131A5 . +131A6 . +131A7 . +131A8 . +131A9 . +131AA . +131AB . +131AC . +131AD . +131AE . +131AF . +131B0 . +131B1 . +131B2 . +131B3 . +131B4 . +131B5 . +131B6 . +131B7 . +131B8 . +131B9 . +131BA . +131BB . +131BC . +131BD . +131BE . +131BF . +131C0 . +131C1 . +131C2 . +131C3 . +131C4 . +131C5 . +131C6 . +131C7 . +131C8 . +131C9 . +131CA . +131CB . +131CC . +131CD . +131CE . +131CF . +131D0 . +131D1 . +131D2 . +131D3 . +131D4 . +131D5 . +131D6 . +131D7 . +131D8 . +131D9 . +131DA . +131DB . +131DC . +131DD . +131DE . +131DF . +131E0 . +131E1 . +131E2 . +131E3 . +131E4 . +131E5 . +131E6 . +131E7 . +131E8 . +131E9 . +131EA . +131EB . +131EC . +131ED . +131EE . +131EF . +131F0 . +131F1 . +131F2 . +131F3 . +131F4 . +131F5 . +131F6 . +131F7 . +131F8 . +131F9 . +131FA . +131FB . +131FC . +131FD . +131FE . +131FF . +13200 . +13201 . +13202 . +13203 . +13204 . +13205 . +13206 . +13207 . +13208 . +13209 . +1320A . +1320B . +1320C . +1320D . +1320E . +1320F . +13210 . +13211 . +13212 . +13213 . +13214 . +13215 . +13216 . +13217 . +13218 . +13219 . +1321A . +1321B . +1321C . +1321D . +1321E . +1321F . +13220 . +13221 . +13222 . +13223 . +13224 . +13225 . +13226 . +13227 . +13228 . +13229 . +1322A . +1322B . +1322C . +1322D . +1322E . +1322F . +13230 . +13231 . +13232 . +13233 . +13234 . +13235 . +13236 . +13237 . +13238 . +13239 . +1323A . +1323B . +1323C . +1323D . +1323E . +1323F . +13240 . +13241 . +13242 . +13243 . +13244 . +13245 . +13246 . +13247 . +13248 . +13249 . +1324A . +1324B . +1324C . +1324D . +1324E . +1324F . +13250 . +13251 . +13252 . +13253 . +13254 . +13255 . +13256 . +13257 . +13258 . +13259 . +1325A . +1325B . +1325C . +1325D . +1325E . +1325F . +13260 . +13261 . +13262 . +13263 . +13264 . +13265 . +13266 . +13267 . +13268 . +13269 . +1326A . +1326B . +1326C . +1326D . +1326E . +1326F . +13270 . +13271 . +13272 . +13273 . +13274 . +13275 . +13276 . +13277 . +13278 . +13279 . +1327A . +1327B . +1327C . +1327D . +1327E . +1327F . +13280 . +13281 . +13282 . +13283 . +13284 . +13285 . +13286 . +13287 . +13288 . +13289 . +1328A . +1328B . +1328C . +1328D . +1328E . +1328F . +13290 . +13291 . +13292 . +13293 . +13294 . +13295 . +13296 . +13297 . +13298 . +13299 . +1329A . +1329B . +1329C . +1329D . +1329E . +1329F . +132A0 . +132A1 . +132A2 . +132A3 . +132A4 . +132A5 . +132A6 . +132A7 . +132A8 . +132A9 . +132AA . +132AB . +132AC . +132AD . +132AE . +132AF . +132B0 . +132B1 . +132B2 . +132B3 . +132B4 . +132B5 . +132B6 . +132B7 . +132B8 . +132B9 . +132BA . +132BB . +132BC . +132BD . +132BE . +132BF . +132C0 . +132C1 . +132C2 . +132C3 . +132C4 . +132C5 . +132C6 . +132C7 . +132C8 . +132C9 . +132CA . +132CB . +132CC . +132CD . +132CE . +132CF . +132D0 . +132D1 . +132D2 . +132D3 . +132D4 . +132D5 . +132D6 . +132D7 . +132D8 . +132D9 . +132DA . +132DB . +132DC . +132DD . +132DE . +132DF . +132E0 . +132E1 . +132E2 . +132E3 . +132E4 . +132E5 . +132E6 . +132E7 . +132E8 . +132E9 . +132EA . +132EB . +132EC . +132ED . +132EE . +132EF . +132F0 . +132F1 . +132F2 . +132F3 . +132F4 . +132F5 . +132F6 . +132F7 . +132F8 . +132F9 . +132FA . +132FB . +132FC . +132FD . +132FE . +132FF . +13300 . +13301 . +13302 . +13303 . +13304 . +13305 . +13306 . +13307 . +13308 . +13309 . +1330A . +1330B . +1330C . +1330D . +1330E . +1330F . +13310 . +13311 . +13312 . +13313 . +13314 . +13315 . +13316 . +13317 . +13318 . +13319 . +1331A . +1331B . +1331C . +1331D . +1331E . +1331F . +13320 . +13321 . +13322 . +13323 . +13324 . +13325 . +13326 . +13327 . +13328 . +13329 . +1332A . +1332B . +1332C . +1332D . +1332E . +1332F . +13330 . +13331 . +13332 . +13333 . +13334 . +13335 . +13336 . +13337 . +13338 . +13339 . +1333A . +1333B . +1333C . +1333D . +1333E . +1333F . +13340 . +13341 . +13342 . +13343 . +13344 . +13345 . +13346 . +13347 . +13348 . +13349 . +1334A . +1334B . +1334C . +1334D . +1334E . +1334F . +13350 . +13351 . +13352 . +13353 . +13354 . +13355 . +13356 . +13357 . +13358 . +13359 . +1335A . +1335B . +1335C . +1335D . +1335E . +1335F . +13360 . +13361 . +13362 . +13363 . +13364 . +13365 . +13366 . +13367 . +13368 . +13369 . +1336A . +1336B . +1336C . +1336D . +1336E . +1336F . +13370 . +13371 . +13372 . +13373 . +13374 . +13375 . +13376 . +13377 . +13378 . +13379 . +1337A . +1337B . +1337C . +1337D . +1337E . +1337F . +13380 . +13381 . +13382 . +13383 . +13384 . +13385 . +13386 . +13387 . +13388 . +13389 . +1338A . +1338B . +1338C . +1338D . +1338E . +1338F . +13390 . +13391 . +13392 . +13393 . +13394 . +13395 . +13396 . +13397 . +13398 . +13399 . +1339A . +1339B . +1339C . +1339D . +1339E . +1339F . +133A0 . +133A1 . +133A2 . +133A3 . +133A4 . +133A5 . +133A6 . +133A7 . +133A8 . +133A9 . +133AA . +133AB . +133AC . +133AD . +133AE . +133AF . +133B0 . +133B1 . +133B2 . +133B3 . +133B4 . +133B5 . +133B6 . +133B7 . +133B8 . +133B9 . +133BA . +133BB . +133BC . +133BD . +133BE . +133BF . +133C0 . +133C1 . +133C2 . +133C3 . +133C4 . +133C5 . +133C6 . +133C7 . +133C8 . +133C9 . +133CA . +133CB . +133CC . +133CD . +133CE . +133CF . +133D0 . +133D1 . +133D2 . +133D3 . +133D4 . +133D5 . +133D6 . +133D7 . +133D8 . +133D9 . +133DA . +133DB . +133DC . +133DD . +133DE . +133DF . +133E0 . +133E1 . +133E2 . +133E3 . +133E4 . +133E5 . +133E6 . +133E7 . +133E8 . +133E9 . +133EA . +133EB . +133EC . +133ED . +133EE . +133EF . +133F0 . +133F1 . +133F2 . +133F3 . +133F4 . +133F5 . +133F6 . +133F7 . +133F8 . +133F9 . +133FA . +133FB . +133FC . +133FD . +133FE . +133FF . +13400 . +13401 . +13402 . +13403 . +13404 . +13405 . +13406 . +13407 . +13408 . +13409 . +1340A . +1340B . +1340C . +1340D . +1340E . +1340F . +13410 . +13411 . +13412 . +13413 . +13414 . +13415 . +13416 . +13417 . +13418 . +13419 . +1341A . +1341B . +1341C . +1341D . +1341E . +1341F . +13420 . +13421 . +13422 . +13423 . +13424 . +13425 . +13426 . +13427 . +13428 . +13429 . +1342A . +1342B . +1342C . +1342D . +1342E . +16800 . +16801 . +16802 . +16803 . +16804 . +16805 . +16806 . +16807 . +16808 . +16809 . +1680A . +1680B . +1680C . +1680D . +1680E . +1680F . +16810 . +16811 . +16812 . +16813 . +16814 . +16815 . +16816 . +16817 . +16818 . +16819 . +1681A . +1681B . +1681C . +1681D . +1681E . +1681F . +16820 . +16821 . +16822 . +16823 . +16824 . +16825 . +16826 . +16827 . +16828 . +16829 . +1682A . +1682B . +1682C . +1682D . +1682E . +1682F . +16830 . +16831 . +16832 . +16833 . +16834 . +16835 . +16836 . +16837 . +16838 . +16839 . +1683A . +1683B . +1683C . +1683D . +1683E . +1683F . +16840 . +16841 . +16842 . +16843 . +16844 . +16845 . +16846 . +16847 . +16848 . +16849 . +1684A . +1684B . +1684C . +1684D . +1684E . +1684F . +16850 . +16851 . +16852 . +16853 . +16854 . +16855 . +16856 . +16857 . +16858 . +16859 . +1685A . +1685B . +1685C . +1685D . +1685E . +1685F . +16860 . +16861 . +16862 . +16863 . +16864 . +16865 . +16866 . +16867 . +16868 . +16869 . +1686A . +1686B . +1686C . +1686D . +1686E . +1686F . +16870 . +16871 . +16872 . +16873 . +16874 . +16875 . +16876 . +16877 . +16878 . +16879 . +1687A . +1687B . +1687C . +1687D . +1687E . +1687F . +16880 . +16881 . +16882 . +16883 . +16884 . +16885 . +16886 . +16887 . +16888 . +16889 . +1688A . +1688B . +1688C . +1688D . +1688E . +1688F . +16890 . +16891 . +16892 . +16893 . +16894 . +16895 . +16896 . +16897 . +16898 . +16899 . +1689A . +1689B . +1689C . +1689D . +1689E . +1689F . +168A0 . +168A1 . +168A2 . +168A3 . +168A4 . +168A5 . +168A6 . +168A7 . +168A8 . +168A9 . +168AA . +168AB . +168AC . +168AD . +168AE . +168AF . +168B0 . +168B1 . +168B2 . +168B3 . +168B4 . +168B5 . +168B6 . +168B7 . +168B8 . +168B9 . +168BA . +168BB . +168BC . +168BD . +168BE . +168BF . +168C0 . +168C1 . +168C2 . +168C3 . +168C4 . +168C5 . +168C6 . +168C7 . +168C8 . +168C9 . +168CA . +168CB . +168CC . +168CD . +168CE . +168CF . +168D0 . +168D1 . +168D2 . +168D3 . +168D4 . +168D5 . +168D6 . +168D7 . +168D8 . +168D9 . +168DA . +168DB . +168DC . +168DD . +168DE . +168DF . +168E0 . +168E1 . +168E2 . +168E3 . +168E4 . +168E5 . +168E6 . +168E7 . +168E8 . +168E9 . +168EA . +168EB . +168EC . +168ED . +168EE . +168EF . +168F0 . +168F1 . +168F2 . +168F3 . +168F4 . +168F5 . +168F6 . +168F7 . +168F8 . +168F9 . +168FA . +168FB . +168FC . +168FD . +168FE . +168FF . +16900 . +16901 . +16902 . +16903 . +16904 . +16905 . +16906 . +16907 . +16908 . +16909 . +1690A . +1690B . +1690C . +1690D . +1690E . +1690F . +16910 . +16911 . +16912 . +16913 . +16914 . +16915 . +16916 . +16917 . +16918 . +16919 . +1691A . +1691B . +1691C . +1691D . +1691E . +1691F . +16920 . +16921 . +16922 . +16923 . +16924 . +16925 . +16926 . +16927 . +16928 . +16929 . +1692A . +1692B . +1692C . +1692D . +1692E . +1692F . +16930 . +16931 . +16932 . +16933 . +16934 . +16935 . +16936 . +16937 . +16938 . +16939 . +1693A . +1693B . +1693C . +1693D . +1693E . +1693F . +16940 . +16941 . +16942 . +16943 . +16944 . +16945 . +16946 . +16947 . +16948 . +16949 . +1694A . +1694B . +1694C . +1694D . +1694E . +1694F . +16950 . +16951 . +16952 . +16953 . +16954 . +16955 . +16956 . +16957 . +16958 . +16959 . +1695A . +1695B . +1695C . +1695D . +1695E . +1695F . +16960 . +16961 . +16962 . +16963 . +16964 . +16965 . +16966 . +16967 . +16968 . +16969 . +1696A . +1696B . +1696C . +1696D . +1696E . +1696F . +16970 . +16971 . +16972 . +16973 . +16974 . +16975 . +16976 . +16977 . +16978 . +16979 . +1697A . +1697B . +1697C . +1697D . +1697E . +1697F . +16980 . +16981 . +16982 . +16983 . +16984 . +16985 . +16986 . +16987 . +16988 . +16989 . +1698A . +1698B . +1698C . +1698D . +1698E . +1698F . +16990 . +16991 . +16992 . +16993 . +16994 . +16995 . +16996 . +16997 . +16998 . +16999 . +1699A . +1699B . +1699C . +1699D . +1699E . +1699F . +169A0 . +169A1 . +169A2 . +169A3 . +169A4 . +169A5 . +169A6 . +169A7 . +169A8 . +169A9 . +169AA . +169AB . +169AC . +169AD . +169AE . +169AF . +169B0 . +169B1 . +169B2 . +169B3 . +169B4 . +169B5 . +169B6 . +169B7 . +169B8 . +169B9 . +169BA . +169BB . +169BC . +169BD . +169BE . +169BF . +169C0 . +169C1 . +169C2 . +169C3 . +169C4 . +169C5 . +169C6 . +169C7 . +169C8 . +169C9 . +169CA . +169CB . +169CC . +169CD . +169CE . +169CF . +169D0 . +169D1 . +169D2 . +169D3 . +169D4 . +169D5 . +169D6 . +169D7 . +169D8 . +169D9 . +169DA . +169DB . +169DC . +169DD . +169DE . +169DF . +169E0 . +169E1 . +169E2 . +169E3 . +169E4 . +169E5 . +169E6 . +169E7 . +169E8 . +169E9 . +169EA . +169EB . +169EC . +169ED . +169EE . +169EF . +169F0 . +169F1 . +169F2 . +169F3 . +169F4 . +169F5 . +169F6 . +169F7 . +169F8 . +169F9 . +169FA . +169FB . +169FC . +169FD . +169FE . +169FF . +16A00 . +16A01 . +16A02 . +16A03 . +16A04 . +16A05 . +16A06 . +16A07 . +16A08 . +16A09 . +16A0A . +16A0B . +16A0C . +16A0D . +16A0E . +16A0F . +16A10 . +16A11 . +16A12 . +16A13 . +16A14 . +16A15 . +16A16 . +16A17 . +16A18 . +16A19 . +16A1A . +16A1B . +16A1C . +16A1D . +16A1E . +16A1F . +16A20 . +16A21 . +16A22 . +16A23 . +16A24 . +16A25 . +16A26 . +16A27 . +16A28 . +16A29 . +16A2A . +16A2B . +16A2C . +16A2D . +16A2E . +16A2F . +16A30 . +16A31 . +16A32 . +16A33 . +16A34 . +16A35 . +16A36 . +16A37 . +16A38 . +16F00 . +16F01 . +16F02 . +16F03 . +16F04 . +16F05 . +16F06 . +16F07 . +16F08 . +16F09 . +16F0A . +16F0B . +16F0C . +16F0D . +16F0E . +16F0F . +16F10 . +16F11 . +16F12 . +16F13 . +16F14 . +16F15 . +16F16 . +16F17 . +16F18 . +16F19 . +16F1A . +16F1B . +16F1C . +16F1D . +16F1E . +16F1F . +16F20 . +16F21 . +16F22 . +16F23 . +16F24 . +16F25 . +16F26 . +16F27 . +16F28 . +16F29 . +16F2A . +16F2B . +16F2C . +16F2D . +16F2E . +16F2F . +16F30 . +16F31 . +16F32 . +16F33 . +16F34 . +16F35 . +16F36 . +16F37 . +16F38 . +16F39 . +16F3A . +16F3B . +16F3C . +16F3D . +16F3E . +16F3F . +16F40 . +16F41 . +16F42 . +16F43 . +16F44 . +16F50 . +16F93 . +16F94 . +16F95 . +16F96 . +16F97 . +16F98 . +16F99 . +16F9A . +16F9B . +16F9C . +16F9D . +16F9E . +16F9F . +1B000 . +1B001 . +1D400 . +1D401 . +1D402 . +1D403 . +1D404 . +1D405 . +1D406 . +1D407 . +1D408 . +1D409 . +1D40A . +1D40B . +1D40C . +1D40D . +1D40E . +1D40F . +1D410 . +1D411 . +1D412 . +1D413 . +1D414 . +1D415 . +1D416 . +1D417 . +1D418 . +1D419 . +1D41A . +1D41B . +1D41C . +1D41D . +1D41E . +1D41F . +1D420 . +1D421 . +1D422 . +1D423 . +1D424 . +1D425 . +1D426 . +1D427 . +1D428 . +1D429 . +1D42A . +1D42B . +1D42C . +1D42D . +1D42E . +1D42F . +1D430 . +1D431 . +1D432 . +1D433 . +1D434 . +1D435 . +1D436 . +1D437 . +1D438 . +1D439 . +1D43A . +1D43B . +1D43C . +1D43D . +1D43E . +1D43F . +1D440 . +1D441 . +1D442 . +1D443 . +1D444 . +1D445 . +1D446 . +1D447 . +1D448 . +1D449 . +1D44A . +1D44B . +1D44C . +1D44D . +1D44E . +1D44F . +1D450 . +1D451 . +1D452 . +1D453 . +1D454 . +1D456 . +1D457 . +1D458 . +1D459 . +1D45A . +1D45B . +1D45C . +1D45D . +1D45E . +1D45F . +1D460 . +1D461 . +1D462 . +1D463 . +1D464 . +1D465 . +1D466 . +1D467 . +1D468 . +1D469 . +1D46A . +1D46B . +1D46C . +1D46D . +1D46E . +1D46F . +1D470 . +1D471 . +1D472 . +1D473 . +1D474 . +1D475 . +1D476 . +1D477 . +1D478 . +1D479 . +1D47A . +1D47B . +1D47C . +1D47D . +1D47E . +1D47F . +1D480 . +1D481 . +1D482 . +1D483 . +1D484 . +1D485 . +1D486 . +1D487 . +1D488 . +1D489 . +1D48A . +1D48B . +1D48C . +1D48D . +1D48E . +1D48F . +1D490 . +1D491 . +1D492 . +1D493 . +1D494 . +1D495 . +1D496 . +1D497 . +1D498 . +1D499 . +1D49A . +1D49B . +1D49C . +1D49E . +1D49F . +1D4A2 . +1D4A5 . +1D4A6 . +1D4A9 . +1D4AA . +1D4AB . +1D4AC . +1D4AE . +1D4AF . +1D4B0 . +1D4B1 . +1D4B2 . +1D4B3 . +1D4B4 . +1D4B5 . +1D4B6 . +1D4B7 . +1D4B8 . +1D4B9 . +1D4BB . +1D4BD . +1D4BE . +1D4BF . +1D4C0 . +1D4C1 . +1D4C2 . +1D4C3 . +1D4C5 . +1D4C6 . +1D4C7 . +1D4C8 . +1D4C9 . +1D4CA . +1D4CB . +1D4CC . +1D4CD . +1D4CE . +1D4CF . +1D4D0 . +1D4D1 . +1D4D2 . +1D4D3 . +1D4D4 . +1D4D5 . +1D4D6 . +1D4D7 . +1D4D8 . +1D4D9 . +1D4DA . +1D4DB . +1D4DC . +1D4DD . +1D4DE . +1D4DF . +1D4E0 . +1D4E1 . +1D4E2 . +1D4E3 . +1D4E4 . +1D4E5 . +1D4E6 . +1D4E7 . +1D4E8 . +1D4E9 . +1D4EA . +1D4EB . +1D4EC . +1D4ED . +1D4EE . +1D4EF . +1D4F0 . +1D4F1 . +1D4F2 . +1D4F3 . +1D4F4 . +1D4F5 . +1D4F6 . +1D4F7 . +1D4F8 . +1D4F9 . +1D4FA . +1D4FB . +1D4FC . +1D4FD . +1D4FE . +1D4FF . +1D500 . +1D501 . +1D502 . +1D503 . +1D504 . +1D505 . +1D507 . +1D508 . +1D509 . +1D50A . +1D50D . +1D50E . +1D50F . +1D510 . +1D511 . +1D512 . +1D513 . +1D514 . +1D516 . +1D517 . +1D518 . +1D519 . +1D51A . +1D51B . +1D51C . +1D51E . +1D51F . +1D520 . +1D521 . +1D522 . +1D523 . +1D524 . +1D525 . +1D526 . +1D527 . +1D528 . +1D529 . +1D52A . +1D52B . +1D52C . +1D52D . +1D52E . +1D52F . +1D530 . +1D531 . +1D532 . +1D533 . +1D534 . +1D535 . +1D536 . +1D537 . +1D538 . +1D539 . +1D53B . +1D53C . +1D53D . +1D53E . +1D540 . +1D541 . +1D542 . +1D543 . +1D544 . +1D546 . +1D54A . +1D54B . +1D54C . +1D54D . +1D54E . +1D54F . +1D550 . +1D552 . +1D553 . +1D554 . +1D555 . +1D556 . +1D557 . +1D558 . +1D559 . +1D55A . +1D55B . +1D55C . +1D55D . +1D55E . +1D55F . +1D560 . +1D561 . +1D562 . +1D563 . +1D564 . +1D565 . +1D566 . +1D567 . +1D568 . +1D569 . +1D56A . +1D56B . +1D56C . +1D56D . +1D56E . +1D56F . +1D570 . +1D571 . +1D572 . +1D573 . +1D574 . +1D575 . +1D576 . +1D577 . +1D578 . +1D579 . +1D57A . +1D57B . +1D57C . +1D57D . +1D57E . +1D57F . +1D580 . +1D581 . +1D582 . +1D583 . +1D584 . +1D585 . +1D586 . +1D587 . +1D588 . +1D589 . +1D58A . +1D58B . +1D58C . +1D58D . +1D58E . +1D58F . +1D590 . +1D591 . +1D592 . +1D593 . +1D594 . +1D595 . +1D596 . +1D597 . +1D598 . +1D599 . +1D59A . +1D59B . +1D59C . +1D59D . +1D59E . +1D59F . +1D5A0 . +1D5A1 . +1D5A2 . +1D5A3 . +1D5A4 . +1D5A5 . +1D5A6 . +1D5A7 . +1D5A8 . +1D5A9 . +1D5AA . +1D5AB . +1D5AC . +1D5AD . +1D5AE . +1D5AF . +1D5B0 . +1D5B1 . +1D5B2 . +1D5B3 . +1D5B4 . +1D5B5 . +1D5B6 . +1D5B7 . +1D5B8 . +1D5B9 . +1D5BA . +1D5BB . +1D5BC . +1D5BD . +1D5BE . +1D5BF . +1D5C0 . +1D5C1 . +1D5C2 . +1D5C3 . +1D5C4 . +1D5C5 . +1D5C6 . +1D5C7 . +1D5C8 . +1D5C9 . +1D5CA . +1D5CB . +1D5CC . +1D5CD . +1D5CE . +1D5CF . +1D5D0 . +1D5D1 . +1D5D2 . +1D5D3 . +1D5D4 . +1D5D5 . +1D5D6 . +1D5D7 . +1D5D8 . +1D5D9 . +1D5DA . +1D5DB . +1D5DC . +1D5DD . +1D5DE . +1D5DF . +1D5E0 . +1D5E1 . +1D5E2 . +1D5E3 . +1D5E4 . +1D5E5 . +1D5E6 . +1D5E7 . +1D5E8 . +1D5E9 . +1D5EA . +1D5EB . +1D5EC . +1D5ED . +1D5EE . +1D5EF . +1D5F0 . +1D5F1 . +1D5F2 . +1D5F3 . +1D5F4 . +1D5F5 . +1D5F6 . +1D5F7 . +1D5F8 . +1D5F9 . +1D5FA . +1D5FB . +1D5FC . +1D5FD . +1D5FE . +1D5FF . +1D600 . +1D601 . +1D602 . +1D603 . +1D604 . +1D605 . +1D606 . +1D607 . +1D608 . +1D609 . +1D60A . +1D60B . +1D60C . +1D60D . +1D60E . +1D60F . +1D610 . +1D611 . +1D612 . +1D613 . +1D614 . +1D615 . +1D616 . +1D617 . +1D618 . +1D619 . +1D61A . +1D61B . +1D61C . +1D61D . +1D61E . +1D61F . +1D620 . +1D621 . +1D622 . +1D623 . +1D624 . +1D625 . +1D626 . +1D627 . +1D628 . +1D629 . +1D62A . +1D62B . +1D62C . +1D62D . +1D62E . +1D62F . +1D630 . +1D631 . +1D632 . +1D633 . +1D634 . +1D635 . +1D636 . +1D637 . +1D638 . +1D639 . +1D63A . +1D63B . +1D63C . +1D63D . +1D63E . +1D63F . +1D640 . +1D641 . +1D642 . +1D643 . +1D644 . +1D645 . +1D646 . +1D647 . +1D648 . +1D649 . +1D64A . +1D64B . +1D64C . +1D64D . +1D64E . +1D64F . +1D650 . +1D651 . +1D652 . +1D653 . +1D654 . +1D655 . +1D656 . +1D657 . +1D658 . +1D659 . +1D65A . +1D65B . +1D65C . +1D65D . +1D65E . +1D65F . +1D660 . +1D661 . +1D662 . +1D663 . +1D664 . +1D665 . +1D666 . +1D667 . +1D668 . +1D669 . +1D66A . +1D66B . +1D66C . +1D66D . +1D66E . +1D66F . +1D670 . +1D671 . +1D672 . +1D673 . +1D674 . +1D675 . +1D676 . +1D677 . +1D678 . +1D679 . +1D67A . +1D67B . +1D67C . +1D67D . +1D67E . +1D67F . +1D680 . +1D681 . +1D682 . +1D683 . +1D684 . +1D685 . +1D686 . +1D687 . +1D688 . +1D689 . +1D68A . +1D68B . +1D68C . +1D68D . +1D68E . +1D68F . +1D690 . +1D691 . +1D692 . +1D693 . +1D694 . +1D695 . +1D696 . +1D697 . +1D698 . +1D699 . +1D69A . +1D69B . +1D69C . +1D69D . +1D69E . +1D69F . +1D6A0 . +1D6A1 . +1D6A2 . +1D6A3 . +1D6A4 . +1D6A5 . +1D6A8 . +1D6A9 . +1D6AA . +1D6AB . +1D6AC . +1D6AD . +1D6AE . +1D6AF . +1D6B0 . +1D6B1 . +1D6B2 . +1D6B3 . +1D6B4 . +1D6B5 . +1D6B6 . +1D6B7 . +1D6B8 . +1D6B9 . +1D6BA . +1D6BB . +1D6BC . +1D6BD . +1D6BE . +1D6BF . +1D6C0 . +1D6C2 . +1D6C3 . +1D6C4 . +1D6C5 . +1D6C6 . +1D6C7 . +1D6C8 . +1D6C9 . +1D6CA . +1D6CB . +1D6CC . +1D6CD . +1D6CE . +1D6CF . +1D6D0 . +1D6D1 . +1D6D2 . +1D6D3 . +1D6D4 . +1D6D5 . +1D6D6 . +1D6D7 . +1D6D8 . +1D6D9 . +1D6DA . +1D6DC . +1D6DD . +1D6DE . +1D6DF . +1D6E0 . +1D6E1 . +1D6E2 . +1D6E3 . +1D6E4 . +1D6E5 . +1D6E6 . +1D6E7 . +1D6E8 . +1D6E9 . +1D6EA . +1D6EB . +1D6EC . +1D6ED . +1D6EE . +1D6EF . +1D6F0 . +1D6F1 . +1D6F2 . +1D6F3 . +1D6F4 . +1D6F5 . +1D6F6 . +1D6F7 . +1D6F8 . +1D6F9 . +1D6FA . +1D6FC . +1D6FD . +1D6FE . +1D6FF . +1D700 . +1D701 . +1D702 . +1D703 . +1D704 . +1D705 . +1D706 . +1D707 . +1D708 . +1D709 . +1D70A . +1D70B . +1D70C . +1D70D . +1D70E . +1D70F . +1D710 . +1D711 . +1D712 . +1D713 . +1D714 . +1D716 . +1D717 . +1D718 . +1D719 . +1D71A . +1D71B . +1D71C . +1D71D . +1D71E . +1D71F . +1D720 . +1D721 . +1D722 . +1D723 . +1D724 . +1D725 . +1D726 . +1D727 . +1D728 . +1D729 . +1D72A . +1D72B . +1D72C . +1D72D . +1D72E . +1D72F . +1D730 . +1D731 . +1D732 . +1D733 . +1D734 . +1D736 . +1D737 . +1D738 . +1D739 . +1D73A . +1D73B . +1D73C . +1D73D . +1D73E . +1D73F . +1D740 . +1D741 . +1D742 . +1D743 . +1D744 . +1D745 . +1D746 . +1D747 . +1D748 . +1D749 . +1D74A . +1D74B . +1D74C . +1D74D . +1D74E . +1D750 . +1D751 . +1D752 . +1D753 . +1D754 . +1D755 . +1D756 . +1D757 . +1D758 . +1D759 . +1D75A . +1D75B . +1D75C . +1D75D . +1D75E . +1D75F . +1D760 . +1D761 . +1D762 . +1D763 . +1D764 . +1D765 . +1D766 . +1D767 . +1D768 . +1D769 . +1D76A . +1D76B . +1D76C . +1D76D . +1D76E . +1D770 . +1D771 . +1D772 . +1D773 . +1D774 . +1D775 . +1D776 . +1D777 . +1D778 . +1D779 . +1D77A . +1D77B . +1D77C . +1D77D . +1D77E . +1D77F . +1D780 . +1D781 . +1D782 . +1D783 . +1D784 . +1D785 . +1D786 . +1D787 . +1D788 . +1D78A . +1D78B . +1D78C . +1D78D . +1D78E . +1D78F . +1D790 . +1D791 . +1D792 . +1D793 . +1D794 . +1D795 . +1D796 . +1D797 . +1D798 . +1D799 . +1D79A . +1D79B . +1D79C . +1D79D . +1D79E . +1D79F . +1D7A0 . +1D7A1 . +1D7A2 . +1D7A3 . +1D7A4 . +1D7A5 . +1D7A6 . +1D7A7 . +1D7A8 . +1D7AA . +1D7AB . +1D7AC . +1D7AD . +1D7AE . +1D7AF . +1D7B0 . +1D7B1 . +1D7B2 . +1D7B3 . +1D7B4 . +1D7B5 . +1D7B6 . +1D7B7 . +1D7B8 . +1D7B9 . +1D7BA . +1D7BB . +1D7BC . +1D7BD . +1D7BE . +1D7BF . +1D7C0 . +1D7C1 . +1D7C2 . +1D7C4 . +1D7C5 . +1D7C6 . +1D7C7 . +1D7C8 . +1D7C9 . +1D7CA . +1D7CB . +1EE00 . +1EE01 . +1EE02 . +1EE03 . +1EE05 . +1EE06 . +1EE07 . +1EE08 . +1EE09 . +1EE0A . +1EE0B . +1EE0C . +1EE0D . +1EE0E . +1EE0F . +1EE10 . +1EE11 . +1EE12 . +1EE13 . +1EE14 . +1EE15 . +1EE16 . +1EE17 . +1EE18 . +1EE19 . +1EE1A . +1EE1B . +1EE1C . +1EE1D . +1EE1E . +1EE1F . +1EE21 . +1EE22 . +1EE24 . +1EE27 . +1EE29 . +1EE2A . +1EE2B . +1EE2C . +1EE2D . +1EE2E . +1EE2F . +1EE30 . +1EE31 . +1EE32 . +1EE34 . +1EE35 . +1EE36 . +1EE37 . +1EE39 . +1EE3B . +1EE42 . +1EE47 . +1EE49 . +1EE4B . +1EE4D . +1EE4E . +1EE4F . +1EE51 . +1EE52 . +1EE54 . +1EE57 . +1EE59 . +1EE5B . +1EE5D . +1EE5F . +1EE61 . +1EE62 . +1EE64 . +1EE67 . +1EE68 . +1EE69 . +1EE6A . +1EE6C . +1EE6D . +1EE6E . +1EE6F . +1EE70 . +1EE71 . +1EE72 . +1EE74 . +1EE75 . +1EE76 . +1EE77 . +1EE79 . +1EE7A . +1EE7B . +1EE7C . +1EE7E . +1EE80 . +1EE81 . +1EE82 . +1EE83 . +1EE84 . +1EE85 . +1EE86 . +1EE87 . +1EE88 . +1EE89 . +1EE8B . +1EE8C . +1EE8D . +1EE8E . +1EE8F . +1EE90 . +1EE91 . +1EE92 . +1EE93 . +1EE94 . +1EE95 . +1EE96 . +1EE97 . +1EE98 . +1EE99 . +1EE9A . +1EE9B . +1EEA1 . +1EEA2 . +1EEA3 . +1EEA5 . +1EEA6 . +1EEA7 . +1EEA8 . +1EEA9 . +1EEAB . +1EEAC . +1EEAD . +1EEAE . +1EEAF . +1EEB0 . +1EEB1 . +1EEB2 . +1EEB3 . +1EEB4 . +1EEB5 . +1EEB6 . +1EEB7 . +1EEB8 . +1EEB9 . +1EEBA . +1EEBB . +2F800 . +2F801 . +2F802 . +2F803 . +2F804 . +2F805 . +2F806 . +2F807 . +2F808 . +2F809 . +2F80A . +2F80B . +2F80C . +2F80D . +2F80E . +2F80F . +2F810 . +2F811 . +2F812 . +2F813 . +2F814 . +2F815 . +2F816 . +2F817 . +2F818 . +2F819 . +2F81A . +2F81B . +2F81C . +2F81D . +2F81E . +2F81F . +2F820 . +2F821 . +2F822 . +2F823 . +2F824 . +2F825 . +2F826 . +2F827 . +2F828 . +2F829 . +2F82A . +2F82B . +2F82C . +2F82D . +2F82E . +2F82F . +2F830 . +2F831 . +2F832 . +2F833 . +2F834 . +2F835 . +2F836 . +2F837 . +2F838 . +2F839 . +2F83A . +2F83B . +2F83C . +2F83D . +2F83E . +2F83F . +2F840 . +2F841 . +2F842 . +2F843 . +2F844 . +2F845 . +2F846 . +2F847 . +2F848 . +2F849 . +2F84A . +2F84B . +2F84C . +2F84D . +2F84E . +2F84F . +2F850 . +2F851 . +2F852 . +2F853 . +2F854 . +2F855 . +2F856 . +2F857 . +2F858 . +2F859 . +2F85A . +2F85B . +2F85C . +2F85D . +2F85E . +2F85F . +2F860 . +2F861 . +2F862 . +2F863 . +2F864 . +2F865 . +2F866 . +2F867 . +2F868 . +2F869 . +2F86A . +2F86B . +2F86C . +2F86D . +2F86E . +2F86F . +2F870 . +2F871 . +2F872 . +2F873 . +2F874 . +2F875 . +2F876 . +2F877 . +2F878 . +2F879 . +2F87A . +2F87B . +2F87C . +2F87D . +2F87E . +2F87F . +2F880 . +2F881 . +2F882 . +2F883 . +2F884 . +2F885 . +2F886 . +2F887 . +2F888 . +2F889 . +2F88A . +2F88B . +2F88C . +2F88D . +2F88E . +2F88F . +2F890 . +2F891 . +2F892 . +2F893 . +2F894 . +2F895 . +2F896 . +2F897 . +2F898 . +2F899 . +2F89A . +2F89B . +2F89C . +2F89D . +2F89E . +2F89F . +2F8A0 . +2F8A1 . +2F8A2 . +2F8A3 . +2F8A4 . +2F8A5 . +2F8A6 . +2F8A7 . +2F8A8 . +2F8A9 . +2F8AA . +2F8AB . +2F8AC . +2F8AD . +2F8AE . +2F8AF . +2F8B0 . +2F8B1 . +2F8B2 . +2F8B3 . +2F8B4 . +2F8B5 . +2F8B6 . +2F8B7 . +2F8B8 . +2F8B9 . +2F8BA . +2F8BB . +2F8BC . +2F8BD . +2F8BE . +2F8BF . +2F8C0 . +2F8C1 . +2F8C2 . +2F8C3 . +2F8C4 . +2F8C5 . +2F8C6 . +2F8C7 . +2F8C8 . +2F8C9 . +2F8CA . +2F8CB . +2F8CC . +2F8CD . +2F8CE . +2F8CF . +2F8D0 . +2F8D1 . +2F8D2 . +2F8D3 . +2F8D4 . +2F8D5 . +2F8D6 . +2F8D7 . +2F8D8 . +2F8D9 . +2F8DA . +2F8DB . +2F8DC . +2F8DD . +2F8DE . +2F8DF . +2F8E0 . +2F8E1 . +2F8E2 . +2F8E3 . +2F8E4 . +2F8E5 . +2F8E6 . +2F8E7 . +2F8E8 . +2F8E9 . +2F8EA . +2F8EB . +2F8EC . +2F8ED . +2F8EE . +2F8EF . +2F8F0 . +2F8F1 . +2F8F2 . +2F8F3 . +2F8F4 . +2F8F5 . +2F8F6 . +2F8F7 . +2F8F8 . +2F8F9 . +2F8FA . +2F8FB . +2F8FC . +2F8FD . +2F8FE . +2F8FF . +2F900 . +2F901 . +2F902 . +2F903 . +2F904 . +2F905 . +2F906 . +2F907 . +2F908 . +2F909 . +2F90A . +2F90B . +2F90C . +2F90D . +2F90E . +2F90F . +2F910 . +2F911 . +2F912 . +2F913 . +2F914 . +2F915 . +2F916 . +2F917 . +2F918 . +2F919 . +2F91A . +2F91B . +2F91C . +2F91D . +2F91E . +2F91F . +2F920 . +2F921 . +2F922 . +2F923 . +2F924 . +2F925 . +2F926 . +2F927 . +2F928 . +2F929 . +2F92A . +2F92B . +2F92C . +2F92D . +2F92E . +2F92F . +2F930 . +2F931 . +2F932 . +2F933 . +2F934 . +2F935 . +2F936 . +2F937 . +2F938 . +2F939 . +2F93A . +2F93B . +2F93C . +2F93D . +2F93E . +2F93F . +2F940 . +2F941 . +2F942 . +2F943 . +2F944 . +2F945 . +2F946 . +2F947 . +2F948 . +2F949 . +2F94A . +2F94B . +2F94C . +2F94D . +2F94E . +2F94F . +2F950 . +2F951 . +2F952 . +2F953 . +2F954 . +2F955 . +2F956 . +2F957 . +2F958 . +2F959 . +2F95A . +2F95B . +2F95C . +2F95D . +2F95E . +2F95F . +2F960 . +2F961 . +2F962 . +2F963 . +2F964 . +2F965 . +2F966 . +2F967 . +2F968 . +2F969 . +2F96A . +2F96B . +2F96C . +2F96D . +2F96E . +2F96F . +2F970 . +2F971 . +2F972 . +2F973 . +2F974 . +2F975 . +2F976 . +2F977 . +2F978 . +2F979 . +2F97A . +2F97B . +2F97C . +2F97D . +2F97E . +2F97F . +2F980 . +2F981 . +2F982 . +2F983 . +2F984 . +2F985 . +2F986 . +2F987 . +2F988 . +2F989 . +2F98A . +2F98B . +2F98C . +2F98D . +2F98E . +2F98F . +2F990 . +2F991 . +2F992 . +2F993 . +2F994 . +2F995 . +2F996 . +2F997 . +2F998 . +2F999 . +2F99A . +2F99B . +2F99C . +2F99D . +2F99E . +2F99F . +2F9A0 . +2F9A1 . +2F9A2 . +2F9A3 . +2F9A4 . +2F9A5 . +2F9A6 . +2F9A7 . +2F9A8 . +2F9A9 . +2F9AA . +2F9AB . +2F9AC . +2F9AD . +2F9AE . +2F9AF . +2F9B0 . +2F9B1 . +2F9B2 . +2F9B3 . +2F9B4 . +2F9B5 . +2F9B6 . +2F9B7 . +2F9B8 . +2F9B9 . +2F9BA . +2F9BB . +2F9BC . +2F9BD . +2F9BE . +2F9BF . +2F9C0 . +2F9C1 . +2F9C2 . +2F9C3 . +2F9C4 . +2F9C5 . +2F9C6 . +2F9C7 . +2F9C8 . +2F9C9 . +2F9CA . +2F9CB . +2F9CC . +2F9CD . +2F9CE . +2F9CF . +2F9D0 . +2F9D1 . +2F9D2 . +2F9D3 . +2F9D4 . +2F9D5 . +2F9D6 . +2F9D7 . +2F9D8 . +2F9D9 . +2F9DA . +2F9DB . +2F9DC . +2F9DD . +2F9DE . +2F9DF . +2F9E0 . +2F9E1 . +2F9E2 . +2F9E3 . +2F9E4 . +2F9E5 . +2F9E6 . +2F9E7 . +2F9E8 . +2F9E9 . +2F9EA . +2F9EB . +2F9EC . +2F9ED . +2F9EE . +2F9EF . +2F9F0 . +2F9F1 . +2F9F2 . +2F9F3 . +2F9F4 . +2F9F5 . +2F9F6 . +2F9F7 . +2F9F8 . +2F9F9 . +2F9FA . +2F9FB . +2F9FC . +2F9FD . +2F9FE . +2F9FF . +2FA00 . +2FA01 . +2FA02 . +2FA03 . +2FA04 . +2FA05 . +2FA06 . +2FA07 . +2FA08 . +2FA09 . +2FA0A . +2FA0B . +2FA0C . +2FA0D . +2FA0E . +2FA0F . +2FA10 . +2FA11 . +2FA12 . +2FA13 . +2FA14 . +2FA15 . +2FA16 . +2FA17 . +2FA18 . +2FA19 . +2FA1A . +2FA1B . +2FA1C . +2FA1D . +2170 2160 +2171 2161 +2172 2162 +2173 2163 +2174 2164 +2175 2165 +2176 2166 +2177 2167 +2178 2168 +2179 2169 +217A 216A +217B 216B +217C 216C +217D 216D +217E 216E +217F 216F +24D0 24B6 +24D1 24B7 +24D2 24B8 +24D3 24B9 +24D4 24BA +24D5 24BB +24D6 24BC +24D7 24BD +24D8 24BE +24D9 24BF +24DA 24C0 +24DB 24C1 +24DC 24C2 +24DD 24C3 +24DE 24C4 +24DF 24C5 +24E0 24C6 +24E1 24C7 +24E2 24C8 +24E3 24C9 +24E4 24CA +24E5 24CB +24E6 24CC +24E7 24CD +24E8 24CE +24E9 24CF +0300 . +0301 . +0302 . +0303 . +0304 . +0305 . +0306 . +0307 . +0308 . +0309 . +030A . +030B . +030C . +030D . +030E . +030F . +0310 . +0311 . +0312 . +0313 . +0314 . +0315 . +0316 . +0317 . +0318 . +0319 . +031A . +031B . +031C . +031D . +031E . +031F . +0320 . +0321 . +0322 . +0323 . +0324 . +0325 . +0326 . +0327 . +0328 . +0329 . +032A . +032B . +032C . +032D . +032E . +032F . +0330 . +0331 . +0332 . +0333 . +0334 . +0335 . +0336 . +0337 . +0338 . +0339 . +033A . +033B . +033C . +033D . +033E . +033F . +0340 . +0341 . +0342 . +0343 . +0344 . +0345 . +0346 . +0347 . +0348 . +0349 . +034A . +034B . +034C . +034D . +034E . +034F . +0350 . +0351 . +0352 . +0353 . +0354 . +0355 . +0356 . +0357 . +0358 . +0359 . +035A . +035B . +035C . +035D . +035E . +035F . +0360 . +0361 . +0362 . +0363 . +0364 . +0365 . +0366 . +0367 . +0368 . +0369 . +036A . +036B . +036C . +036D . +036E . +036F . +0483 . +0484 . +0485 . +0486 . +0487 . +0488 . +0489 . +0591 . +0592 . +0593 . +0594 . +0595 . +0596 . +0597 . +0598 . +0599 . +059A . +059B . +059C . +059D . +059E . +059F . +05A0 . +05A1 . +05A2 . +05A3 . +05A4 . +05A5 . +05A6 . +05A7 . +05A8 . +05A9 . +05AA . +05AB . +05AC . +05AD . +05AE . +05AF . +05B0 . +05B1 . +05B2 . +05B3 . +05B4 . +05B5 . +05B6 . +05B7 . +05B8 . +05B9 . +05BA . +05BB . +05BC . +05BD . +05BF . +05C1 . +05C2 . +05C4 . +05C5 . +05C7 . +0610 . +0611 . +0612 . +0613 . +0614 . +0615 . +0616 . +0617 . +0618 . +0619 . +061A . +064B . +064C . +064D . +064E . +064F . +0650 . +0651 . +0652 . +0653 . +0654 . +0655 . +0656 . +0657 . +0658 . +0659 . +065A . +065B . +065C . +065D . +065E . +065F . +0670 . +06D6 . +06D7 . +06D8 . +06D9 . +06DA . +06DB . +06DC . +06DF . +06E0 . +06E1 . +06E2 . +06E3 . +06E4 . +06E7 . +06E8 . +06EA . +06EB . +06EC . +06ED . +0711 . +0730 . +0731 . +0732 . +0733 . +0734 . +0735 . +0736 . +0737 . +0738 . +0739 . +073A . +073B . +073C . +073D . +073E . +073F . +0740 . +0741 . +0742 . +0743 . +0744 . +0745 . +0746 . +0747 . +0748 . +0749 . +074A . +07A6 . +07A7 . +07A8 . +07A9 . +07AA . +07AB . +07AC . +07AD . +07AE . +07AF . +07B0 . +07EB . +07EC . +07ED . +07EE . +07EF . +07F0 . +07F1 . +07F2 . +07F3 . +0816 . +0817 . +0818 . +0819 . +081B . +081C . +081D . +081E . +081F . +0820 . +0821 . +0822 . +0823 . +0825 . +0826 . +0827 . +0829 . +082A . +082B . +082C . +082D . +0859 . +085A . +085B . +08E4 . +08E5 . +08E6 . +08E7 . +08E8 . +08E9 . +08EA . +08EB . +08EC . +08ED . +08EE . +08EF . +08F0 . +08F1 . +08F2 . +08F3 . +08F4 . +08F5 . +08F6 . +08F7 . +08F8 . +08F9 . +08FA . +08FB . +08FC . +08FD . +08FE . +0900 . +0901 . +0902 . +0903 . +093A . +093B . +093C . +093E . +093F . +0940 . +0941 . +0942 . +0943 . +0944 . +0945 . +0946 . +0947 . +0948 . +0949 . +094A . +094B . +094C . +094D . +094E . +094F . +0951 . +0952 . +0953 . +0954 . +0955 . +0956 . +0957 . +0962 . +0963 . +0981 . +0982 . +0983 . +09BC . +09BE . +09BF . +09C0 . +09C1 . +09C2 . +09C3 . +09C4 . +09C7 . +09C8 . +09CB . +09CC . +09CD . +09D7 . +09E2 . +09E3 . +0A01 . +0A02 . +0A03 . +0A3C . +0A3E . +0A3F . +0A40 . +0A41 . +0A42 . +0A47 . +0A48 . +0A4B . +0A4C . +0A4D . +0A51 . +0A70 . +0A71 . +0A75 . +0A81 . +0A82 . +0A83 . +0ABC . +0ABE . +0ABF . +0AC0 . +0AC1 . +0AC2 . +0AC3 . +0AC4 . +0AC5 . +0AC7 . +0AC8 . +0AC9 . +0ACB . +0ACC . +0ACD . +0AE2 . +0AE3 . +0B01 . +0B02 . +0B03 . +0B3C . +0B3E . +0B3F . +0B40 . +0B41 . +0B42 . +0B43 . +0B44 . +0B47 . +0B48 . +0B4B . +0B4C . +0B4D . +0B56 . +0B57 . +0B62 . +0B63 . +0B82 . +0BBE . +0BBF . +0BC0 . +0BC1 . +0BC2 . +0BC6 . +0BC7 . +0BC8 . +0BCA . +0BCB . +0BCC . +0BCD . +0BD7 . +0C01 . +0C02 . +0C03 . +0C3E . +0C3F . +0C40 . +0C41 . +0C42 . +0C43 . +0C44 . +0C46 . +0C47 . +0C48 . +0C4A . +0C4B . +0C4C . +0C4D . +0C55 . +0C56 . +0C62 . +0C63 . +0C82 . +0C83 . +0CBC . +0CBE . +0CBF . +0CC0 . +0CC1 . +0CC2 . +0CC3 . +0CC4 . +0CC6 . +0CC7 . +0CC8 . +0CCA . +0CCB . +0CCC . +0CCD . +0CD5 . +0CD6 . +0CE2 . +0CE3 . +0D02 . +0D03 . +0D3E . +0D3F . +0D40 . +0D41 . +0D42 . +0D43 . +0D44 . +0D46 . +0D47 . +0D48 . +0D4A . +0D4B . +0D4C . +0D4D . +0D57 . +0D62 . +0D63 . +0D82 . +0D83 . +0DCA . +0DCF . +0DD0 . +0DD1 . +0DD2 . +0DD3 . +0DD4 . +0DD6 . +0DD8 . +0DD9 . +0DDA . +0DDB . +0DDC . +0DDD . +0DDE . +0DDF . +0DF2 . +0DF3 . +0E31 . +0E34 . +0E35 . +0E36 . +0E37 . +0E38 . +0E39 . +0E3A . +0E47 . +0E48 . +0E49 . +0E4A . +0E4B . +0E4C . +0E4D . +0E4E . +0EB1 . +0EB4 . +0EB5 . +0EB6 . +0EB7 . +0EB8 . +0EB9 . +0EBB . +0EBC . +0EC8 . +0EC9 . +0ECA . +0ECB . +0ECC . +0ECD . +0F18 . +0F19 . +0F35 . +0F37 . +0F39 . +0F3E . +0F3F . +0F71 . +0F72 . +0F73 . +0F74 . +0F75 . +0F76 . +0F77 . +0F78 . +0F79 . +0F7A . +0F7B . +0F7C . +0F7D . +0F7E . +0F7F . +0F80 . +0F81 . +0F82 . +0F83 . +0F84 . +0F86 . +0F87 . +0F8D . +0F8E . +0F8F . +0F90 . +0F91 . +0F92 . +0F93 . +0F94 . +0F95 . +0F96 . +0F97 . +0F99 . +0F9A . +0F9B . +0F9C . +0F9D . +0F9E . +0F9F . +0FA0 . +0FA1 . +0FA2 . +0FA3 . +0FA4 . +0FA5 . +0FA6 . +0FA7 . +0FA8 . +0FA9 . +0FAA . +0FAB . +0FAC . +0FAD . +0FAE . +0FAF . +0FB0 . +0FB1 . +0FB2 . +0FB3 . +0FB4 . +0FB5 . +0FB6 . +0FB7 . +0FB8 . +0FB9 . +0FBA . +0FBB . +0FBC . +0FC6 . +102B . +102C . +102D . +102E . +102F . +1030 . +1031 . +1032 . +1033 . +1034 . +1035 . +1036 . +1037 . +1038 . +1039 . +103A . +103B . +103C . +103D . +103E . +1056 . +1057 . +1058 . +1059 . +105E . +105F . +1060 . +1062 . +1063 . +1064 . +1067 . +1068 . +1069 . +106A . +106B . +106C . +106D . +1071 . +1072 . +1073 . +1074 . +1082 . +1083 . +1084 . +1085 . +1086 . +1087 . +1088 . +1089 . +108A . +108B . +108C . +108D . +108F . +109A . +109B . +109C . +109D . +135D . +135E . +135F . +1712 . +1713 . +1714 . +1732 . +1733 . +1734 . +1752 . +1753 . +1772 . +1773 . +17B4 . +17B5 . +17B6 . +17B7 . +17B8 . +17B9 . +17BA . +17BB . +17BC . +17BD . +17BE . +17BF . +17C0 . +17C1 . +17C2 . +17C3 . +17C4 . +17C5 . +17C6 . +17C7 . +17C8 . +17C9 . +17CA . +17CB . +17CC . +17CD . +17CE . +17CF . +17D0 . +17D1 . +17D2 . +17D3 . +17DD . +180B . +180C . +180D . +18A9 . +1920 . +1921 . +1922 . +1923 . +1924 . +1925 . +1926 . +1927 . +1928 . +1929 . +192A . +192B . +1930 . +1931 . +1932 . +1933 . +1934 . +1935 . +1936 . +1937 . +1938 . +1939 . +193A . +193B . +19B0 . +19B1 . +19B2 . +19B3 . +19B4 . +19B5 . +19B6 . +19B7 . +19B8 . +19B9 . +19BA . +19BB . +19BC . +19BD . +19BE . +19BF . +19C0 . +19C8 . +19C9 . +1A17 . +1A18 . +1A19 . +1A1A . +1A1B . +1A55 . +1A56 . +1A57 . +1A58 . +1A59 . +1A5A . +1A5B . +1A5C . +1A5D . +1A5E . +1A60 . +1A61 . +1A62 . +1A63 . +1A64 . +1A65 . +1A66 . +1A67 . +1A68 . +1A69 . +1A6A . +1A6B . +1A6C . +1A6D . +1A6E . +1A6F . +1A70 . +1A71 . +1A72 . +1A73 . +1A74 . +1A75 . +1A76 . +1A77 . +1A78 . +1A79 . +1A7A . +1A7B . +1A7C . +1A7F . +1B00 . +1B01 . +1B02 . +1B03 . +1B04 . +1B34 . +1B35 . +1B36 . +1B37 . +1B38 . +1B39 . +1B3A . +1B3B . +1B3C . +1B3D . +1B3E . +1B3F . +1B40 . +1B41 . +1B42 . +1B43 . +1B44 . +1B6B . +1B6C . +1B6D . +1B6E . +1B6F . +1B70 . +1B71 . +1B72 . +1B73 . +1B80 . +1B81 . +1B82 . +1BA1 . +1BA2 . +1BA3 . +1BA4 . +1BA5 . +1BA6 . +1BA7 . +1BA8 . +1BA9 . +1BAA . +1BAB . +1BAC . +1BAD . +1BE6 . +1BE7 . +1BE8 . +1BE9 . +1BEA . +1BEB . +1BEC . +1BED . +1BEE . +1BEF . +1BF0 . +1BF1 . +1BF2 . +1BF3 . +1C24 . +1C25 . +1C26 . +1C27 . +1C28 . +1C29 . +1C2A . +1C2B . +1C2C . +1C2D . +1C2E . +1C2F . +1C30 . +1C31 . +1C32 . +1C33 . +1C34 . +1C35 . +1C36 . +1C37 . +1CD0 . +1CD1 . +1CD2 . +1CD4 . +1CD5 . +1CD6 . +1CD7 . +1CD8 . +1CD9 . +1CDA . +1CDB . +1CDC . +1CDD . +1CDE . +1CDF . +1CE0 . +1CE1 . +1CE2 . +1CE3 . +1CE4 . +1CE5 . +1CE6 . +1CE7 . +1CE8 . +1CED . +1CF2 . +1CF3 . +1CF4 . +1DC0 . +1DC1 . +1DC2 . +1DC3 . +1DC4 . +1DC5 . +1DC6 . +1DC7 . +1DC8 . +1DC9 . +1DCA . +1DCB . +1DCC . +1DCD . +1DCE . +1DCF . +1DD0 . +1DD1 . +1DD2 . +1DD3 . +1DD4 . +1DD5 . +1DD6 . +1DD7 . +1DD8 . +1DD9 . +1DDA . +1DDB . +1DDC . +1DDD . +1DDE . +1DDF . +1DE0 . +1DE1 . +1DE2 . +1DE3 . +1DE4 . +1DE5 . +1DE6 . +1DFC . +1DFD . +1DFE . +1DFF . +20D0 . +20D1 . +20D2 . +20D3 . +20D4 . +20D5 . +20D6 . +20D7 . +20D8 . +20D9 . +20DA . +20DB . +20DC . +20DD . +20DE . +20DF . +20E0 . +20E1 . +20E2 . +20E3 . +20E4 . +20E5 . +20E6 . +20E7 . +20E8 . +20E9 . +20EA . +20EB . +20EC . +20ED . +20EE . +20EF . +20F0 . +2CEF . +2CF0 . +2CF1 . +2D7F . +2DE0 . +2DE1 . +2DE2 . +2DE3 . +2DE4 . +2DE5 . +2DE6 . +2DE7 . +2DE8 . +2DE9 . +2DEA . +2DEB . +2DEC . +2DED . +2DEE . +2DEF . +2DF0 . +2DF1 . +2DF2 . +2DF3 . +2DF4 . +2DF5 . +2DF6 . +2DF7 . +2DF8 . +2DF9 . +2DFA . +2DFB . +2DFC . +2DFD . +2DFE . +2DFF . +302A . +302B . +302C . +302D . +302E . +302F . +3099 . +309A . +A66F . +A670 . +A671 . +A672 . +A674 . +A675 . +A676 . +A677 . +A678 . +A679 . +A67A . +A67B . +A67C . +A67D . +A69F . +A6F0 . +A6F1 . +A802 . +A806 . +A80B . +A823 . +A824 . +A825 . +A826 . +A827 . +A880 . +A881 . +A8B4 . +A8B5 . +A8B6 . +A8B7 . +A8B8 . +A8B9 . +A8BA . +A8BB . +A8BC . +A8BD . +A8BE . +A8BF . +A8C0 . +A8C1 . +A8C2 . +A8C3 . +A8C4 . +A8E0 . +A8E1 . +A8E2 . +A8E3 . +A8E4 . +A8E5 . +A8E6 . +A8E7 . +A8E8 . +A8E9 . +A8EA . +A8EB . +A8EC . +A8ED . +A8EE . +A8EF . +A8F0 . +A8F1 . +A926 . +A927 . +A928 . +A929 . +A92A . +A92B . +A92C . +A92D . +A947 . +A948 . +A949 . +A94A . +A94B . +A94C . +A94D . +A94E . +A94F . +A950 . +A951 . +A952 . +A953 . +A980 . +A981 . +A982 . +A983 . +A9B3 . +A9B4 . +A9B5 . +A9B6 . +A9B7 . +A9B8 . +A9B9 . +A9BA . +A9BB . +A9BC . +A9BD . +A9BE . +A9BF . +A9C0 . +AA29 . +AA2A . +AA2B . +AA2C . +AA2D . +AA2E . +AA2F . +AA30 . +AA31 . +AA32 . +AA33 . +AA34 . +AA35 . +AA36 . +AA43 . +AA4C . +AA4D . +AA7B . +AAB0 . +AAB2 . +AAB3 . +AAB4 . +AAB7 . +AAB8 . +AABE . +AABF . +AAC1 . +AAEB . +AAEC . +AAED . +AAEE . +AAEF . +AAF5 . +AAF6 . +ABE3 . +ABE4 . +ABE5 . +ABE6 . +ABE7 . +ABE8 . +ABE9 . +ABEA . +ABEC . +ABED . +FB1E . +FE00 . +FE01 . +FE02 . +FE03 . +FE04 . +FE05 . +FE06 . +FE07 . +FE08 . +FE09 . +FE0A . +FE0B . +FE0C . +FE0D . +FE0E . +FE0F . +FE20 . +FE21 . +FE22 . +FE23 . +FE24 . +FE25 . +FE26 . +101FD . +10A01 . +10A02 . +10A03 . +10A05 . +10A06 . +10A0C . +10A0D . +10A0E . +10A0F . +10A38 . +10A39 . +10A3A . +10A3F . +11000 . +11001 . +11002 . +11038 . +11039 . +1103A . +1103B . +1103C . +1103D . +1103E . +1103F . +11040 . +11041 . +11042 . +11043 . +11044 . +11045 . +11046 . +11080 . +11081 . +11082 . +110B0 . +110B1 . +110B2 . +110B3 . +110B4 . +110B5 . +110B6 . +110B7 . +110B8 . +110B9 . +110BA . +11100 . +11101 . +11102 . +11127 . +11128 . +11129 . +1112A . +1112B . +1112C . +1112D . +1112E . +1112F . +11130 . +11131 . +11132 . +11133 . +11134 . +11180 . +11181 . +11182 . +111B3 . +111B4 . +111B5 . +111B6 . +111B7 . +111B8 . +111B9 . +111BA . +111BB . +111BC . +111BD . +111BE . +111BF . +111C0 . +116AB . +116AC . +116AD . +116AE . +116AF . +116B0 . +116B1 . +116B2 . +116B3 . +116B4 . +116B5 . +116B6 . +116B7 . +16F51 . +16F52 . +16F53 . +16F54 . +16F55 . +16F56 . +16F57 . +16F58 . +16F59 . +16F5A . +16F5B . +16F5C . +16F5D . +16F5E . +16F5F . +16F60 . +16F61 . +16F62 . +16F63 . +16F64 . +16F65 . +16F66 . +16F67 . +16F68 . +16F69 . +16F6A . +16F6B . +16F6C . +16F6D . +16F6E . +16F6F . +16F70 . +16F71 . +16F72 . +16F73 . +16F74 . +16F75 . +16F76 . +16F77 . +16F78 . +16F79 . +16F7A . +16F7B . +16F7C . +16F7D . +16F7E . +16F8F . +16F90 . +16F91 . +16F92 . +1D165 . +1D166 . +1D167 . +1D168 . +1D169 . +1D16D . +1D16E . +1D16F . +1D170 . +1D171 . +1D172 . +1D17B . +1D17C . +1D17D . +1D17E . +1D17F . +1D180 . +1D181 . +1D182 . +1D185 . +1D186 . +1D187 . +1D188 . +1D189 . +1D18A . +1D18B . +1D1AA . +1D1AB . +1D1AC . +1D1AD . +1D242 . +1D243 . +1D244 . +E0100 . +E0101 . +E0102 . +E0103 . +E0104 . +E0105 . +E0106 . +E0107 . +E0108 . +E0109 . +E010A . +E010B . +E010C . +E010D . +E010E . +E010F . +E0110 . +E0111 . +E0112 . +E0113 . +E0114 . +E0115 . +E0116 . +E0117 . +E0118 . +E0119 . +E011A . +E011B . +E011C . +E011D . +E011E . +E011F . +E0120 . +E0121 . +E0122 . +E0123 . +E0124 . +E0125 . +E0126 . +E0127 . +E0128 . +E0129 . +E012A . +E012B . +E012C . +E012D . +E012E . +E012F . +E0130 . +E0131 . +E0132 . +E0133 . +E0134 . +E0135 . +E0136 . +E0137 . +E0138 . +E0139 . +E013A . +E013B . +E013C . +E013D . +E013E . +E013F . +E0140 . +E0141 . +E0142 . +E0143 . +E0144 . +E0145 . +E0146 . +E0147 . +E0148 . +E0149 . +E014A . +E014B . +E014C . +E014D . +E014E . +E014F . +E0150 . +E0151 . +E0152 . +E0153 . +E0154 . +E0155 . +E0156 . +E0157 . +E0158 . +E0159 . +E015A . +E015B . +E015C . +E015D . +E015E . +E015F . +E0160 . +E0161 . +E0162 . +E0163 . +E0164 . +E0165 . +E0166 . +E0167 . +E0168 . +E0169 . +E016A . +E016B . +E016C . +E016D . +E016E . +E016F . +E0170 . +E0171 . +E0172 . +E0173 . +E0174 . +E0175 . +E0176 . +E0177 . +E0178 . +E0179 . +E017A . +E017B . +E017C . +E017D . +E017E . +E017F . +E0180 . +E0181 . +E0182 . +E0183 . +E0184 . +E0185 . +E0186 . +E0187 . +E0188 . +E0189 . +E018A . +E018B . +E018C . +E018D . +E018E . +E018F . +E0190 . +E0191 . +E0192 . +E0193 . +E0194 . +E0195 . +E0196 . +E0197 . +E0198 . +E0199 . +E019A . +E019B . +E019C . +E019D . +E019E . +E019F . +E01A0 . +E01A1 . +E01A2 . +E01A3 . +E01A4 . +E01A5 . +E01A6 . +E01A7 . +E01A8 . +E01A9 . +E01AA . +E01AB . +E01AC . +E01AD . +E01AE . +E01AF . +E01B0 . +E01B1 . +E01B2 . +E01B3 . +E01B4 . +E01B5 . +E01B6 . +E01B7 . +E01B8 . +E01B9 . +E01BA . +E01BB . +E01BC . +E01BD . +E01BE . +E01BF . +E01C0 . +E01C1 . +E01C2 . +E01C3 . +E01C4 . +E01C5 . +E01C6 . +E01C7 . +E01C8 . +E01C9 . +E01CA . +E01CB . +E01CC . +E01CD . +E01CE . +E01CF . +E01D0 . +E01D1 . +E01D2 . +E01D3 . +E01D4 . +E01D5 . +E01D6 . +E01D7 . +E01D8 . +E01D9 . +E01DA . +E01DB . +E01DC . +E01DD . +E01DE . +E01DF . +E01E0 . +E01E1 . +E01E2 . +E01E3 . +E01E4 . +E01E5 . +E01E6 . +E01E7 . +E01E8 . +E01E9 . +E01EA . +E01EB . +E01EC . +E01ED . +E01EE . +E01EF . +{} {} \_relax +\_def\_tmp #1 #2 {\_lccode"#2="#1 \_uccode"#2="#2 } +\_tmp 0069 0130 +\_tmp 03B8 03F4 +\_tmp 00DF 1E9E +\_tmp 03C9 2126 +\_tmp 006B 212A +\_tmp 00E5 212B +\_def\_tmp #1 #2 {\_lccode"#1="#1 \_uccode"#1="#2 } +\_tmp 0131 0049 +\_tmp 017F 0053 +\_tmp 03BC 039C +\_tmp 03C2 03A3 +\_tmp 03D0 0392 +\_tmp 03D1 0398 +\_tmp 03D5 03A6 +\_tmp 03D6 03A0 +\_tmp 03F0 039A +\_tmp 03F1 03A1 +\_tmp 03F5 0395 +\_tmp 1E9B 1E60 +\_tmp 1FBE 0399 +% end of file +\_endcode + +All codes in unicode table keep information about pairs lowecase-uppercase +letters or single letter. We need to read such information and set +appropriate `\lccode` and `\uccode`. The `\catcode` above the code 127 +is not set, i.\,e.\ the `\catcode`=12 for all codes above 127. + +The file `uni-lcuc.opm` does this work. It is not much interesting file, only +first few lines from 15928 lines in total is shown here. + +{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip}\ttline=-1 +\def\docfile{uni-lcuc.opm} +\verbinput (3-30) uni-lcuc.opm +\vskip-\medskipamount +\noindent\typosize[8/]\dots etc. (see {\tt\Brown\docfile}) +} diff --git a/Master/texmf-dist/tex/optex/base/unimath-codes.opm b/Master/texmf-dist/tex/optex/base/unimath-codes.opm new file mode 100644 index 00000000000..6e83ab94ad1 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/unimath-codes.opm @@ -0,0 +1,439 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \_ncharrmA {Uni math codes <2021-03-11>} % preloaded on demand by \loadmath + + \_doc ----------------------------- + The control sequences for `\alpha`, `\beta` etc are redefined here. + The `\alpha` expands to the character with Unicode `"03B1`, this is a normal + character $α$. You can type it directly in your editor if you know how + to do this. + \_cod ----------------------------- + +\_umathnumB="0391 +\_greekdef \Alpha \Beta \Gamma \Delta \Epsilon \Zeta \Eta \Theta \Iota \Kappa + \Lambda \Mu \Nu \Xi \Omicron \Pi \Rho \varTheta \Sigma \Tau \Upsilon \Phi + \Chi \Psi \Omega \_relax + +\_umathnumB="03B1 +\_greekdef \alpha \beta \gamma \delta \varepsilon \zeta \eta \theta \iota \kappa + \lambda \mu \nu \xi \omicron \pi \rho \varsigma \sigma \tau \upsilon + \varphi \chi \psi \omega \vardelta \epsilon \vartheta \varkappa \phi + \varrho \varpi \_relax + + \_doc ----------------------------- + The math alphabets are declared here using the + \^`\_umathrange {<range>}<class><family><starting-code>` macro. + \_cod ----------------------------- + +\_chardef\_ncharrmA=`A \_chardef\_ncharrma=`a +\_chardef\_ncharbfA="1D400 \_chardef\_ncharbfa="1D41A +\_chardef\_ncharitA="1D434 \_chardef\_ncharita="1D44E +\_chardef\_ncharbiA="1D468 \_chardef\_ncharbia="1D482 +\_chardef\_ncharclA="1D49C \_chardef\_ncharcla="1D4B6 +\_chardef\_ncharbcA="1D4D0 \_chardef\_ncharbca="1D4EA +\_chardef\_ncharfrA="1D504 \_chardef\_ncharfra="1D51E +\_chardef\_ncharbrA="1D56C \_chardef\_ncharbra="1D586 +\_chardef\_ncharbbA="1D538 \_chardef\_ncharbba="1D552 +\_chardef\_ncharsnA="1D5A0 \_chardef\_ncharsna="1D5BA +\_chardef\_ncharbsA="1D5D4 \_chardef\_ncharbsa="1D5EE +\_chardef\_ncharsiA="1D608 \_chardef\_ncharsia="1D622 +\_chardef\_ncharsxA="1D63C \_chardef\_ncharsxa="1D656 +\_chardef\_ncharttA="1D670 \_chardef\_nchartta="1D68A + +\_protected\_def\_rmvariables {\_umathrange{A-Z}71\_ncharrmA \_umathrange{a-z}71\_ncharrma} +\_protected\_def\_bfvariables {\_umathrange{A-Z}71\_ncharbfA \_umathrange{a-z}71\_ncharbfa} +\_protected\_def\_itvariables {\_umathrange{A-Z}71\_ncharitA \_umathrange{a-z}71\_ncharita} +\_protected\_def\_bivariables {\_umathrange{A-Z}71\_ncharbiA \_umathrange{a-z}71\_ncharbia} +\_protected\_def\_calvariables {\_umathrange{A-Z}71\_ncharclA \_umathrange{a-z}71\_ncharcla} +\_protected\_def\_bcalvariables {\_umathrange{A-Z}71\_ncharbcA \_umathrange{a-z}71\_ncharbca} +\_protected\_def\_frakvariables {\_umathrange{A-Z}71\_ncharfrA \_umathrange{a-z}71\_ncharfra} +\_protected\_def\_bfrakvariables {\_umathrange{A-Z}71\_ncharbrA \_umathrange{a-z}71\_ncharbra} +\_protected\_def\_bbvariables {\_umathrange{A-Z}71\_ncharbbA \_umathrange{a-z}71\_ncharbba} +\_protected\_def\_sansvariables {\_umathrange{A-Z}71\_ncharsnA \_umathrange{a-z}71\_ncharsna} +\_protected\_def\_bsansvariables {\_umathrange{A-Z}71\_ncharbsA \_umathrange{a-z}71\_ncharbsa} +\_protected\_def\_isansvariables {\_umathrange{A-Z}71\_ncharsiA \_umathrange{a-z}71\_ncharsia} +\_protected\_def\_bisansvariables {\_umathrange{A-Z}71\_ncharsxA \_umathrange{a-z}71\_ncharsxa} +\_protected\_def\_ttvariables {\_umathrange{A-Z}71\_ncharttA \_umathrange{a-z}71\_nchartta} + +\_chardef\_greekrmA="0391 \_chardef\_greekrma="03B1 +\_chardef\_greekbfA="1D6A8 \_chardef\_greekbfa="1D6C2 +\_chardef\_greekitA="1D6E2 \_chardef\_greekita="1D6FC +\_chardef\_greekbiA="1D71C \_chardef\_greekbia="1D736 +\_chardef\_greeksnA="1D756 \_chardef\_greeksna="1D770 +\_chardef\_greeksiA="1D790 \_chardef\_greeksia="1D7AA + +\_protected\_def\_itgreek {\_umathrangegreek71\_greekita} +\_protected\_def\_rmgreek {\_umathrangegreek71\_greekrma} +\_protected\_def\_bfgreek {\_umathrangegreek71\_greekbfa} +\_protected\_def\_bigreek {\_umathrangegreek71\_greekbia} +\_protected\_def\_bsansgreek {\_umathrangegreek71\_greeksna} +\_protected\_def\_bisansgreek{\_umathrangegreek71\_greeksia} +\_protected\_def\_itGreek {\_umathrangeGREEK71\_greekitA} +\_protected\_def\_rmGreek {\_umathrangeGREEK71\_greekrmA} +\_protected\_def\_bfGreek {\_umathrangeGREEK71\_greekbfA} +\_protected\_def\_biGreek {\_umathrangeGREEK71\_greekbiA} +\_protected\_def\_bsansGreek {\_umathrangeGREEK71\_greeksnA} +\_protected\_def\_bisansGreek{\_umathrangeGREEK71\_greeksiA} + +\_chardef\_digitrmO=`0 +\_chardef\_digitbfO="1D7CE +\_chardef\_digitbbO="1D7D8 +\_chardef\_digitsnO="1D7E2 +\_chardef\_digitbsO="1D7EC +\_chardef\_digitttO="1D7F6 + +\_protected\_def\_rmdigits {\_umathrange{0-9}71\_digitrmO} +\_protected\_def\_bfdigits {\_umathrange{0-9}71\_digitbfO} +\_protected\_def\_bbdigits {\_umathrange{0-9}71\_digitbbO} +\_protected\_def\_sansdigits {\_umathrange{0-9}71\_digitsnO} +\_protected\_def\_bsansdigits {\_umathrange{0-9}71\_digitbsO} +\_protected\_def\_ttdigits {\_umathrange{0-9}71\_digitttO} + + \_doc ----------------------------- + The \`\cal`, \`\bbchar`, \`\frak`, \`\script` + and + the \`\rm`, \`\bf`, \`\it`, \`\bi`, \`\tt` are defined here. + Their \"8bit definitions" from the file `math-preload.opm` + (section~\ref[math-preload]) are removed.\nl + You can redefine them again if you need different behavior (for example + you don't want to use sans serif bold in math). What to do: + \begtt \advance\hsize by2em + \_protected\_def\_bf + {\_tryloadbf\_tenbf \_inmath{\_bfvariables\_bfgreek\_bfGreek\_bfdigits}} + \_protected\_def\_bi + {\_tryloadbi\_tenbi \_inmath{\_bivariables\_bigreek\_bfGreek\_bfdigits}} + \_public \bf \bi ; + \endtt + \`\_inmath` `{<cmds>}` applies `<cmds>` only in math mode. + \_cod ----------------------------- + +\_protected\_def\_inmath#1{\_relax \_ifmmode#1\_fi} % to keep off \loop processing in text mode + +% You can redefine these macros to follow your wishes. +% For example, you need upright lowercase greek letters, you don't need +% \bf and \bi behave as sans serif in math, ... + +\_protected\_def\_rm {\_tryloadrm \_tenrm \_inmath{\_rmvariables \_rmdigits}} +\_protected\_def\_it {\_tryloadit \_tenit \_inmath{\_itvariables}} +\_protected\_def\_bf + {\_tryloadbf \_tenbf \_inmath{\_bsansvariables \_bsansgreek \_bsansGreek \_bsansdigits}} +\_protected\_def\_bi + {\_tryloadbi \_tenbi \_inmath{\_bisansvariables \_bisansgreek \_bsansGreek \_bsansdigits}} +\_protected\_def\_tt {\_tryloadtt \_tentt \_inmath{\_ttvariables \_ttdigits}} +\_protected\_def\_bbchar {\_bbvariables \_bbdigits} +\_protected\_def\_cal {\_calvariables} +\_protected\_def\_frak {\_frakvariables} +\_protected\_def\_misans {\_isansvariables \_sansdigits} +\_protected\_def\_mbisans {\_bisansvariables \_bisansgreek \_bsansGreek \_bsansdigits} +\_protected\_def\_script {\_rmvariables \_fam4 } +\_protected\_def\_mit {\_itvariables \_rmdigits \_itgreek \_rmGreek } + +\_public \rm \it \bf \bi \tt \bbchar \cal \frak \misans \mbisans \script \mit ; + + \_doc ----------------------------- + Each Unicode slot carries information about math type. This is saved in + the file `mathclass.txt` which is copied to `mathclass.opm` The file + has the following format: + {\vitt{mathclass.opm}\verbinput (70-85) mathclass.opm } + We have to read this information and convert it to the `\Umathcode`s. + \_cod ----------------------------- + +\_begingroup % \input mathclass.opm (which is a copy of MathClass.txt): + \_def\_p#1;#2{\_edef\_tmp{\_pB#2}\_ifx\_tmp\_empty \_else\_pA#1....\_end#2\_fi} + \_def\_pA#1..#2..#3\_end#4{% + \_ifx\_relax#2\_relax \_pset{"#1}{#4}\_else + \_umathnumA="#1 + \_loop + \_pset{\_umathnumA}{#4}% + \_ifnum\_umathnumA<"#2 \_advance\_umathnumA by1 + \_repeat + \_fi + } + \_def\_pB#1{\_if#1L1\_fi \_if#1B2\_fi \_if#1V2\_fi \_if#1R3\_fi \_if#1N0\_fi \_if#1U0\_fi + \_if#1F0\_fi \_if#1O4\_fi \_if#1C5\_fi \_if#1P6\_fi \_if#1A7\_fi} + \_def\_pset#1#2{\_global\_Umathcode#1=\_tmp\_space 1 #1\_relax + \_if#2O\_global\_Udelcode#1=1 #1\_relax\_fi + \_if#2C\_global\_Udelcode#1=1 #1\_relax\_fi + \_if#2F\_global\_Udelcode#1=1 #1\_relax\_fi + } + \_catcode`#=14 + \_everypar={\_setbox0=\_lastbox \_par \_p} + \_setbox0=\_vbox{\_input mathclass.opm } +\_endgroup + + \_doc ----------------------------- + Each math symbol has its declaration in the file `unicode-math-table.tex` + which is copied to `unimath-table.opm`. The file has the following format: + {\vitt{unimath-table.opm}\verbinput (70-85) unimath-table.opm } + We have to read this information and convert it to the Unicode math codes. + \_cod ----------------------------- + +\_begingroup % \input unimath-table.opm (it is a copy of unicode-math-table.tex): + \_def\UnicodeMathSymbol #1#2#3#4{% + \_ifnum#1=\_Umathcodenum#1 % the code isn't set by mathclass.opm + \_global\_Umathchardef#2=0 1 #1 \_global\_Umathcode#1=0 1 #1 + \_else \_global\_Umathcharnumdef#2=\_Umathcodenum#1 \_fi + \_ifx#3\_mathopen \_gdef#2{\_Udelimiter 4 1 #1 }\_fi + \_ifx#3\_mathclose \_gdef#2{\_Udelimiter 5 1 #1 }\_fi + \_ifx#3\_mathaccent \_gdef#2{\_Umathaccent fixed 7 1 #1 }\_fi + } + \_input unimath-table.opm +\_endgroup + + \_doc ----------------------------- + Many special characters must be declared with care... + \_cod ----------------------------- + +\_global\_Udelcode`<=1 "027E8 % these characters have different meaning +\_global\_Udelcode`>=1 "027E9 % as normal and as delimeter + +\_mit % default math alphabets setting + +% hyphen character is transformed to minus: +\_Umathcode `- = 2 1 "2212 + +% mathclass defines : as Punct, plain.tex as Rel, we keep mathclass, +% i.e. there is difference from plain.tex, you can use $f:A\to B$. + +\_let\{=\lbrace \_let\}=\rbrace + +% mathclas defines ! as Ord, plain.tex as Close +\_Umathcode `! = 5 1 `! % keep plain.tex declaration +\_Umathchardef \mathexclam = 5 1 `! +% mathclas defines ? as Punct, plain.tex as Close +\_Umathcode `? = 5 1 `? % keep plain.tex declaration +\_Umathchardef \mathquestion = 5 1 `? + +\_Umathcode `* = 2 1 "02217 % equivalent to \ast, like in plain TeX + +\_protected\_def \_sqrt {\_Uradical 1 "0221A } +\_protected\_def \_cuberoot {\_Uradical 1 "0221B } +\_protected\_def \_fourthroot {\_Uradical 1 "0221C } + +\_public \sqrt \cuberoot \fourthroot ; + +\_def\_intwithnolimits#1#2 {\_ifx#1\_relax \_else + \_ea\_let\_csname\_csstring#1op\_endcsname=#1% + \_ea\_def\_ea #1\_ea{\_csname\_csstring#1op\_endcsname \_nolimits}% + \_bgroup \_lccode`\~=#2 \_lowercase{\_egroup \_mathcode`~="8000 \_let ~=#1}% + \_ea \_intwithnolimits \_fi +} +\_intwithnolimits \int "0222B \iint "0222C \iiint "0222D + \oint "0222E \oiint "0222F \oiiint "02230 + \intclockwise "02231 \varointclockwise "02232 \ointctrclockwise "02233 + \sumint "02A0B \iiiint "02A0C \intbar "02A0D \intBar "02A0E \fint "02A0F + \pointint "02A15 \sqint "02A16 \intlarhk "02A17 \intx "02A18 + \intcap "02A19 \intcup "02A1A \upint "02A1B \lowint "02A1C \_relax "0 + +\_protected\_def \vert {\_Udelimiter 0 1 "07C } +\_protected\_def \Vert {\_Udelimiter 0 1 "02016 } +\_protected\_def \Vvert {\_Udelimiter 0 1 "02980 } + +\_protected\_def \_overbrace #1{\mathop {\Umathaccent 7 1 "023DE{#1}}\limits} +\_protected\_def \_underbrace #1{\mathop {\Umathaccent bottom 7 1 "023DF{#1}}\limits} +\_protected\_def \_overparen #1{\mathop {\Umathaccent 7 1 "023DC{#1}}\limits} +\_protected\_def \_underparen #1{\mathop {\Umathaccent bottom 7 1 "023DD{#1}}\limits} +\_protected\_def \_overbracket #1{\mathop {\Umathaccent 7 1 "023B4{#1}}\limits} +\_protected\_def \_underbracket #1{\mathop {\Umathaccent bottom 7 1 "023B5{#1}}\limits} + +\_public \overbrace \underbrace \overparen \underparen \overbracket \underbracket ; + +\_protected\def \widehat {\Umathaccent 7 1 "00302 } +\_protected\def \widetilde {\Umathaccent 7 1 "00303 } +\_protected\def \overleftharpoon {\Umathaccent 7 1 "020D0 } +\_protected\def \overrightharpoon {\Umathaccent 7 1 "020D1 } +\_protected\def \overleftarrow {\Umathaccent 7 1 "020D6 } +\_protected\def \overrightarrow {\Umathaccent 7 1 "020D7 } +\_protected\def \overleftrightarrow {\Umathaccent 7 1 "020E1 } + +\_mathchardef\ldotp="612E +\_let\|=\Vert +\_mathcode`\_="8000 + +\_global\_Umathcode "22EF = 0 1 "22EF % mathclass says that it is Rel +\_global\_Umathcode "002E = 0 1 "002E % mathclass says that dot is Punct +\_global\_Umathchardef \unicodecdots = 0 1 "22EF + +\_global\_Umathcode `/ = 0 1 `/ % mathclass says that / is Bin, Plain TeX says that it is Ord. + +% compressed dots in S and SS styles (usable in \matrix when it is in T, S and SS style) +\_protected\_def \vdots {\_relax \_ifnum \_mathstyle>3 \_unicodevdots \_else \_vdots \_fi} +\_protected\_def \ddots {\_relax \_ifnum \_mathstyle>3 \_unicodeddots \_else \_ddots \_fi} +\_protected\_def \adots {\_relax \_ifnum \_mathstyle>3 \_unicodeadots \_else \_adots \_fi} + +% Unicode superscripts (²) and subscripts as simple macros with \mathcode"8000 +\_bgroup + \_def\_tmp#1#2{\_global\_mathcode#1="8000 \_lccode`\~=#1 \_lowercase{\_gdef~}{#2}} + \_fornum 0..1 \_do {\_tmp{"207#1}{{^#1}}} + \_tmp{"B2}{{^2}}\_tmp{"B3}{{^3}} + \_fornum 4..9 \_do {\_tmp{"207#1}{{^#1}}} + \_fornum 0..9 \_do {\_tmp{"208#1}{{_#1}}} +\_egroup + + \_doc ----------------------------- + Aliases are declared here. They are names not mentioned in the `unimath-table.opm` file + but commonly used in \TeX. + \_cod ----------------------------- + +\_let \setminus=\smallsetminus +\_let \diamond=\smwhtdiamond +\_let \colon=\mathcolon +\_let \bullet=\smblkcircle +\_let \circ=\vysmwhtcircle +\_let \bigcirc=\mdlgwhtcircle +\_let \to=\rightarrow +\_let \le=\leq +\_let \ge=\geq +\_let \neq=\ne +\_protected\_def \triangle {\mathord{\bigtriangleup}} +\_let \emptyset=\varnothing +\_let \hbar=\hslash +\_let \land=\wedge +\_let \lor=\vee +\_let \owns=\ni +\_let \gets=\leftarrow +\_let \mathring=\ocirc +\_let \lnot=\neg +\_let \longdivisionsign=\longdivision +\_let \backepsilon=\upbackepsilon +\_let \eth=\matheth +\_let \dbkarow=\dbkarrow +\_let \drbkarow=\drbkarrow +\_let \hksearow=\hksearrow +\_let \hkswarow=\hkswarrow + +\_let \upalpha=\mupalpha +\_let \upbeta=\mupbeta +\_let \upgamma=\mupgamma +\_let \updelta=\mupdelta +\_let \upepsilon=\mupvarepsilon +\_let \upvarepsilon=\mupvarepsilon +\_let \upzeta=\mupzeta +\_let \upeta=\mupeta +\_let \uptheta=\muptheta +\_let \upiota=\mupiota +\_let \upkappa=\mupkappa +\_let \uplambda=\muplambda +\_let \upmu=\mupmu +\_let \upnu=\mupnu +\_let \upxi=\mupxi +\_let \upomicron=\mupomicron +\_let \uppi=\muppi +\_let \uprho=\muprho +\_let \upvarrho=\mupvarrho +\_let \upvarsigma=\mupvarsigma +\_let \upsigma=\mupsigma +\_let \uptau=\muptau +\_let \upupsilon=\mupupsilon +\_let \upvarphi=\mupvarphi +\_let \upchi=\mupchi +\_let \uppsi=\muppsi +\_let \upomega=\mupomega +\_let \upvartheta=\mupvartheta +\_let \upphi=\mupphi +\_let \upvarpi=\mupvarpi + + \_doc ----------------------------- + The \`\not` macro is redefined here. If the `\_not!<char>` is defined + (by \`\_negationof`) + then this macro is used. Else centered / is printed over the <char>. + \_cod ----------------------------- + +\_protected\_def\_not#1{% + \_trycs{_not!\_csstring#1}{\_mathrel\_mathstyles{% + \_setbox0=\_hbox{\_math$\_currstyle#1$}% + \_hbox to\_wd0{\_hss$\_currstyle/$\_hss}\_kern-\_wd0 \_box0 +}}} +\_def\_negationof #1#2{\_ea\_let \_csname _not!\_csstring#1\_endcsname =#2} + +\_negationof = \neq +\_negationof < \nless +\_negationof > \ngtr +\_negationof \gets \nleftarrow +\_negationof \simeq \nsime +\_negationof \equal \ne +\_negationof \le \nleq +\_negationof \ge \ngeq +\_negationof \greater \ngtr +\_negationof \forksnot \forks +\_negationof \in \notin +\_negationof \mid \nmid +\_negationof \cong \ncong +\_negationof \leftarrow \nleftarrow +\_negationof \rightarrow \nrightarrow +\_negationof \leftrightarrow \nleftrightarrow +\_negationof \Leftarrow \nLeftarrow +\_negationof \Leftrightarrow \nLeftrightarrow +\_negationof \Rightarrow \nRightarrow +\_negationof \exists \nexists +\_negationof \ni \nni +\_negationof \paralel \nparalel +\_negationof \sim \nsim +\_negationof \approx \napprox +\_negationof \equiv \nequiv +\_negationof \asymp \nasymp +\_negationof \lesssim \nlesssim +\_negationof \ngtrsim \ngtrsim +\_negationof \lessgtr \nlessgtr +\_negationof \gtrless \ngtrless +\_negationof \prec \nprec +\_negationof \succ \nsucc +\_negationof \subset \nsubset +\_negationof \supset \nsupset +\_negationof \subseteq \nsubseteq +\_negationof \supseteq \nsupseteq +\_negationof \vdash \nvdash +\_negationof \vDash \nvDash +\_negationof \Vdash \nVdash +\_negationof \VDash \nVDash +\_negationof \preccurlyeq \npreccurlyeq +\_negationof \succcurlyeq \nsucccurlyeq +\_negationof \sqsubseteq \nsqsubseteq +\_negationof \sqsupseteq \nsqsupseteq +\_negationof \vartriangleleft \nvartriangleleft +\_negationof \vartriangleright \nvartriangleright +\_negationof \trianglelefteq \ntrianglelefteq +\_negationof \trianglerighteq \ntrianglerighteq +\_negationof \vinfty \nvinfty + +\_public \not ; + + \_doc ----------------------------- + Newly declared public control sequences are used in internal macros by + \OpTeX/. We need to get new meanings for these control sequences in + the private namespace. + \_cod ----------------------------- + +\_private + \ldotp \cdotp \bullet \triangleleft \trianglerigt \mapstochar \rightarrow + \prime \lhook \rightarrow \leftarrow \rhook \triangleright \triangleleft + \Relbar \Rightarrow \relbar \rightarrow \Leftarrow \mapstochar + \longrightarrow \Longleftrightarrow \unicodevdots \unicodeddots \unicodeadots ; + +\_endcode + +\secc More Unicode-math examples + +Example of using additional math font is in section 5.3 in the +\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf]{\tt optex-math.pdf} documentation + +You can combine more Unicode math fonts in single formula simply +by the `\addUmathfont` macro, see +\ulink[http://petr.olsak.net/optex/optex-tricks.html#addumathfont]{\OpTeX/ trick 0030}. + +See \url{http://tex.stackexchange.com/questions/308749} +for technical details about Unicode-math. + +\_endinput + +History: +2021-03-11 Umathcode `* declaed as \ast +2021-02-03 Unicode superscripts, subscripts declared +2021-01-31 Mathcode of ! ? set to Close, codes undeclared in mathclass set correctly +2021-01-23 Compressed \vdots, \ddots, \adots in script(script)style. +2020-11-13 Bug fix: \colon declared +2020-06-13 Umathcode of / declared as in Plain TeX +2020-06-07 \_itgreek \_itGreek, \_rmgreek \_rmGreek etc. introduced, names changed +2020-06-03 \not\mid = \nmid added, \not corrected +2020-04-30 Bug fix: \phi, \varpi etc. were bad encoded +2020-04-09 Bug fix: \Udelcode`<, \Udelcode`> added diff --git a/Master/texmf-dist/tex/optex/base/unimath-table.opm b/Master/texmf-dist/tex/optex/base/unimath-table.opm new file mode 100644 index 00000000000..252c1fc26ac --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/unimath-table.opm @@ -0,0 +1,2471 @@ +%%^^A%% unicode-math-table.tex -- part of UNICODE-MATH <wspr.io/unicode-math> +%%^^A%% Source file of the math symbols. + +% Only \ddots, \adots and \vdots are called differently: +% \unicodeddots, \unicodeadots and \unicodevdots +% \mathquestion: Ord -> Close (because plain.tex declares it as Close) + +\UnicodeMathSymbol{"00021}{\mathexclam }{\mathclose}{exclamation mark}% +\UnicodeMathSymbol{"00023}{\mathoctothorpe }{\mathord}{number sign}% +\UnicodeMathSymbol{"00024}{\mathdollar }{\mathord}{dollar sign}% +\UnicodeMathSymbol{"00025}{\mathpercent }{\mathord}{percent sign}% +\UnicodeMathSymbol{"00026}{\mathampersand }{\mathord}{ampersand}% +\UnicodeMathSymbol{"00028}{\lparen }{\mathopen}{left parenthesis}% +\UnicodeMathSymbol{"00029}{\rparen }{\mathclose}{right parenthesis}% +\UnicodeMathSymbol{"0002B}{\mathplus }{\mathbin}{plus sign b:}% +\UnicodeMathSymbol{"0002C}{\mathcomma }{\mathpunct}{comma}% +\UnicodeMathSymbol{"0002E}{\mathperiod }{\mathord}{full stop, period}% +\UnicodeMathSymbol{"0002F}{\mathslash }{\mathord}{solidus}% +\UnicodeMathSymbol{"0003A}{\mathcolon }{\mathpunct}{colon}% +\UnicodeMathSymbol{"0003B}{\mathsemicolon }{\mathpunct}{semicolon p:}% +\UnicodeMathSymbol{"0003C}{\less }{\mathrel}{less-than sign r:}% +\UnicodeMathSymbol{"0003D}{\equal }{\mathrel}{equals sign r:}% +\UnicodeMathSymbol{"0003E}{\greater }{\mathrel}{greater-than sign r:}% +\UnicodeMathSymbol{"0003F}{\mathquestion }{\mathclose}{question mark}% +\UnicodeMathSymbol{"00040}{\mathatsign }{\mathord}{commercial at}% +\UnicodeMathSymbol{"0005B}{\lbrack }{\mathopen}{left square bracket}% +\UnicodeMathSymbol{"0005C}{\backslash }{\mathord}{reverse solidus}% +\UnicodeMathSymbol{"0005D}{\rbrack }{\mathclose}{right square bracket}% +\UnicodeMathSymbol{"0007B}{\lbrace }{\mathopen}{left curly bracket}% +\UnicodeMathSymbol{"0007C}{\vert }{\mathfence}{vertical bar}% +\UnicodeMathSymbol{"0007D}{\rbrace }{\mathclose}{right curly bracket}% +\UnicodeMathSymbol{"000A3}{\mathsterling }{\mathord}{pound sign}% +\UnicodeMathSymbol{"000A5}{\mathyen }{\mathord}{yen sign}% +\UnicodeMathSymbol{"000A7}{\mathsection }{\mathord}{section symbol}% +\UnicodeMathSymbol{"000AC}{\neg }{\mathord}{/neg /lnot not sign}% +\UnicodeMathSymbol{"000B1}{\pm }{\mathbin}{plus-or-minus sign}% +\UnicodeMathSymbol{"000B6}{\mathparagraph }{\mathord}{paragraph symbol}% +\UnicodeMathSymbol{"000B7}{\cdotp }{\mathbin}{/centerdot b: middle dot}% +\UnicodeMathSymbol{"000D7}{\times }{\mathbin}{multiply sign}% +\UnicodeMathSymbol{"000F0}{\matheth }{\mathalpha}{eth}% +\UnicodeMathSymbol{"000F7}{\div }{\mathbin}{divide sign}% +\UnicodeMathSymbol{"001B5}{\Zbar }{\mathord}{impedance (latin capital letter z with stroke)}% +\UnicodeMathSymbol{"00300}{\grave }{\mathaccent}{grave accent}% +\UnicodeMathSymbol{"00301}{\acute }{\mathaccent}{acute accent}% +\UnicodeMathSymbol{"00302}{\hat }{\mathaccent}{circumflex accent}% +\UnicodeMathSymbol{"00302}{\widehat }{\mathaccentwide}{circumflex accent}% +\UnicodeMathSymbol{"00303}{\tilde }{\mathaccent}{tilde}% +\UnicodeMathSymbol{"00303}{\widetilde }{\mathaccentwide}{tilde}% +\UnicodeMathSymbol{"00304}{\bar }{\mathaccent}{macron}% +\UnicodeMathSymbol{"00305}{\overbar }{\mathaccent}{overbar embellishment}% +\UnicodeMathSymbol{"00305}{\wideoverbar }{\mathaccentwide}{stretchy overbar embellishment}% +\UnicodeMathSymbol{"00306}{\breve }{\mathaccent}{breve}% +\UnicodeMathSymbol{"00306}{\widebreve }{\mathaccentwide}{stretchy breve}% +\UnicodeMathSymbol{"00307}{\dot }{\mathaccent}{dot above}% +\UnicodeMathSymbol{"00308}{\ddot }{\mathaccent}{dieresis}% +\UnicodeMathSymbol{"00309}{\ovhook }{\mathaccent}{combining hook above}% +\UnicodeMathSymbol{"0030A}{\ocirc }{\mathaccent}{ring}% +\UnicodeMathSymbol{"0030C}{\check }{\mathaccent}{caron}% +\UnicodeMathSymbol{"0030C}{\widecheck }{\mathaccentwide}{stretchy caron}% +\UnicodeMathSymbol{"00310}{\candra }{\mathaccent}{candrabindu (non-spacing)}% +\UnicodeMathSymbol{"00312}{\oturnedcomma }{\mathaccent}{combining turned comma above}% +\UnicodeMathSymbol{"00315}{\ocommatopright }{\mathaccent}{combining comma above right}% +\UnicodeMathSymbol{"0031A}{\droang }{\mathaccent}{left angle above (non-spacing)}% +\UnicodeMathSymbol{"00330}{\wideutilde }{\mathbotaccentwide}{under tilde accent (multiple characters and non-spacing)}% +\UnicodeMathSymbol{"00332}{\mathunderbar }{\mathbotaccentwide}{combining low line}% +\UnicodeMathSymbol{"00338}{\notaccent }{\mathaccentoverlay}{combining long solidus overlay}% +\UnicodeMathSymbol{"0034D}{\underleftrightarrow }{\mathbotaccentwide}{underleftrightarrow accent}% +\UnicodeMathSymbol{"00391}{\mupAlpha }{\mathalpha}{capital alpha, greek}% +\UnicodeMathSymbol{"00392}{\mupBeta }{\mathalpha}{capital beta, greek}% +\UnicodeMathSymbol{"00393}{\mupGamma }{\mathalpha}{capital gamma, greek}% +\UnicodeMathSymbol{"00394}{\mupDelta }{\mathalpha}{capital delta, greek}% +\UnicodeMathSymbol{"00395}{\mupEpsilon }{\mathalpha}{capital epsilon, greek}% +\UnicodeMathSymbol{"00396}{\mupZeta }{\mathalpha}{capital zeta, greek}% +\UnicodeMathSymbol{"00397}{\mupEta }{\mathalpha}{capital eta, greek}% +\UnicodeMathSymbol{"00398}{\mupTheta }{\mathalpha}{capital theta, greek}% +\UnicodeMathSymbol{"00399}{\mupIota }{\mathalpha}{capital iota, greek}% +\UnicodeMathSymbol{"0039A}{\mupKappa }{\mathalpha}{capital kappa, greek}% +\UnicodeMathSymbol{"0039B}{\mupLambda }{\mathalpha}{capital lambda, greek}% +\UnicodeMathSymbol{"0039C}{\mupMu }{\mathalpha}{capital mu, greek}% +\UnicodeMathSymbol{"0039D}{\mupNu }{\mathalpha}{capital nu, greek}% +\UnicodeMathSymbol{"0039E}{\mupXi }{\mathalpha}{capital xi, greek}% +\UnicodeMathSymbol{"0039F}{\mupOmicron }{\mathalpha}{capital omicron, greek}% +\UnicodeMathSymbol{"003A0}{\mupPi }{\mathalpha}{capital pi, greek}% +\UnicodeMathSymbol{"003A1}{\mupRho }{\mathalpha}{capital rho, greek}% +\UnicodeMathSymbol{"003A3}{\mupSigma }{\mathalpha}{capital sigma, greek}% +\UnicodeMathSymbol{"003A4}{\mupTau }{\mathalpha}{capital tau, greek}% +\UnicodeMathSymbol{"003A5}{\mupUpsilon }{\mathalpha}{capital upsilon, greek}% +\UnicodeMathSymbol{"003A6}{\mupPhi }{\mathalpha}{capital phi, greek}% +\UnicodeMathSymbol{"003A7}{\mupChi }{\mathalpha}{capital chi, greek}% +\UnicodeMathSymbol{"003A8}{\mupPsi }{\mathalpha}{capital psi, greek}% +\UnicodeMathSymbol{"003A9}{\mupOmega }{\mathalpha}{capital omega, greek}% +\UnicodeMathSymbol{"003B1}{\mupalpha }{\mathalpha}{small alpha, greek}% +\UnicodeMathSymbol{"003B2}{\mupbeta }{\mathalpha}{small beta, greek}% +\UnicodeMathSymbol{"003B3}{\mupgamma }{\mathalpha}{small gamma, greek}% +\UnicodeMathSymbol{"003B4}{\mupdelta }{\mathalpha}{small delta, greek}% +\UnicodeMathSymbol{"003B5}{\mupvarepsilon }{\mathalpha}{rounded small varepsilon, greek}% +\UnicodeMathSymbol{"003B6}{\mupzeta }{\mathalpha}{small zeta, greek}% +\UnicodeMathSymbol{"003B7}{\mupeta }{\mathalpha}{small eta, greek}% +\UnicodeMathSymbol{"003B8}{\muptheta }{\mathalpha}{straight theta, small theta, greek}% +\UnicodeMathSymbol{"003B9}{\mupiota }{\mathalpha}{small iota, greek}% +\UnicodeMathSymbol{"003BA}{\mupkappa }{\mathalpha}{small kappa, greek}% +\UnicodeMathSymbol{"003BB}{\muplambda }{\mathalpha}{small lambda, greek}% +\UnicodeMathSymbol{"003BC}{\mupmu }{\mathalpha}{small mu, greek}% +\UnicodeMathSymbol{"003BD}{\mupnu }{\mathalpha}{small nu, greek}% +\UnicodeMathSymbol{"003BE}{\mupxi }{\mathalpha}{small xi, greek}% +\UnicodeMathSymbol{"003BF}{\mupomicron }{\mathalpha}{small omicron, greek}% +\UnicodeMathSymbol{"003C0}{\muppi }{\mathalpha}{small pi, greek}% +\UnicodeMathSymbol{"003C1}{\muprho }{\mathalpha}{small rho, greek}% +\UnicodeMathSymbol{"003C2}{\mupvarsigma }{\mathalpha}{terminal sigma, greek}% +\UnicodeMathSymbol{"003C3}{\mupsigma }{\mathalpha}{small sigma, greek}% +\UnicodeMathSymbol{"003C4}{\muptau }{\mathalpha}{small tau, greek}% +\UnicodeMathSymbol{"003C5}{\mupupsilon }{\mathalpha}{small upsilon, greek}% +\UnicodeMathSymbol{"003C6}{\mupvarphi }{\mathalpha}{curly or open small phi, greek}% +\UnicodeMathSymbol{"003C7}{\mupchi }{\mathalpha}{small chi, greek}% +\UnicodeMathSymbol{"003C8}{\muppsi }{\mathalpha}{small psi, greek}% +\UnicodeMathSymbol{"003C9}{\mupomega }{\mathalpha}{small omega, greek}% +\UnicodeMathSymbol{"003D1}{\mupvartheta }{\mathalpha}{/vartheta - curly or open theta}% +\UnicodeMathSymbol{"003D5}{\mupphi }{\mathalpha}{/straightphi - small phi, greek}% +\UnicodeMathSymbol{"003D6}{\mupvarpi }{\mathalpha}{rounded small pi (pomega), greek}% +\UnicodeMathSymbol{"003DC}{\upDigamma }{\mathalpha}{capital digamma}% +\UnicodeMathSymbol{"003DD}{\updigamma }{\mathalpha}{old greek small letter digamma}% +\UnicodeMathSymbol{"003F0}{\mupvarkappa }{\mathalpha}{rounded small kappa, greek}% +\UnicodeMathSymbol{"003F1}{\mupvarrho }{\mathalpha}{rounded small rho, greek}% +\UnicodeMathSymbol{"003F4}{\mupvarTheta }{\mathalpha}{greek capital theta symbol}% +\UnicodeMathSymbol{"003F5}{\mupepsilon }{\mathalpha}{greek lunate varepsilon symbol}% +\UnicodeMathSymbol{"003F6}{\upbackepsilon }{\mathord}{greek reversed lunate epsilon symbol}% +\UnicodeMathSymbol{"02010}{\mathhyphen }{\mathalpha}{hyphen}% +\UnicodeMathSymbol{"02015}{\horizbar }{\mathord}{horizontal bar}% +\UnicodeMathSymbol{"02016}{\Vert }{\mathfence}{double vertical bar}% +\UnicodeMathSymbol{"02017}{\twolowline }{\mathord}{double low line (spacing)}% +\UnicodeMathSymbol{"02020}{\dagger }{\mathbin}{dagger relation}% +\UnicodeMathSymbol{"02021}{\ddagger }{\mathbin}{double dagger relation}% +\UnicodeMathSymbol{"02022}{\smblkcircle }{\mathbin}{/bullet b: round bullet, filled}% +\UnicodeMathSymbol{"02025}{\enleadertwodots }{\mathord}{double baseline dot (en leader)}% +\UnicodeMathSymbol{"02026}{\unicodeellipsis }{\mathord}{ellipsis (horizontal)}% +\UnicodeMathSymbol{"02032}{\prime }{\mathord}{prime or minute, not superscripted}% +\UnicodeMathSymbol{"02033}{\dprime }{\mathord}{double prime or second, not superscripted}% +\UnicodeMathSymbol{"02034}{\trprime }{\mathord}{triple prime (not superscripted)}% +\UnicodeMathSymbol{"02035}{\backprime }{\mathord}{reverse prime, not superscripted}% +\UnicodeMathSymbol{"02036}{\backdprime }{\mathord}{double reverse prime, not superscripted}% +\UnicodeMathSymbol{"02037}{\backtrprime }{\mathord}{triple reverse prime, not superscripted}% +\UnicodeMathSymbol{"02038}{\caretinsert }{\mathord}{caret (insertion mark)}% +\UnicodeMathSymbol{"0203C}{\Exclam }{\mathord}{double exclamation mark}% +\UnicodeMathSymbol{"02040}{\tieconcat }{\mathbin}{character tie, z notation sequence concatenation}% +\UnicodeMathSymbol{"02043}{\hyphenbullet }{\mathord}{rectangle, filled (hyphen bullet)}% +\UnicodeMathSymbol{"02044}{\fracslash }{\mathbin}{fraction slash}% +\UnicodeMathSymbol{"02047}{\Question }{\mathord}{double question mark}% +\UnicodeMathSymbol{"02050}{\closure }{\mathrel}{close up}% +\UnicodeMathSymbol{"02057}{\qprime }{\mathord}{quadruple prime, not superscripted}% +\UnicodeMathSymbol{"020AC}{\euro }{\mathord}{euro sign}% +\UnicodeMathSymbol{"020D0}{\leftharpoonaccent }{\mathaccent}{combining left harpoon above}% +\UnicodeMathSymbol{"020D0}{\overleftharpoon }{\mathaccentwide}{combining left harpoon above}% +\UnicodeMathSymbol{"020D1}{\rightharpoonaccent }{\mathaccent}{combining right harpoon above}% +\UnicodeMathSymbol{"020D1}{\overrightharpoon }{\mathaccentwide}{combining right harpoon above}% +\UnicodeMathSymbol{"020D2}{\vertoverlay }{\mathaccent}{combining long vertical line overlay}% +\UnicodeMathSymbol{"020D6}{\overleftarrow }{\mathaccentwide}{combining left arrow above}% +\UnicodeMathSymbol{"020D7}{\overrightarrow }{\mathaccentwide}{combining left arrow above}% +\UnicodeMathSymbol{"020D7}{\vec }{\mathaccent}{combining right arrow above}% +\UnicodeMathSymbol{"020DB}{\dddot }{\mathaccent}{combining three dots above}% +\UnicodeMathSymbol{"020DC}{\ddddot }{\mathaccent}{combining four dots above}% +\UnicodeMathSymbol{"020DD}{\enclosecircle }{\mathord}{combining enclosing circle}% +\UnicodeMathSymbol{"020DE}{\enclosesquare }{\mathord}{combining enclosing square}% +\UnicodeMathSymbol{"020DF}{\enclosediamond }{\mathord}{combining enclosing diamond}% +\UnicodeMathSymbol{"020E1}{\overleftrightarrow }{\mathaccentwide}{combining left right arrow above}% +\UnicodeMathSymbol{"020E4}{\enclosetriangle }{\mathord}{combining enclosing upward pointing triangle}% +\UnicodeMathSymbol{"020E7}{\annuity }{\mathaccent}{combining annuity symbol}% +\UnicodeMathSymbol{"020E8}{\threeunderdot }{\mathbotaccent}{combining triple underdot}% +\UnicodeMathSymbol{"020E9}{\widebridgeabove }{\mathaccent}{combining wide bridge above}% +\UnicodeMathSymbol{"020EC}{\underrightharpoondown }{\mathbotaccentwide}{combining rightwards harpoon with barb downwards}% +\UnicodeMathSymbol{"020ED}{\underleftharpoondown }{\mathbotaccentwide}{combining leftwards harpoon with barb downwards}% +\UnicodeMathSymbol{"020EE}{\underleftarrow }{\mathbotaccentwide}{combining left arrow below}% +\UnicodeMathSymbol{"020EF}{\underrightarrow }{\mathbotaccentwide}{combining right arrow below}% +\UnicodeMathSymbol{"020F0}{\asteraccent }{\mathaccent}{combining asterisk above}% +\UnicodeMathSymbol{"02102}{\BbbC }{\mathalpha}{/bbb c, open face c}% +\UnicodeMathSymbol{"02107}{\Eulerconst }{\mathord}{euler constant}% +\UnicodeMathSymbol{"0210A}{\mscrg }{\mathalpha}{/scr g, script letter g}% +\UnicodeMathSymbol{"0210B}{\mscrH }{\mathalpha}{hamiltonian (script capital h)}% +\UnicodeMathSymbol{"0210C}{\mfrakH }{\mathalpha}{/frak h, upper case h}% +\UnicodeMathSymbol{"0210D}{\BbbH }{\mathalpha}{/bbb h, open face h}% +\UnicodeMathSymbol{"0210E}{\Planckconst }{\mathord}{planck constant}% +\UnicodeMathSymbol{"0210F}{\hslash }{\mathalpha}{/hslash - variant planck's over 2pi}% +\UnicodeMathSymbol{"02110}{\mscrI }{\mathalpha}{/scr i, script letter i}% +\UnicodeMathSymbol{"02111}{\Im }{\mathalpha}{imaginary part}% +\UnicodeMathSymbol{"02112}{\mscrL }{\mathalpha}{lagrangian (script capital l)}% +\UnicodeMathSymbol{"02113}{\ell }{\mathalpha}{cursive small l}% +\UnicodeMathSymbol{"02115}{\BbbN }{\mathalpha}{/bbb n, open face n}% +\UnicodeMathSymbol{"02118}{\wp }{\mathalpha}{weierstrass p}% +\UnicodeMathSymbol{"02119}{\BbbP }{\mathalpha}{/bbb p, open face p}% +\UnicodeMathSymbol{"0211A}{\BbbQ }{\mathalpha}{/bbb q, open face q}% +\UnicodeMathSymbol{"0211B}{\mscrR }{\mathalpha}{/scr r, script letter r}% +\UnicodeMathSymbol{"0211C}{\Re }{\mathalpha}{real part}% +\UnicodeMathSymbol{"0211D}{\BbbR }{\mathalpha}{/bbb r, open face r}% +\UnicodeMathSymbol{"02124}{\BbbZ }{\mathalpha}{/bbb z, open face z}% +\UnicodeMathSymbol{"02127}{\mho }{\mathord}{conductance}% +\UnicodeMathSymbol{"02128}{\mfrakZ }{\mathalpha}{/frak z, upper case z}% +\UnicodeMathSymbol{"02129}{\turnediota }{\mathalpha}{turned iota}% +\UnicodeMathSymbol{"0212B}{\Angstrom }{\mathalpha}{angstrom capital a, ring}% +\UnicodeMathSymbol{"0212C}{\mscrB }{\mathalpha}{bernoulli function (script capital b)}% +\UnicodeMathSymbol{"0212D}{\mfrakC }{\mathalpha}{black-letter capital c}% +\UnicodeMathSymbol{"0212F}{\mscre }{\mathalpha}{/scr e, script letter e}% +\UnicodeMathSymbol{"02130}{\mscrE }{\mathalpha}{/scr e, script letter e}% +\UnicodeMathSymbol{"02131}{\mscrF }{\mathalpha}{/scr f, script letter f}% +\UnicodeMathSymbol{"02132}{\Finv }{\mathord}{turned capital f}% +\UnicodeMathSymbol{"02133}{\mscrM }{\mathalpha}{physics m-matrix (script capital m)}% +\UnicodeMathSymbol{"02134}{\mscro }{\mathalpha}{order of (script small o)}% +\UnicodeMathSymbol{"02135}{\aleph }{\mathalpha}{aleph, hebrew}% +\UnicodeMathSymbol{"02136}{\beth }{\mathalpha}{beth, hebrew}% +\UnicodeMathSymbol{"02137}{\gimel }{\mathalpha}{gimel, hebrew}% +\UnicodeMathSymbol{"02138}{\daleth }{\mathalpha}{daleth, hebrew}% +\UnicodeMathSymbol{"0213C}{\Bbbpi }{\mathord}{double-struck small pi}% +\UnicodeMathSymbol{"0213D}{\Bbbgamma }{\mathalpha}{double-struck small gamma}% +\UnicodeMathSymbol{"0213E}{\BbbGamma }{\mathalpha}{double-struck capital gamma}% +\UnicodeMathSymbol{"0213F}{\BbbPi }{\mathalpha}{double-struck capital pi}% +\UnicodeMathSymbol{"02140}{\Bbbsum }{\mathop}{double-struck n-ary summation}% +\UnicodeMathSymbol{"02141}{\Game }{\mathord}{turned sans-serif capital g}% +\UnicodeMathSymbol{"02142}{\sansLturned }{\mathord}{turned sans-serif capital l}% +\UnicodeMathSymbol{"02143}{\sansLmirrored }{\mathord}{reversed sans-serif capital l}% +\UnicodeMathSymbol{"02144}{\Yup }{\mathord}{turned sans-serif capital y}% +\UnicodeMathSymbol{"02145}{\mitBbbD }{\mathord}{double-struck italic capital d}% +\UnicodeMathSymbol{"02146}{\mitBbbd }{\mathord}{double-struck italic small d}% +\UnicodeMathSymbol{"02147}{\mitBbbe }{\mathord}{double-struck italic small e}% +\UnicodeMathSymbol{"02148}{\mitBbbi }{\mathord}{double-struck italic small i}% +\UnicodeMathSymbol{"02149}{\mitBbbj }{\mathord}{double-struck italic small j}% +\UnicodeMathSymbol{"0214A}{\PropertyLine }{\mathord}{property line}% +\UnicodeMathSymbol{"0214B}{\upand }{\mathbin}{turned ampersand}% +\UnicodeMathSymbol{"02190}{\leftarrow }{\mathrel}{/leftarrow /gets a: leftward arrow}% +\UnicodeMathSymbol{"02191}{\uparrow }{\mathrel}{upward arrow}% +\UnicodeMathSymbol{"02192}{\rightarrow }{\mathrel}{/rightarrow /to a: rightward arrow}% +\UnicodeMathSymbol{"02193}{\downarrow }{\mathrel}{downward arrow}% +\UnicodeMathSymbol{"02194}{\leftrightarrow }{\mathrel}{left and right arrow}% +\UnicodeMathSymbol{"02195}{\updownarrow }{\mathrel}{up and down arrow}% +\UnicodeMathSymbol{"02196}{\nwarrow }{\mathrel}{nw pointing arrow}% +\UnicodeMathSymbol{"02197}{\nearrow }{\mathrel}{ne pointing arrow}% +\UnicodeMathSymbol{"02198}{\searrow }{\mathrel}{se pointing arrow}% +\UnicodeMathSymbol{"02199}{\swarrow }{\mathrel}{sw pointing arrow}% +\UnicodeMathSymbol{"0219A}{\nleftarrow }{\mathrel}{not left arrow}% +\UnicodeMathSymbol{"0219B}{\nrightarrow }{\mathrel}{not right arrow}% +\UnicodeMathSymbol{"0219C}{\leftwavearrow }{\mathrel}{left arrow-wavy}% +\UnicodeMathSymbol{"0219D}{\rightwavearrow }{\mathrel}{right arrow-wavy}% +\UnicodeMathSymbol{"0219E}{\twoheadleftarrow }{\mathrel}{left two-headed arrow}% +\UnicodeMathSymbol{"0219F}{\twoheaduparrow }{\mathrel}{up two-headed arrow}% +\UnicodeMathSymbol{"021A0}{\twoheadrightarrow }{\mathrel}{right two-headed arrow}% +\UnicodeMathSymbol{"021A1}{\twoheaddownarrow }{\mathrel}{down two-headed arrow}% +\UnicodeMathSymbol{"021A2}{\leftarrowtail }{\mathrel}{left arrow-tailed}% +\UnicodeMathSymbol{"021A3}{\rightarrowtail }{\mathrel}{right arrow-tailed}% +\UnicodeMathSymbol{"021A4}{\mapsfrom }{\mathrel}{maps to, leftward}% +\UnicodeMathSymbol{"021A5}{\mapsup }{\mathrel}{maps to, upward}% +\UnicodeMathSymbol{"021A6}{\mapsto }{\mathrel}{maps to, rightward}% +\UnicodeMathSymbol{"021A7}{\mapsdown }{\mathrel}{maps to, downward}% +\UnicodeMathSymbol{"021A8}{\updownarrowbar }{\mathord}{up down arrow with base (perpendicular)}% +\UnicodeMathSymbol{"021A9}{\hookleftarrow }{\mathrel}{left arrow-hooked}% +\UnicodeMathSymbol{"021AA}{\hookrightarrow }{\mathrel}{right arrow-hooked}% +\UnicodeMathSymbol{"021AB}{\looparrowleft }{\mathrel}{left arrow-looped}% +\UnicodeMathSymbol{"021AC}{\looparrowright }{\mathrel}{right arrow-looped}% +\UnicodeMathSymbol{"021AD}{\leftrightsquigarrow }{\mathrel}{left and right arr-wavy}% +\UnicodeMathSymbol{"021AE}{\nleftrightarrow }{\mathrel}{not left and right arrow}% +\UnicodeMathSymbol{"021AF}{\downzigzagarrow }{\mathrel}{downwards zigzag arrow}% +\UnicodeMathSymbol{"021B0}{\Lsh }{\mathrel}{/lsh a:}% +\UnicodeMathSymbol{"021B1}{\Rsh }{\mathrel}{/rsh a:}% +\UnicodeMathSymbol{"021B2}{\Ldsh }{\mathrel}{left down angled arrow}% +\UnicodeMathSymbol{"021B3}{\Rdsh }{\mathrel}{right down angled arrow}% +\UnicodeMathSymbol{"021B4}{\linefeed }{\mathord}{rightwards arrow with corner downwards}% +\UnicodeMathSymbol{"021B5}{\carriagereturn }{\mathord}{downwards arrow with corner leftward = carriage return}% +\UnicodeMathSymbol{"021B6}{\curvearrowleft }{\mathrel}{left curved arrow}% +\UnicodeMathSymbol{"021B7}{\curvearrowright }{\mathrel}{right curved arrow}% +\UnicodeMathSymbol{"021B8}{\barovernorthwestarrow }{\mathord}{north west arrow to long bar}% +\UnicodeMathSymbol{"021B9}{\barleftarrowrightarrowbar}{\mathord}{leftwards arrow to bar over rightwards arrow to bar}% +\UnicodeMathSymbol{"021BA}{\acwopencirclearrow }{\mathord}{anticlockwise open circle arrow}% +\UnicodeMathSymbol{"021BB}{\cwopencirclearrow }{\mathord}{clockwise open circle arrow}% +\UnicodeMathSymbol{"021BC}{\leftharpoonup }{\mathrel}{left harpoon-up}% +\UnicodeMathSymbol{"021BD}{\leftharpoondown }{\mathrel}{left harpoon-down}% +\UnicodeMathSymbol{"021BE}{\upharpoonright }{\mathrel}{/upharpoonright /restriction a: up harpoon-right}% +\UnicodeMathSymbol{"021BF}{\upharpoonleft }{\mathrel}{up harpoon-left}% +\UnicodeMathSymbol{"021C0}{\rightharpoonup }{\mathrel}{right harpoon-up}% +\UnicodeMathSymbol{"021C1}{\rightharpoondown }{\mathrel}{right harpoon-down}% +\UnicodeMathSymbol{"021C2}{\downharpoonright }{\mathrel}{down harpoon-right}% +\UnicodeMathSymbol{"021C3}{\downharpoonleft }{\mathrel}{down harpoon-left}% +\UnicodeMathSymbol{"021C4}{\rightleftarrows }{\mathrel}{right arrow over left arrow}% +\UnicodeMathSymbol{"021C5}{\updownarrows }{\mathrel}{up arrow, down arrow}% +\UnicodeMathSymbol{"021C6}{\leftrightarrows }{\mathrel}{left arrow over right arrow}% +\UnicodeMathSymbol{"021C7}{\leftleftarrows }{\mathrel}{two left arrows}% +\UnicodeMathSymbol{"021C8}{\upuparrows }{\mathrel}{two up arrows}% +\UnicodeMathSymbol{"021C9}{\rightrightarrows }{\mathrel}{two right arrows}% +\UnicodeMathSymbol{"021CA}{\downdownarrows }{\mathrel}{two down arrows}% +\UnicodeMathSymbol{"021CB}{\leftrightharpoons }{\mathrel}{left harpoon over right}% +\UnicodeMathSymbol{"021CC}{\rightleftharpoons }{\mathrel}{right harpoon over left}% +\UnicodeMathSymbol{"021CD}{\nLeftarrow }{\mathrel}{not implied by}% +\UnicodeMathSymbol{"021CE}{\nLeftrightarrow }{\mathrel}{not left and right double arrows}% +\UnicodeMathSymbol{"021CF}{\nRightarrow }{\mathrel}{not implies}% +\UnicodeMathSymbol{"021D0}{\Leftarrow }{\mathrel}{is implied by}% +\UnicodeMathSymbol{"021D1}{\Uparrow }{\mathrel}{up double arrow}% +\UnicodeMathSymbol{"021D2}{\Rightarrow }{\mathrel}{implies}% +\UnicodeMathSymbol{"021D3}{\Downarrow }{\mathrel}{down double arrow}% +\UnicodeMathSymbol{"021D4}{\Leftrightarrow }{\mathrel}{left and right double arrow}% +\UnicodeMathSymbol{"021D5}{\Updownarrow }{\mathrel}{up and down double arrow}% +\UnicodeMathSymbol{"021D6}{\Nwarrow }{\mathrel}{nw pointing double arrow}% +\UnicodeMathSymbol{"021D7}{\Nearrow }{\mathrel}{ne pointing double arrow}% +\UnicodeMathSymbol{"021D8}{\Searrow }{\mathrel}{se pointing double arrow}% +\UnicodeMathSymbol{"021D9}{\Swarrow }{\mathrel}{sw pointing double arrow}% +\UnicodeMathSymbol{"021DA}{\Lleftarrow }{\mathrel}{left triple arrow}% +\UnicodeMathSymbol{"021DB}{\Rrightarrow }{\mathrel}{right triple arrow}% +\UnicodeMathSymbol{"021DC}{\leftsquigarrow }{\mathrel}{leftwards squiggle arrow}% +\UnicodeMathSymbol{"021DD}{\rightsquigarrow }{\mathrel}{rightwards squiggle arrow}% +\UnicodeMathSymbol{"021DE}{\nHuparrow }{\mathord}{upwards arrow with double stroke}% +\UnicodeMathSymbol{"021DF}{\nHdownarrow }{\mathord}{downwards arrow with double stroke}% +\UnicodeMathSymbol{"021E0}{\leftdasharrow }{\mathord}{leftwards dashed arrow}% +\UnicodeMathSymbol{"021E1}{\updasharrow }{\mathord}{upwards dashed arrow}% +\UnicodeMathSymbol{"021E2}{\rightdasharrow }{\mathord}{rightwards dashed arrow}% +\UnicodeMathSymbol{"021E3}{\downdasharrow }{\mathord}{downwards dashed arrow}% +\UnicodeMathSymbol{"021E4}{\barleftarrow }{\mathrel}{leftwards arrow to bar}% +\UnicodeMathSymbol{"021E5}{\rightarrowbar }{\mathrel}{rightwards arrow to bar}% +\UnicodeMathSymbol{"021E6}{\leftwhitearrow }{\mathord}{leftwards white arrow}% +\UnicodeMathSymbol{"021E7}{\upwhitearrow }{\mathord}{upwards white arrow}% +\UnicodeMathSymbol{"021E8}{\rightwhitearrow }{\mathord}{rightwards white arrow}% +\UnicodeMathSymbol{"021E9}{\downwhitearrow }{\mathord}{downwards white arrow}% +\UnicodeMathSymbol{"021EA}{\whitearrowupfrombar }{\mathord}{upwards white arrow from bar}% +\UnicodeMathSymbol{"021F4}{\circleonrightarrow }{\mathrel}{right arrow with small circle}% +\UnicodeMathSymbol{"021F5}{\downuparrows }{\mathrel}{downwards arrow leftwards of upwards arrow}% +\UnicodeMathSymbol{"021F6}{\rightthreearrows }{\mathrel}{three rightwards arrows}% +\UnicodeMathSymbol{"021F7}{\nvleftarrow }{\mathrel}{leftwards arrow with vertical stroke}% +\UnicodeMathSymbol{"021F8}{\nvrightarrow }{\mathrel}{rightwards arrow with vertical stroke}% +\UnicodeMathSymbol{"021F9}{\nvleftrightarrow }{\mathrel}{left right arrow with vertical stroke}% +\UnicodeMathSymbol{"021FA}{\nVleftarrow }{\mathrel}{leftwards arrow with double vertical stroke}% +\UnicodeMathSymbol{"021FB}{\nVrightarrow }{\mathrel}{rightwards arrow with double vertical stroke}% +\UnicodeMathSymbol{"021FC}{\nVleftrightarrow }{\mathrel}{left right arrow with double vertical stroke}% +\UnicodeMathSymbol{"021FD}{\leftarrowtriangle }{\mathrel}{leftwards open-headed arrow}% +\UnicodeMathSymbol{"021FE}{\rightarrowtriangle }{\mathrel}{rightwards open-headed arrow}% +\UnicodeMathSymbol{"021FF}{\leftrightarrowtriangle }{\mathrel}{left right open-headed arrow}% +\UnicodeMathSymbol{"02200}{\forall }{\mathord}{for all}% +\UnicodeMathSymbol{"02201}{\complement }{\mathord}{complement sign}% +\UnicodeMathSymbol{"02202}{\partial }{\mathalpha}{partial differential}% +\UnicodeMathSymbol{"02203}{\exists }{\mathord}{at least one exists}% +\UnicodeMathSymbol{"02204}{\nexists }{\mathord}{negated exists}% +\UnicodeMathSymbol{"02205}{\varnothing }{\mathord}{circle, slash}% +\UnicodeMathSymbol{"02206}{\increment }{\mathord}{laplacian (delta; nabla\string^2)}% +\UnicodeMathSymbol{"02207}{\nabla }{\mathalpha}{nabla, del, hamilton operator}% +\UnicodeMathSymbol{"02208}{\in }{\mathrel}{set membership, variant}% +\UnicodeMathSymbol{"02209}{\notin }{\mathrel}{negated set membership}% +\UnicodeMathSymbol{"0220A}{\smallin }{\mathrel}{set membership (small set membership)}% +\UnicodeMathSymbol{"0220B}{\ni }{\mathrel}{contains, variant}% +\UnicodeMathSymbol{"0220C}{\nni }{\mathrel}{negated contains, variant}% +\UnicodeMathSymbol{"0220D}{\smallni }{\mathrel}{/ni /owns r: contains (small contains as member)}% +\UnicodeMathSymbol{"0220E}{\QED }{\mathord}{end of proof}% +\UnicodeMathSymbol{"0220F}{\prod }{\mathop}{product operator}% +\UnicodeMathSymbol{"02210}{\coprod }{\mathop}{coproduct operator}% +\UnicodeMathSymbol{"02211}{\sum }{\mathop}{summation operator}% +\UnicodeMathSymbol{"02212}{\minus }{\mathbin}{minus sign}% +\UnicodeMathSymbol{"02213}{\mp }{\mathbin}{minus-or-plus sign}% +\UnicodeMathSymbol{"02214}{\dotplus }{\mathbin}{plus sign, dot above}% +\UnicodeMathSymbol{"02215}{\divslash }{\mathbin}{division slash}% +\UnicodeMathSymbol{"02216}{\smallsetminus }{\mathbin}{small set minus (cf. reverse solidus)}% +\UnicodeMathSymbol{"02217}{\ast }{\mathbin}{centered asterisk}% +\UnicodeMathSymbol{"02218}{\vysmwhtcircle }{\mathbin}{composite function (small circle)}% +\UnicodeMathSymbol{"02219}{\vysmblkcircle }{\mathbin}{bullet operator}% +\UnicodeMathSymbol{"0221A}{\sqrt }{\mathopen}{radical}% +\UnicodeMathSymbol{"0221A}{\surd }{\mathord}{radical}% +\UnicodeMathSymbol{"0221B}{\cuberoot }{\mathopen}{cube root}% +\UnicodeMathSymbol{"0221C}{\fourthroot }{\mathopen}{fourth root}% +\UnicodeMathSymbol{"0221D}{\propto }{\mathrel}{is proportional to}% +\UnicodeMathSymbol{"0221E}{\infty }{\mathord}{infinity}% +\UnicodeMathSymbol{"0221F}{\rightangle }{\mathord}{right (90 degree) angle}% +\UnicodeMathSymbol{"02220}{\angle }{\mathord}{angle}% +\UnicodeMathSymbol{"02221}{\measuredangle }{\mathord}{angle-measured}% +\UnicodeMathSymbol{"02222}{\sphericalangle }{\mathord}{angle-spherical}% +\UnicodeMathSymbol{"02223}{\mid }{\mathrel}{/mid r:}% +\UnicodeMathSymbol{"02224}{\nmid }{\mathrel}{negated mid}% +\UnicodeMathSymbol{"02225}{\parallel }{\mathrel}{parallel}% +\UnicodeMathSymbol{"02226}{\nparallel }{\mathrel}{not parallel}% +\UnicodeMathSymbol{"02227}{\wedge }{\mathbin}{/wedge /land b: logical and}% +\UnicodeMathSymbol{"02228}{\vee }{\mathbin}{/vee /lor b: logical or}% +\UnicodeMathSymbol{"02229}{\cap }{\mathbin}{intersection}% +\UnicodeMathSymbol{"0222A}{\cup }{\mathbin}{union or logical sum}% +\UnicodeMathSymbol{"0222B}{\int }{\mathop}{integral operator}% +\UnicodeMathSymbol{"0222C}{\iint }{\mathop}{double integral operator}% +\UnicodeMathSymbol{"0222D}{\iiint }{\mathop}{triple integral operator}% +\UnicodeMathSymbol{"0222E}{\oint }{\mathop}{contour integral operator}% +\UnicodeMathSymbol{"0222F}{\oiint }{\mathop}{double contour integral operator}% +\UnicodeMathSymbol{"02230}{\oiiint }{\mathop}{triple contour integral operator}% +\UnicodeMathSymbol{"02231}{\intclockwise }{\mathop}{clockwise integral}% +\UnicodeMathSymbol{"02232}{\varointclockwise }{\mathop}{contour integral, clockwise}% +\UnicodeMathSymbol{"02233}{\ointctrclockwise }{\mathop}{contour integral, anticlockwise}% +\UnicodeMathSymbol{"02234}{\therefore }{\mathord}{therefore}% +\UnicodeMathSymbol{"02235}{\because }{\mathord}{because}% +\UnicodeMathSymbol{"02236}{\mathratio }{\mathrel}{ratio}% +\UnicodeMathSymbol{"02237}{\Colon }{\mathrel}{two colons}% +\UnicodeMathSymbol{"02238}{\dotminus }{\mathbin}{minus sign, dot above}% +\UnicodeMathSymbol{"02239}{\dashcolon }{\mathrel}{excess (-:)}% +\UnicodeMathSymbol{"0223A}{\dotsminusdots }{\mathrel}{minus with four dots, geometric properties}% +\UnicodeMathSymbol{"0223B}{\kernelcontraction }{\mathrel}{homothetic}% +\UnicodeMathSymbol{"0223C}{\sim }{\mathrel}{similar}% +\UnicodeMathSymbol{"0223D}{\backsim }{\mathrel}{reverse similar}% +\UnicodeMathSymbol{"0223E}{\invlazys }{\mathbin}{most positive [inverted lazy s]}% +\UnicodeMathSymbol{"0223F}{\sinewave }{\mathord}{sine wave}% +\UnicodeMathSymbol{"02240}{\wr }{\mathbin}{wreath product}% +\UnicodeMathSymbol{"02241}{\nsim }{\mathrel}{not similar}% +\UnicodeMathSymbol{"02242}{\eqsim }{\mathrel}{equals, similar}% +\UnicodeMathSymbol{"02243}{\simeq }{\mathrel}{similar, equals}% +\UnicodeMathSymbol{"02244}{\nsime }{\mathrel}{not similar, equals}% +\UnicodeMathSymbol{"02243}{\sime }{\mathrel}{similar, equals (alias)}% +\UnicodeMathSymbol{"02244}{\nsimeq }{\mathrel}{not similar, equals (alias)}% +\UnicodeMathSymbol{"02245}{\cong }{\mathrel}{congruent with}% +\UnicodeMathSymbol{"02246}{\simneqq }{\mathrel}{similar, not equals [vert only for 9573 entity]}% +\UnicodeMathSymbol{"02247}{\ncong }{\mathrel}{not congruent with}% +\UnicodeMathSymbol{"02248}{\approx }{\mathrel}{approximate}% +\UnicodeMathSymbol{"02249}{\napprox }{\mathrel}{not approximate}% +\UnicodeMathSymbol{"0224A}{\approxeq }{\mathrel}{approximate, equals}% +\UnicodeMathSymbol{"0224B}{\approxident }{\mathrel}{approximately identical to}% +\UnicodeMathSymbol{"0224C}{\backcong }{\mathrel}{all equal to}% +\UnicodeMathSymbol{"0224D}{\asymp }{\mathrel}{asymptotically equal to}% +\UnicodeMathSymbol{"0224E}{\Bumpeq }{\mathrel}{bumpy equals}% +\UnicodeMathSymbol{"0224F}{\bumpeq }{\mathrel}{bumpy equals, equals}% +\UnicodeMathSymbol{"02250}{\doteq }{\mathrel}{equals, single dot above}% +\UnicodeMathSymbol{"02251}{\Doteq }{\mathrel}{/doteqdot /doteq r: equals, even dots}% +\UnicodeMathSymbol{"02252}{\fallingdotseq }{\mathrel}{equals, falling dots}% +\UnicodeMathSymbol{"02253}{\risingdotseq }{\mathrel}{equals, rising dots}% +\UnicodeMathSymbol{"02254}{\coloneq }{\mathrel}{colon, equals}% +\UnicodeMathSymbol{"02255}{\eqcolon }{\mathrel}{equals, colon}% +\UnicodeMathSymbol{"02256}{\eqcirc }{\mathrel}{circle on equals sign}% +\UnicodeMathSymbol{"02257}{\circeq }{\mathrel}{circle, equals}% +\UnicodeMathSymbol{"02258}{\arceq }{\mathrel}{arc, equals; corresponds to}% +\UnicodeMathSymbol{"02259}{\wedgeq }{\mathrel}{corresponds to (wedge, equals)}% +\UnicodeMathSymbol{"0225A}{\veeeq }{\mathrel}{logical or, equals}% +\UnicodeMathSymbol{"0225B}{\stareq }{\mathrel}{star equals}% +\UnicodeMathSymbol{"0225C}{\triangleq }{\mathrel}{triangle, equals}% +\UnicodeMathSymbol{"0225D}{\eqdef }{\mathrel}{equals by definition}% +\UnicodeMathSymbol{"0225E}{\measeq }{\mathrel}{measured by (m over equals)}% +\UnicodeMathSymbol{"0225F}{\questeq }{\mathrel}{equal with questionmark}% +\UnicodeMathSymbol{"02260}{\ne }{\mathrel}{/ne /neq r: not equal}% +\UnicodeMathSymbol{"02261}{\equiv }{\mathrel}{identical with}% +\UnicodeMathSymbol{"02262}{\nequiv }{\mathrel}{not identical with}% +\UnicodeMathSymbol{"02263}{\Equiv }{\mathrel}{strict equivalence (4 lines)}% +\UnicodeMathSymbol{"02264}{\leq }{\mathrel}{/leq /le r: less-than-or-equal}% +\UnicodeMathSymbol{"02265}{\geq }{\mathrel}{/geq /ge r: greater-than-or-equal}% +\UnicodeMathSymbol{"02266}{\leqq }{\mathrel}{less, double equals}% +\UnicodeMathSymbol{"02267}{\geqq }{\mathrel}{greater, double equals}% +\UnicodeMathSymbol{"02268}{\lneqq }{\mathrel}{less, not double equals}% +\UnicodeMathSymbol{"02269}{\gneqq }{\mathrel}{greater, not double equals}% +\UnicodeMathSymbol{"0226A}{\ll }{\mathrel}{much less than, type 2}% +\UnicodeMathSymbol{"0226B}{\gg }{\mathrel}{much greater than, type 2}% +\UnicodeMathSymbol{"0226C}{\between }{\mathrel}{between}% +\UnicodeMathSymbol{"0226D}{\nasymp }{\mathrel}{not asymptotically equal to}% +\UnicodeMathSymbol{"0226E}{\nless }{\mathrel}{not less-than}% +\UnicodeMathSymbol{"0226F}{\ngtr }{\mathrel}{not greater-than}% +\UnicodeMathSymbol{"02270}{\nleq }{\mathrel}{not less-than-or-equal}% +\UnicodeMathSymbol{"02271}{\ngeq }{\mathrel}{not greater-than-or-equal}% +\UnicodeMathSymbol{"02272}{\lesssim }{\mathrel}{less, similar}% +\UnicodeMathSymbol{"02273}{\gtrsim }{\mathrel}{greater, similar}% +\UnicodeMathSymbol{"02274}{\nlesssim }{\mathrel}{not less, similar}% +\UnicodeMathSymbol{"02275}{\ngtrsim }{\mathrel}{not greater, similar}% +\UnicodeMathSymbol{"02276}{\lessgtr }{\mathrel}{less, greater}% +\UnicodeMathSymbol{"02277}{\gtrless }{\mathrel}{greater, less}% +\UnicodeMathSymbol{"02278}{\nlessgtr }{\mathrel}{not less, greater}% +\UnicodeMathSymbol{"02279}{\ngtrless }{\mathrel}{not greater, less}% +\UnicodeMathSymbol{"0227A}{\prec }{\mathrel}{precedes}% +\UnicodeMathSymbol{"0227B}{\succ }{\mathrel}{succeeds}% +\UnicodeMathSymbol{"0227C}{\preccurlyeq }{\mathrel}{precedes, curly equals}% +\UnicodeMathSymbol{"0227D}{\succcurlyeq }{\mathrel}{succeeds, curly equals}% +\UnicodeMathSymbol{"0227E}{\precsim }{\mathrel}{precedes, similar}% +\UnicodeMathSymbol{"0227F}{\succsim }{\mathrel}{succeeds, similar}% +\UnicodeMathSymbol{"02280}{\nprec }{\mathrel}{not precedes}% +\UnicodeMathSymbol{"02281}{\nsucc }{\mathrel}{not succeeds}% +\UnicodeMathSymbol{"02282}{\subset }{\mathrel}{subset or is implied by}% +\UnicodeMathSymbol{"02283}{\supset }{\mathrel}{superset or implies}% +\UnicodeMathSymbol{"02284}{\nsubset }{\mathrel}{not subset, variant [slash negation]}% +\UnicodeMathSymbol{"02285}{\nsupset }{\mathrel}{not superset, variant [slash negation]}% +\UnicodeMathSymbol{"02286}{\subseteq }{\mathrel}{subset, equals}% +\UnicodeMathSymbol{"02287}{\supseteq }{\mathrel}{superset, equals}% +\UnicodeMathSymbol{"02288}{\nsubseteq }{\mathrel}{not subset, equals}% +\UnicodeMathSymbol{"02289}{\nsupseteq }{\mathrel}{not superset, equals}% +\UnicodeMathSymbol{"0228A}{\subsetneq }{\mathrel}{subset, not equals}% +\UnicodeMathSymbol{"0228B}{\supsetneq }{\mathrel}{superset, not equals}% +\UnicodeMathSymbol{"0228C}{\cupleftarrow }{\mathbin}{multiset}% +\UnicodeMathSymbol{"0228D}{\cupdot }{\mathbin}{union, with dot}% +\UnicodeMathSymbol{"0228E}{\uplus }{\mathbin}{plus sign in union}% +\UnicodeMathSymbol{"0228F}{\sqsubset }{\mathrel}{square subset}% +\UnicodeMathSymbol{"02290}{\sqsupset }{\mathrel}{square superset}% +\UnicodeMathSymbol{"02291}{\sqsubseteq }{\mathrel}{square subset, equals}% +\UnicodeMathSymbol{"02292}{\sqsupseteq }{\mathrel}{square superset, equals}% +\UnicodeMathSymbol{"02293}{\sqcap }{\mathbin}{square intersection}% +\UnicodeMathSymbol{"02294}{\sqcup }{\mathbin}{square union}% +\UnicodeMathSymbol{"02295}{\oplus }{\mathbin}{plus sign in circle}% +\UnicodeMathSymbol{"02296}{\ominus }{\mathbin}{minus sign in circle}% +\UnicodeMathSymbol{"02297}{\otimes }{\mathbin}{multiply sign in circle}% +\UnicodeMathSymbol{"02298}{\oslash }{\mathbin}{solidus in circle}% +\UnicodeMathSymbol{"02299}{\odot }{\mathbin}{middle dot in circle}% +\UnicodeMathSymbol{"0229A}{\circledcirc }{\mathbin}{small circle in circle}% +\UnicodeMathSymbol{"0229B}{\circledast }{\mathbin}{asterisk in circle}% +\UnicodeMathSymbol{"0229C}{\circledequal }{\mathbin}{equal in circle}% +\UnicodeMathSymbol{"0229D}{\circleddash }{\mathbin}{hyphen in circle}% +\UnicodeMathSymbol{"0229E}{\boxplus }{\mathbin}{plus sign in box}% +\UnicodeMathSymbol{"0229F}{\boxminus }{\mathbin}{minus sign in box}% +\UnicodeMathSymbol{"022A0}{\boxtimes }{\mathbin}{multiply sign in box}% +\UnicodeMathSymbol{"022A1}{\boxdot }{\mathbin}{/dotsquare /boxdot b: small dot in box}% +\UnicodeMathSymbol{"022A2}{\vdash }{\mathrel}{vertical, dash}% +\UnicodeMathSymbol{"022A3}{\dashv }{\mathrel}{dash, vertical}% +\UnicodeMathSymbol{"022A4}{\top }{\mathord}{top}% +\UnicodeMathSymbol{"022A5}{\bot }{\mathord}{bottom}% +\UnicodeMathSymbol{"022A6}{\assert }{\mathrel}{assertion (vertical, short dash)}% +\UnicodeMathSymbol{"022A7}{\models }{\mathrel}{models (vertical, short double dash)}% +\UnicodeMathSymbol{"022A8}{\vDash }{\mathrel}{vertical, double dash}% +\UnicodeMathSymbol{"022A9}{\Vdash }{\mathrel}{double vertical, dash}% +\UnicodeMathSymbol{"022AA}{\Vvdash }{\mathrel}{triple vertical, dash}% +\UnicodeMathSymbol{"022AB}{\VDash }{\mathrel}{double vert, double dash}% +\UnicodeMathSymbol{"022AC}{\nvdash }{\mathrel}{not vertical, dash}% +\UnicodeMathSymbol{"022AD}{\nvDash }{\mathrel}{not vertical, double dash}% +\UnicodeMathSymbol{"022AE}{\nVdash }{\mathrel}{not double vertical, dash}% +\UnicodeMathSymbol{"022AF}{\nVDash }{\mathrel}{not double vert, double dash}% +\UnicodeMathSymbol{"022B0}{\prurel }{\mathrel}{element precedes under relation}% +\UnicodeMathSymbol{"022B1}{\scurel }{\mathrel}{succeeds under relation}% +\UnicodeMathSymbol{"022B2}{\vartriangleleft }{\mathrel}{left triangle, open, variant}% +\UnicodeMathSymbol{"022B3}{\vartriangleright }{\mathrel}{right triangle, open, variant}% +\UnicodeMathSymbol{"022B4}{\trianglelefteq }{\mathrel}{left triangle, equals}% +\UnicodeMathSymbol{"022B5}{\trianglerighteq }{\mathrel}{right triangle, equals}% +\UnicodeMathSymbol{"022B6}{\origof }{\mathrel}{original of}% +\UnicodeMathSymbol{"022B7}{\imageof }{\mathrel}{image of}% +\UnicodeMathSymbol{"022B8}{\multimap }{\mathrel}{/multimap a:}% +\UnicodeMathSymbol{"022B9}{\hermitmatrix }{\mathord}{hermitian conjugate matrix}% +\UnicodeMathSymbol{"022BA}{\intercal }{\mathbin}{intercal}% +\UnicodeMathSymbol{"022BB}{\veebar }{\mathbin}{logical or, bar below (large vee); exclusive disjunction}% +\UnicodeMathSymbol{"022BC}{\barwedge }{\mathbin}{bar, wedge (large wedge)}% +\UnicodeMathSymbol{"022BD}{\barvee }{\mathbin}{bar, vee (large vee)}% +\UnicodeMathSymbol{"022BE}{\measuredrightangle }{\mathord}{right angle-measured [with arc]}% +\UnicodeMathSymbol{"022BF}{\varlrtriangle }{\mathord}{right triangle}% +\UnicodeMathSymbol{"022C0}{\bigwedge }{\mathop}{logical and operator}% +\UnicodeMathSymbol{"022C1}{\bigvee }{\mathop}{logical or operator}% +\UnicodeMathSymbol{"022C2}{\bigcap }{\mathop}{intersection operator}% +\UnicodeMathSymbol{"022C3}{\bigcup }{\mathop}{union operator}% +\UnicodeMathSymbol{"022C4}{\smwhtdiamond }{\mathbin}{white diamond}% +\UnicodeMathSymbol{"022C5}{\cdot }{\mathbin}{small middle dot}% +\UnicodeMathSymbol{"022C6}{\star }{\mathbin}{small star, filled, low}% +\UnicodeMathSymbol{"022C7}{\divideontimes }{\mathbin}{division on times}% +\UnicodeMathSymbol{"022C8}{\bowtie }{\mathrel}{bowtie}% +\UnicodeMathSymbol{"022C9}{\ltimes }{\mathbin}{times sign, left closed}% +\UnicodeMathSymbol{"022CA}{\rtimes }{\mathbin}{times sign, right closed}% +\UnicodeMathSymbol{"022CB}{\leftthreetimes }{\mathbin}{left semidirect product}% +\UnicodeMathSymbol{"022CC}{\rightthreetimes }{\mathbin}{right semidirect product}% +\UnicodeMathSymbol{"022CD}{\backsimeq }{\mathrel}{reverse similar, equals}% +\UnicodeMathSymbol{"022CE}{\curlyvee }{\mathbin}{curly logical or}% +\UnicodeMathSymbol{"022CF}{\curlywedge }{\mathbin}{curly logical and}% +\UnicodeMathSymbol{"022D0}{\Subset }{\mathrel}{double subset}% +\UnicodeMathSymbol{"022D1}{\Supset }{\mathrel}{double superset}% +\UnicodeMathSymbol{"022D2}{\Cap }{\mathbin}{/cap /doublecap b: double intersection}% +\UnicodeMathSymbol{"022D3}{\Cup }{\mathbin}{/cup /doublecup b: double union}% +\UnicodeMathSymbol{"022D4}{\pitchfork }{\mathrel}{pitchfork}% +\UnicodeMathSymbol{"022D5}{\equalparallel }{\mathrel}{parallel, equal; equal or parallel}% +\UnicodeMathSymbol{"022D6}{\lessdot }{\mathrel}{less than, with dot}% +\UnicodeMathSymbol{"022D7}{\gtrdot }{\mathrel}{greater than, with dot}% +\UnicodeMathSymbol{"022D8}{\lll }{\mathrel}{/ll /lll /llless r: triple less-than}% +\UnicodeMathSymbol{"022D9}{\ggg }{\mathrel}{/ggg /gg /gggtr r: triple greater-than}% +\UnicodeMathSymbol{"022DA}{\lesseqgtr }{\mathrel}{less, equals, greater}% +\UnicodeMathSymbol{"022DB}{\gtreqless }{\mathrel}{greater, equals, less}% +\UnicodeMathSymbol{"022DC}{\eqless }{\mathrel}{equal-or-less}% +\UnicodeMathSymbol{"022DD}{\eqgtr }{\mathrel}{equal-or-greater}% +\UnicodeMathSymbol{"022DE}{\curlyeqprec }{\mathrel}{curly equals, precedes}% +\UnicodeMathSymbol{"022DF}{\curlyeqsucc }{\mathrel}{curly equals, succeeds}% +\UnicodeMathSymbol{"022E0}{\npreccurlyeq }{\mathrel}{not precedes, curly equals}% +\UnicodeMathSymbol{"022E1}{\nsucccurlyeq }{\mathrel}{not succeeds, curly equals}% +\UnicodeMathSymbol{"022E2}{\nsqsubseteq }{\mathrel}{not, square subset, equals}% +\UnicodeMathSymbol{"022E3}{\nsqsupseteq }{\mathrel}{not, square superset, equals}% +\UnicodeMathSymbol{"022E4}{\sqsubsetneq }{\mathrel}{square subset, not equals}% +\UnicodeMathSymbol{"022E5}{\sqsupsetneq }{\mathrel}{square superset, not equals}% +\UnicodeMathSymbol{"022E6}{\lnsim }{\mathrel}{less, not similar}% +\UnicodeMathSymbol{"022E7}{\gnsim }{\mathrel}{greater, not similar}% +\UnicodeMathSymbol{"022E8}{\precnsim }{\mathrel}{precedes, not similar}% +\UnicodeMathSymbol{"022E9}{\succnsim }{\mathrel}{succeeds, not similar}% +\UnicodeMathSymbol{"022EA}{\nvartriangleleft }{\mathrel}{not left triangle}% +\UnicodeMathSymbol{"022EB}{\nvartriangleright }{\mathrel}{not right triangle}% +\UnicodeMathSymbol{"022EC}{\ntrianglelefteq }{\mathrel}{not left triangle, equals}% +\UnicodeMathSymbol{"022ED}{\ntrianglerighteq }{\mathrel}{not right triangle, equals}% +\UnicodeMathSymbol{"022EE}{\unicodevdots }{\mathrel}{vertical ellipsis}% +\UnicodeMathSymbol{"022EF}{\unicodecdots }{\mathord}{three dots, centered}% +\UnicodeMathSymbol{"022F0}{\unicodeadots }{\mathrel}{three dots, ascending}% +\UnicodeMathSymbol{"022F1}{\unicodeddots }{\mathrel}{three dots, descending}% +\UnicodeMathSymbol{"022F2}{\disin }{\mathrel}{element of with long horizontal stroke}% +\UnicodeMathSymbol{"022F3}{\varisins }{\mathrel}{element of with vertical bar at end of horizontal stroke}% +\UnicodeMathSymbol{"022F4}{\isins }{\mathrel}{small element of with vertical bar at end of horizontal stroke}% +\UnicodeMathSymbol{"022F5}{\isindot }{\mathrel}{element of with dot above}% +\UnicodeMathSymbol{"022F6}{\varisinobar }{\mathrel}{element of with overbar}% +\UnicodeMathSymbol{"022F7}{\isinobar }{\mathrel}{small element of with overbar}% +\UnicodeMathSymbol{"022F8}{\isinvb }{\mathrel}{element of with underbar}% +\UnicodeMathSymbol{"022F9}{\isinE }{\mathrel}{element of with two horizontal strokes}% +\UnicodeMathSymbol{"022FA}{\nisd }{\mathrel}{contains with long horizontal stroke}% +\UnicodeMathSymbol{"022FB}{\varnis }{\mathrel}{contains with vertical bar at end of horizontal stroke}% +\UnicodeMathSymbol{"022FC}{\nis }{\mathrel}{small contains with vertical bar at end of horizontal stroke}% +\UnicodeMathSymbol{"022FD}{\varniobar }{\mathrel}{contains with overbar}% +\UnicodeMathSymbol{"022FE}{\niobar }{\mathrel}{small contains with overbar}% +\UnicodeMathSymbol{"022FF}{\bagmember }{\mathrel}{z notation bag membership}% +\UnicodeMathSymbol{"02300}{\diameter }{\mathord}{diameter sign}% +\UnicodeMathSymbol{"02302}{\house }{\mathord}{house}% +\UnicodeMathSymbol{"02305}{\varbarwedge }{\mathbin}{/barwedge b: logical and, bar above [projective (bar over small wedge)]}% +\UnicodeMathSymbol{"02306}{\vardoublebarwedge }{\mathbin}{/doublebarwedge b: logical and, double bar above [perspective (double bar over small wedge)]}% +\UnicodeMathSymbol{"02308}{\lceil }{\mathopen}{left ceiling}% +\UnicodeMathSymbol{"02309}{\rceil }{\mathclose}{right ceiling}% +\UnicodeMathSymbol{"0230A}{\lfloor }{\mathopen}{left floor}% +\UnicodeMathSymbol{"0230B}{\rfloor }{\mathclose}{right floor}% +\UnicodeMathSymbol{"02310}{\invnot }{\mathord}{reverse not}% +\UnicodeMathSymbol{"02311}{\sqlozenge }{\mathord}{square lozenge}% +\UnicodeMathSymbol{"02312}{\profline }{\mathord}{profile of a line}% +\UnicodeMathSymbol{"02313}{\profsurf }{\mathord}{profile of a surface}% +\UnicodeMathSymbol{"02317}{\viewdata }{\mathord}{viewdata square}% +\UnicodeMathSymbol{"02319}{\turnednot }{\mathord}{turned not sign}% +\UnicodeMathSymbol{"0231C}{\ulcorner }{\mathopen}{upper left corner}% +\UnicodeMathSymbol{"0231D}{\urcorner }{\mathclose}{upper right corner}% +\UnicodeMathSymbol{"0231E}{\llcorner }{\mathopen}{lower left corner}% +\UnicodeMathSymbol{"0231F}{\lrcorner }{\mathclose}{lower right corner}% +\UnicodeMathSymbol{"02320}{\inttop }{\mathord}{top half integral}% +\UnicodeMathSymbol{"02321}{\intbottom }{\mathord}{bottom half integral}% +\UnicodeMathSymbol{"02322}{\frown }{\mathrel}{down curve}% +\UnicodeMathSymbol{"02323}{\smile }{\mathrel}{up curve}% +\UnicodeMathSymbol{"0232C}{\varhexagonlrbonds }{\mathord}{six carbon ring, corner down, double bonds lower right etc}% +\UnicodeMathSymbol{"02332}{\conictaper }{\mathord}{conical taper }% +\UnicodeMathSymbol{"02336}{\topbot }{\mathord}{top and bottom}% +\UnicodeMathSymbol{"0233D}{\obar }{\mathbin}{circle with vertical bar}% +\UnicodeMathSymbol{"0233F}{\APLnotslash }{\mathrel}{solidus, bar through (apl functional symbol slash bar)}% +\UnicodeMathSymbol{"02340}{\APLnotbackslash }{\mathord}{apl functional symbol backslash bar}% +\UnicodeMathSymbol{"02353}{\APLboxupcaret }{\mathord}{boxed up caret}% +\UnicodeMathSymbol{"02370}{\APLboxquestion }{\mathord}{boxed question mark}% +\UnicodeMathSymbol{"0237C}{\rangledownzigzagarrow }{\mathord}{right angle with downwards zigzag arrow}% +\UnicodeMathSymbol{"02394}{\hexagon }{\mathord}{horizontal benzene ring [hexagon flat open]}% +\UnicodeMathSymbol{"0239B}{\lparenuend }{\mathord}{left parenthesis upper hook}% +\UnicodeMathSymbol{"0239C}{\lparenextender }{\mathord}{left parenthesis extension}% +\UnicodeMathSymbol{"0239D}{\lparenlend }{\mathord}{left parenthesis lower hook}% +\UnicodeMathSymbol{"0239E}{\rparenuend }{\mathord}{right parenthesis upper hook}% +\UnicodeMathSymbol{"0239F}{\rparenextender }{\mathord}{right parenthesis extension}% +\UnicodeMathSymbol{"023A0}{\rparenlend }{\mathord}{right parenthesis lower hook}% +\UnicodeMathSymbol{"023A1}{\lbrackuend }{\mathord}{left square bracket upper corner}% +\UnicodeMathSymbol{"023A2}{\lbrackextender }{\mathord}{left square bracket extension}% +\UnicodeMathSymbol{"023A3}{\lbracklend }{\mathord}{left square bracket lower corner}% +\UnicodeMathSymbol{"023A4}{\rbrackuend }{\mathord}{right square bracket upper corner}% +\UnicodeMathSymbol{"023A5}{\rbrackextender }{\mathord}{right square bracket extension}% +\UnicodeMathSymbol{"023A6}{\rbracklend }{\mathord}{right square bracket lower corner}% +\UnicodeMathSymbol{"023A7}{\lbraceuend }{\mathord}{left curly bracket upper hook}% +\UnicodeMathSymbol{"023A8}{\lbracemid }{\mathord}{left curly bracket middle piece}% +\UnicodeMathSymbol{"023A9}{\lbracelend }{\mathord}{left curly bracket lower hook}% +\UnicodeMathSymbol{"023AA}{\vbraceextender }{\mathord}{curly bracket extension}% +\UnicodeMathSymbol{"023AB}{\rbraceuend }{\mathord}{right curly bracket upper hook}% +\UnicodeMathSymbol{"023AC}{\rbracemid }{\mathord}{right curly bracket middle piece}% +\UnicodeMathSymbol{"023AD}{\rbracelend }{\mathord}{right curly bracket lower hook}% +\UnicodeMathSymbol{"023AE}{\intextender }{\mathord}{integral extension}% +\UnicodeMathSymbol{"023AF}{\harrowextender }{\mathord}{horizontal line extension (used to extend arrows)}% +\UnicodeMathSymbol{"023B0}{\lmoustache }{\mathopen}{upper left or lower right curly bracket section}% +\UnicodeMathSymbol{"023B1}{\rmoustache }{\mathclose}{upper right or lower left curly bracket section}% +\UnicodeMathSymbol{"023B2}{\sumtop }{\mathord}{summation top}% +\UnicodeMathSymbol{"023B3}{\sumbottom }{\mathord}{summation bottom}% +\UnicodeMathSymbol{"023B4}{\overbracket }{\mathover}{top square bracket}% +\UnicodeMathSymbol{"023B5}{\underbracket }{\mathunder}{bottom square bracket}% +\UnicodeMathSymbol{"023B6}{\bbrktbrk }{\mathord}{bottom square bracket over top square bracket}% +\UnicodeMathSymbol{"023B7}{\sqrtbottom }{\mathord}{radical symbol bottom}% +\UnicodeMathSymbol{"023B8}{\lvboxline }{\mathord}{left vertical box line}% +\UnicodeMathSymbol{"023B9}{\rvboxline }{\mathord}{right vertical box line}% +\UnicodeMathSymbol{"023CE}{\varcarriagereturn }{\mathord}{return symbol}% +\UnicodeMathSymbol{"023DC}{\overparen }{\mathover}{top parenthesis (mathematical use)}% +\UnicodeMathSymbol{"023DD}{\underparen }{\mathunder}{bottom parenthesis (mathematical use)}% +\UnicodeMathSymbol{"023DE}{\overbrace }{\mathover}{top curly bracket (mathematical use)}% +\UnicodeMathSymbol{"023DF}{\underbrace }{\mathunder}{bottom curly bracket (mathematical use)}% +\UnicodeMathSymbol{"023E0}{\obrbrak }{\mathord}{top tortoise shell bracket (mathematical use)}% +\UnicodeMathSymbol{"023E1}{\ubrbrak }{\mathord}{bottom tortoise shell bracket (mathematical use)}% +\UnicodeMathSymbol{"023E2}{\trapezium }{\mathord}{white trapezium}% +\UnicodeMathSymbol{"023E3}{\benzenr }{\mathord}{benzene ring with circle}% +\UnicodeMathSymbol{"023E4}{\strns }{\mathord}{straightness}% +\UnicodeMathSymbol{"023E5}{\fltns }{\mathord}{flatness}% +\UnicodeMathSymbol{"023E6}{\accurrent }{\mathord}{ac current}% +\UnicodeMathSymbol{"023E7}{\elinters }{\mathord}{electrical intersection}% +\UnicodeMathSymbol{"02422}{\blanksymbol }{\mathord}{blank symbol}% +\UnicodeMathSymbol{"02423}{\mathvisiblespace }{\mathord}{open box}% +\UnicodeMathSymbol{"02506}{\bdtriplevdash }{\mathord}{doubly broken vert}% +\UnicodeMathSymbol{"02580}{\blockuphalf }{\mathord}{upper half block}% +\UnicodeMathSymbol{"02584}{\blocklowhalf }{\mathord}{lower half block}% +\UnicodeMathSymbol{"02588}{\blockfull }{\mathord}{full block}% +\UnicodeMathSymbol{"0258C}{\blocklefthalf }{\mathord}{left half block}% +\UnicodeMathSymbol{"02590}{\blockrighthalf }{\mathord}{right half block}% +\UnicodeMathSymbol{"02591}{\blockqtrshaded }{\mathord}{25\% shaded block}% +\UnicodeMathSymbol{"02592}{\blockhalfshaded }{\mathord}{50\% shaded block}% +\UnicodeMathSymbol{"02593}{\blockthreeqtrshaded }{\mathord}{75\% shaded block}% +\UnicodeMathSymbol{"025A0}{\mdlgblksquare }{\mathord}{square, filled}% +\UnicodeMathSymbol{"025A1}{\mdlgwhtsquare }{\mathord}{square, open}% +\UnicodeMathSymbol{"025A2}{\squoval }{\mathord}{white square with rounded corners}% +\UnicodeMathSymbol{"025A3}{\blackinwhitesquare }{\mathord}{white square containing black small square}% +\UnicodeMathSymbol{"025A4}{\squarehfill }{\mathord}{square, horizontal rule filled}% +\UnicodeMathSymbol{"025A5}{\squarevfill }{\mathord}{square, vertical rule filled}% +\UnicodeMathSymbol{"025A6}{\squarehvfill }{\mathord}{square with orthogonal crosshatch fill}% +\UnicodeMathSymbol{"025A7}{\squarenwsefill }{\mathord}{square, nw-to-se rule filled}% +\UnicodeMathSymbol{"025A8}{\squareneswfill }{\mathord}{square, ne-to-sw rule filled}% +\UnicodeMathSymbol{"025A9}{\squarecrossfill }{\mathord}{square with diagonal crosshatch fill}% +\UnicodeMathSymbol{"025AA}{\smblksquare }{\mathord}{/blacksquare - sq bullet, filled}% +\UnicodeMathSymbol{"025AB}{\smwhtsquare }{\mathord}{white small square}% +\UnicodeMathSymbol{"025AC}{\hrectangleblack }{\mathord}{black rectangle}% +\UnicodeMathSymbol{"025AD}{\hrectangle }{\mathord}{horizontal rectangle, open}% +\UnicodeMathSymbol{"025AE}{\vrectangleblack }{\mathord}{black vertical rectangle}% +\UnicodeMathSymbol{"025AF}{\vrectangle }{\mathord}{rectangle, white (vertical)}% +\UnicodeMathSymbol{"025B0}{\parallelogramblack }{\mathord}{black parallelogram}% +\UnicodeMathSymbol{"025B1}{\parallelogram }{\mathord}{parallelogram, open}% +\UnicodeMathSymbol{"025B2}{\bigblacktriangleup }{\mathord}{black up-pointing triangle}% +\UnicodeMathSymbol{"025B3}{\bigtriangleup }{\mathbin}{big up triangle, open}% +\UnicodeMathSymbol{"025B4}{\blacktriangle }{\mathord}{up triangle, filled}% +\UnicodeMathSymbol{"025B5}{\vartriangle }{\mathrel}{/triangle - up triangle, open}% +\UnicodeMathSymbol{"025B6}{\blacktriangleright }{\mathord}{(large) right triangle, filled}% +\UnicodeMathSymbol{"025B7}{\triangleright }{\mathbin}{(large) right triangle, open; z notation range restriction}% +\UnicodeMathSymbol{"025B8}{\smallblacktriangleright }{\mathord}{right triangle, filled}% +\UnicodeMathSymbol{"025B9}{\smalltriangleright }{\mathord}{right triangle, open}% +\UnicodeMathSymbol{"025BA}{\blackpointerright }{\mathord}{black right-pointing pointer}% +\UnicodeMathSymbol{"025BB}{\whitepointerright }{\mathord}{white right-pointing pointer}% +\UnicodeMathSymbol{"025BC}{\bigblacktriangledown }{\mathord}{big down triangle, filled}% +\UnicodeMathSymbol{"025BD}{\bigtriangledown }{\mathord}{big down triangle, open}% +\UnicodeMathSymbol{"025BE}{\blacktriangledown }{\mathord}{down triangle, filled}% +\UnicodeMathSymbol{"025BF}{\triangledown }{\mathord}{down triangle, open}% +\UnicodeMathSymbol{"025C0}{\blacktriangleleft }{\mathord}{(large) left triangle, filled}% +\UnicodeMathSymbol{"025C1}{\triangleleft }{\mathbin}{(large) left triangle, open; z notation domain restriction}% +\UnicodeMathSymbol{"025C2}{\smallblacktriangleleft }{\mathord}{left triangle, filled}% +\UnicodeMathSymbol{"025C3}{\smalltriangleleft }{\mathord}{left triangle, open}% +\UnicodeMathSymbol{"025C4}{\blackpointerleft }{\mathord}{black left-pointing pointer}% +\UnicodeMathSymbol{"025C5}{\whitepointerleft }{\mathord}{white left-pointing pointer}% +\UnicodeMathSymbol{"025C6}{\mdlgblkdiamond }{\mathord}{black diamond}% +\UnicodeMathSymbol{"025C7}{\mdlgwhtdiamond }{\mathord}{white diamond; diamond, open}% +\UnicodeMathSymbol{"025C8}{\blackinwhitediamond }{\mathord}{white diamond containing black small diamond}% +\UnicodeMathSymbol{"025C9}{\fisheye }{\mathord}{fisheye}% +\UnicodeMathSymbol{"025CA}{\mdlgwhtlozenge }{\mathord}{lozenge or total mark}% +\UnicodeMathSymbol{"025CB}{\mdlgwhtcircle }{\mathbin}{medium large circle}% +\UnicodeMathSymbol{"025CC}{\dottedcircle }{\mathord}{dotted circle}% +\UnicodeMathSymbol{"025CD}{\circlevertfill }{\mathord}{circle with vertical fill}% +\UnicodeMathSymbol{"025CE}{\bullseye }{\mathord}{bullseye}% +\UnicodeMathSymbol{"025CF}{\mdlgblkcircle }{\mathord}{circle, filled}% +\UnicodeMathSymbol{"025D0}{\circlelefthalfblack }{\mathord}{circle, filled left half [harvey ball]}% +\UnicodeMathSymbol{"025D1}{\circlerighthalfblack }{\mathord}{circle, filled right half}% +\UnicodeMathSymbol{"025D2}{\circlebottomhalfblack }{\mathord}{circle, filled bottom half}% +\UnicodeMathSymbol{"025D3}{\circletophalfblack }{\mathord}{circle, filled top half}% +\UnicodeMathSymbol{"025D4}{\circleurquadblack }{\mathord}{circle with upper right quadrant black}% +\UnicodeMathSymbol{"025D5}{\blackcircleulquadwhite }{\mathord}{circle with all but upper left quadrant black}% +\UnicodeMathSymbol{"025D6}{\blacklefthalfcircle }{\mathord}{left half black circle}% +\UnicodeMathSymbol{"025D7}{\blackrighthalfcircle }{\mathord}{right half black circle}% +\UnicodeMathSymbol{"025D8}{\inversebullet }{\mathord}{inverse bullet }% +\UnicodeMathSymbol{"025D9}{\inversewhitecircle }{\mathord}{inverse white circle}% +\UnicodeMathSymbol{"025DA}{\invwhiteupperhalfcircle }{\mathord}{upper half inverse white circle}% +\UnicodeMathSymbol{"025DB}{\invwhitelowerhalfcircle }{\mathord}{lower half inverse white circle}% +\UnicodeMathSymbol{"025DC}{\ularc }{\mathord}{upper left quadrant circular arc}% +\UnicodeMathSymbol{"025DD}{\urarc }{\mathord}{upper right quadrant circular arc}% +\UnicodeMathSymbol{"025DE}{\lrarc }{\mathord}{lower right quadrant circular arc}% +\UnicodeMathSymbol{"025DF}{\llarc }{\mathord}{lower left quadrant circular arc}% +\UnicodeMathSymbol{"025E0}{\topsemicircle }{\mathord}{upper half circle}% +\UnicodeMathSymbol{"025E1}{\botsemicircle }{\mathord}{lower half circle}% +\UnicodeMathSymbol{"025E2}{\lrblacktriangle }{\mathord}{lower right triangle, filled}% +\UnicodeMathSymbol{"025E3}{\llblacktriangle }{\mathord}{lower left triangle, filled}% +\UnicodeMathSymbol{"025E4}{\ulblacktriangle }{\mathord}{upper left triangle, filled}% +\UnicodeMathSymbol{"025E5}{\urblacktriangle }{\mathord}{upper right triangle, filled}% +\UnicodeMathSymbol{"025E6}{\smwhtcircle }{\mathord}{white bullet}% +\UnicodeMathSymbol{"025E7}{\squareleftblack }{\mathord}{square, filled left half}% +\UnicodeMathSymbol{"025E8}{\squarerightblack }{\mathord}{square, filled right half}% +\UnicodeMathSymbol{"025E9}{\squareulblack }{\mathord}{square, filled top left corner}% +\UnicodeMathSymbol{"025EA}{\squarelrblack }{\mathord}{square, filled bottom right corner}% +\UnicodeMathSymbol{"025EB}{\boxbar }{\mathbin}{vertical bar in box}% +\UnicodeMathSymbol{"025EC}{\trianglecdot }{\mathord}{triangle with centered dot}% +\UnicodeMathSymbol{"025ED}{\triangleleftblack }{\mathord}{up-pointing triangle with left half black}% +\UnicodeMathSymbol{"025EE}{\trianglerightblack }{\mathord}{up-pointing triangle with right half black}% +\UnicodeMathSymbol{"025EF}{\lgwhtcircle }{\mathord}{large circle}% +\UnicodeMathSymbol{"025F0}{\squareulquad }{\mathord}{white square with upper left quadrant}% +\UnicodeMathSymbol{"025F1}{\squarellquad }{\mathord}{white square with lower left quadrant}% +\UnicodeMathSymbol{"025F2}{\squarelrquad }{\mathord}{white square with lower right quadrant}% +\UnicodeMathSymbol{"025F3}{\squareurquad }{\mathord}{white square with upper right quadrant}% +\UnicodeMathSymbol{"025F4}{\circleulquad }{\mathord}{white circle with upper left quadrant}% +\UnicodeMathSymbol{"025F5}{\circlellquad }{\mathord}{white circle with lower left quadrant}% +\UnicodeMathSymbol{"025F6}{\circlelrquad }{\mathord}{white circle with lower right quadrant}% +\UnicodeMathSymbol{"025F7}{\circleurquad }{\mathord}{white circle with upper right quadrant}% +\UnicodeMathSymbol{"025F8}{\ultriangle }{\mathord}{upper left triangle}% +\UnicodeMathSymbol{"025F9}{\urtriangle }{\mathord}{upper right triangle}% +\UnicodeMathSymbol{"025FA}{\lltriangle }{\mathord}{lower left triangle}% +\UnicodeMathSymbol{"025FB}{\mdwhtsquare }{\mathord}{white medium square}% +\UnicodeMathSymbol{"025FC}{\mdblksquare }{\mathord}{black medium square}% +\UnicodeMathSymbol{"025FD}{\mdsmwhtsquare }{\mathord}{white medium small square}% +\UnicodeMathSymbol{"025FE}{\mdsmblksquare }{\mathord}{black medium small square}% +\UnicodeMathSymbol{"025FF}{\lrtriangle }{\mathord}{lower right triangle}% +\UnicodeMathSymbol{"02605}{\bigstar }{\mathord}{star, filled}% +\UnicodeMathSymbol{"02606}{\bigwhitestar }{\mathord}{star, open}% +\UnicodeMathSymbol{"02609}{\astrosun }{\mathord}{sun}% +\UnicodeMathSymbol{"02621}{\danger }{\mathord}{dangerous bend (caution sign)}% +\UnicodeMathSymbol{"0263B}{\blacksmiley }{\mathord}{black smiling face}% +\UnicodeMathSymbol{"0263C}{\sun }{\mathord}{white sun with rays}% +\UnicodeMathSymbol{"0263D}{\rightmoon }{\mathord}{first quarter moon}% +\UnicodeMathSymbol{"0263E}{\leftmoon }{\mathord}{last quarter moon}% +\UnicodeMathSymbol{"02640}{\female }{\mathord}{venus, female}% +\UnicodeMathSymbol{"02642}{\male }{\mathord}{mars, male}% +\UnicodeMathSymbol{"02660}{\spadesuit }{\mathord}{spades suit symbol}% +\UnicodeMathSymbol{"02661}{\heartsuit }{\mathord}{heart suit symbol}% +\UnicodeMathSymbol{"02662}{\diamondsuit }{\mathord}{diamond suit symbol}% +\UnicodeMathSymbol{"02663}{\clubsuit }{\mathord}{club suit symbol}% +\UnicodeMathSymbol{"02664}{\varspadesuit }{\mathord}{spade, white (card suit)}% +\UnicodeMathSymbol{"02665}{\varheartsuit }{\mathord}{filled heart (card suit)}% +\UnicodeMathSymbol{"02666}{\vardiamondsuit }{\mathord}{filled diamond (card suit)}% +\UnicodeMathSymbol{"02667}{\varclubsuit }{\mathord}{club, white (card suit)}% +\UnicodeMathSymbol{"02669}{\quarternote }{\mathord}{music note (sung text sign)}% +\UnicodeMathSymbol{"0266A}{\eighthnote }{\mathord}{eighth note}% +\UnicodeMathSymbol{"0266B}{\twonotes }{\mathord}{beamed eighth notes}% +\UnicodeMathSymbol{"0266D}{\flat }{\mathord}{musical flat}% +\UnicodeMathSymbol{"0266E}{\natural }{\mathord}{music natural}% +\UnicodeMathSymbol{"0266F}{\sharp }{\mathord}{musical sharp}% +\UnicodeMathSymbol{"0267E}{\acidfree }{\mathord}{permanent paper sign}% +\UnicodeMathSymbol{"02680}{\dicei }{\mathord}{die face-1}% +\UnicodeMathSymbol{"02681}{\diceii }{\mathord}{die face-2}% +\UnicodeMathSymbol{"02682}{\diceiii }{\mathord}{die face-3}% +\UnicodeMathSymbol{"02683}{\diceiv }{\mathord}{die face-4}% +\UnicodeMathSymbol{"02684}{\dicev }{\mathord}{die face-5}% +\UnicodeMathSymbol{"02685}{\dicevi }{\mathord}{die face-6}% +\UnicodeMathSymbol{"02686}{\circledrightdot }{\mathord}{white circle with dot right}% +\UnicodeMathSymbol{"02687}{\circledtwodots }{\mathord}{white circle with two dots}% +\UnicodeMathSymbol{"02688}{\blackcircledrightdot }{\mathord}{black circle with white dot right}% +\UnicodeMathSymbol{"02689}{\blackcircledtwodots }{\mathord}{black circle with two white dots}% +\UnicodeMathSymbol{"026A5}{\Hermaphrodite }{\mathord}{male and female sign}% +\UnicodeMathSymbol{"026AA}{\mdwhtcircle }{\mathord}{medium white circle}% +\UnicodeMathSymbol{"026AB}{\mdblkcircle }{\mathord}{medium black circle}% +\UnicodeMathSymbol{"026AC}{\mdsmwhtcircle }{\mathord}{medium small white circle}% +\UnicodeMathSymbol{"026B2}{\neuter }{\mathord}{neuter}% +\UnicodeMathSymbol{"02713}{\checkmark }{\mathord}{tick, check mark}% +\UnicodeMathSymbol{"02720}{\maltese }{\mathord}{maltese cross}% +\UnicodeMathSymbol{"0272A}{\circledstar }{\mathord}{circled white star}% +\UnicodeMathSymbol{"02736}{\varstar }{\mathord}{six pointed black star}% +\UnicodeMathSymbol{"0273D}{\dingasterisk }{\mathord}{heavy teardrop-spoked asterisk}% +\UnicodeMathSymbol{"02772}{\lbrbrak }{\mathopen}{light left tortoise shell bracket ornament}% +\UnicodeMathSymbol{"02773}{\rbrbrak }{\mathclose}{light right tortoise shell bracket ornament}% +\UnicodeMathSymbol{"0279B}{\draftingarrow }{\mathord}{right arrow with bold head (drafting)}% +\UnicodeMathSymbol{"027C0}{\threedangle }{\mathord}{three dimensional angle}% +\UnicodeMathSymbol{"027C1}{\whiteinwhitetriangle }{\mathord}{white triangle containing small white triangle}% +\UnicodeMathSymbol{"027C2}{\perp }{\mathrel}{perpendicular}% +\UnicodeMathSymbol{"027C3}{\subsetcirc }{\mathord}{open subset}% +\UnicodeMathSymbol{"027C4}{\supsetcirc }{\mathord}{open superset}% +\UnicodeMathSymbol{"027C5}{\lbag }{\mathopen}{left s-shaped bag delimiter}% +\UnicodeMathSymbol{"027C6}{\rbag }{\mathclose}{right s-shaped bag delimiter}% +\UnicodeMathSymbol{"027C7}{\veedot }{\mathbin}{or with dot inside}% +\UnicodeMathSymbol{"027C8}{\bsolhsub }{\mathrel}{reverse solidus preceding subset}% +\UnicodeMathSymbol{"027C9}{\suphsol }{\mathrel}{superset preceding solidus}% +\UnicodeMathSymbol{"027CC}{\longdivision }{\mathopen}{long division}% +\UnicodeMathSymbol{"027D0}{\diamondcdot }{\mathord}{white diamond with centred dot}% +\UnicodeMathSymbol{"027D1}{\wedgedot }{\mathbin}{and with dot}% +\UnicodeMathSymbol{"027D2}{\upin }{\mathrel}{element of opening upwards}% +\UnicodeMathSymbol{"027D3}{\pullback }{\mathrel}{lower right corner with dot}% +\UnicodeMathSymbol{"027D4}{\pushout }{\mathrel}{upper left corner with dot}% +\UnicodeMathSymbol{"027D5}{\leftouterjoin }{\mathop}{left outer join}% +\UnicodeMathSymbol{"027D6}{\rightouterjoin }{\mathop}{right outer join}% +\UnicodeMathSymbol{"027D7}{\fullouterjoin }{\mathop}{full outer join}% +\UnicodeMathSymbol{"027D8}{\bigbot }{\mathop}{large up tack}% +\UnicodeMathSymbol{"027D9}{\bigtop }{\mathop}{large down tack}% +\UnicodeMathSymbol{"027DA}{\DashVDash }{\mathrel}{left and right double turnstile}% +\UnicodeMathSymbol{"027DB}{\dashVdash }{\mathrel}{left and right tack}% +\UnicodeMathSymbol{"027DC}{\multimapinv }{\mathrel}{left multimap}% +\UnicodeMathSymbol{"027DD}{\vlongdash }{\mathrel}{long left tack}% +\UnicodeMathSymbol{"027DE}{\longdashv }{\mathrel}{long right tack}% +\UnicodeMathSymbol{"027DF}{\cirbot }{\mathrel}{up tack with circle above}% +\UnicodeMathSymbol{"027E0}{\lozengeminus }{\mathbin}{lozenge divided by horizontal rule}% +\UnicodeMathSymbol{"027E1}{\concavediamond }{\mathbin}{white concave-sided diamond}% +\UnicodeMathSymbol{"027E2}{\concavediamondtickleft }{\mathbin}{white concave-sided diamond with leftwards tick}% +\UnicodeMathSymbol{"027E3}{\concavediamondtickright }{\mathbin}{white concave-sided diamond with rightwards tick}% +\UnicodeMathSymbol{"027E4}{\whitesquaretickleft }{\mathbin}{white square with leftwards tick}% +\UnicodeMathSymbol{"027E5}{\whitesquaretickright }{\mathbin}{white square with rightwards tick}% +\UnicodeMathSymbol{"027E6}{\lBrack }{\mathopen}{mathematical left white square bracket}% +\UnicodeMathSymbol{"027E7}{\rBrack }{\mathclose}{mathematical right white square bracket}% +\UnicodeMathSymbol{"027E8}{\langle }{\mathopen}{mathematical left angle bracket}% +\UnicodeMathSymbol{"027E9}{\rangle }{\mathclose}{mathematical right angle bracket}% +\UnicodeMathSymbol{"027EA}{\lAngle }{\mathopen}{mathematical left double angle bracket}% +\UnicodeMathSymbol{"027EB}{\rAngle }{\mathclose}{mathematical right double angle bracket}% +\UnicodeMathSymbol{"027EC}{\Lbrbrak }{\mathopen}{mathematical left white tortoise shell bracket}% +\UnicodeMathSymbol{"027ED}{\Rbrbrak }{\mathclose}{mathematical right white tortoise shell bracket}% +\UnicodeMathSymbol{"027EE}{\lgroup }{\mathopen}{mathematical left flattened parenthesis}% +\UnicodeMathSymbol{"027EF}{\rgroup }{\mathclose}{mathematical right flattened parenthesis}% +\UnicodeMathSymbol{"027F0}{\UUparrow }{\mathrel}{upwards quadruple arrow}% +\UnicodeMathSymbol{"027F1}{\DDownarrow }{\mathrel}{downwards quadruple arrow}% +\UnicodeMathSymbol{"027F2}{\acwgapcirclearrow }{\mathrel}{anticlockwise gapped circle arrow}% +\UnicodeMathSymbol{"027F3}{\cwgapcirclearrow }{\mathrel}{clockwise gapped circle arrow}% +\UnicodeMathSymbol{"027F4}{\rightarrowonoplus }{\mathrel}{right arrow with circled plus}% +\UnicodeMathSymbol{"027F5}{\longleftarrow }{\mathrel}{long leftwards arrow}% +\UnicodeMathSymbol{"027F6}{\longrightarrow }{\mathrel}{long rightwards arrow}% +\UnicodeMathSymbol{"027F7}{\longleftrightarrow }{\mathrel}{long left right arrow}% +\UnicodeMathSymbol{"027F8}{\Longleftarrow }{\mathrel}{long leftwards double arrow}% +\UnicodeMathSymbol{"027F9}{\Longrightarrow }{\mathrel}{long rightwards double arrow}% +\UnicodeMathSymbol{"027FA}{\Longleftrightarrow }{\mathrel}{long left right double arrow}% +\UnicodeMathSymbol{"027FB}{\longmapsfrom }{\mathrel}{long leftwards arrow from bar}% +\UnicodeMathSymbol{"027FC}{\longmapsto }{\mathrel}{long rightwards arrow from bar}% +\UnicodeMathSymbol{"027FD}{\Longmapsfrom }{\mathrel}{long leftwards double arrow from bar}% +\UnicodeMathSymbol{"027FE}{\Longmapsto }{\mathrel}{long rightwards double arrow from bar}% +\UnicodeMathSymbol{"027FF}{\longrightsquigarrow }{\mathrel}{long rightwards squiggle arrow}% +\UnicodeMathSymbol{"02900}{\nvtwoheadrightarrow }{\mathrel}{rightwards two-headed arrow with vertical stroke}% +\UnicodeMathSymbol{"02901}{\nVtwoheadrightarrow }{\mathrel}{rightwards two-headed arrow with double vertical stroke}% +\UnicodeMathSymbol{"02902}{\nvLeftarrow }{\mathrel}{leftwards double arrow with vertical stroke}% +\UnicodeMathSymbol{"02903}{\nvRightarrow }{\mathrel}{rightwards double arrow with vertical stroke}% +\UnicodeMathSymbol{"02904}{\nvLeftrightarrow }{\mathrel}{left right double arrow with vertical stroke}% +\UnicodeMathSymbol{"02905}{\twoheadmapsto }{\mathrel}{rightwards two-headed arrow from bar}% +\UnicodeMathSymbol{"02906}{\Mapsfrom }{\mathrel}{leftwards double arrow from bar}% +\UnicodeMathSymbol{"02907}{\Mapsto }{\mathrel}{rightwards double arrow from bar}% +\UnicodeMathSymbol{"02908}{\downarrowbarred }{\mathrel}{downwards arrow with horizontal stroke}% +\UnicodeMathSymbol{"02909}{\uparrowbarred }{\mathrel}{upwards arrow with horizontal stroke}% +\UnicodeMathSymbol{"0290A}{\Uuparrow }{\mathrel}{upwards triple arrow}% +\UnicodeMathSymbol{"0290B}{\Ddownarrow }{\mathrel}{downwards triple arrow}% +\UnicodeMathSymbol{"0290C}{\leftbkarrow }{\mathrel}{leftwards double dash arrow}% +\UnicodeMathSymbol{"0290D}{\rightbkarrow }{\mathrel}{rightwards double dash arrow}% +\UnicodeMathSymbol{"0290E}{\leftdbkarrow }{\mathrel}{leftwards triple dash arrow}% +\UnicodeMathSymbol{"0290F}{\dbkarrow }{\mathrel}{rightwards triple dash arrow}% +\UnicodeMathSymbol{"02910}{\drbkarrow }{\mathrel}{rightwards two-headed triple dash arrow}% +\UnicodeMathSymbol{"02911}{\rightdotarrow }{\mathrel}{rightwards arrow with dotted stem}% +\UnicodeMathSymbol{"02912}{\baruparrow }{\mathrel}{upwards arrow to bar}% +\UnicodeMathSymbol{"02913}{\downarrowbar }{\mathrel}{downwards arrow to bar}% +\UnicodeMathSymbol{"02914}{\nvrightarrowtail }{\mathrel}{rightwards arrow with tail with vertical stroke}% +\UnicodeMathSymbol{"02915}{\nVrightarrowtail }{\mathrel}{rightwards arrow with tail with double vertical stroke}% +\UnicodeMathSymbol{"02916}{\twoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail}% +\UnicodeMathSymbol{"02917}{\nvtwoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail with vertical stroke}% +\UnicodeMathSymbol{"02918}{\nVtwoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail with double vertical stroke}% +\UnicodeMathSymbol{"02919}{\lefttail }{\mathrel}{leftwards arrow-tail}% +\UnicodeMathSymbol{"0291A}{\righttail }{\mathrel}{rightwards arrow-tail}% +\UnicodeMathSymbol{"0291B}{\leftdbltail }{\mathrel}{leftwards double arrow-tail}% +\UnicodeMathSymbol{"0291C}{\rightdbltail }{\mathrel}{rightwards double arrow-tail}% +\UnicodeMathSymbol{"0291D}{\diamondleftarrow }{\mathrel}{leftwards arrow to black diamond}% +\UnicodeMathSymbol{"0291E}{\rightarrowdiamond }{\mathrel}{rightwards arrow to black diamond}% +\UnicodeMathSymbol{"0291F}{\diamondleftarrowbar }{\mathrel}{leftwards arrow from bar to black diamond}% +\UnicodeMathSymbol{"02920}{\barrightarrowdiamond }{\mathrel}{rightwards arrow from bar to black diamond}% +\UnicodeMathSymbol{"02921}{\nwsearrow }{\mathrel}{north west and south east arrow}% +\UnicodeMathSymbol{"02922}{\neswarrow }{\mathrel}{north east and south west arrow}% +\UnicodeMathSymbol{"02923}{\hknwarrow }{\mathrel}{north west arrow with hook}% +\UnicodeMathSymbol{"02924}{\hknearrow }{\mathrel}{north east arrow with hook}% +\UnicodeMathSymbol{"02925}{\hksearrow }{\mathrel}{south east arrow with hook}% +\UnicodeMathSymbol{"02926}{\hkswarrow }{\mathrel}{south west arrow with hook}% +\UnicodeMathSymbol{"02927}{\tona }{\mathrel}{north west arrow and north east arrow}% +\UnicodeMathSymbol{"02928}{\toea }{\mathrel}{north east arrow and south east arrow}% +\UnicodeMathSymbol{"02929}{\tosa }{\mathrel}{south east arrow and south west arrow}% +\UnicodeMathSymbol{"0292A}{\towa }{\mathrel}{south west arrow and north west arrow}% +\UnicodeMathSymbol{"0292B}{\rdiagovfdiag }{\mathord}{rising diagonal crossing falling diagonal}% +\UnicodeMathSymbol{"0292C}{\fdiagovrdiag }{\mathord}{falling diagonal crossing rising diagonal}% +\UnicodeMathSymbol{"0292D}{\seovnearrow }{\mathord}{south east arrow crossing north east arrow}% +\UnicodeMathSymbol{"0292E}{\neovsearrow }{\mathord}{north east arrow crossing south east arrow}% +\UnicodeMathSymbol{"0292F}{\fdiagovnearrow }{\mathord}{falling diagonal crossing north east arrow}% +\UnicodeMathSymbol{"02930}{\rdiagovsearrow }{\mathord}{rising diagonal crossing south east arrow}% +\UnicodeMathSymbol{"02931}{\neovnwarrow }{\mathord}{north east arrow crossing north west arrow}% +\UnicodeMathSymbol{"02932}{\nwovnearrow }{\mathord}{north west arrow crossing north east arrow}% +\UnicodeMathSymbol{"02933}{\rightcurvedarrow }{\mathrel}{wave arrow pointing directly right}% +\UnicodeMathSymbol{"02934}{\uprightcurvearrow }{\mathord}{arrow pointing rightwards then curving upwards}% +\UnicodeMathSymbol{"02935}{\downrightcurvedarrow }{\mathord}{arrow pointing rightwards then curving downwards}% +\UnicodeMathSymbol{"02936}{\leftdowncurvedarrow }{\mathrel}{arrow pointing downwards then curving leftwards}% +\UnicodeMathSymbol{"02937}{\rightdowncurvedarrow }{\mathrel}{arrow pointing downwards then curving rightwards}% +\UnicodeMathSymbol{"02938}{\cwrightarcarrow }{\mathrel}{right-side arc clockwise arrow}% +\UnicodeMathSymbol{"02939}{\acwleftarcarrow }{\mathrel}{left-side arc anticlockwise arrow}% +\UnicodeMathSymbol{"0293A}{\acwoverarcarrow }{\mathrel}{top arc anticlockwise arrow}% +\UnicodeMathSymbol{"0293B}{\acwunderarcarrow }{\mathrel}{bottom arc anticlockwise arrow}% +\UnicodeMathSymbol{"0293C}{\curvearrowrightminus }{\mathrel}{top arc clockwise arrow with minus}% +\UnicodeMathSymbol{"0293D}{\curvearrowleftplus }{\mathrel}{top arc anticlockwise arrow with plus}% +\UnicodeMathSymbol{"0293E}{\cwundercurvearrow }{\mathrel}{lower right semicircular clockwise arrow}% +\UnicodeMathSymbol{"0293F}{\ccwundercurvearrow }{\mathrel}{lower left semicircular anticlockwise arrow}% +\UnicodeMathSymbol{"02940}{\acwcirclearrow }{\mathrel}{anticlockwise closed circle arrow}% +\UnicodeMathSymbol{"02941}{\cwcirclearrow }{\mathrel}{clockwise closed circle arrow}% +\UnicodeMathSymbol{"02942}{\rightarrowshortleftarrow }{\mathrel}{rightwards arrow above short leftwards arrow}% +\UnicodeMathSymbol{"02943}{\leftarrowshortrightarrow }{\mathrel}{leftwards arrow above short rightwards arrow}% +\UnicodeMathSymbol{"02944}{\shortrightarrowleftarrow }{\mathrel}{short rightwards arrow above leftwards arrow}% +\UnicodeMathSymbol{"02945}{\rightarrowplus }{\mathrel}{rightwards arrow with plus below}% +\UnicodeMathSymbol{"02946}{\leftarrowplus }{\mathrel}{leftwards arrow with plus below}% +\UnicodeMathSymbol{"02947}{\rightarrowx }{\mathrel}{rightwards arrow through x}% +\UnicodeMathSymbol{"02948}{\leftrightarrowcircle }{\mathrel}{left right arrow through small circle}% +\UnicodeMathSymbol{"02949}{\twoheaduparrowcircle }{\mathrel}{upwards two-headed arrow from small circle}% +\UnicodeMathSymbol{"0294A}{\leftrightharpoonupdown }{\mathrel}{left barb up right barb down harpoon}% +\UnicodeMathSymbol{"0294B}{\leftrightharpoondownup }{\mathrel}{left barb down right barb up harpoon}% +\UnicodeMathSymbol{"0294C}{\updownharpoonrightleft }{\mathrel}{up barb right down barb left harpoon}% +\UnicodeMathSymbol{"0294D}{\updownharpoonleftright }{\mathrel}{up barb left down barb right harpoon}% +\UnicodeMathSymbol{"0294E}{\leftrightharpoonupup }{\mathrel}{left barb up right barb up harpoon}% +\UnicodeMathSymbol{"0294F}{\updownharpoonrightright }{\mathrel}{up barb right down barb right harpoon}% +\UnicodeMathSymbol{"02950}{\leftrightharpoondowndown }{\mathrel}{left barb down right barb down harpoon}% +\UnicodeMathSymbol{"02951}{\updownharpoonleftleft }{\mathrel}{up barb left down barb left harpoon}% +\UnicodeMathSymbol{"02952}{\barleftharpoonup }{\mathrel}{leftwards harpoon with barb up to bar}% +\UnicodeMathSymbol{"02953}{\rightharpoonupbar }{\mathrel}{rightwards harpoon with barb up to bar}% +\UnicodeMathSymbol{"02954}{\barupharpoonright }{\mathrel}{upwards harpoon with barb right to bar}% +\UnicodeMathSymbol{"02955}{\downharpoonrightbar }{\mathrel}{downwards harpoon with barb right to bar}% +\UnicodeMathSymbol{"02956}{\barleftharpoondown }{\mathrel}{leftwards harpoon with barb down to bar}% +\UnicodeMathSymbol{"02957}{\rightharpoondownbar }{\mathrel}{rightwards harpoon with barb down to bar}% +\UnicodeMathSymbol{"02958}{\barupharpoonleft }{\mathrel}{upwards harpoon with barb left to bar}% +\UnicodeMathSymbol{"02959}{\downharpoonleftbar }{\mathrel}{downwards harpoon with barb left to bar}% +\UnicodeMathSymbol{"0295A}{\leftharpoonupbar }{\mathrel}{leftwards harpoon with barb up from bar}% +\UnicodeMathSymbol{"0295B}{\barrightharpoonup }{\mathrel}{rightwards harpoon with barb up from bar}% +\UnicodeMathSymbol{"0295C}{\upharpoonrightbar }{\mathrel}{upwards harpoon with barb right from bar}% +\UnicodeMathSymbol{"0295D}{\bardownharpoonright }{\mathrel}{downwards harpoon with barb right from bar}% +\UnicodeMathSymbol{"0295E}{\leftharpoondownbar }{\mathrel}{leftwards harpoon with barb down from bar}% +\UnicodeMathSymbol{"0295F}{\barrightharpoondown }{\mathrel}{rightwards harpoon with barb down from bar}% +\UnicodeMathSymbol{"02960}{\upharpoonleftbar }{\mathrel}{upwards harpoon with barb left from bar}% +\UnicodeMathSymbol{"02961}{\bardownharpoonleft }{\mathrel}{downwards harpoon with barb left from bar}% +\UnicodeMathSymbol{"02962}{\leftharpoonsupdown }{\mathrel}{leftwards harpoon with barb up above leftwards harpoon with barb down}% +\UnicodeMathSymbol{"02963}{\upharpoonsleftright }{\mathrel}{upwards harpoon with barb left beside upwards harpoon with barb right}% +\UnicodeMathSymbol{"02964}{\rightharpoonsupdown }{\mathrel}{rightwards harpoon with barb up above rightwards harpoon with barb down}% +\UnicodeMathSymbol{"02965}{\downharpoonsleftright }{\mathrel}{downwards harpoon with barb left beside downwards harpoon with barb right}% +\UnicodeMathSymbol{"02966}{\leftrightharpoonsup }{\mathrel}{leftwards harpoon with barb up above rightwards harpoon with barb up}% +\UnicodeMathSymbol{"02967}{\leftrightharpoonsdown }{\mathrel}{leftwards harpoon with barb down above rightwards harpoon with barb down}% +\UnicodeMathSymbol{"02968}{\rightleftharpoonsup }{\mathrel}{rightwards harpoon with barb up above leftwards harpoon with barb up}% +\UnicodeMathSymbol{"02969}{\rightleftharpoonsdown }{\mathrel}{rightwards harpoon with barb down above leftwards harpoon with barb down}% +\UnicodeMathSymbol{"0296A}{\leftharpoonupdash }{\mathrel}{leftwards harpoon with barb up above long dash}% +\UnicodeMathSymbol{"0296B}{\dashleftharpoondown }{\mathrel}{leftwards harpoon with barb down below long dash}% +\UnicodeMathSymbol{"0296C}{\rightharpoonupdash }{\mathrel}{rightwards harpoon with barb up above long dash}% +\UnicodeMathSymbol{"0296D}{\dashrightharpoondown }{\mathrel}{rightwards harpoon with barb down below long dash}% +\UnicodeMathSymbol{"0296E}{\updownharpoonsleftright }{\mathrel}{upwards harpoon with barb left beside downwards harpoon with barb right}% +\UnicodeMathSymbol{"0296F}{\downupharpoonsleftright }{\mathrel}{downwards harpoon with barb left beside upwards harpoon with barb right}% +\UnicodeMathSymbol{"02970}{\rightimply }{\mathrel}{right double arrow with rounded head}% +\UnicodeMathSymbol{"02971}{\equalrightarrow }{\mathrel}{equals sign above rightwards arrow}% +\UnicodeMathSymbol{"02972}{\similarrightarrow }{\mathrel}{tilde operator above rightwards arrow}% +\UnicodeMathSymbol{"02973}{\leftarrowsimilar }{\mathrel}{leftwards arrow above tilde operator}% +\UnicodeMathSymbol{"02974}{\rightarrowsimilar }{\mathrel}{rightwards arrow above tilde operator}% +\UnicodeMathSymbol{"02975}{\rightarrowapprox }{\mathrel}{rightwards arrow above almost equal to}% +\UnicodeMathSymbol{"02976}{\ltlarr }{\mathrel}{less-than above leftwards arrow}% +\UnicodeMathSymbol{"02977}{\leftarrowless }{\mathrel}{leftwards arrow through less-than}% +\UnicodeMathSymbol{"02978}{\gtrarr }{\mathrel}{greater-than above rightwards arrow}% +\UnicodeMathSymbol{"02979}{\subrarr }{\mathrel}{subset above rightwards arrow}% +\UnicodeMathSymbol{"0297A}{\leftarrowsubset }{\mathrel}{leftwards arrow through subset}% +\UnicodeMathSymbol{"0297B}{\suplarr }{\mathrel}{superset above leftwards arrow}% +\UnicodeMathSymbol{"0297C}{\leftfishtail }{\mathrel}{left fish tail}% +\UnicodeMathSymbol{"0297D}{\rightfishtail }{\mathrel}{right fish tail}% +\UnicodeMathSymbol{"0297E}{\upfishtail }{\mathrel}{up fish tail}% +\UnicodeMathSymbol{"0297F}{\downfishtail }{\mathrel}{down fish tail}% +\UnicodeMathSymbol{"02980}{\Vvert }{\mathfence}{triple vertical bar delimiter}% +\UnicodeMathSymbol{"02981}{\mdsmblkcircle }{\mathord}{z notation spot}% +\UnicodeMathSymbol{"02982}{\typecolon }{\mathrel}{z notation type colon}% +\UnicodeMathSymbol{"02983}{\lBrace }{\mathopen}{left white curly bracket}% +\UnicodeMathSymbol{"02984}{\rBrace }{\mathclose}{right white curly bracket}% +\UnicodeMathSymbol{"02985}{\lParen }{\mathopen}{left white parenthesis}% +\UnicodeMathSymbol{"02986}{\rParen }{\mathclose}{right white parenthesis}% +\UnicodeMathSymbol{"02987}{\llparenthesis }{\mathopen}{z notation left image bracket}% +\UnicodeMathSymbol{"02988}{\rrparenthesis }{\mathclose}{z notation right image bracket}% +\UnicodeMathSymbol{"02989}{\llangle }{\mathopen}{z notation left binding bracket}% +\UnicodeMathSymbol{"0298A}{\rrangle }{\mathclose}{z notation right binding bracket}% +\UnicodeMathSymbol{"0298B}{\lbrackubar }{\mathopen}{left square bracket with underbar}% +\UnicodeMathSymbol{"0298C}{\rbrackubar }{\mathclose}{right square bracket with underbar}% +\UnicodeMathSymbol{"0298D}{\lbrackultick }{\mathopen}{left square bracket with tick in top corner}% +\UnicodeMathSymbol{"0298E}{\rbracklrtick }{\mathclose}{right square bracket with tick in bottom corner}% +\UnicodeMathSymbol{"0298F}{\lbracklltick }{\mathopen}{left square bracket with tick in bottom corner}% +\UnicodeMathSymbol{"02990}{\rbrackurtick }{\mathclose}{right square bracket with tick in top corner}% +\UnicodeMathSymbol{"02991}{\langledot }{\mathopen}{left angle bracket with dot}% +\UnicodeMathSymbol{"02992}{\rangledot }{\mathclose}{right angle bracket with dot}% +\UnicodeMathSymbol{"02993}{\lparenless }{\mathopen}{left arc less-than bracket}% +\UnicodeMathSymbol{"02994}{\rparengtr }{\mathclose}{right arc greater-than bracket}% +\UnicodeMathSymbol{"02995}{\Lparengtr }{\mathopen}{double left arc greater-than bracket}% +\UnicodeMathSymbol{"02996}{\Rparenless }{\mathclose}{double right arc less-than bracket}% +\UnicodeMathSymbol{"02997}{\lblkbrbrak }{\mathopen}{left black tortoise shell bracket}% +\UnicodeMathSymbol{"02998}{\rblkbrbrak }{\mathclose}{right black tortoise shell bracket}% +\UnicodeMathSymbol{"02999}{\fourvdots }{\mathord}{dotted fence}% +\UnicodeMathSymbol{"0299A}{\vzigzag }{\mathord}{vertical zigzag line}% +\UnicodeMathSymbol{"0299B}{\measuredangleleft }{\mathord}{measured angle opening left}% +\UnicodeMathSymbol{"0299C}{\rightanglesqr }{\mathord}{right angle variant with square}% +\UnicodeMathSymbol{"0299D}{\rightanglemdot }{\mathord}{measured right angle with dot}% +\UnicodeMathSymbol{"0299E}{\angles }{\mathord}{angle with s inside}% +\UnicodeMathSymbol{"0299F}{\angdnr }{\mathord}{acute angle}% +\UnicodeMathSymbol{"029A0}{\gtlpar }{\mathord}{spherical angle opening left}% +\UnicodeMathSymbol{"029A1}{\sphericalangleup }{\mathord}{spherical angle opening up}% +\UnicodeMathSymbol{"029A2}{\turnangle }{\mathord}{turned angle}% +\UnicodeMathSymbol{"029A3}{\revangle }{\mathord}{reversed angle}% +\UnicodeMathSymbol{"029A4}{\angleubar }{\mathord}{angle with underbar}% +\UnicodeMathSymbol{"029A5}{\revangleubar }{\mathord}{reversed angle with underbar}% +\UnicodeMathSymbol{"029A6}{\wideangledown }{\mathord}{oblique angle opening up}% +\UnicodeMathSymbol{"029A7}{\wideangleup }{\mathord}{oblique angle opening down}% +\UnicodeMathSymbol{"029A8}{\measanglerutone }{\mathord}{measured angle with open arm ending in arrow pointing up and right}% +\UnicodeMathSymbol{"029A9}{\measanglelutonw }{\mathord}{measured angle with open arm ending in arrow pointing up and left}% +\UnicodeMathSymbol{"029AA}{\measanglerdtose }{\mathord}{measured angle with open arm ending in arrow pointing down and right}% +\UnicodeMathSymbol{"029AB}{\measangleldtosw }{\mathord}{measured angle with open arm ending in arrow pointing down and left}% +\UnicodeMathSymbol{"029AC}{\measangleurtone }{\mathord}{measured angle with open arm ending in arrow pointing right and up}% +\UnicodeMathSymbol{"029AD}{\measangleultonw }{\mathord}{measured angle with open arm ending in arrow pointing left and up}% +\UnicodeMathSymbol{"029AE}{\measangledrtose }{\mathord}{measured angle with open arm ending in arrow pointing right and down}% +\UnicodeMathSymbol{"029AF}{\measangledltosw }{\mathord}{measured angle with open arm ending in arrow pointing left and down}% +\UnicodeMathSymbol{"029B0}{\revemptyset }{\mathord}{reversed empty set}% +\UnicodeMathSymbol{"029B1}{\emptysetobar }{\mathord}{empty set with overbar}% +\UnicodeMathSymbol{"029B2}{\emptysetocirc }{\mathord}{empty set with small circle above}% +\UnicodeMathSymbol{"029B3}{\emptysetoarr }{\mathord}{empty set with right arrow above}% +\UnicodeMathSymbol{"029B4}{\emptysetoarrl }{\mathord}{empty set with left arrow above}% +\UnicodeMathSymbol{"029B5}{\circlehbar }{\mathbin}{circle with horizontal bar}% +\UnicodeMathSymbol{"029B6}{\circledvert }{\mathbin}{circled vertical bar}% +\UnicodeMathSymbol{"029B7}{\circledparallel }{\mathbin}{circled parallel}% +\UnicodeMathSymbol{"029B8}{\obslash }{\mathbin}{circled reverse solidus}% +\UnicodeMathSymbol{"029B9}{\operp }{\mathbin}{circled perpendicular}% +\UnicodeMathSymbol{"029BA}{\obot }{\mathord}{circle divided by horizontal bar and top half divided by vertical bar}% +\UnicodeMathSymbol{"029BB}{\olcross }{\mathord}{circle with superimposed x}% +\UnicodeMathSymbol{"029BC}{\odotslashdot }{\mathord}{circled anticlockwise-rotated division sign}% +\UnicodeMathSymbol{"029BD}{\uparrowoncircle }{\mathord}{up arrow through circle}% +\UnicodeMathSymbol{"029BE}{\circledwhitebullet }{\mathord}{circled white bullet}% +\UnicodeMathSymbol{"029BF}{\circledbullet }{\mathord}{circled bullet}% +\UnicodeMathSymbol{"029C0}{\olessthan }{\mathbin}{circled less-than}% +\UnicodeMathSymbol{"029C1}{\ogreaterthan }{\mathbin}{circled greater-than}% +\UnicodeMathSymbol{"029C2}{\cirscir }{\mathord}{circle with small circle to the right}% +\UnicodeMathSymbol{"029C3}{\cirE }{\mathord}{circle with two horizontal strokes to the right}% +\UnicodeMathSymbol{"029C4}{\boxdiag }{\mathbin}{squared rising diagonal slash}% +\UnicodeMathSymbol{"029C5}{\boxbslash }{\mathbin}{squared falling diagonal slash}% +\UnicodeMathSymbol{"029C6}{\boxast }{\mathbin}{squared asterisk}% +\UnicodeMathSymbol{"029C7}{\boxcircle }{\mathbin}{squared small circle}% +\UnicodeMathSymbol{"029C8}{\boxbox }{\mathbin}{squared square}% +\UnicodeMathSymbol{"029C9}{\boxonbox }{\mathord}{two joined squares}% +\UnicodeMathSymbol{"029CA}{\triangleodot }{\mathord}{triangle with dot above}% +\UnicodeMathSymbol{"029CB}{\triangleubar }{\mathord}{triangle with underbar}% +\UnicodeMathSymbol{"029CC}{\triangles }{\mathord}{s in triangle}% +\UnicodeMathSymbol{"029CD}{\triangleserifs }{\mathbin}{triangle with serifs at bottom}% +\UnicodeMathSymbol{"029CE}{\rtriltri }{\mathrel}{right triangle above left triangle}% +\UnicodeMathSymbol{"029CF}{\ltrivb }{\mathrel}{left triangle beside vertical bar}% +\UnicodeMathSymbol{"029D0}{\vbrtri }{\mathrel}{vertical bar beside right triangle}% +\UnicodeMathSymbol{"029D1}{\lfbowtie }{\mathrel}{left black bowtie}% +\UnicodeMathSymbol{"029D2}{\rfbowtie }{\mathrel}{right black bowtie}% +\UnicodeMathSymbol{"029D3}{\fbowtie }{\mathrel}{black bowtie}% +\UnicodeMathSymbol{"029D4}{\lftimes }{\mathrel}{left black times}% +\UnicodeMathSymbol{"029D5}{\rftimes }{\mathrel}{right black times}% +\UnicodeMathSymbol{"029D6}{\hourglass }{\mathbin}{white hourglass}% +\UnicodeMathSymbol{"029D7}{\blackhourglass }{\mathbin}{black hourglass}% +\UnicodeMathSymbol{"029D8}{\lvzigzag }{\mathopen}{left wiggly fence}% +\UnicodeMathSymbol{"029D9}{\rvzigzag }{\mathclose}{right wiggly fence}% +\UnicodeMathSymbol{"029DA}{\Lvzigzag }{\mathopen}{left double wiggly fence}% +\UnicodeMathSymbol{"029DB}{\Rvzigzag }{\mathclose}{right double wiggly fence}% +\UnicodeMathSymbol{"029DC}{\iinfin }{\mathord}{incomplete infinity}% +\UnicodeMathSymbol{"029DD}{\tieinfty }{\mathord}{tie over infinity}% +\UnicodeMathSymbol{"029DE}{\nvinfty }{\mathord}{infinity negated with vertical bar}% +\UnicodeMathSymbol{"029DF}{\dualmap }{\mathrel}{double-ended multimap}% +\UnicodeMathSymbol{"029E0}{\laplac }{\mathord}{square with contoured outline}% +\UnicodeMathSymbol{"029E1}{\lrtriangleeq }{\mathrel}{increases as}% +\UnicodeMathSymbol{"029E2}{\shuffle }{\mathbin}{shuffle product}% +\UnicodeMathSymbol{"029E3}{\eparsl }{\mathrel}{equals sign and slanted parallel}% +\UnicodeMathSymbol{"029E4}{\smeparsl }{\mathrel}{equals sign and slanted parallel with tilde above}% +\UnicodeMathSymbol{"029E5}{\eqvparsl }{\mathrel}{identical to and slanted parallel}% +\UnicodeMathSymbol{"029E6}{\gleichstark }{\mathrel}{gleich stark}% +\UnicodeMathSymbol{"029E7}{\thermod }{\mathord}{thermodynamic}% +\UnicodeMathSymbol{"029E8}{\downtriangleleftblack }{\mathord}{down-pointing triangle with left half black}% +\UnicodeMathSymbol{"029E9}{\downtrianglerightblack }{\mathord}{down-pointing triangle with right half black}% +\UnicodeMathSymbol{"029EA}{\blackdiamonddownarrow }{\mathord}{black diamond with down arrow}% +\UnicodeMathSymbol{"029EB}{\mdlgblklozenge }{\mathbin}{black lozenge}% +\UnicodeMathSymbol{"029EC}{\circledownarrow }{\mathord}{white circle with down arrow}% +\UnicodeMathSymbol{"029ED}{\blackcircledownarrow }{\mathord}{black circle with down arrow}% +\UnicodeMathSymbol{"029EE}{\errbarsquare }{\mathord}{error-barred white square}% +\UnicodeMathSymbol{"029EF}{\errbarblacksquare }{\mathord}{error-barred black square}% +\UnicodeMathSymbol{"029F0}{\errbardiamond }{\mathord}{error-barred white diamond}% +\UnicodeMathSymbol{"029F1}{\errbarblackdiamond }{\mathord}{error-barred black diamond}% +\UnicodeMathSymbol{"029F2}{\errbarcircle }{\mathord}{error-barred white circle}% +\UnicodeMathSymbol{"029F3}{\errbarblackcircle }{\mathord}{error-barred black circle}% +\UnicodeMathSymbol{"029F4}{\ruledelayed }{\mathrel}{rule-delayed}% +\UnicodeMathSymbol{"029F5}{\setminus }{\mathbin}{reverse solidus operator}% +\UnicodeMathSymbol{"029F6}{\dsol }{\mathbin}{solidus with overbar}% +\UnicodeMathSymbol{"029F7}{\rsolbar }{\mathbin}{reverse solidus with horizontal stroke}% +\UnicodeMathSymbol{"029F8}{\xsol }{\mathop}{big solidus}% +\UnicodeMathSymbol{"029F9}{\xbsol }{\mathop}{big reverse solidus}% +\UnicodeMathSymbol{"029FA}{\doubleplus }{\mathbin}{double plus}% +\UnicodeMathSymbol{"029FB}{\tripleplus }{\mathbin}{triple plus}% +\UnicodeMathSymbol{"029FC}{\lcurvyangle }{\mathopen}{left pointing curved angle bracket}% +\UnicodeMathSymbol{"029FD}{\rcurvyangle }{\mathclose}{right pointing curved angle bracket}% +\UnicodeMathSymbol{"029FE}{\tplus }{\mathbin}{tiny}% +\UnicodeMathSymbol{"029FF}{\tminus }{\mathbin}{miny}% +\UnicodeMathSymbol{"02A00}{\bigodot }{\mathop}{n-ary circled dot operator}% +\UnicodeMathSymbol{"02A01}{\bigoplus }{\mathop}{n-ary circled plus operator}% +\UnicodeMathSymbol{"02A02}{\bigotimes }{\mathop}{n-ary circled times operator}% +\UnicodeMathSymbol{"02A03}{\bigcupdot }{\mathop}{n-ary union operator with dot}% +\UnicodeMathSymbol{"02A04}{\biguplus }{\mathop}{n-ary union operator with plus}% +\UnicodeMathSymbol{"02A05}{\bigsqcap }{\mathop}{n-ary square intersection operator}% +\UnicodeMathSymbol{"02A06}{\bigsqcup }{\mathop}{n-ary square union operator}% +\UnicodeMathSymbol{"02A07}{\conjquant }{\mathop}{two logical and operator}% +\UnicodeMathSymbol{"02A08}{\disjquant }{\mathop}{two logical or operator}% +\UnicodeMathSymbol{"02A09}{\bigtimes }{\mathop}{n-ary times operator}% +\UnicodeMathSymbol{"02A0A}{\modtwosum }{\mathop}{modulo two sum}% +\UnicodeMathSymbol{"02A0B}{\sumint }{\mathop}{summation with integral}% +\UnicodeMathSymbol{"02A0C}{\iiiint }{\mathop}{quadruple integral operator}% +\UnicodeMathSymbol{"02A0D}{\intbar }{\mathop}{finite part integral}% +\UnicodeMathSymbol{"02A0E}{\intBar }{\mathop}{integral with double stroke}% +\UnicodeMathSymbol{"02A0F}{\fint }{\mathop}{integral average with slash}% +\UnicodeMathSymbol{"02A10}{\cirfnint }{\mathop}{circulation function}% +\UnicodeMathSymbol{"02A11}{\awint }{\mathop}{anticlockwise integration}% +\UnicodeMathSymbol{"02A12}{\rppolint }{\mathop}{line integration with rectangular path around pole}% +\UnicodeMathSymbol{"02A13}{\scpolint }{\mathop}{line integration with semicircular path around pole}% +\UnicodeMathSymbol{"02A14}{\npolint }{\mathop}{line integration not including the pole}% +\UnicodeMathSymbol{"02A15}{\pointint }{\mathop}{integral around a point operator}% +\UnicodeMathSymbol{"02A16}{\sqint }{\mathop}{quaternion integral operator}% +\UnicodeMathSymbol{"02A17}{\intlarhk }{\mathop}{integral with leftwards arrow with hook}% +\UnicodeMathSymbol{"02A18}{\intx }{\mathop}{integral with times sign}% +\UnicodeMathSymbol{"02A19}{\intcap }{\mathop}{integral with intersection}% +\UnicodeMathSymbol{"02A1A}{\intcup }{\mathop}{integral with union}% +\UnicodeMathSymbol{"02A1B}{\upint }{\mathop}{integral with overbar}% +\UnicodeMathSymbol{"02A1C}{\lowint }{\mathop}{integral with underbar}% +\UnicodeMathSymbol{"02A1D}{\Join }{\mathop}{join}% +\UnicodeMathSymbol{"02A1E}{\bigtriangleleft }{\mathop}{large left triangle operator}% +\UnicodeMathSymbol{"02A1F}{\zcmp }{\mathop}{z notation schema composition}% +\UnicodeMathSymbol{"02A20}{\zpipe }{\mathop}{z notation schema piping}% +\UnicodeMathSymbol{"02A21}{\zproject }{\mathop}{z notation schema projection}% +\UnicodeMathSymbol{"02A22}{\ringplus }{\mathbin}{plus sign with small circle above}% +\UnicodeMathSymbol{"02A23}{\plushat }{\mathbin}{plus sign with circumflex accent above}% +\UnicodeMathSymbol{"02A24}{\simplus }{\mathbin}{plus sign with tilde above}% +\UnicodeMathSymbol{"02A25}{\plusdot }{\mathbin}{plus sign with dot below}% +\UnicodeMathSymbol{"02A26}{\plussim }{\mathbin}{plus sign with tilde below}% +\UnicodeMathSymbol{"02A27}{\plussubtwo }{\mathbin}{plus sign with subscript two}% +\UnicodeMathSymbol{"02A28}{\plustrif }{\mathbin}{plus sign with black triangle}% +\UnicodeMathSymbol{"02A29}{\commaminus }{\mathbin}{minus sign with comma above}% +\UnicodeMathSymbol{"02A2A}{\minusdot }{\mathbin}{minus sign with dot below}% +\UnicodeMathSymbol{"02A2B}{\minusfdots }{\mathbin}{minus sign with falling dots}% +\UnicodeMathSymbol{"02A2C}{\minusrdots }{\mathbin}{minus sign with rising dots}% +\UnicodeMathSymbol{"02A2D}{\opluslhrim }{\mathbin}{plus sign in left half circle}% +\UnicodeMathSymbol{"02A2E}{\oplusrhrim }{\mathbin}{plus sign in right half circle}% +\UnicodeMathSymbol{"02A2F}{\vectimes }{\mathbin}{vector or cross product}% +\UnicodeMathSymbol{"02A30}{\dottimes }{\mathbin}{multiplication sign with dot above}% +\UnicodeMathSymbol{"02A31}{\timesbar }{\mathbin}{multiplication sign with underbar}% +\UnicodeMathSymbol{"02A32}{\btimes }{\mathbin}{semidirect product with bottom closed}% +\UnicodeMathSymbol{"02A33}{\smashtimes }{\mathbin}{smash product}% +\UnicodeMathSymbol{"02A34}{\otimeslhrim }{\mathbin}{multiplication sign in left half circle}% +\UnicodeMathSymbol{"02A35}{\otimesrhrim }{\mathbin}{multiplication sign in right half circle}% +\UnicodeMathSymbol{"02A36}{\otimeshat }{\mathbin}{circled multiplication sign with circumflex accent}% +\UnicodeMathSymbol{"02A37}{\Otimes }{\mathbin}{multiplication sign in double circle}% +\UnicodeMathSymbol{"02A38}{\odiv }{\mathbin}{circled division sign}% +\UnicodeMathSymbol{"02A39}{\triangleplus }{\mathbin}{plus sign in triangle}% +\UnicodeMathSymbol{"02A3A}{\triangleminus }{\mathbin}{minus sign in triangle}% +\UnicodeMathSymbol{"02A3B}{\triangletimes }{\mathbin}{multiplication sign in triangle}% +\UnicodeMathSymbol{"02A3C}{\intprod }{\mathbin}{interior product}% +\UnicodeMathSymbol{"02A3D}{\intprodr }{\mathbin}{righthand interior product}% +\UnicodeMathSymbol{"02A3E}{\fcmp }{\mathbin}{z notation relational composition}% +\UnicodeMathSymbol{"02A3F}{\amalg }{\mathbin}{amalgamation or coproduct}% +\UnicodeMathSymbol{"02A40}{\capdot }{\mathbin}{intersection with dot}% +\UnicodeMathSymbol{"02A41}{\uminus }{\mathbin}{union with minus sign}% +\UnicodeMathSymbol{"02A42}{\barcup }{\mathbin}{union with overbar}% +\UnicodeMathSymbol{"02A43}{\barcap }{\mathbin}{intersection with overbar}% +\UnicodeMathSymbol{"02A44}{\capwedge }{\mathbin}{intersection with logical and}% +\UnicodeMathSymbol{"02A45}{\cupvee }{\mathbin}{union with logical or}% +\UnicodeMathSymbol{"02A46}{\cupovercap }{\mathbin}{union above intersection}% +\UnicodeMathSymbol{"02A47}{\capovercup }{\mathbin}{intersection above union}% +\UnicodeMathSymbol{"02A48}{\cupbarcap }{\mathbin}{union above bar above intersection}% +\UnicodeMathSymbol{"02A49}{\capbarcup }{\mathbin}{intersection above bar above union}% +\UnicodeMathSymbol{"02A4A}{\twocups }{\mathbin}{union beside and joined with union}% +\UnicodeMathSymbol{"02A4B}{\twocaps }{\mathbin}{intersection beside and joined with intersection}% +\UnicodeMathSymbol{"02A4C}{\closedvarcup }{\mathbin}{closed union with serifs}% +\UnicodeMathSymbol{"02A4D}{\closedvarcap }{\mathbin}{closed intersection with serifs}% +\UnicodeMathSymbol{"02A4E}{\Sqcap }{\mathbin}{double square intersection}% +\UnicodeMathSymbol{"02A4F}{\Sqcup }{\mathbin}{double square union}% +\UnicodeMathSymbol{"02A50}{\closedvarcupsmashprod }{\mathbin}{closed union with serifs and smash product}% +\UnicodeMathSymbol{"02A51}{\wedgeodot }{\mathbin}{logical and with dot above}% +\UnicodeMathSymbol{"02A52}{\veeodot }{\mathbin}{logical or with dot above}% +\UnicodeMathSymbol{"02A53}{\Wedge }{\mathbin}{double logical and}% +\UnicodeMathSymbol{"02A54}{\Vee }{\mathbin}{double logical or}% +\UnicodeMathSymbol{"02A55}{\wedgeonwedge }{\mathbin}{two intersecting logical and}% +\UnicodeMathSymbol{"02A56}{\veeonvee }{\mathbin}{two intersecting logical or}% +\UnicodeMathSymbol{"02A57}{\bigslopedvee }{\mathbin}{sloping large or}% +\UnicodeMathSymbol{"02A58}{\bigslopedwedge }{\mathbin}{sloping large and}% +\UnicodeMathSymbol{"02A59}{\veeonwedge }{\mathrel}{logical or overlapping logical and}% +\UnicodeMathSymbol{"02A5A}{\wedgemidvert }{\mathbin}{logical and with middle stem}% +\UnicodeMathSymbol{"02A5B}{\veemidvert }{\mathbin}{logical or with middle stem}% +\UnicodeMathSymbol{"02A5C}{\midbarwedge }{\mathbin}{ogical and with horizontal dash}% +\UnicodeMathSymbol{"02A5D}{\midbarvee }{\mathbin}{logical or with horizontal dash}% +\UnicodeMathSymbol{"02A5E}{\doublebarwedge }{\mathbin}{logical and with double overbar}% +\UnicodeMathSymbol{"02A5F}{\wedgebar }{\mathbin}{logical and with underbar}% +\UnicodeMathSymbol{"02A60}{\wedgedoublebar }{\mathbin}{logical and with double underbar}% +\UnicodeMathSymbol{"02A61}{\varveebar }{\mathbin}{small vee with underbar}% +\UnicodeMathSymbol{"02A62}{\doublebarvee }{\mathbin}{logical or with double overbar}% +\UnicodeMathSymbol{"02A63}{\veedoublebar }{\mathbin}{logical or with double underbar}% +\UnicodeMathSymbol{"02A64}{\dsub }{\mathbin}{z notation domain antirestriction}% +\UnicodeMathSymbol{"02A65}{\rsub }{\mathbin}{z notation range antirestriction}% +\UnicodeMathSymbol{"02A66}{\eqdot }{\mathrel}{equals sign with dot below}% +\UnicodeMathSymbol{"02A67}{\dotequiv }{\mathrel}{identical with dot above}% +\UnicodeMathSymbol{"02A68}{\equivVert }{\mathrel}{triple horizontal bar with double vertical stroke}% +\UnicodeMathSymbol{"02A69}{\equivVvert }{\mathrel}{triple horizontal bar with triple vertical stroke}% +\UnicodeMathSymbol{"02A6A}{\dotsim }{\mathrel}{tilde operator with dot above}% +\UnicodeMathSymbol{"02A6B}{\simrdots }{\mathrel}{tilde operator with rising dots}% +\UnicodeMathSymbol{"02A6C}{\simminussim }{\mathrel}{similar minus similar}% +\UnicodeMathSymbol{"02A6D}{\congdot }{\mathrel}{congruent with dot above}% +\UnicodeMathSymbol{"02A6E}{\asteq }{\mathrel}{equals with asterisk}% +\UnicodeMathSymbol{"02A6F}{\hatapprox }{\mathrel}{almost equal to with circumflex accent}% +\UnicodeMathSymbol{"02A70}{\approxeqq }{\mathrel}{approximately equal or equal to}% +\UnicodeMathSymbol{"02A71}{\eqqplus }{\mathbin}{equals sign above plus sign}% +\UnicodeMathSymbol{"02A72}{\pluseqq }{\mathbin}{plus sign above equals sign}% +\UnicodeMathSymbol{"02A73}{\eqqsim }{\mathrel}{equals sign above tilde operator}% +\UnicodeMathSymbol{"02A74}{\Coloneq }{\mathrel}{double colon equal}% +\UnicodeMathSymbol{"02A75}{\eqeq }{\mathrel}{two consecutive equals signs}% +\UnicodeMathSymbol{"02A76}{\eqeqeq }{\mathrel}{three consecutive equals signs}% +\UnicodeMathSymbol{"02A77}{\ddotseq }{\mathrel}{equals sign with two dots above and two dots below}% +\UnicodeMathSymbol{"02A78}{\equivDD }{\mathrel}{equivalent with four dots above}% +\UnicodeMathSymbol{"02A79}{\ltcir }{\mathrel}{less-than with circle inside}% +\UnicodeMathSymbol{"02A7A}{\gtcir }{\mathrel}{greater-than with circle inside}% +\UnicodeMathSymbol{"02A7B}{\ltquest }{\mathrel}{less-than with question mark above}% +\UnicodeMathSymbol{"02A7C}{\gtquest }{\mathrel}{greater-than with question mark above}% +\UnicodeMathSymbol{"02A7D}{\leqslant }{\mathrel}{less-than or slanted equal to}% +\UnicodeMathSymbol{"02A7E}{\geqslant }{\mathrel}{greater-than or slanted equal to}% +\UnicodeMathSymbol{"02A7F}{\lesdot }{\mathrel}{less-than or slanted equal to with dot inside}% +\UnicodeMathSymbol{"02A80}{\gesdot }{\mathrel}{greater-than or slanted equal to with dot inside}% +\UnicodeMathSymbol{"02A81}{\lesdoto }{\mathrel}{less-than or slanted equal to with dot above}% +\UnicodeMathSymbol{"02A82}{\gesdoto }{\mathrel}{greater-than or slanted equal to with dot above}% +\UnicodeMathSymbol{"02A83}{\lesdotor }{\mathrel}{less-than or slanted equal to with dot above right}% +\UnicodeMathSymbol{"02A84}{\gesdotol }{\mathrel}{greater-than or slanted equal to with dot above left}% +\UnicodeMathSymbol{"02A85}{\lessapprox }{\mathrel}{less-than or approximate}% +\UnicodeMathSymbol{"02A86}{\gtrapprox }{\mathrel}{greater-than or approximate}% +\UnicodeMathSymbol{"02A87}{\lneq }{\mathrel}{less-than and single-line not equal to}% +\UnicodeMathSymbol{"02A88}{\gneq }{\mathrel}{greater-than and single-line not equal to}% +\UnicodeMathSymbol{"02A89}{\lnapprox }{\mathrel}{less-than and not approximate}% +\UnicodeMathSymbol{"02A8A}{\gnapprox }{\mathrel}{greater-than and not approximate}% +\UnicodeMathSymbol{"02A8B}{\lesseqqgtr }{\mathrel}{less-than above double-line equal above greater-than}% +\UnicodeMathSymbol{"02A8C}{\gtreqqless }{\mathrel}{greater-than above double-line equal above less-than}% +\UnicodeMathSymbol{"02A8D}{\lsime }{\mathrel}{less-than above similar or equal}% +\UnicodeMathSymbol{"02A8E}{\gsime }{\mathrel}{greater-than above similar or equal}% +\UnicodeMathSymbol{"02A8F}{\lsimg }{\mathrel}{less-than above similar above greater-than}% +\UnicodeMathSymbol{"02A90}{\gsiml }{\mathrel}{greater-than above similar above less-than}% +\UnicodeMathSymbol{"02A91}{\lgE }{\mathrel}{less-than above greater-than above double-line equal}% +\UnicodeMathSymbol{"02A92}{\glE }{\mathrel}{greater-than above less-than above double-line equal}% +\UnicodeMathSymbol{"02A93}{\lesges }{\mathrel}{less-than above slanted equal above greater-than above slanted equal}% +\UnicodeMathSymbol{"02A94}{\gesles }{\mathrel}{greater-than above slanted equal above less-than above slanted equal}% +\UnicodeMathSymbol{"02A95}{\eqslantless }{\mathrel}{slanted equal to or less-than}% +\UnicodeMathSymbol{"02A96}{\eqslantgtr }{\mathrel}{slanted equal to or greater-than}% +\UnicodeMathSymbol{"02A97}{\elsdot }{\mathrel}{slanted equal to or less-than with dot inside}% +\UnicodeMathSymbol{"02A98}{\egsdot }{\mathrel}{slanted equal to or greater-than with dot inside}% +\UnicodeMathSymbol{"02A99}{\eqqless }{\mathrel}{double-line equal to or less-than}% +\UnicodeMathSymbol{"02A9A}{\eqqgtr }{\mathrel}{double-line equal to or greater-than}% +\UnicodeMathSymbol{"02A9B}{\eqqslantless }{\mathrel}{double-line slanted equal to or less-than}% +\UnicodeMathSymbol{"02A9C}{\eqqslantgtr }{\mathrel}{double-line slanted equal to or greater-than}% +\UnicodeMathSymbol{"02A9D}{\simless }{\mathrel}{similar or less-than}% +\UnicodeMathSymbol{"02A9E}{\simgtr }{\mathrel}{similar or greater-than}% +\UnicodeMathSymbol{"02A9F}{\simlE }{\mathrel}{similar above less-than above equals sign}% +\UnicodeMathSymbol{"02AA0}{\simgE }{\mathrel}{similar above greater-than above equals sign}% +\UnicodeMathSymbol{"02AA1}{\Lt }{\mathrel}{double nested less-than}% +\UnicodeMathSymbol{"02AA2}{\Gt }{\mathrel}{double nested greater-than}% +\UnicodeMathSymbol{"02AA3}{\partialmeetcontraction }{\mathrel}{double less-than with underbar}% +\UnicodeMathSymbol{"02AA4}{\glj }{\mathrel}{greater-than overlapping less-than}% +\UnicodeMathSymbol{"02AA5}{\gla }{\mathrel}{greater-than beside less-than}% +\UnicodeMathSymbol{"02AA6}{\ltcc }{\mathrel}{less-than closed by curve}% +\UnicodeMathSymbol{"02AA7}{\gtcc }{\mathrel}{greater-than closed by curve}% +\UnicodeMathSymbol{"02AA8}{\lescc }{\mathrel}{less-than closed by curve above slanted equal}% +\UnicodeMathSymbol{"02AA9}{\gescc }{\mathrel}{greater-than closed by curve above slanted equal}% +\UnicodeMathSymbol{"02AAA}{\smt }{\mathrel}{smaller than}% +\UnicodeMathSymbol{"02AAB}{\lat }{\mathrel}{larger than}% +\UnicodeMathSymbol{"02AAC}{\smte }{\mathrel}{smaller than or equal to}% +\UnicodeMathSymbol{"02AAD}{\late }{\mathrel}{larger than or equal to}% +\UnicodeMathSymbol{"02AAE}{\bumpeqq }{\mathrel}{equals sign with bumpy above}% +\UnicodeMathSymbol{"02AAF}{\preceq }{\mathrel}{precedes above single-line equals sign}% +\UnicodeMathSymbol{"02AB0}{\succeq }{\mathrel}{succeeds above single-line equals sign}% +\UnicodeMathSymbol{"02AB1}{\precneq }{\mathrel}{precedes above single-line not equal to}% +\UnicodeMathSymbol{"02AB2}{\succneq }{\mathrel}{succeeds above single-line not equal to}% +\UnicodeMathSymbol{"02AB3}{\preceqq }{\mathrel}{precedes above equals sign}% +\UnicodeMathSymbol{"02AB4}{\succeqq }{\mathrel}{succeeds above equals sign}% +\UnicodeMathSymbol{"02AB5}{\precneqq }{\mathrel}{precedes above not equal to}% +\UnicodeMathSymbol{"02AB6}{\succneqq }{\mathrel}{succeeds above not equal to}% +\UnicodeMathSymbol{"02AB7}{\precapprox }{\mathrel}{precedes above almost equal to}% +\UnicodeMathSymbol{"02AB8}{\succapprox }{\mathrel}{succeeds above almost equal to}% +\UnicodeMathSymbol{"02AB9}{\precnapprox }{\mathrel}{precedes above not almost equal to}% +\UnicodeMathSymbol{"02ABA}{\succnapprox }{\mathrel}{succeeds above not almost equal to}% +\UnicodeMathSymbol{"02ABB}{\Prec }{\mathrel}{double precedes}% +\UnicodeMathSymbol{"02ABC}{\Succ }{\mathrel}{double succeeds}% +\UnicodeMathSymbol{"02ABD}{\subsetdot }{\mathrel}{subset with dot}% +\UnicodeMathSymbol{"02ABE}{\supsetdot }{\mathrel}{superset with dot}% +\UnicodeMathSymbol{"02ABF}{\subsetplus }{\mathrel}{subset with plus sign below}% +\UnicodeMathSymbol{"02AC0}{\supsetplus }{\mathrel}{superset with plus sign below}% +\UnicodeMathSymbol{"02AC1}{\submult }{\mathrel}{subset with multiplication sign below}% +\UnicodeMathSymbol{"02AC2}{\supmult }{\mathrel}{superset with multiplication sign below}% +\UnicodeMathSymbol{"02AC3}{\subedot }{\mathrel}{subset of or equal to with dot above}% +\UnicodeMathSymbol{"02AC4}{\supedot }{\mathrel}{superset of or equal to with dot above}% +\UnicodeMathSymbol{"02AC5}{\subseteqq }{\mathrel}{subset of above equals sign}% +\UnicodeMathSymbol{"02AC6}{\supseteqq }{\mathrel}{superset of above equals sign}% +\UnicodeMathSymbol{"02AC7}{\subsim }{\mathrel}{subset of above tilde operator}% +\UnicodeMathSymbol{"02AC8}{\supsim }{\mathrel}{superset of above tilde operator}% +\UnicodeMathSymbol{"02AC9}{\subsetapprox }{\mathrel}{subset of above almost equal to}% +\UnicodeMathSymbol{"02ACA}{\supsetapprox }{\mathrel}{superset of above almost equal to}% +\UnicodeMathSymbol{"02ACB}{\subsetneqq }{\mathrel}{subset of above not equal to}% +\UnicodeMathSymbol{"02ACC}{\supsetneqq }{\mathrel}{superset of above not equal to}% +\UnicodeMathSymbol{"02ACD}{\lsqhook }{\mathrel}{square left open box operator}% +\UnicodeMathSymbol{"02ACE}{\rsqhook }{\mathrel}{square right open box operator}% +\UnicodeMathSymbol{"02ACF}{\csub }{\mathrel}{closed subset}% +\UnicodeMathSymbol{"02AD0}{\csup }{\mathrel}{closed superset}% +\UnicodeMathSymbol{"02AD1}{\csube }{\mathrel}{closed subset or equal to}% +\UnicodeMathSymbol{"02AD2}{\csupe }{\mathrel}{closed superset or equal to}% +\UnicodeMathSymbol{"02AD3}{\subsup }{\mathrel}{subset above superset}% +\UnicodeMathSymbol{"02AD4}{\supsub }{\mathrel}{superset above subset}% +\UnicodeMathSymbol{"02AD5}{\subsub }{\mathrel}{subset above subset}% +\UnicodeMathSymbol{"02AD6}{\supsup }{\mathrel}{superset above superset}% +\UnicodeMathSymbol{"02AD7}{\suphsub }{\mathrel}{superset beside subset}% +\UnicodeMathSymbol{"02AD8}{\supdsub }{\mathrel}{superset beside and joined by dash with subset}% +\UnicodeMathSymbol{"02AD9}{\forkv }{\mathrel}{element of opening downwards}% +\UnicodeMathSymbol{"02ADA}{\topfork }{\mathrel}{pitchfork with tee top}% +\UnicodeMathSymbol{"02ADB}{\mlcp }{\mathrel}{transversal intersection}% +\UnicodeMathSymbol{"02ADC}{\forks }{\mathrel}{forking}% +\UnicodeMathSymbol{"02ADD}{\forksnot }{\mathrel}{nonforking}% +\UnicodeMathSymbol{"02ADE}{\shortlefttack }{\mathrel}{short left tack}% +\UnicodeMathSymbol{"02ADF}{\shortdowntack }{\mathrel}{short down tack}% +\UnicodeMathSymbol{"02AE0}{\shortuptack }{\mathrel}{short up tack}% +\UnicodeMathSymbol{"02AE1}{\perps }{\mathord}{perpendicular with s}% +\UnicodeMathSymbol{"02AE2}{\vDdash }{\mathrel}{vertical bar triple right turnstile}% +\UnicodeMathSymbol{"02AE3}{\dashV }{\mathrel}{double vertical bar left turnstile}% +\UnicodeMathSymbol{"02AE4}{\Dashv }{\mathrel}{vertical bar double left turnstile}% +\UnicodeMathSymbol{"02AE5}{\DashV }{\mathrel}{double vertical bar double left turnstile}% +\UnicodeMathSymbol{"02AE6}{\varVdash }{\mathrel}{long dash from left member of double vertical}% +\UnicodeMathSymbol{"02AE7}{\Barv }{\mathrel}{short down tack with overbar}% +\UnicodeMathSymbol{"02AE8}{\vBar }{\mathrel}{short up tack with underbar}% +\UnicodeMathSymbol{"02AE9}{\vBarv }{\mathrel}{short up tack above short down tack}% +\UnicodeMathSymbol{"02AEA}{\barV }{\mathrel}{double down tack}% +\UnicodeMathSymbol{"02AEB}{\Vbar }{\mathrel}{double up tack}% +\UnicodeMathSymbol{"02AEC}{\Not }{\mathrel}{double stroke not sign}% +\UnicodeMathSymbol{"02AED}{\bNot }{\mathrel}{reversed double stroke not sign}% +\UnicodeMathSymbol{"02AEE}{\revnmid }{\mathrel}{does not divide with reversed negation slash}% +\UnicodeMathSymbol{"02AEF}{\cirmid }{\mathrel}{vertical line with circle above}% +\UnicodeMathSymbol{"02AF0}{\midcir }{\mathrel}{vertical line with circle below}% +\UnicodeMathSymbol{"02AF1}{\topcir }{\mathord}{down tack with circle below}% +\UnicodeMathSymbol{"02AF2}{\nhpar }{\mathrel}{parallel with horizontal stroke}% +\UnicodeMathSymbol{"02AF3}{\parsim }{\mathrel}{parallel with tilde operator}% +\UnicodeMathSymbol{"02AF4}{\interleave }{\mathbin}{triple vertical bar binary relation}% +\UnicodeMathSymbol{"02AF5}{\nhVvert }{\mathbin}{triple vertical bar with horizontal stroke}% +\UnicodeMathSymbol{"02AF6}{\threedotcolon }{\mathbin}{triple colon operator}% +\UnicodeMathSymbol{"02AF7}{\lllnest }{\mathrel}{stacked very much less-than}% +\UnicodeMathSymbol{"02AF8}{\gggnest }{\mathrel}{stacked very much greater-than}% +\UnicodeMathSymbol{"02AF9}{\leqqslant }{\mathrel}{double-line slanted less-than or equal to}% +\UnicodeMathSymbol{"02AFA}{\geqqslant }{\mathrel}{double-line slanted greater-than or equal to}% +\UnicodeMathSymbol{"02AFB}{\trslash }{\mathbin}{triple solidus binary relation}% +\UnicodeMathSymbol{"02AFC}{\biginterleave }{\mathop}{large triple vertical bar operator}% +\UnicodeMathSymbol{"02AFD}{\sslash }{\mathbin}{double solidus operator}% +\UnicodeMathSymbol{"02AFE}{\talloblong }{\mathbin}{white vertical bar}% +\UnicodeMathSymbol{"02AFF}{\bigtalloblong }{\mathop}{n-ary white vertical bar}% +\UnicodeMathSymbol{"02B12}{\squaretopblack }{\mathord}{square with top half black}% +\UnicodeMathSymbol{"02B13}{\squarebotblack }{\mathord}{square with bottom half black}% +\UnicodeMathSymbol{"02B14}{\squareurblack }{\mathord}{square with upper right diagonal half black}% +\UnicodeMathSymbol{"02B15}{\squarellblack }{\mathord}{square with lower left diagonal half black}% +\UnicodeMathSymbol{"02B16}{\diamondleftblack }{\mathord}{diamond with left half black}% +\UnicodeMathSymbol{"02B17}{\diamondrightblack }{\mathord}{diamond with right half black}% +\UnicodeMathSymbol{"02B18}{\diamondtopblack }{\mathord}{diamond with top half black}% +\UnicodeMathSymbol{"02B19}{\diamondbotblack }{\mathord}{diamond with bottom half black}% +\UnicodeMathSymbol{"02B1A}{\dottedsquare }{\mathord}{dotted square}% +\UnicodeMathSymbol{"02B1B}{\lgblksquare }{\mathord}{black large square}% +\UnicodeMathSymbol{"02B1C}{\lgwhtsquare }{\mathord}{white large square}% +\UnicodeMathSymbol{"02B1D}{\vysmblksquare }{\mathord}{black very small square}% +\UnicodeMathSymbol{"02B1E}{\vysmwhtsquare }{\mathord}{white very small square}% +\UnicodeMathSymbol{"02B1F}{\pentagonblack }{\mathord}{black pentagon}% +\UnicodeMathSymbol{"02B20}{\pentagon }{\mathord}{white pentagon}% +\UnicodeMathSymbol{"02B21}{\varhexagon }{\mathord}{white hexagon}% +\UnicodeMathSymbol{"02B22}{\varhexagonblack }{\mathord}{black hexagon}% +\UnicodeMathSymbol{"02B23}{\hexagonblack }{\mathord}{horizontal black hexagon}% +\UnicodeMathSymbol{"02B24}{\lgblkcircle }{\mathord}{black large circle}% +\UnicodeMathSymbol{"02B25}{\mdblkdiamond }{\mathord}{black medium diamond}% +\UnicodeMathSymbol{"02B26}{\mdwhtdiamond }{\mathord}{white medium diamond}% +\UnicodeMathSymbol{"02B27}{\mdblklozenge }{\mathord}{black medium lozenge}% +\UnicodeMathSymbol{"02B28}{\mdwhtlozenge }{\mathord}{white medium lozenge}% +\UnicodeMathSymbol{"02B29}{\smblkdiamond }{\mathord}{black small diamond}% +\UnicodeMathSymbol{"02B2A}{\smblklozenge }{\mathord}{black small lozenge}% +\UnicodeMathSymbol{"02B2B}{\smwhtlozenge }{\mathord}{white small lozenge}% +\UnicodeMathSymbol{"02B2C}{\blkhorzoval }{\mathord}{black horizontal ellipse}% +\UnicodeMathSymbol{"02B2D}{\whthorzoval }{\mathord}{white horizontal ellipse}% +\UnicodeMathSymbol{"02B2E}{\blkvertoval }{\mathord}{black vertical ellipse}% +\UnicodeMathSymbol{"02B2F}{\whtvertoval }{\mathord}{white vertical ellipse}% +\UnicodeMathSymbol{"02B30}{\circleonleftarrow }{\mathrel}{left arrow with small circle}% +\UnicodeMathSymbol{"02B31}{\leftthreearrows }{\mathrel}{three leftwards arrows}% +\UnicodeMathSymbol{"02B32}{\leftarrowonoplus }{\mathrel}{left arrow with circled plus}% +\UnicodeMathSymbol{"02B33}{\longleftsquigarrow }{\mathrel}{long leftwards squiggle arrow}% +\UnicodeMathSymbol{"02B34}{\nvtwoheadleftarrow }{\mathrel}{leftwards two-headed arrow with vertical stroke}% +\UnicodeMathSymbol{"02B35}{\nVtwoheadleftarrow }{\mathrel}{leftwards two-headed arrow with double vertical stroke}% +\UnicodeMathSymbol{"02B36}{\twoheadmapsfrom }{\mathrel}{leftwards two-headed arrow from bar}% +\UnicodeMathSymbol{"02B37}{\twoheadleftdbkarrow }{\mathrel}{leftwards two-headed triple-dash arrow}% +\UnicodeMathSymbol{"02B38}{\leftdotarrow }{\mathrel}{leftwards arrow with dotted stem}% +\UnicodeMathSymbol{"02B39}{\nvleftarrowtail }{\mathrel}{leftwards arrow with tail with vertical stroke}% +\UnicodeMathSymbol{"02B3A}{\nVleftarrowtail }{\mathrel}{leftwards arrow with tail with double vertical stroke}% +\UnicodeMathSymbol{"02B3B}{\twoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail}% +\UnicodeMathSymbol{"02B3C}{\nvtwoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail with vertical stroke}% +\UnicodeMathSymbol{"02B3D}{\nVtwoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail with double vertical stroke}% +\UnicodeMathSymbol{"02B3E}{\leftarrowx }{\mathrel}{leftwards arrow through x}% +\UnicodeMathSymbol{"02B3F}{\leftcurvedarrow }{\mathrel}{wave arrow pointing directly left}% +\UnicodeMathSymbol{"02B40}{\equalleftarrow }{\mathrel}{equals sign above leftwards arrow}% +\UnicodeMathSymbol{"02B41}{\bsimilarleftarrow }{\mathrel}{reverse tilde operator above leftwards arrow}% +\UnicodeMathSymbol{"02B42}{\leftarrowbackapprox }{\mathrel}{leftwards arrow above reverse almost equal to}% +\UnicodeMathSymbol{"02B43}{\rightarrowgtr }{\mathrel}{rightwards arrow through greater-than}% +\UnicodeMathSymbol{"02B44}{\rightarrowsupset }{\mathrel}{rightwards arrow through subset}% +\UnicodeMathSymbol{"02B45}{\LLeftarrow }{\mathrel}{leftwards quadruple arrow}% +\UnicodeMathSymbol{"02B46}{\RRightarrow }{\mathrel}{rightwards quadruple arrow}% +\UnicodeMathSymbol{"02B47}{\bsimilarrightarrow }{\mathrel}{reverse tilde operator above rightwards arrow}% +\UnicodeMathSymbol{"02B48}{\rightarrowbackapprox }{\mathrel}{rightwards arrow above reverse almost equal to}% +\UnicodeMathSymbol{"02B49}{\similarleftarrow }{\mathrel}{tilde operator above leftwards arrow}% +\UnicodeMathSymbol{"02B4A}{\leftarrowapprox }{\mathrel}{leftwards arrow above almost equal to}% +\UnicodeMathSymbol{"02B4B}{\leftarrowbsimilar }{\mathrel}{leftwards arrow above reverse tilde operator}% +\UnicodeMathSymbol{"02B4C}{\rightarrowbsimilar }{\mathrel}{righttwards arrow above reverse tilde operator}% +\UnicodeMathSymbol{"02B50}{\medwhitestar }{\mathord}{white medium star}% +\UnicodeMathSymbol{"02B51}{\medblackstar }{\mathord}{black medium star}% +\UnicodeMathSymbol{"02B52}{\smwhitestar }{\mathord}{white small star}% +\UnicodeMathSymbol{"02B53}{\rightpentagonblack }{\mathord}{black right-pointing pentagon}% +\UnicodeMathSymbol{"02B54}{\rightpentagon }{\mathord}{white right-pointing pentagon}% +\UnicodeMathSymbol{"03012}{\postalmark }{\mathord}{postal mark}% +\UnicodeMathSymbol{"03030}{\hzigzag }{\mathord}{zigzag}% +\UnicodeMathSymbol{"1D400}{\mbfA }{\mathalpha}{mathematical bold capital a}% +\UnicodeMathSymbol{"1D401}{\mbfB }{\mathalpha}{mathematical bold capital b}% +\UnicodeMathSymbol{"1D402}{\mbfC }{\mathalpha}{mathematical bold capital c}% +\UnicodeMathSymbol{"1D403}{\mbfD }{\mathalpha}{mathematical bold capital d}% +\UnicodeMathSymbol{"1D404}{\mbfE }{\mathalpha}{mathematical bold capital e}% +\UnicodeMathSymbol{"1D405}{\mbfF }{\mathalpha}{mathematical bold capital f}% +\UnicodeMathSymbol{"1D406}{\mbfG }{\mathalpha}{mathematical bold capital g}% +\UnicodeMathSymbol{"1D407}{\mbfH }{\mathalpha}{mathematical bold capital h}% +\UnicodeMathSymbol{"1D408}{\mbfI }{\mathalpha}{mathematical bold capital i}% +\UnicodeMathSymbol{"1D409}{\mbfJ }{\mathalpha}{mathematical bold capital j}% +\UnicodeMathSymbol{"1D40A}{\mbfK }{\mathalpha}{mathematical bold capital k}% +\UnicodeMathSymbol{"1D40B}{\mbfL }{\mathalpha}{mathematical bold capital l}% +\UnicodeMathSymbol{"1D40C}{\mbfM }{\mathalpha}{mathematical bold capital m}% +\UnicodeMathSymbol{"1D40D}{\mbfN }{\mathalpha}{mathematical bold capital n}% +\UnicodeMathSymbol{"1D40E}{\mbfO }{\mathalpha}{mathematical bold capital o}% +\UnicodeMathSymbol{"1D40F}{\mbfP }{\mathalpha}{mathematical bold capital p}% +\UnicodeMathSymbol{"1D410}{\mbfQ }{\mathalpha}{mathematical bold capital q}% +\UnicodeMathSymbol{"1D411}{\mbfR }{\mathalpha}{mathematical bold capital r}% +\UnicodeMathSymbol{"1D412}{\mbfS }{\mathalpha}{mathematical bold capital s}% +\UnicodeMathSymbol{"1D413}{\mbfT }{\mathalpha}{mathematical bold capital t}% +\UnicodeMathSymbol{"1D414}{\mbfU }{\mathalpha}{mathematical bold capital u}% +\UnicodeMathSymbol{"1D415}{\mbfV }{\mathalpha}{mathematical bold capital v}% +\UnicodeMathSymbol{"1D416}{\mbfW }{\mathalpha}{mathematical bold capital w}% +\UnicodeMathSymbol{"1D417}{\mbfX }{\mathalpha}{mathematical bold capital x}% +\UnicodeMathSymbol{"1D418}{\mbfY }{\mathalpha}{mathematical bold capital y}% +\UnicodeMathSymbol{"1D419}{\mbfZ }{\mathalpha}{mathematical bold capital z}% +\UnicodeMathSymbol{"1D41A}{\mbfa }{\mathalpha}{mathematical bold small a}% +\UnicodeMathSymbol{"1D41B}{\mbfb }{\mathalpha}{mathematical bold small b}% +\UnicodeMathSymbol{"1D41C}{\mbfc }{\mathalpha}{mathematical bold small c}% +\UnicodeMathSymbol{"1D41D}{\mbfd }{\mathalpha}{mathematical bold small d}% +\UnicodeMathSymbol{"1D41E}{\mbfe }{\mathalpha}{mathematical bold small e}% +\UnicodeMathSymbol{"1D41F}{\mbff }{\mathalpha}{mathematical bold small f}% +\UnicodeMathSymbol{"1D420}{\mbfg }{\mathalpha}{mathematical bold small g}% +\UnicodeMathSymbol{"1D421}{\mbfh }{\mathalpha}{mathematical bold small h}% +\UnicodeMathSymbol{"1D422}{\mbfi }{\mathalpha}{mathematical bold small i}% +\UnicodeMathSymbol{"1D423}{\mbfj }{\mathalpha}{mathematical bold small j}% +\UnicodeMathSymbol{"1D424}{\mbfk }{\mathalpha}{mathematical bold small k}% +\UnicodeMathSymbol{"1D425}{\mbfl }{\mathalpha}{mathematical bold small l}% +\UnicodeMathSymbol{"1D426}{\mbfm }{\mathalpha}{mathematical bold small m}% +\UnicodeMathSymbol{"1D427}{\mbfn }{\mathalpha}{mathematical bold small n}% +\UnicodeMathSymbol{"1D428}{\mbfo }{\mathalpha}{mathematical bold small o}% +\UnicodeMathSymbol{"1D429}{\mbfp }{\mathalpha}{mathematical bold small p}% +\UnicodeMathSymbol{"1D42A}{\mbfq }{\mathalpha}{mathematical bold small q}% +\UnicodeMathSymbol{"1D42B}{\mbfr }{\mathalpha}{mathematical bold small r}% +\UnicodeMathSymbol{"1D42C}{\mbfs }{\mathalpha}{mathematical bold small s}% +\UnicodeMathSymbol{"1D42D}{\mbft }{\mathalpha}{mathematical bold small t}% +\UnicodeMathSymbol{"1D42E}{\mbfu }{\mathalpha}{mathematical bold small u}% +\UnicodeMathSymbol{"1D42F}{\mbfv }{\mathalpha}{mathematical bold small v}% +\UnicodeMathSymbol{"1D430}{\mbfw }{\mathalpha}{mathematical bold small w}% +\UnicodeMathSymbol{"1D431}{\mbfx }{\mathalpha}{mathematical bold small x}% +\UnicodeMathSymbol{"1D432}{\mbfy }{\mathalpha}{mathematical bold small y}% +\UnicodeMathSymbol{"1D433}{\mbfz }{\mathalpha}{mathematical bold small z}% +\UnicodeMathSymbol{"1D434}{\mitA }{\mathalpha}{mathematical italic capital a}% +\UnicodeMathSymbol{"1D435}{\mitB }{\mathalpha}{mathematical italic capital b}% +\UnicodeMathSymbol{"1D436}{\mitC }{\mathalpha}{mathematical italic capital c}% +\UnicodeMathSymbol{"1D437}{\mitD }{\mathalpha}{mathematical italic capital d}% +\UnicodeMathSymbol{"1D438}{\mitE }{\mathalpha}{mathematical italic capital e}% +\UnicodeMathSymbol{"1D439}{\mitF }{\mathalpha}{mathematical italic capital f}% +\UnicodeMathSymbol{"1D43A}{\mitG }{\mathalpha}{mathematical italic capital g}% +\UnicodeMathSymbol{"1D43B}{\mitH }{\mathalpha}{mathematical italic capital h}% +\UnicodeMathSymbol{"1D43C}{\mitI }{\mathalpha}{mathematical italic capital i}% +\UnicodeMathSymbol{"1D43D}{\mitJ }{\mathalpha}{mathematical italic capital j}% +\UnicodeMathSymbol{"1D43E}{\mitK }{\mathalpha}{mathematical italic capital k}% +\UnicodeMathSymbol{"1D43F}{\mitL }{\mathalpha}{mathematical italic capital l}% +\UnicodeMathSymbol{"1D440}{\mitM }{\mathalpha}{mathematical italic capital m}% +\UnicodeMathSymbol{"1D441}{\mitN }{\mathalpha}{mathematical italic capital n}% +\UnicodeMathSymbol{"1D442}{\mitO }{\mathalpha}{mathematical italic capital o}% +\UnicodeMathSymbol{"1D443}{\mitP }{\mathalpha}{mathematical italic capital p}% +\UnicodeMathSymbol{"1D444}{\mitQ }{\mathalpha}{mathematical italic capital q}% +\UnicodeMathSymbol{"1D445}{\mitR }{\mathalpha}{mathematical italic capital r}% +\UnicodeMathSymbol{"1D446}{\mitS }{\mathalpha}{mathematical italic capital s}% +\UnicodeMathSymbol{"1D447}{\mitT }{\mathalpha}{mathematical italic capital t}% +\UnicodeMathSymbol{"1D448}{\mitU }{\mathalpha}{mathematical italic capital u}% +\UnicodeMathSymbol{"1D449}{\mitV }{\mathalpha}{mathematical italic capital v}% +\UnicodeMathSymbol{"1D44A}{\mitW }{\mathalpha}{mathematical italic capital w}% +\UnicodeMathSymbol{"1D44B}{\mitX }{\mathalpha}{mathematical italic capital x}% +\UnicodeMathSymbol{"1D44C}{\mitY }{\mathalpha}{mathematical italic capital y}% +\UnicodeMathSymbol{"1D44D}{\mitZ }{\mathalpha}{mathematical italic capital z}% +\UnicodeMathSymbol{"1D44E}{\mita }{\mathalpha}{mathematical italic small a}% +\UnicodeMathSymbol{"1D44F}{\mitb }{\mathalpha}{mathematical italic small b}% +\UnicodeMathSymbol{"1D450}{\mitc }{\mathalpha}{mathematical italic small c}% +\UnicodeMathSymbol{"1D451}{\mitd }{\mathalpha}{mathematical italic small d}% +\UnicodeMathSymbol{"1D452}{\mite }{\mathalpha}{mathematical italic small e}% +\UnicodeMathSymbol{"1D453}{\mitf }{\mathalpha}{mathematical italic small f}% +\UnicodeMathSymbol{"1D454}{\mitg }{\mathalpha}{mathematical italic small g}% +\UnicodeMathSymbol{"1D456}{\miti }{\mathalpha}{mathematical italic small i}% +\UnicodeMathSymbol{"1D457}{\mitj }{\mathalpha}{mathematical italic small j}% +\UnicodeMathSymbol{"1D458}{\mitk }{\mathalpha}{mathematical italic small k}% +\UnicodeMathSymbol{"1D459}{\mitl }{\mathalpha}{mathematical italic small l}% +\UnicodeMathSymbol{"1D45A}{\mitm }{\mathalpha}{mathematical italic small m}% +\UnicodeMathSymbol{"1D45B}{\mitn }{\mathalpha}{mathematical italic small n}% +\UnicodeMathSymbol{"1D45C}{\mito }{\mathalpha}{mathematical italic small o}% +\UnicodeMathSymbol{"1D45D}{\mitp }{\mathalpha}{mathematical italic small p}% +\UnicodeMathSymbol{"1D45E}{\mitq }{\mathalpha}{mathematical italic small q}% +\UnicodeMathSymbol{"1D45F}{\mitr }{\mathalpha}{mathematical italic small r}% +\UnicodeMathSymbol{"1D460}{\mits }{\mathalpha}{mathematical italic small s}% +\UnicodeMathSymbol{"1D461}{\mitt }{\mathalpha}{mathematical italic small t}% +\UnicodeMathSymbol{"1D462}{\mitu }{\mathalpha}{mathematical italic small u}% +\UnicodeMathSymbol{"1D463}{\mitv }{\mathalpha}{mathematical italic small v}% +\UnicodeMathSymbol{"1D464}{\mitw }{\mathalpha}{mathematical italic small w}% +\UnicodeMathSymbol{"1D465}{\mitx }{\mathalpha}{mathematical italic small x}% +\UnicodeMathSymbol{"1D466}{\mity }{\mathalpha}{mathematical italic small y}% +\UnicodeMathSymbol{"1D467}{\mitz }{\mathalpha}{mathematical italic small z}% +\UnicodeMathSymbol{"1D468}{\mbfitA }{\mathalpha}{mathematical bold italic capital a}% +\UnicodeMathSymbol{"1D469}{\mbfitB }{\mathalpha}{mathematical bold italic capital b}% +\UnicodeMathSymbol{"1D46A}{\mbfitC }{\mathalpha}{mathematical bold italic capital c}% +\UnicodeMathSymbol{"1D46B}{\mbfitD }{\mathalpha}{mathematical bold italic capital d}% +\UnicodeMathSymbol{"1D46C}{\mbfitE }{\mathalpha}{mathematical bold italic capital e}% +\UnicodeMathSymbol{"1D46D}{\mbfitF }{\mathalpha}{mathematical bold italic capital f}% +\UnicodeMathSymbol{"1D46E}{\mbfitG }{\mathalpha}{mathematical bold italic capital g}% +\UnicodeMathSymbol{"1D46F}{\mbfitH }{\mathalpha}{mathematical bold italic capital h}% +\UnicodeMathSymbol{"1D470}{\mbfitI }{\mathalpha}{mathematical bold italic capital i}% +\UnicodeMathSymbol{"1D471}{\mbfitJ }{\mathalpha}{mathematical bold italic capital j}% +\UnicodeMathSymbol{"1D472}{\mbfitK }{\mathalpha}{mathematical bold italic capital k}% +\UnicodeMathSymbol{"1D473}{\mbfitL }{\mathalpha}{mathematical bold italic capital l}% +\UnicodeMathSymbol{"1D474}{\mbfitM }{\mathalpha}{mathematical bold italic capital m}% +\UnicodeMathSymbol{"1D475}{\mbfitN }{\mathalpha}{mathematical bold italic capital n}% +\UnicodeMathSymbol{"1D476}{\mbfitO }{\mathalpha}{mathematical bold italic capital o}% +\UnicodeMathSymbol{"1D477}{\mbfitP }{\mathalpha}{mathematical bold italic capital p}% +\UnicodeMathSymbol{"1D478}{\mbfitQ }{\mathalpha}{mathematical bold italic capital q}% +\UnicodeMathSymbol{"1D479}{\mbfitR }{\mathalpha}{mathematical bold italic capital r}% +\UnicodeMathSymbol{"1D47A}{\mbfitS }{\mathalpha}{mathematical bold italic capital s}% +\UnicodeMathSymbol{"1D47B}{\mbfitT }{\mathalpha}{mathematical bold italic capital t}% +\UnicodeMathSymbol{"1D47C}{\mbfitU }{\mathalpha}{mathematical bold italic capital u}% +\UnicodeMathSymbol{"1D47D}{\mbfitV }{\mathalpha}{mathematical bold italic capital v}% +\UnicodeMathSymbol{"1D47E}{\mbfitW }{\mathalpha}{mathematical bold italic capital w}% +\UnicodeMathSymbol{"1D47F}{\mbfitX }{\mathalpha}{mathematical bold italic capital x}% +\UnicodeMathSymbol{"1D480}{\mbfitY }{\mathalpha}{mathematical bold italic capital y}% +\UnicodeMathSymbol{"1D481}{\mbfitZ }{\mathalpha}{mathematical bold italic capital z}% +\UnicodeMathSymbol{"1D482}{\mbfita }{\mathalpha}{mathematical bold italic small a}% +\UnicodeMathSymbol{"1D483}{\mbfitb }{\mathalpha}{mathematical bold italic small b}% +\UnicodeMathSymbol{"1D484}{\mbfitc }{\mathalpha}{mathematical bold italic small c}% +\UnicodeMathSymbol{"1D485}{\mbfitd }{\mathalpha}{mathematical bold italic small d}% +\UnicodeMathSymbol{"1D486}{\mbfite }{\mathalpha}{mathematical bold italic small e}% +\UnicodeMathSymbol{"1D487}{\mbfitf }{\mathalpha}{mathematical bold italic small f}% +\UnicodeMathSymbol{"1D488}{\mbfitg }{\mathalpha}{mathematical bold italic small g}% +\UnicodeMathSymbol{"1D489}{\mbfith }{\mathalpha}{mathematical bold italic small h}% +\UnicodeMathSymbol{"1D48A}{\mbfiti }{\mathalpha}{mathematical bold italic small i}% +\UnicodeMathSymbol{"1D48B}{\mbfitj }{\mathalpha}{mathematical bold italic small j}% +\UnicodeMathSymbol{"1D48C}{\mbfitk }{\mathalpha}{mathematical bold italic small k}% +\UnicodeMathSymbol{"1D48D}{\mbfitl }{\mathalpha}{mathematical bold italic small l}% +\UnicodeMathSymbol{"1D48E}{\mbfitm }{\mathalpha}{mathematical bold italic small m}% +\UnicodeMathSymbol{"1D48F}{\mbfitn }{\mathalpha}{mathematical bold italic small n}% +\UnicodeMathSymbol{"1D490}{\mbfito }{\mathalpha}{mathematical bold italic small o}% +\UnicodeMathSymbol{"1D491}{\mbfitp }{\mathalpha}{mathematical bold italic small p}% +\UnicodeMathSymbol{"1D492}{\mbfitq }{\mathalpha}{mathematical bold italic small q}% +\UnicodeMathSymbol{"1D493}{\mbfitr }{\mathalpha}{mathematical bold italic small r}% +\UnicodeMathSymbol{"1D494}{\mbfits }{\mathalpha}{mathematical bold italic small s}% +\UnicodeMathSymbol{"1D495}{\mbfitt }{\mathalpha}{mathematical bold italic small t}% +\UnicodeMathSymbol{"1D496}{\mbfitu }{\mathalpha}{mathematical bold italic small u}% +\UnicodeMathSymbol{"1D497}{\mbfitv }{\mathalpha}{mathematical bold italic small v}% +\UnicodeMathSymbol{"1D498}{\mbfitw }{\mathalpha}{mathematical bold italic small w}% +\UnicodeMathSymbol{"1D499}{\mbfitx }{\mathalpha}{mathematical bold italic small x}% +\UnicodeMathSymbol{"1D49A}{\mbfity }{\mathalpha}{mathematical bold italic small y}% +\UnicodeMathSymbol{"1D49B}{\mbfitz }{\mathalpha}{mathematical bold italic small z}% +\UnicodeMathSymbol{"1D49C}{\mscrA }{\mathalpha}{mathematical script capital a}% +\UnicodeMathSymbol{"1D49E}{\mscrC }{\mathalpha}{mathematical script capital c}% +\UnicodeMathSymbol{"1D49F}{\mscrD }{\mathalpha}{mathematical script capital d}% +\UnicodeMathSymbol{"1D4A2}{\mscrG }{\mathalpha}{mathematical script capital g}% +\UnicodeMathSymbol{"1D4A5}{\mscrJ }{\mathalpha}{mathematical script capital j}% +\UnicodeMathSymbol{"1D4A6}{\mscrK }{\mathalpha}{mathematical script capital k}% +\UnicodeMathSymbol{"1D4A9}{\mscrN }{\mathalpha}{mathematical script capital n}% +\UnicodeMathSymbol{"1D4AA}{\mscrO }{\mathalpha}{mathematical script capital o}% +\UnicodeMathSymbol{"1D4AB}{\mscrP }{\mathalpha}{mathematical script capital p}% +\UnicodeMathSymbol{"1D4AC}{\mscrQ }{\mathalpha}{mathematical script capital q}% +\UnicodeMathSymbol{"1D4AE}{\mscrS }{\mathalpha}{mathematical script capital s}% +\UnicodeMathSymbol{"1D4AF}{\mscrT }{\mathalpha}{mathematical script capital t}% +\UnicodeMathSymbol{"1D4B0}{\mscrU }{\mathalpha}{mathematical script capital u}% +\UnicodeMathSymbol{"1D4B1}{\mscrV }{\mathalpha}{mathematical script capital v}% +\UnicodeMathSymbol{"1D4B2}{\mscrW }{\mathalpha}{mathematical script capital w}% +\UnicodeMathSymbol{"1D4B3}{\mscrX }{\mathalpha}{mathematical script capital x}% +\UnicodeMathSymbol{"1D4B4}{\mscrY }{\mathalpha}{mathematical script capital y}% +\UnicodeMathSymbol{"1D4B5}{\mscrZ }{\mathalpha}{mathematical script capital z}% +\UnicodeMathSymbol{"1D4B6}{\mscra }{\mathalpha}{mathematical script small a}% +\UnicodeMathSymbol{"1D4B7}{\mscrb }{\mathalpha}{mathematical script small b}% +\UnicodeMathSymbol{"1D4B8}{\mscrc }{\mathalpha}{mathematical script small c}% +\UnicodeMathSymbol{"1D4B9}{\mscrd }{\mathalpha}{mathematical script small d}% +\UnicodeMathSymbol{"1D4BB}{\mscrf }{\mathalpha}{mathematical script small f}% +\UnicodeMathSymbol{"1D4BD}{\mscrh }{\mathalpha}{mathematical script small h}% +\UnicodeMathSymbol{"1D4BE}{\mscri }{\mathalpha}{mathematical script small i}% +\UnicodeMathSymbol{"1D4BF}{\mscrj }{\mathalpha}{mathematical script small j}% +\UnicodeMathSymbol{"1D4C0}{\mscrk }{\mathalpha}{mathematical script small k}% +\UnicodeMathSymbol{"1D4C1}{\mscrl }{\mathalpha}{mathematical script small l}% +\UnicodeMathSymbol{"1D4C2}{\mscrm }{\mathalpha}{mathematical script small m}% +\UnicodeMathSymbol{"1D4C3}{\mscrn }{\mathalpha}{mathematical script small n}% +\UnicodeMathSymbol{"1D4C5}{\mscrp }{\mathalpha}{mathematical script small p}% +\UnicodeMathSymbol{"1D4C6}{\mscrq }{\mathalpha}{mathematical script small q}% +\UnicodeMathSymbol{"1D4C7}{\mscrr }{\mathalpha}{mathematical script small r}% +\UnicodeMathSymbol{"1D4C8}{\mscrs }{\mathalpha}{mathematical script small s}% +\UnicodeMathSymbol{"1D4C9}{\mscrt }{\mathalpha}{mathematical script small t}% +\UnicodeMathSymbol{"1D4CA}{\mscru }{\mathalpha}{mathematical script small u}% +\UnicodeMathSymbol{"1D4CB}{\mscrv }{\mathalpha}{mathematical script small v}% +\UnicodeMathSymbol{"1D4CC}{\mscrw }{\mathalpha}{mathematical script small w}% +\UnicodeMathSymbol{"1D4CD}{\mscrx }{\mathalpha}{mathematical script small x}% +\UnicodeMathSymbol{"1D4CE}{\mscry }{\mathalpha}{mathematical script small y}% +\UnicodeMathSymbol{"1D4CF}{\mscrz }{\mathalpha}{mathematical script small z}% +\UnicodeMathSymbol{"1D4D0}{\mbfscrA }{\mathalpha}{mathematical bold script capital a}% +\UnicodeMathSymbol{"1D4D1}{\mbfscrB }{\mathalpha}{mathematical bold script capital b}% +\UnicodeMathSymbol{"1D4D2}{\mbfscrC }{\mathalpha}{mathematical bold script capital c}% +\UnicodeMathSymbol{"1D4D3}{\mbfscrD }{\mathalpha}{mathematical bold script capital d}% +\UnicodeMathSymbol{"1D4D4}{\mbfscrE }{\mathalpha}{mathematical bold script capital e}% +\UnicodeMathSymbol{"1D4D5}{\mbfscrF }{\mathalpha}{mathematical bold script capital f}% +\UnicodeMathSymbol{"1D4D6}{\mbfscrG }{\mathalpha}{mathematical bold script capital g}% +\UnicodeMathSymbol{"1D4D7}{\mbfscrH }{\mathalpha}{mathematical bold script capital h}% +\UnicodeMathSymbol{"1D4D8}{\mbfscrI }{\mathalpha}{mathematical bold script capital i}% +\UnicodeMathSymbol{"1D4D9}{\mbfscrJ }{\mathalpha}{mathematical bold script capital j}% +\UnicodeMathSymbol{"1D4DA}{\mbfscrK }{\mathalpha}{mathematical bold script capital k}% +\UnicodeMathSymbol{"1D4DB}{\mbfscrL }{\mathalpha}{mathematical bold script capital l}% +\UnicodeMathSymbol{"1D4DC}{\mbfscrM }{\mathalpha}{mathematical bold script capital m}% +\UnicodeMathSymbol{"1D4DD}{\mbfscrN }{\mathalpha}{mathematical bold script capital n}% +\UnicodeMathSymbol{"1D4DE}{\mbfscrO }{\mathalpha}{mathematical bold script capital o}% +\UnicodeMathSymbol{"1D4DF}{\mbfscrP }{\mathalpha}{mathematical bold script capital p}% +\UnicodeMathSymbol{"1D4E0}{\mbfscrQ }{\mathalpha}{mathematical bold script capital q}% +\UnicodeMathSymbol{"1D4E1}{\mbfscrR }{\mathalpha}{mathematical bold script capital r}% +\UnicodeMathSymbol{"1D4E2}{\mbfscrS }{\mathalpha}{mathematical bold script capital s}% +\UnicodeMathSymbol{"1D4E3}{\mbfscrT }{\mathalpha}{mathematical bold script capital t}% +\UnicodeMathSymbol{"1D4E4}{\mbfscrU }{\mathalpha}{mathematical bold script capital u}% +\UnicodeMathSymbol{"1D4E5}{\mbfscrV }{\mathalpha}{mathematical bold script capital v}% +\UnicodeMathSymbol{"1D4E6}{\mbfscrW }{\mathalpha}{mathematical bold script capital w}% +\UnicodeMathSymbol{"1D4E7}{\mbfscrX }{\mathalpha}{mathematical bold script capital x}% +\UnicodeMathSymbol{"1D4E8}{\mbfscrY }{\mathalpha}{mathematical bold script capital y}% +\UnicodeMathSymbol{"1D4E9}{\mbfscrZ }{\mathalpha}{mathematical bold script capital z}% +\UnicodeMathSymbol{"1D4EA}{\mbfscra }{\mathalpha}{mathematical bold script small a}% +\UnicodeMathSymbol{"1D4EB}{\mbfscrb }{\mathalpha}{mathematical bold script small b}% +\UnicodeMathSymbol{"1D4EC}{\mbfscrc }{\mathalpha}{mathematical bold script small c}% +\UnicodeMathSymbol{"1D4ED}{\mbfscrd }{\mathalpha}{mathematical bold script small d}% +\UnicodeMathSymbol{"1D4EE}{\mbfscre }{\mathalpha}{mathematical bold script small e}% +\UnicodeMathSymbol{"1D4EF}{\mbfscrf }{\mathalpha}{mathematical bold script small f}% +\UnicodeMathSymbol{"1D4F0}{\mbfscrg }{\mathalpha}{mathematical bold script small g}% +\UnicodeMathSymbol{"1D4F1}{\mbfscrh }{\mathalpha}{mathematical bold script small h}% +\UnicodeMathSymbol{"1D4F2}{\mbfscri }{\mathalpha}{mathematical bold script small i}% +\UnicodeMathSymbol{"1D4F3}{\mbfscrj }{\mathalpha}{mathematical bold script small j}% +\UnicodeMathSymbol{"1D4F4}{\mbfscrk }{\mathalpha}{mathematical bold script small k}% +\UnicodeMathSymbol{"1D4F5}{\mbfscrl }{\mathalpha}{mathematical bold script small l}% +\UnicodeMathSymbol{"1D4F6}{\mbfscrm }{\mathalpha}{mathematical bold script small m}% +\UnicodeMathSymbol{"1D4F7}{\mbfscrn }{\mathalpha}{mathematical bold script small n}% +\UnicodeMathSymbol{"1D4F8}{\mbfscro }{\mathalpha}{mathematical bold script small o}% +\UnicodeMathSymbol{"1D4F9}{\mbfscrp }{\mathalpha}{mathematical bold script small p}% +\UnicodeMathSymbol{"1D4FA}{\mbfscrq }{\mathalpha}{mathematical bold script small q}% +\UnicodeMathSymbol{"1D4FB}{\mbfscrr }{\mathalpha}{mathematical bold script small r}% +\UnicodeMathSymbol{"1D4FC}{\mbfscrs }{\mathalpha}{mathematical bold script small s}% +\UnicodeMathSymbol{"1D4FD}{\mbfscrt }{\mathalpha}{mathematical bold script small t}% +\UnicodeMathSymbol{"1D4FE}{\mbfscru }{\mathalpha}{mathematical bold script small u}% +\UnicodeMathSymbol{"1D4FF}{\mbfscrv }{\mathalpha}{mathematical bold script small v}% +\UnicodeMathSymbol{"1D500}{\mbfscrw }{\mathalpha}{mathematical bold script small w}% +\UnicodeMathSymbol{"1D501}{\mbfscrx }{\mathalpha}{mathematical bold script small x}% +\UnicodeMathSymbol{"1D502}{\mbfscry }{\mathalpha}{mathematical bold script small y}% +\UnicodeMathSymbol{"1D503}{\mbfscrz }{\mathalpha}{mathematical bold script small z}% +\UnicodeMathSymbol{"1D504}{\mfrakA }{\mathalpha}{mathematical fraktur capital a}% +\UnicodeMathSymbol{"1D505}{\mfrakB }{\mathalpha}{mathematical fraktur capital b}% +\UnicodeMathSymbol{"1D507}{\mfrakD }{\mathalpha}{mathematical fraktur capital d}% +\UnicodeMathSymbol{"1D508}{\mfrakE }{\mathalpha}{mathematical fraktur capital e}% +\UnicodeMathSymbol{"1D509}{\mfrakF }{\mathalpha}{mathematical fraktur capital f}% +\UnicodeMathSymbol{"1D50A}{\mfrakG }{\mathalpha}{mathematical fraktur capital g}% +\UnicodeMathSymbol{"1D50D}{\mfrakJ }{\mathalpha}{mathematical fraktur capital j}% +\UnicodeMathSymbol{"1D50E}{\mfrakK }{\mathalpha}{mathematical fraktur capital k}% +\UnicodeMathSymbol{"1D50F}{\mfrakL }{\mathalpha}{mathematical fraktur capital l}% +\UnicodeMathSymbol{"1D510}{\mfrakM }{\mathalpha}{mathematical fraktur capital m}% +\UnicodeMathSymbol{"1D511}{\mfrakN }{\mathalpha}{mathematical fraktur capital n}% +\UnicodeMathSymbol{"1D512}{\mfrakO }{\mathalpha}{mathematical fraktur capital o}% +\UnicodeMathSymbol{"1D513}{\mfrakP }{\mathalpha}{mathematical fraktur capital p}% +\UnicodeMathSymbol{"1D514}{\mfrakQ }{\mathalpha}{mathematical fraktur capital q}% +\UnicodeMathSymbol{"1D516}{\mfrakS }{\mathalpha}{mathematical fraktur capital s}% +\UnicodeMathSymbol{"1D517}{\mfrakT }{\mathalpha}{mathematical fraktur capital t}% +\UnicodeMathSymbol{"1D518}{\mfrakU }{\mathalpha}{mathematical fraktur capital u}% +\UnicodeMathSymbol{"1D519}{\mfrakV }{\mathalpha}{mathematical fraktur capital v}% +\UnicodeMathSymbol{"1D51A}{\mfrakW }{\mathalpha}{mathematical fraktur capital w}% +\UnicodeMathSymbol{"1D51B}{\mfrakX }{\mathalpha}{mathematical fraktur capital x}% +\UnicodeMathSymbol{"1D51C}{\mfrakY }{\mathalpha}{mathematical fraktur capital y}% +\UnicodeMathSymbol{"1D51E}{\mfraka }{\mathalpha}{mathematical fraktur small a}% +\UnicodeMathSymbol{"1D51F}{\mfrakb }{\mathalpha}{mathematical fraktur small b}% +\UnicodeMathSymbol{"1D520}{\mfrakc }{\mathalpha}{mathematical fraktur small c}% +\UnicodeMathSymbol{"1D521}{\mfrakd }{\mathalpha}{mathematical fraktur small d}% +\UnicodeMathSymbol{"1D522}{\mfrake }{\mathalpha}{mathematical fraktur small e}% +\UnicodeMathSymbol{"1D523}{\mfrakf }{\mathalpha}{mathematical fraktur small f}% +\UnicodeMathSymbol{"1D524}{\mfrakg }{\mathalpha}{mathematical fraktur small g}% +\UnicodeMathSymbol{"1D525}{\mfrakh }{\mathalpha}{mathematical fraktur small h}% +\UnicodeMathSymbol{"1D526}{\mfraki }{\mathalpha}{mathematical fraktur small i}% +\UnicodeMathSymbol{"1D527}{\mfrakj }{\mathalpha}{mathematical fraktur small j}% +\UnicodeMathSymbol{"1D528}{\mfrakk }{\mathalpha}{mathematical fraktur small k}% +\UnicodeMathSymbol{"1D529}{\mfrakl }{\mathalpha}{mathematical fraktur small l}% +\UnicodeMathSymbol{"1D52A}{\mfrakm }{\mathalpha}{mathematical fraktur small m}% +\UnicodeMathSymbol{"1D52B}{\mfrakn }{\mathalpha}{mathematical fraktur small n}% +\UnicodeMathSymbol{"1D52C}{\mfrako }{\mathalpha}{mathematical fraktur small o}% +\UnicodeMathSymbol{"1D52D}{\mfrakp }{\mathalpha}{mathematical fraktur small p}% +\UnicodeMathSymbol{"1D52E}{\mfrakq }{\mathalpha}{mathematical fraktur small q}% +\UnicodeMathSymbol{"1D52F}{\mfrakr }{\mathalpha}{mathematical fraktur small r}% +\UnicodeMathSymbol{"1D530}{\mfraks }{\mathalpha}{mathematical fraktur small s}% +\UnicodeMathSymbol{"1D531}{\mfrakt }{\mathalpha}{mathematical fraktur small t}% +\UnicodeMathSymbol{"1D532}{\mfraku }{\mathalpha}{mathematical fraktur small u}% +\UnicodeMathSymbol{"1D533}{\mfrakv }{\mathalpha}{mathematical fraktur small v}% +\UnicodeMathSymbol{"1D534}{\mfrakw }{\mathalpha}{mathematical fraktur small w}% +\UnicodeMathSymbol{"1D535}{\mfrakx }{\mathalpha}{mathematical fraktur small x}% +\UnicodeMathSymbol{"1D536}{\mfraky }{\mathalpha}{mathematical fraktur small y}% +\UnicodeMathSymbol{"1D537}{\mfrakz }{\mathalpha}{mathematical fraktur small z}% +\UnicodeMathSymbol{"1D538}{\BbbA }{\mathalpha}{mathematical double-struck capital a}% +\UnicodeMathSymbol{"1D539}{\BbbB }{\mathalpha}{mathematical double-struck capital b}% +\UnicodeMathSymbol{"1D53B}{\BbbD }{\mathalpha}{mathematical double-struck capital d}% +\UnicodeMathSymbol{"1D53C}{\BbbE }{\mathalpha}{mathematical double-struck capital e}% +\UnicodeMathSymbol{"1D53D}{\BbbF }{\mathalpha}{mathematical double-struck capital f}% +\UnicodeMathSymbol{"1D53E}{\BbbG }{\mathalpha}{mathematical double-struck capital g}% +\UnicodeMathSymbol{"1D540}{\BbbI }{\mathalpha}{mathematical double-struck capital i}% +\UnicodeMathSymbol{"1D541}{\BbbJ }{\mathalpha}{mathematical double-struck capital j}% +\UnicodeMathSymbol{"1D542}{\BbbK }{\mathalpha}{mathematical double-struck capital k}% +\UnicodeMathSymbol{"1D543}{\BbbL }{\mathalpha}{mathematical double-struck capital l}% +\UnicodeMathSymbol{"1D544}{\BbbM }{\mathalpha}{mathematical double-struck capital m}% +\UnicodeMathSymbol{"1D546}{\BbbO }{\mathalpha}{mathematical double-struck capital o}% +\UnicodeMathSymbol{"1D54A}{\BbbS }{\mathalpha}{mathematical double-struck capital s}% +\UnicodeMathSymbol{"1D54B}{\BbbT }{\mathalpha}{mathematical double-struck capital t}% +\UnicodeMathSymbol{"1D54C}{\BbbU }{\mathalpha}{mathematical double-struck capital u}% +\UnicodeMathSymbol{"1D54D}{\BbbV }{\mathalpha}{mathematical double-struck capital v}% +\UnicodeMathSymbol{"1D54E}{\BbbW }{\mathalpha}{mathematical double-struck capital w}% +\UnicodeMathSymbol{"1D54F}{\BbbX }{\mathalpha}{mathematical double-struck capital x}% +\UnicodeMathSymbol{"1D550}{\BbbY }{\mathalpha}{mathematical double-struck capital y}% +\UnicodeMathSymbol{"1D552}{\Bbba }{\mathalpha}{mathematical double-struck small a}% +\UnicodeMathSymbol{"1D553}{\Bbbb }{\mathalpha}{mathematical double-struck small b}% +\UnicodeMathSymbol{"1D554}{\Bbbc }{\mathalpha}{mathematical double-struck small c}% +\UnicodeMathSymbol{"1D555}{\Bbbd }{\mathalpha}{mathematical double-struck small d}% +\UnicodeMathSymbol{"1D556}{\Bbbe }{\mathalpha}{mathematical double-struck small e}% +\UnicodeMathSymbol{"1D557}{\Bbbf }{\mathalpha}{mathematical double-struck small f}% +\UnicodeMathSymbol{"1D558}{\Bbbg }{\mathalpha}{mathematical double-struck small g}% +\UnicodeMathSymbol{"1D559}{\Bbbh }{\mathalpha}{mathematical double-struck small h}% +\UnicodeMathSymbol{"1D55A}{\Bbbi }{\mathalpha}{mathematical double-struck small i}% +\UnicodeMathSymbol{"1D55B}{\Bbbj }{\mathalpha}{mathematical double-struck small j}% +\UnicodeMathSymbol{"1D55C}{\Bbbk }{\mathalpha}{mathematical double-struck small k}% +\UnicodeMathSymbol{"1D55D}{\Bbbl }{\mathalpha}{mathematical double-struck small l}% +\UnicodeMathSymbol{"1D55E}{\Bbbm }{\mathalpha}{mathematical double-struck small m}% +\UnicodeMathSymbol{"1D55F}{\Bbbn }{\mathalpha}{mathematical double-struck small n}% +\UnicodeMathSymbol{"1D560}{\Bbbo }{\mathalpha}{mathematical double-struck small o}% +\UnicodeMathSymbol{"1D561}{\Bbbp }{\mathalpha}{mathematical double-struck small p}% +\UnicodeMathSymbol{"1D562}{\Bbbq }{\mathalpha}{mathematical double-struck small q}% +\UnicodeMathSymbol{"1D563}{\Bbbr }{\mathalpha}{mathematical double-struck small r}% +\UnicodeMathSymbol{"1D564}{\Bbbs }{\mathalpha}{mathematical double-struck small s}% +\UnicodeMathSymbol{"1D565}{\Bbbt }{\mathalpha}{mathematical double-struck small t}% +\UnicodeMathSymbol{"1D566}{\Bbbu }{\mathalpha}{mathematical double-struck small u}% +\UnicodeMathSymbol{"1D567}{\Bbbv }{\mathalpha}{mathematical double-struck small v}% +\UnicodeMathSymbol{"1D568}{\Bbbw }{\mathalpha}{mathematical double-struck small w}% +\UnicodeMathSymbol{"1D569}{\Bbbx }{\mathalpha}{mathematical double-struck small x}% +\UnicodeMathSymbol{"1D56A}{\Bbby }{\mathalpha}{mathematical double-struck small y}% +\UnicodeMathSymbol{"1D56B}{\Bbbz }{\mathalpha}{mathematical double-struck small z}% +\UnicodeMathSymbol{"1D56C}{\mbffrakA }{\mathalpha}{mathematical bold fraktur capital a}% +\UnicodeMathSymbol{"1D56D}{\mbffrakB }{\mathalpha}{mathematical bold fraktur capital b}% +\UnicodeMathSymbol{"1D56E}{\mbffrakC }{\mathalpha}{mathematical bold fraktur capital c}% +\UnicodeMathSymbol{"1D56F}{\mbffrakD }{\mathalpha}{mathematical bold fraktur capital d}% +\UnicodeMathSymbol{"1D570}{\mbffrakE }{\mathalpha}{mathematical bold fraktur capital e}% +\UnicodeMathSymbol{"1D571}{\mbffrakF }{\mathalpha}{mathematical bold fraktur capital f}% +\UnicodeMathSymbol{"1D572}{\mbffrakG }{\mathalpha}{mathematical bold fraktur capital g}% +\UnicodeMathSymbol{"1D573}{\mbffrakH }{\mathalpha}{mathematical bold fraktur capital h}% +\UnicodeMathSymbol{"1D574}{\mbffrakI }{\mathalpha}{mathematical bold fraktur capital i}% +\UnicodeMathSymbol{"1D575}{\mbffrakJ }{\mathalpha}{mathematical bold fraktur capital j}% +\UnicodeMathSymbol{"1D576}{\mbffrakK }{\mathalpha}{mathematical bold fraktur capital k}% +\UnicodeMathSymbol{"1D577}{\mbffrakL }{\mathalpha}{mathematical bold fraktur capital l}% +\UnicodeMathSymbol{"1D578}{\mbffrakM }{\mathalpha}{mathematical bold fraktur capital m}% +\UnicodeMathSymbol{"1D579}{\mbffrakN }{\mathalpha}{mathematical bold fraktur capital n}% +\UnicodeMathSymbol{"1D57A}{\mbffrakO }{\mathalpha}{mathematical bold fraktur capital o}% +\UnicodeMathSymbol{"1D57B}{\mbffrakP }{\mathalpha}{mathematical bold fraktur capital p}% +\UnicodeMathSymbol{"1D57C}{\mbffrakQ }{\mathalpha}{mathematical bold fraktur capital q}% +\UnicodeMathSymbol{"1D57D}{\mbffrakR }{\mathalpha}{mathematical bold fraktur capital r}% +\UnicodeMathSymbol{"1D57E}{\mbffrakS }{\mathalpha}{mathematical bold fraktur capital s}% +\UnicodeMathSymbol{"1D57F}{\mbffrakT }{\mathalpha}{mathematical bold fraktur capital t}% +\UnicodeMathSymbol{"1D580}{\mbffrakU }{\mathalpha}{mathematical bold fraktur capital u}% +\UnicodeMathSymbol{"1D581}{\mbffrakV }{\mathalpha}{mathematical bold fraktur capital v}% +\UnicodeMathSymbol{"1D582}{\mbffrakW }{\mathalpha}{mathematical bold fraktur capital w}% +\UnicodeMathSymbol{"1D583}{\mbffrakX }{\mathalpha}{mathematical bold fraktur capital x}% +\UnicodeMathSymbol{"1D584}{\mbffrakY }{\mathalpha}{mathematical bold fraktur capital y}% +\UnicodeMathSymbol{"1D585}{\mbffrakZ }{\mathalpha}{mathematical bold fraktur capital z}% +\UnicodeMathSymbol{"1D586}{\mbffraka }{\mathalpha}{mathematical bold fraktur small a}% +\UnicodeMathSymbol{"1D587}{\mbffrakb }{\mathalpha}{mathematical bold fraktur small b}% +\UnicodeMathSymbol{"1D588}{\mbffrakc }{\mathalpha}{mathematical bold fraktur small c}% +\UnicodeMathSymbol{"1D589}{\mbffrakd }{\mathalpha}{mathematical bold fraktur small d}% +\UnicodeMathSymbol{"1D58A}{\mbffrake }{\mathalpha}{mathematical bold fraktur small e}% +\UnicodeMathSymbol{"1D58B}{\mbffrakf }{\mathalpha}{mathematical bold fraktur small f}% +\UnicodeMathSymbol{"1D58C}{\mbffrakg }{\mathalpha}{mathematical bold fraktur small g}% +\UnicodeMathSymbol{"1D58D}{\mbffrakh }{\mathalpha}{mathematical bold fraktur small h}% +\UnicodeMathSymbol{"1D58E}{\mbffraki }{\mathalpha}{mathematical bold fraktur small i}% +\UnicodeMathSymbol{"1D58F}{\mbffrakj }{\mathalpha}{mathematical bold fraktur small j}% +\UnicodeMathSymbol{"1D590}{\mbffrakk }{\mathalpha}{mathematical bold fraktur small k}% +\UnicodeMathSymbol{"1D591}{\mbffrakl }{\mathalpha}{mathematical bold fraktur small l}% +\UnicodeMathSymbol{"1D592}{\mbffrakm }{\mathalpha}{mathematical bold fraktur small m}% +\UnicodeMathSymbol{"1D593}{\mbffrakn }{\mathalpha}{mathematical bold fraktur small n}% +\UnicodeMathSymbol{"1D594}{\mbffrako }{\mathalpha}{mathematical bold fraktur small o}% +\UnicodeMathSymbol{"1D595}{\mbffrakp }{\mathalpha}{mathematical bold fraktur small p}% +\UnicodeMathSymbol{"1D596}{\mbffrakq }{\mathalpha}{mathematical bold fraktur small q}% +\UnicodeMathSymbol{"1D597}{\mbffrakr }{\mathalpha}{mathematical bold fraktur small r}% +\UnicodeMathSymbol{"1D598}{\mbffraks }{\mathalpha}{mathematical bold fraktur small s}% +\UnicodeMathSymbol{"1D599}{\mbffrakt }{\mathalpha}{mathematical bold fraktur small t}% +\UnicodeMathSymbol{"1D59A}{\mbffraku }{\mathalpha}{mathematical bold fraktur small u}% +\UnicodeMathSymbol{"1D59B}{\mbffrakv }{\mathalpha}{mathematical bold fraktur small v}% +\UnicodeMathSymbol{"1D59C}{\mbffrakw }{\mathalpha}{mathematical bold fraktur small w}% +\UnicodeMathSymbol{"1D59D}{\mbffrakx }{\mathalpha}{mathematical bold fraktur small x}% +\UnicodeMathSymbol{"1D59E}{\mbffraky }{\mathalpha}{mathematical bold fraktur small y}% +\UnicodeMathSymbol{"1D59F}{\mbffrakz }{\mathalpha}{mathematical bold fraktur small z}% +\UnicodeMathSymbol{"1D5A0}{\msansA }{\mathalpha}{mathematical sans-serif capital a}% +\UnicodeMathSymbol{"1D5A1}{\msansB }{\mathalpha}{mathematical sans-serif capital b}% +\UnicodeMathSymbol{"1D5A2}{\msansC }{\mathalpha}{mathematical sans-serif capital c}% +\UnicodeMathSymbol{"1D5A3}{\msansD }{\mathalpha}{mathematical sans-serif capital d}% +\UnicodeMathSymbol{"1D5A4}{\msansE }{\mathalpha}{mathematical sans-serif capital e}% +\UnicodeMathSymbol{"1D5A5}{\msansF }{\mathalpha}{mathematical sans-serif capital f}% +\UnicodeMathSymbol{"1D5A6}{\msansG }{\mathalpha}{mathematical sans-serif capital g}% +\UnicodeMathSymbol{"1D5A7}{\msansH }{\mathalpha}{mathematical sans-serif capital h}% +\UnicodeMathSymbol{"1D5A8}{\msansI }{\mathalpha}{mathematical sans-serif capital i}% +\UnicodeMathSymbol{"1D5A9}{\msansJ }{\mathalpha}{mathematical sans-serif capital j}% +\UnicodeMathSymbol{"1D5AA}{\msansK }{\mathalpha}{mathematical sans-serif capital k}% +\UnicodeMathSymbol{"1D5AB}{\msansL }{\mathalpha}{mathematical sans-serif capital l}% +\UnicodeMathSymbol{"1D5AC}{\msansM }{\mathalpha}{mathematical sans-serif capital m}% +\UnicodeMathSymbol{"1D5AD}{\msansN }{\mathalpha}{mathematical sans-serif capital n}% +\UnicodeMathSymbol{"1D5AE}{\msansO }{\mathalpha}{mathematical sans-serif capital o}% +\UnicodeMathSymbol{"1D5AF}{\msansP }{\mathalpha}{mathematical sans-serif capital p}% +\UnicodeMathSymbol{"1D5B0}{\msansQ }{\mathalpha}{mathematical sans-serif capital q}% +\UnicodeMathSymbol{"1D5B1}{\msansR }{\mathalpha}{mathematical sans-serif capital r}% +\UnicodeMathSymbol{"1D5B2}{\msansS }{\mathalpha}{mathematical sans-serif capital s}% +\UnicodeMathSymbol{"1D5B3}{\msansT }{\mathalpha}{mathematical sans-serif capital t}% +\UnicodeMathSymbol{"1D5B4}{\msansU }{\mathalpha}{mathematical sans-serif capital u}% +\UnicodeMathSymbol{"1D5B5}{\msansV }{\mathalpha}{mathematical sans-serif capital v}% +\UnicodeMathSymbol{"1D5B6}{\msansW }{\mathalpha}{mathematical sans-serif capital w}% +\UnicodeMathSymbol{"1D5B7}{\msansX }{\mathalpha}{mathematical sans-serif capital x}% +\UnicodeMathSymbol{"1D5B8}{\msansY }{\mathalpha}{mathematical sans-serif capital y}% +\UnicodeMathSymbol{"1D5B9}{\msansZ }{\mathalpha}{mathematical sans-serif capital z}% +\UnicodeMathSymbol{"1D5BA}{\msansa }{\mathalpha}{mathematical sans-serif small a}% +\UnicodeMathSymbol{"1D5BB}{\msansb }{\mathalpha}{mathematical sans-serif small b}% +\UnicodeMathSymbol{"1D5BC}{\msansc }{\mathalpha}{mathematical sans-serif small c}% +\UnicodeMathSymbol{"1D5BD}{\msansd }{\mathalpha}{mathematical sans-serif small d}% +\UnicodeMathSymbol{"1D5BE}{\msanse }{\mathalpha}{mathematical sans-serif small e}% +\UnicodeMathSymbol{"1D5BF}{\msansf }{\mathalpha}{mathematical sans-serif small f}% +\UnicodeMathSymbol{"1D5C0}{\msansg }{\mathalpha}{mathematical sans-serif small g}% +\UnicodeMathSymbol{"1D5C1}{\msansh }{\mathalpha}{mathematical sans-serif small h}% +\UnicodeMathSymbol{"1D5C2}{\msansi }{\mathalpha}{mathematical sans-serif small i}% +\UnicodeMathSymbol{"1D5C3}{\msansj }{\mathalpha}{mathematical sans-serif small j}% +\UnicodeMathSymbol{"1D5C4}{\msansk }{\mathalpha}{mathematical sans-serif small k}% +\UnicodeMathSymbol{"1D5C5}{\msansl }{\mathalpha}{mathematical sans-serif small l}% +\UnicodeMathSymbol{"1D5C6}{\msansm }{\mathalpha}{mathematical sans-serif small m}% +\UnicodeMathSymbol{"1D5C7}{\msansn }{\mathalpha}{mathematical sans-serif small n}% +\UnicodeMathSymbol{"1D5C8}{\msanso }{\mathalpha}{mathematical sans-serif small o}% +\UnicodeMathSymbol{"1D5C9}{\msansp }{\mathalpha}{mathematical sans-serif small p}% +\UnicodeMathSymbol{"1D5CA}{\msansq }{\mathalpha}{mathematical sans-serif small q}% +\UnicodeMathSymbol{"1D5CB}{\msansr }{\mathalpha}{mathematical sans-serif small r}% +\UnicodeMathSymbol{"1D5CC}{\msanss }{\mathalpha}{mathematical sans-serif small s}% +\UnicodeMathSymbol{"1D5CD}{\msanst }{\mathalpha}{mathematical sans-serif small t}% +\UnicodeMathSymbol{"1D5CE}{\msansu }{\mathalpha}{mathematical sans-serif small u}% +\UnicodeMathSymbol{"1D5CF}{\msansv }{\mathalpha}{mathematical sans-serif small v}% +\UnicodeMathSymbol{"1D5D0}{\msansw }{\mathalpha}{mathematical sans-serif small w}% +\UnicodeMathSymbol{"1D5D1}{\msansx }{\mathalpha}{mathematical sans-serif small x}% +\UnicodeMathSymbol{"1D5D2}{\msansy }{\mathalpha}{mathematical sans-serif small y}% +\UnicodeMathSymbol{"1D5D3}{\msansz }{\mathalpha}{mathematical sans-serif small z}% +\UnicodeMathSymbol{"1D5D4}{\mbfsansA }{\mathalpha}{mathematical sans-serif bold capital a}% +\UnicodeMathSymbol{"1D5D5}{\mbfsansB }{\mathalpha}{mathematical sans-serif bold capital b}% +\UnicodeMathSymbol{"1D5D6}{\mbfsansC }{\mathalpha}{mathematical sans-serif bold capital c}% +\UnicodeMathSymbol{"1D5D7}{\mbfsansD }{\mathalpha}{mathematical sans-serif bold capital d}% +\UnicodeMathSymbol{"1D5D8}{\mbfsansE }{\mathalpha}{mathematical sans-serif bold capital e}% +\UnicodeMathSymbol{"1D5D9}{\mbfsansF }{\mathalpha}{mathematical sans-serif bold capital f}% +\UnicodeMathSymbol{"1D5DA}{\mbfsansG }{\mathalpha}{mathematical sans-serif bold capital g}% +\UnicodeMathSymbol{"1D5DB}{\mbfsansH }{\mathalpha}{mathematical sans-serif bold capital h}% +\UnicodeMathSymbol{"1D5DC}{\mbfsansI }{\mathalpha}{mathematical sans-serif bold capital i}% +\UnicodeMathSymbol{"1D5DD}{\mbfsansJ }{\mathalpha}{mathematical sans-serif bold capital j}% +\UnicodeMathSymbol{"1D5DE}{\mbfsansK }{\mathalpha}{mathematical sans-serif bold capital k}% +\UnicodeMathSymbol{"1D5DF}{\mbfsansL }{\mathalpha}{mathematical sans-serif bold capital l}% +\UnicodeMathSymbol{"1D5E0}{\mbfsansM }{\mathalpha}{mathematical sans-serif bold capital m}% +\UnicodeMathSymbol{"1D5E1}{\mbfsansN }{\mathalpha}{mathematical sans-serif bold capital n}% +\UnicodeMathSymbol{"1D5E2}{\mbfsansO }{\mathalpha}{mathematical sans-serif bold capital o}% +\UnicodeMathSymbol{"1D5E3}{\mbfsansP }{\mathalpha}{mathematical sans-serif bold capital p}% +\UnicodeMathSymbol{"1D5E4}{\mbfsansQ }{\mathalpha}{mathematical sans-serif bold capital q}% +\UnicodeMathSymbol{"1D5E5}{\mbfsansR }{\mathalpha}{mathematical sans-serif bold capital r}% +\UnicodeMathSymbol{"1D5E6}{\mbfsansS }{\mathalpha}{mathematical sans-serif bold capital s}% +\UnicodeMathSymbol{"1D5E7}{\mbfsansT }{\mathalpha}{mathematical sans-serif bold capital t}% +\UnicodeMathSymbol{"1D5E8}{\mbfsansU }{\mathalpha}{mathematical sans-serif bold capital u}% +\UnicodeMathSymbol{"1D5E9}{\mbfsansV }{\mathalpha}{mathematical sans-serif bold capital v}% +\UnicodeMathSymbol{"1D5EA}{\mbfsansW }{\mathalpha}{mathematical sans-serif bold capital w}% +\UnicodeMathSymbol{"1D5EB}{\mbfsansX }{\mathalpha}{mathematical sans-serif bold capital x}% +\UnicodeMathSymbol{"1D5EC}{\mbfsansY }{\mathalpha}{mathematical sans-serif bold capital y}% +\UnicodeMathSymbol{"1D5ED}{\mbfsansZ }{\mathalpha}{mathematical sans-serif bold capital z}% +\UnicodeMathSymbol{"1D5EE}{\mbfsansa }{\mathalpha}{mathematical sans-serif bold small a}% +\UnicodeMathSymbol{"1D5EF}{\mbfsansb }{\mathalpha}{mathematical sans-serif bold small b}% +\UnicodeMathSymbol{"1D5F0}{\mbfsansc }{\mathalpha}{mathematical sans-serif bold small c}% +\UnicodeMathSymbol{"1D5F1}{\mbfsansd }{\mathalpha}{mathematical sans-serif bold small d}% +\UnicodeMathSymbol{"1D5F2}{\mbfsanse }{\mathalpha}{mathematical sans-serif bold small e}% +\UnicodeMathSymbol{"1D5F3}{\mbfsansf }{\mathalpha}{mathematical sans-serif bold small f}% +\UnicodeMathSymbol{"1D5F4}{\mbfsansg }{\mathalpha}{mathematical sans-serif bold small g}% +\UnicodeMathSymbol{"1D5F5}{\mbfsansh }{\mathalpha}{mathematical sans-serif bold small h}% +\UnicodeMathSymbol{"1D5F6}{\mbfsansi }{\mathalpha}{mathematical sans-serif bold small i}% +\UnicodeMathSymbol{"1D5F7}{\mbfsansj }{\mathalpha}{mathematical sans-serif bold small j}% +\UnicodeMathSymbol{"1D5F8}{\mbfsansk }{\mathalpha}{mathematical sans-serif bold small k}% +\UnicodeMathSymbol{"1D5F9}{\mbfsansl }{\mathalpha}{mathematical sans-serif bold small l}% +\UnicodeMathSymbol{"1D5FA}{\mbfsansm }{\mathalpha}{mathematical sans-serif bold small m}% +\UnicodeMathSymbol{"1D5FB}{\mbfsansn }{\mathalpha}{mathematical sans-serif bold small n}% +\UnicodeMathSymbol{"1D5FC}{\mbfsanso }{\mathalpha}{mathematical sans-serif bold small o}% +\UnicodeMathSymbol{"1D5FD}{\mbfsansp }{\mathalpha}{mathematical sans-serif bold small p}% +\UnicodeMathSymbol{"1D5FE}{\mbfsansq }{\mathalpha}{mathematical sans-serif bold small q}% +\UnicodeMathSymbol{"1D5FF}{\mbfsansr }{\mathalpha}{mathematical sans-serif bold small r}% +\UnicodeMathSymbol{"1D600}{\mbfsanss }{\mathalpha}{mathematical sans-serif bold small s}% +\UnicodeMathSymbol{"1D601}{\mbfsanst }{\mathalpha}{mathematical sans-serif bold small t}% +\UnicodeMathSymbol{"1D602}{\mbfsansu }{\mathalpha}{mathematical sans-serif bold small u}% +\UnicodeMathSymbol{"1D603}{\mbfsansv }{\mathalpha}{mathematical sans-serif bold small v}% +\UnicodeMathSymbol{"1D604}{\mbfsansw }{\mathalpha}{mathematical sans-serif bold small w}% +\UnicodeMathSymbol{"1D605}{\mbfsansx }{\mathalpha}{mathematical sans-serif bold small x}% +\UnicodeMathSymbol{"1D606}{\mbfsansy }{\mathalpha}{mathematical sans-serif bold small y}% +\UnicodeMathSymbol{"1D607}{\mbfsansz }{\mathalpha}{mathematical sans-serif bold small z}% +\UnicodeMathSymbol{"1D608}{\mitsansA }{\mathalpha}{mathematical sans-serif italic capital a}% +\UnicodeMathSymbol{"1D609}{\mitsansB }{\mathalpha}{mathematical sans-serif italic capital b}% +\UnicodeMathSymbol{"1D60A}{\mitsansC }{\mathalpha}{mathematical sans-serif italic capital c}% +\UnicodeMathSymbol{"1D60B}{\mitsansD }{\mathalpha}{mathematical sans-serif italic capital d}% +\UnicodeMathSymbol{"1D60C}{\mitsansE }{\mathalpha}{mathematical sans-serif italic capital e}% +\UnicodeMathSymbol{"1D60D}{\mitsansF }{\mathalpha}{mathematical sans-serif italic capital f}% +\UnicodeMathSymbol{"1D60E}{\mitsansG }{\mathalpha}{mathematical sans-serif italic capital g}% +\UnicodeMathSymbol{"1D60F}{\mitsansH }{\mathalpha}{mathematical sans-serif italic capital h}% +\UnicodeMathSymbol{"1D610}{\mitsansI }{\mathalpha}{mathematical sans-serif italic capital i}% +\UnicodeMathSymbol{"1D611}{\mitsansJ }{\mathalpha}{mathematical sans-serif italic capital j}% +\UnicodeMathSymbol{"1D612}{\mitsansK }{\mathalpha}{mathematical sans-serif italic capital k}% +\UnicodeMathSymbol{"1D613}{\mitsansL }{\mathalpha}{mathematical sans-serif italic capital l}% +\UnicodeMathSymbol{"1D614}{\mitsansM }{\mathalpha}{mathematical sans-serif italic capital m}% +\UnicodeMathSymbol{"1D615}{\mitsansN }{\mathalpha}{mathematical sans-serif italic capital n}% +\UnicodeMathSymbol{"1D616}{\mitsansO }{\mathalpha}{mathematical sans-serif italic capital o}% +\UnicodeMathSymbol{"1D617}{\mitsansP }{\mathalpha}{mathematical sans-serif italic capital p}% +\UnicodeMathSymbol{"1D618}{\mitsansQ }{\mathalpha}{mathematical sans-serif italic capital q}% +\UnicodeMathSymbol{"1D619}{\mitsansR }{\mathalpha}{mathematical sans-serif italic capital r}% +\UnicodeMathSymbol{"1D61A}{\mitsansS }{\mathalpha}{mathematical sans-serif italic capital s}% +\UnicodeMathSymbol{"1D61B}{\mitsansT }{\mathalpha}{mathematical sans-serif italic capital t}% +\UnicodeMathSymbol{"1D61C}{\mitsansU }{\mathalpha}{mathematical sans-serif italic capital u}% +\UnicodeMathSymbol{"1D61D}{\mitsansV }{\mathalpha}{mathematical sans-serif italic capital v}% +\UnicodeMathSymbol{"1D61E}{\mitsansW }{\mathalpha}{mathematical sans-serif italic capital w}% +\UnicodeMathSymbol{"1D61F}{\mitsansX }{\mathalpha}{mathematical sans-serif italic capital x}% +\UnicodeMathSymbol{"1D620}{\mitsansY }{\mathalpha}{mathematical sans-serif italic capital y}% +\UnicodeMathSymbol{"1D621}{\mitsansZ }{\mathalpha}{mathematical sans-serif italic capital z}% +\UnicodeMathSymbol{"1D622}{\mitsansa }{\mathalpha}{mathematical sans-serif italic small a}% +\UnicodeMathSymbol{"1D623}{\mitsansb }{\mathalpha}{mathematical sans-serif italic small b}% +\UnicodeMathSymbol{"1D624}{\mitsansc }{\mathalpha}{mathematical sans-serif italic small c}% +\UnicodeMathSymbol{"1D625}{\mitsansd }{\mathalpha}{mathematical sans-serif italic small d}% +\UnicodeMathSymbol{"1D626}{\mitsanse }{\mathalpha}{mathematical sans-serif italic small e}% +\UnicodeMathSymbol{"1D627}{\mitsansf }{\mathalpha}{mathematical sans-serif italic small f}% +\UnicodeMathSymbol{"1D628}{\mitsansg }{\mathalpha}{mathematical sans-serif italic small g}% +\UnicodeMathSymbol{"1D629}{\mitsansh }{\mathalpha}{mathematical sans-serif italic small h}% +\UnicodeMathSymbol{"1D62A}{\mitsansi }{\mathalpha}{mathematical sans-serif italic small i}% +\UnicodeMathSymbol{"1D62B}{\mitsansj }{\mathalpha}{mathematical sans-serif italic small j}% +\UnicodeMathSymbol{"1D62C}{\mitsansk }{\mathalpha}{mathematical sans-serif italic small k}% +\UnicodeMathSymbol{"1D62D}{\mitsansl }{\mathalpha}{mathematical sans-serif italic small l}% +\UnicodeMathSymbol{"1D62E}{\mitsansm }{\mathalpha}{mathematical sans-serif italic small m}% +\UnicodeMathSymbol{"1D62F}{\mitsansn }{\mathalpha}{mathematical sans-serif italic small n}% +\UnicodeMathSymbol{"1D630}{\mitsanso }{\mathalpha}{mathematical sans-serif italic small o}% +\UnicodeMathSymbol{"1D631}{\mitsansp }{\mathalpha}{mathematical sans-serif italic small p}% +\UnicodeMathSymbol{"1D632}{\mitsansq }{\mathalpha}{mathematical sans-serif italic small q}% +\UnicodeMathSymbol{"1D633}{\mitsansr }{\mathalpha}{mathematical sans-serif italic small r}% +\UnicodeMathSymbol{"1D634}{\mitsanss }{\mathalpha}{mathematical sans-serif italic small s}% +\UnicodeMathSymbol{"1D635}{\mitsanst }{\mathalpha}{mathematical sans-serif italic small t}% +\UnicodeMathSymbol{"1D636}{\mitsansu }{\mathalpha}{mathematical sans-serif italic small u}% +\UnicodeMathSymbol{"1D637}{\mitsansv }{\mathalpha}{mathematical sans-serif italic small v}% +\UnicodeMathSymbol{"1D638}{\mitsansw }{\mathalpha}{mathematical sans-serif italic small w}% +\UnicodeMathSymbol{"1D639}{\mitsansx }{\mathalpha}{mathematical sans-serif italic small x}% +\UnicodeMathSymbol{"1D63A}{\mitsansy }{\mathalpha}{mathematical sans-serif italic small y}% +\UnicodeMathSymbol{"1D63B}{\mitsansz }{\mathalpha}{mathematical sans-serif italic small z}% +\UnicodeMathSymbol{"1D63C}{\mbfitsansA }{\mathalpha}{mathematical sans-serif bold italic capital a}% +\UnicodeMathSymbol{"1D63D}{\mbfitsansB }{\mathalpha}{mathematical sans-serif bold italic capital b}% +\UnicodeMathSymbol{"1D63E}{\mbfitsansC }{\mathalpha}{mathematical sans-serif bold italic capital c}% +\UnicodeMathSymbol{"1D63F}{\mbfitsansD }{\mathalpha}{mathematical sans-serif bold italic capital d}% +\UnicodeMathSymbol{"1D640}{\mbfitsansE }{\mathalpha}{mathematical sans-serif bold italic capital e}% +\UnicodeMathSymbol{"1D641}{\mbfitsansF }{\mathalpha}{mathematical sans-serif bold italic capital f}% +\UnicodeMathSymbol{"1D642}{\mbfitsansG }{\mathalpha}{mathematical sans-serif bold italic capital g}% +\UnicodeMathSymbol{"1D643}{\mbfitsansH }{\mathalpha}{mathematical sans-serif bold italic capital h}% +\UnicodeMathSymbol{"1D644}{\mbfitsansI }{\mathalpha}{mathematical sans-serif bold italic capital i}% +\UnicodeMathSymbol{"1D645}{\mbfitsansJ }{\mathalpha}{mathematical sans-serif bold italic capital j}% +\UnicodeMathSymbol{"1D646}{\mbfitsansK }{\mathalpha}{mathematical sans-serif bold italic capital k}% +\UnicodeMathSymbol{"1D647}{\mbfitsansL }{\mathalpha}{mathematical sans-serif bold italic capital l}% +\UnicodeMathSymbol{"1D648}{\mbfitsansM }{\mathalpha}{mathematical sans-serif bold italic capital m}% +\UnicodeMathSymbol{"1D649}{\mbfitsansN }{\mathalpha}{mathematical sans-serif bold italic capital n}% +\UnicodeMathSymbol{"1D64A}{\mbfitsansO }{\mathalpha}{mathematical sans-serif bold italic capital o}% +\UnicodeMathSymbol{"1D64B}{\mbfitsansP }{\mathalpha}{mathematical sans-serif bold italic capital p}% +\UnicodeMathSymbol{"1D64C}{\mbfitsansQ }{\mathalpha}{mathematical sans-serif bold italic capital q}% +\UnicodeMathSymbol{"1D64D}{\mbfitsansR }{\mathalpha}{mathematical sans-serif bold italic capital r}% +\UnicodeMathSymbol{"1D64E}{\mbfitsansS }{\mathalpha}{mathematical sans-serif bold italic capital s}% +\UnicodeMathSymbol{"1D64F}{\mbfitsansT }{\mathalpha}{mathematical sans-serif bold italic capital t}% +\UnicodeMathSymbol{"1D650}{\mbfitsansU }{\mathalpha}{mathematical sans-serif bold italic capital u}% +\UnicodeMathSymbol{"1D651}{\mbfitsansV }{\mathalpha}{mathematical sans-serif bold italic capital v}% +\UnicodeMathSymbol{"1D652}{\mbfitsansW }{\mathalpha}{mathematical sans-serif bold italic capital w}% +\UnicodeMathSymbol{"1D653}{\mbfitsansX }{\mathalpha}{mathematical sans-serif bold italic capital x}% +\UnicodeMathSymbol{"1D654}{\mbfitsansY }{\mathalpha}{mathematical sans-serif bold italic capital y}% +\UnicodeMathSymbol{"1D655}{\mbfitsansZ }{\mathalpha}{mathematical sans-serif bold italic capital z}% +\UnicodeMathSymbol{"1D656}{\mbfitsansa }{\mathalpha}{mathematical sans-serif bold italic small a}% +\UnicodeMathSymbol{"1D657}{\mbfitsansb }{\mathalpha}{mathematical sans-serif bold italic small b}% +\UnicodeMathSymbol{"1D658}{\mbfitsansc }{\mathalpha}{mathematical sans-serif bold italic small c}% +\UnicodeMathSymbol{"1D659}{\mbfitsansd }{\mathalpha}{mathematical sans-serif bold italic small d}% +\UnicodeMathSymbol{"1D65A}{\mbfitsanse }{\mathalpha}{mathematical sans-serif bold italic small e}% +\UnicodeMathSymbol{"1D65B}{\mbfitsansf }{\mathalpha}{mathematical sans-serif bold italic small f}% +\UnicodeMathSymbol{"1D65C}{\mbfitsansg }{\mathalpha}{mathematical sans-serif bold italic small g}% +\UnicodeMathSymbol{"1D65D}{\mbfitsansh }{\mathalpha}{mathematical sans-serif bold italic small h}% +\UnicodeMathSymbol{"1D65E}{\mbfitsansi }{\mathalpha}{mathematical sans-serif bold italic small i}% +\UnicodeMathSymbol{"1D65F}{\mbfitsansj }{\mathalpha}{mathematical sans-serif bold italic small j}% +\UnicodeMathSymbol{"1D660}{\mbfitsansk }{\mathalpha}{mathematical sans-serif bold italic small k}% +\UnicodeMathSymbol{"1D661}{\mbfitsansl }{\mathalpha}{mathematical sans-serif bold italic small l}% +\UnicodeMathSymbol{"1D662}{\mbfitsansm }{\mathalpha}{mathematical sans-serif bold italic small m}% +\UnicodeMathSymbol{"1D663}{\mbfitsansn }{\mathalpha}{mathematical sans-serif bold italic small n}% +\UnicodeMathSymbol{"1D664}{\mbfitsanso }{\mathalpha}{mathematical sans-serif bold italic small o}% +\UnicodeMathSymbol{"1D665}{\mbfitsansp }{\mathalpha}{mathematical sans-serif bold italic small p}% +\UnicodeMathSymbol{"1D666}{\mbfitsansq }{\mathalpha}{mathematical sans-serif bold italic small q}% +\UnicodeMathSymbol{"1D667}{\mbfitsansr }{\mathalpha}{mathematical sans-serif bold italic small r}% +\UnicodeMathSymbol{"1D668}{\mbfitsanss }{\mathalpha}{mathematical sans-serif bold italic small s}% +\UnicodeMathSymbol{"1D669}{\mbfitsanst }{\mathalpha}{mathematical sans-serif bold italic small t}% +\UnicodeMathSymbol{"1D66A}{\mbfitsansu }{\mathalpha}{mathematical sans-serif bold italic small u}% +\UnicodeMathSymbol{"1D66B}{\mbfitsansv }{\mathalpha}{mathematical sans-serif bold italic small v}% +\UnicodeMathSymbol{"1D66C}{\mbfitsansw }{\mathalpha}{mathematical sans-serif bold italic small w}% +\UnicodeMathSymbol{"1D66D}{\mbfitsansx }{\mathalpha}{mathematical sans-serif bold italic small x}% +\UnicodeMathSymbol{"1D66E}{\mbfitsansy }{\mathalpha}{mathematical sans-serif bold italic small y}% +\UnicodeMathSymbol{"1D66F}{\mbfitsansz }{\mathalpha}{mathematical sans-serif bold italic small z}% +\UnicodeMathSymbol{"1D670}{\mttA }{\mathalpha}{mathematical monospace capital a}% +\UnicodeMathSymbol{"1D671}{\mttB }{\mathalpha}{mathematical monospace capital b}% +\UnicodeMathSymbol{"1D672}{\mttC }{\mathalpha}{mathematical monospace capital c}% +\UnicodeMathSymbol{"1D673}{\mttD }{\mathalpha}{mathematical monospace capital d}% +\UnicodeMathSymbol{"1D674}{\mttE }{\mathalpha}{mathematical monospace capital e}% +\UnicodeMathSymbol{"1D675}{\mttF }{\mathalpha}{mathematical monospace capital f}% +\UnicodeMathSymbol{"1D676}{\mttG }{\mathalpha}{mathematical monospace capital g}% +\UnicodeMathSymbol{"1D677}{\mttH }{\mathalpha}{mathematical monospace capital h}% +\UnicodeMathSymbol{"1D678}{\mttI }{\mathalpha}{mathematical monospace capital i}% +\UnicodeMathSymbol{"1D679}{\mttJ }{\mathalpha}{mathematical monospace capital j}% +\UnicodeMathSymbol{"1D67A}{\mttK }{\mathalpha}{mathematical monospace capital k}% +\UnicodeMathSymbol{"1D67B}{\mttL }{\mathalpha}{mathematical monospace capital l}% +\UnicodeMathSymbol{"1D67C}{\mttM }{\mathalpha}{mathematical monospace capital m}% +\UnicodeMathSymbol{"1D67D}{\mttN }{\mathalpha}{mathematical monospace capital n}% +\UnicodeMathSymbol{"1D67E}{\mttO }{\mathalpha}{mathematical monospace capital o}% +\UnicodeMathSymbol{"1D67F}{\mttP }{\mathalpha}{mathematical monospace capital p}% +\UnicodeMathSymbol{"1D680}{\mttQ }{\mathalpha}{mathematical monospace capital q}% +\UnicodeMathSymbol{"1D681}{\mttR }{\mathalpha}{mathematical monospace capital r}% +\UnicodeMathSymbol{"1D682}{\mttS }{\mathalpha}{mathematical monospace capital s}% +\UnicodeMathSymbol{"1D683}{\mttT }{\mathalpha}{mathematical monospace capital t}% +\UnicodeMathSymbol{"1D684}{\mttU }{\mathalpha}{mathematical monospace capital u}% +\UnicodeMathSymbol{"1D685}{\mttV }{\mathalpha}{mathematical monospace capital v}% +\UnicodeMathSymbol{"1D686}{\mttW }{\mathalpha}{mathematical monospace capital w}% +\UnicodeMathSymbol{"1D687}{\mttX }{\mathalpha}{mathematical monospace capital x}% +\UnicodeMathSymbol{"1D688}{\mttY }{\mathalpha}{mathematical monospace capital y}% +\UnicodeMathSymbol{"1D689}{\mttZ }{\mathalpha}{mathematical monospace capital z}% +\UnicodeMathSymbol{"1D68A}{\mtta }{\mathalpha}{mathematical monospace small a}% +\UnicodeMathSymbol{"1D68B}{\mttb }{\mathalpha}{mathematical monospace small b}% +\UnicodeMathSymbol{"1D68C}{\mttc }{\mathalpha}{mathematical monospace small c}% +\UnicodeMathSymbol{"1D68D}{\mttd }{\mathalpha}{mathematical monospace small d}% +\UnicodeMathSymbol{"1D68E}{\mtte }{\mathalpha}{mathematical monospace small e}% +\UnicodeMathSymbol{"1D68F}{\mttf }{\mathalpha}{mathematical monospace small f}% +\UnicodeMathSymbol{"1D690}{\mttg }{\mathalpha}{mathematical monospace small g}% +\UnicodeMathSymbol{"1D691}{\mtth }{\mathalpha}{mathematical monospace small h}% +\UnicodeMathSymbol{"1D692}{\mtti }{\mathalpha}{mathematical monospace small i}% +\UnicodeMathSymbol{"1D693}{\mttj }{\mathalpha}{mathematical monospace small j}% +\UnicodeMathSymbol{"1D694}{\mttk }{\mathalpha}{mathematical monospace small k}% +\UnicodeMathSymbol{"1D695}{\mttl }{\mathalpha}{mathematical monospace small l}% +\UnicodeMathSymbol{"1D696}{\mttm }{\mathalpha}{mathematical monospace small m}% +\UnicodeMathSymbol{"1D697}{\mttn }{\mathalpha}{mathematical monospace small n}% +\UnicodeMathSymbol{"1D698}{\mtto }{\mathalpha}{mathematical monospace small o}% +\UnicodeMathSymbol{"1D699}{\mttp }{\mathalpha}{mathematical monospace small p}% +\UnicodeMathSymbol{"1D69A}{\mttq }{\mathalpha}{mathematical monospace small q}% +\UnicodeMathSymbol{"1D69B}{\mttr }{\mathalpha}{mathematical monospace small r}% +\UnicodeMathSymbol{"1D69C}{\mtts }{\mathalpha}{mathematical monospace small s}% +\UnicodeMathSymbol{"1D69D}{\mttt }{\mathalpha}{mathematical monospace small t}% +\UnicodeMathSymbol{"1D69E}{\mttu }{\mathalpha}{mathematical monospace small u}% +\UnicodeMathSymbol{"1D69F}{\mttv }{\mathalpha}{mathematical monospace small v}% +\UnicodeMathSymbol{"1D6A0}{\mttw }{\mathalpha}{mathematical monospace small w}% +\UnicodeMathSymbol{"1D6A1}{\mttx }{\mathalpha}{mathematical monospace small x}% +\UnicodeMathSymbol{"1D6A2}{\mtty }{\mathalpha}{mathematical monospace small y}% +\UnicodeMathSymbol{"1D6A3}{\mttz }{\mathalpha}{mathematical monospace small z}% +\UnicodeMathSymbol{"1D6A4}{\imath }{\mathalpha}{mathematical italic small dotless i}% +\UnicodeMathSymbol{"1D6A5}{\jmath }{\mathalpha}{mathematical italic small dotless j}% +\UnicodeMathSymbol{"1D6A8}{\mbfAlpha }{\mathalpha}{mathematical bold capital alpha}% +\UnicodeMathSymbol{"1D6A9}{\mbfBeta }{\mathalpha}{mathematical bold capital beta}% +\UnicodeMathSymbol{"1D6AA}{\mbfGamma }{\mathalpha}{mathematical bold capital gamma}% +\UnicodeMathSymbol{"1D6AB}{\mbfDelta }{\mathalpha}{mathematical bold capital delta}% +\UnicodeMathSymbol{"1D6AC}{\mbfEpsilon }{\mathalpha}{mathematical bold capital epsilon}% +\UnicodeMathSymbol{"1D6AD}{\mbfZeta }{\mathalpha}{mathematical bold capital zeta}% +\UnicodeMathSymbol{"1D6AE}{\mbfEta }{\mathalpha}{mathematical bold capital eta}% +\UnicodeMathSymbol{"1D6AF}{\mbfTheta }{\mathalpha}{mathematical bold capital theta}% +\UnicodeMathSymbol{"1D6B0}{\mbfIota }{\mathalpha}{mathematical bold capital iota}% +\UnicodeMathSymbol{"1D6B1}{\mbfKappa }{\mathalpha}{mathematical bold capital kappa}% +\UnicodeMathSymbol{"1D6B2}{\mbfLambda }{\mathalpha}{mathematical bold capital lambda}% +\UnicodeMathSymbol{"1D6B3}{\mbfMu }{\mathalpha}{mathematical bold capital mu}% +\UnicodeMathSymbol{"1D6B4}{\mbfNu }{\mathalpha}{mathematical bold capital nu}% +\UnicodeMathSymbol{"1D6B5}{\mbfXi }{\mathalpha}{mathematical bold capital xi}% +\UnicodeMathSymbol{"1D6B6}{\mbfOmicron }{\mathalpha}{mathematical bold capital omicron}% +\UnicodeMathSymbol{"1D6B7}{\mbfPi }{\mathalpha}{mathematical bold capital pi}% +\UnicodeMathSymbol{"1D6B8}{\mbfRho }{\mathalpha}{mathematical bold capital rho}% +\UnicodeMathSymbol{"1D6B9}{\mbfvarTheta }{\mathalpha}{mathematical bold capital theta symbol}% +\UnicodeMathSymbol{"1D6BA}{\mbfSigma }{\mathalpha}{mathematical bold capital sigma}% +\UnicodeMathSymbol{"1D6BB}{\mbfTau }{\mathalpha}{mathematical bold capital tau}% +\UnicodeMathSymbol{"1D6BC}{\mbfUpsilon }{\mathalpha}{mathematical bold capital upsilon}% +\UnicodeMathSymbol{"1D6BD}{\mbfPhi }{\mathalpha}{mathematical bold capital phi}% +\UnicodeMathSymbol{"1D6BE}{\mbfChi }{\mathalpha}{mathematical bold capital chi}% +\UnicodeMathSymbol{"1D6BF}{\mbfPsi }{\mathalpha}{mathematical bold capital psi}% +\UnicodeMathSymbol{"1D6C0}{\mbfOmega }{\mathalpha}{mathematical bold capital omega}% +\UnicodeMathSymbol{"1D6C1}{\mbfnabla }{\mathalpha}{mathematical bold nabla}% +\UnicodeMathSymbol{"1D6C2}{\mbfalpha }{\mathalpha}{mathematical bold small alpha}% +\UnicodeMathSymbol{"1D6C3}{\mbfbeta }{\mathalpha}{mathematical bold small beta}% +\UnicodeMathSymbol{"1D6C4}{\mbfgamma }{\mathalpha}{mathematical bold small gamma}% +\UnicodeMathSymbol{"1D6C5}{\mbfdelta }{\mathalpha}{mathematical bold small delta}% +\UnicodeMathSymbol{"1D6C6}{\mbfvarepsilon }{\mathalpha}{mathematical bold small varepsilon}% +\UnicodeMathSymbol{"1D6C7}{\mbfzeta }{\mathalpha}{mathematical bold small zeta}% +\UnicodeMathSymbol{"1D6C8}{\mbfeta }{\mathalpha}{mathematical bold small eta}% +\UnicodeMathSymbol{"1D6C9}{\mbftheta }{\mathalpha}{mathematical bold small theta}% +\UnicodeMathSymbol{"1D6CA}{\mbfiota }{\mathalpha}{mathematical bold small iota}% +\UnicodeMathSymbol{"1D6CB}{\mbfkappa }{\mathalpha}{mathematical bold small kappa}% +\UnicodeMathSymbol{"1D6CC}{\mbflambda }{\mathalpha}{mathematical bold small lambda}% +\UnicodeMathSymbol{"1D6CD}{\mbfmu }{\mathalpha}{mathematical bold small mu}% +\UnicodeMathSymbol{"1D6CE}{\mbfnu }{\mathalpha}{mathematical bold small nu}% +\UnicodeMathSymbol{"1D6CF}{\mbfxi }{\mathalpha}{mathematical bold small xi}% +\UnicodeMathSymbol{"1D6D0}{\mbfomicron }{\mathalpha}{mathematical bold small omicron}% +\UnicodeMathSymbol{"1D6D1}{\mbfpi }{\mathalpha}{mathematical bold small pi}% +\UnicodeMathSymbol{"1D6D2}{\mbfrho }{\mathalpha}{mathematical bold small rho}% +\UnicodeMathSymbol{"1D6D3}{\mbfvarsigma }{\mathalpha}{mathematical bold small final sigma}% +\UnicodeMathSymbol{"1D6D4}{\mbfsigma }{\mathalpha}{mathematical bold small sigma}% +\UnicodeMathSymbol{"1D6D5}{\mbftau }{\mathalpha}{mathematical bold small tau}% +\UnicodeMathSymbol{"1D6D6}{\mbfupsilon }{\mathalpha}{mathematical bold small upsilon}% +\UnicodeMathSymbol{"1D6D7}{\mbfvarphi }{\mathalpha}{mathematical bold small phi}% +\UnicodeMathSymbol{"1D6D8}{\mbfchi }{\mathalpha}{mathematical bold small chi}% +\UnicodeMathSymbol{"1D6D9}{\mbfpsi }{\mathalpha}{mathematical bold small psi}% +\UnicodeMathSymbol{"1D6DA}{\mbfomega }{\mathalpha}{mathematical bold small omega}% +\UnicodeMathSymbol{"1D6DB}{\mbfpartial }{\mathalpha}{mathematical bold partial differential}% +\UnicodeMathSymbol{"1D6DC}{\mbfepsilon }{\mathalpha}{mathematical bold varepsilon symbol}% +\UnicodeMathSymbol{"1D6DD}{\mbfvartheta }{\mathalpha}{mathematical bold theta symbol}% +\UnicodeMathSymbol{"1D6DE}{\mbfvarkappa }{\mathalpha}{mathematical bold kappa symbol}% +\UnicodeMathSymbol{"1D6DF}{\mbfphi }{\mathalpha}{mathematical bold phi symbol}% +\UnicodeMathSymbol{"1D6E0}{\mbfvarrho }{\mathalpha}{mathematical bold rho symbol}% +\UnicodeMathSymbol{"1D6E1}{\mbfvarpi }{\mathalpha}{mathematical bold pi symbol}% +\UnicodeMathSymbol{"1D6E2}{\mitAlpha }{\mathalpha}{mathematical italic capital alpha}% +\UnicodeMathSymbol{"1D6E3}{\mitBeta }{\mathalpha}{mathematical italic capital beta}% +\UnicodeMathSymbol{"1D6E4}{\mitGamma }{\mathalpha}{mathematical italic capital gamma}% +\UnicodeMathSymbol{"1D6E5}{\mitDelta }{\mathalpha}{mathematical italic capital delta}% +\UnicodeMathSymbol{"1D6E6}{\mitEpsilon }{\mathalpha}{mathematical italic capital epsilon}% +\UnicodeMathSymbol{"1D6E7}{\mitZeta }{\mathalpha}{mathematical italic capital zeta}% +\UnicodeMathSymbol{"1D6E8}{\mitEta }{\mathalpha}{mathematical italic capital eta}% +\UnicodeMathSymbol{"1D6E9}{\mitTheta }{\mathalpha}{mathematical italic capital theta}% +\UnicodeMathSymbol{"1D6EA}{\mitIota }{\mathalpha}{mathematical italic capital iota}% +\UnicodeMathSymbol{"1D6EB}{\mitKappa }{\mathalpha}{mathematical italic capital kappa}% +\UnicodeMathSymbol{"1D6EC}{\mitLambda }{\mathalpha}{mathematical italic capital lambda}% +\UnicodeMathSymbol{"1D6ED}{\mitMu }{\mathalpha}{mathematical italic capital mu}% +\UnicodeMathSymbol{"1D6EE}{\mitNu }{\mathalpha}{mathematical italic capital nu}% +\UnicodeMathSymbol{"1D6EF}{\mitXi }{\mathalpha}{mathematical italic capital xi}% +\UnicodeMathSymbol{"1D6F0}{\mitOmicron }{\mathalpha}{mathematical italic capital omicron}% +\UnicodeMathSymbol{"1D6F1}{\mitPi }{\mathalpha}{mathematical italic capital pi}% +\UnicodeMathSymbol{"1D6F2}{\mitRho }{\mathalpha}{mathematical italic capital rho}% +\UnicodeMathSymbol{"1D6F3}{\mitvarTheta }{\mathalpha}{mathematical italic capital theta symbol}% +\UnicodeMathSymbol{"1D6F4}{\mitSigma }{\mathalpha}{mathematical italic capital sigma}% +\UnicodeMathSymbol{"1D6F5}{\mitTau }{\mathalpha}{mathematical italic capital tau}% +\UnicodeMathSymbol{"1D6F6}{\mitUpsilon }{\mathalpha}{mathematical italic capital upsilon}% +\UnicodeMathSymbol{"1D6F7}{\mitPhi }{\mathalpha}{mathematical italic capital phi}% +\UnicodeMathSymbol{"1D6F8}{\mitChi }{\mathalpha}{mathematical italic capital chi}% +\UnicodeMathSymbol{"1D6F9}{\mitPsi }{\mathalpha}{mathematical italic capital psi}% +\UnicodeMathSymbol{"1D6FA}{\mitOmega }{\mathalpha}{mathematical italic capital omega}% +\UnicodeMathSymbol{"1D6FB}{\mitnabla }{\mathalpha}{mathematical italic nabla}% +\UnicodeMathSymbol{"1D6FC}{\mitalpha }{\mathalpha}{mathematical italic small alpha}% +\UnicodeMathSymbol{"1D6FD}{\mitbeta }{\mathalpha}{mathematical italic small beta}% +\UnicodeMathSymbol{"1D6FE}{\mitgamma }{\mathalpha}{mathematical italic small gamma}% +\UnicodeMathSymbol{"1D6FF}{\mitdelta }{\mathalpha}{mathematical italic small delta}% +\UnicodeMathSymbol{"1D700}{\mitvarepsilon }{\mathalpha}{mathematical italic small varepsilon}% +\UnicodeMathSymbol{"1D701}{\mitzeta }{\mathalpha}{mathematical italic small zeta}% +\UnicodeMathSymbol{"1D702}{\miteta }{\mathalpha}{mathematical italic small eta}% +\UnicodeMathSymbol{"1D703}{\mittheta }{\mathalpha}{mathematical italic small theta}% +\UnicodeMathSymbol{"1D704}{\mitiota }{\mathalpha}{mathematical italic small iota}% +\UnicodeMathSymbol{"1D705}{\mitkappa }{\mathalpha}{mathematical italic small kappa}% +\UnicodeMathSymbol{"1D706}{\mitlambda }{\mathalpha}{mathematical italic small lambda}% +\UnicodeMathSymbol{"1D707}{\mitmu }{\mathalpha}{mathematical italic small mu}% +\UnicodeMathSymbol{"1D708}{\mitnu }{\mathalpha}{mathematical italic small nu}% +\UnicodeMathSymbol{"1D709}{\mitxi }{\mathalpha}{mathematical italic small xi}% +\UnicodeMathSymbol{"1D70A}{\mitomicron }{\mathalpha}{mathematical italic small omicron}% +\UnicodeMathSymbol{"1D70B}{\mitpi }{\mathalpha}{mathematical italic small pi}% +\UnicodeMathSymbol{"1D70C}{\mitrho }{\mathalpha}{mathematical italic small rho}% +\UnicodeMathSymbol{"1D70D}{\mitvarsigma }{\mathalpha}{mathematical italic small final sigma}% +\UnicodeMathSymbol{"1D70E}{\mitsigma }{\mathalpha}{mathematical italic small sigma}% +\UnicodeMathSymbol{"1D70F}{\mittau }{\mathalpha}{mathematical italic small tau}% +\UnicodeMathSymbol{"1D710}{\mitupsilon }{\mathalpha}{mathematical italic small upsilon}% +\UnicodeMathSymbol{"1D711}{\mitvarphi }{\mathalpha}{mathematical italic small phi}% +\UnicodeMathSymbol{"1D712}{\mitchi }{\mathalpha}{mathematical italic small chi}% +\UnicodeMathSymbol{"1D713}{\mitpsi }{\mathalpha}{mathematical italic small psi}% +\UnicodeMathSymbol{"1D714}{\mitomega }{\mathalpha}{mathematical italic small omega}% +\UnicodeMathSymbol{"1D715}{\mitpartial }{\mathalpha}{mathematical italic partial differential}% +\UnicodeMathSymbol{"1D716}{\mitepsilon }{\mathalpha}{mathematical italic varepsilon symbol}% +\UnicodeMathSymbol{"1D717}{\mitvartheta }{\mathalpha}{mathematical italic theta symbol}% +\UnicodeMathSymbol{"1D718}{\mitvarkappa }{\mathalpha}{mathematical italic kappa symbol}% +\UnicodeMathSymbol{"1D719}{\mitphi }{\mathalpha}{mathematical italic phi symbol}% +\UnicodeMathSymbol{"1D71A}{\mitvarrho }{\mathalpha}{mathematical italic rho symbol}% +\UnicodeMathSymbol{"1D71B}{\mitvarpi }{\mathalpha}{mathematical italic pi symbol}% +\UnicodeMathSymbol{"1D71C}{\mbfitAlpha }{\mathalpha}{mathematical bold italic capital alpha}% +\UnicodeMathSymbol{"1D71D}{\mbfitBeta }{\mathalpha}{mathematical bold italic capital beta}% +\UnicodeMathSymbol{"1D71E}{\mbfitGamma }{\mathalpha}{mathematical bold italic capital gamma}% +\UnicodeMathSymbol{"1D71F}{\mbfitDelta }{\mathalpha}{mathematical bold italic capital delta}% +\UnicodeMathSymbol{"1D720}{\mbfitEpsilon }{\mathalpha}{mathematical bold italic capital epsilon}% +\UnicodeMathSymbol{"1D721}{\mbfitZeta }{\mathalpha}{mathematical bold italic capital zeta}% +\UnicodeMathSymbol{"1D722}{\mbfitEta }{\mathalpha}{mathematical bold italic capital eta}% +\UnicodeMathSymbol{"1D723}{\mbfitTheta }{\mathalpha}{mathematical bold italic capital theta}% +\UnicodeMathSymbol{"1D724}{\mbfitIota }{\mathalpha}{mathematical bold italic capital iota}% +\UnicodeMathSymbol{"1D725}{\mbfitKappa }{\mathalpha}{mathematical bold italic capital kappa}% +\UnicodeMathSymbol{"1D726}{\mbfitLambda }{\mathalpha}{mathematical bold italic capital lambda}% +\UnicodeMathSymbol{"1D727}{\mbfitMu }{\mathalpha}{mathematical bold italic capital mu}% +\UnicodeMathSymbol{"1D728}{\mbfitNu }{\mathalpha}{mathematical bold italic capital nu}% +\UnicodeMathSymbol{"1D729}{\mbfitXi }{\mathalpha}{mathematical bold italic capital xi}% +\UnicodeMathSymbol{"1D72A}{\mbfitOmicron }{\mathalpha}{mathematical bold italic capital omicron}% +\UnicodeMathSymbol{"1D72B}{\mbfitPi }{\mathalpha}{mathematical bold italic capital pi}% +\UnicodeMathSymbol{"1D72C}{\mbfitRho }{\mathalpha}{mathematical bold italic capital rho}% +\UnicodeMathSymbol{"1D72D}{\mbfitvarTheta }{\mathalpha}{mathematical bold italic capital theta symbol}% +\UnicodeMathSymbol{"1D72E}{\mbfitSigma }{\mathalpha}{mathematical bold italic capital sigma}% +\UnicodeMathSymbol{"1D72F}{\mbfitTau }{\mathalpha}{mathematical bold italic capital tau}% +\UnicodeMathSymbol{"1D730}{\mbfitUpsilon }{\mathalpha}{mathematical bold italic capital upsilon}% +\UnicodeMathSymbol{"1D731}{\mbfitPhi }{\mathalpha}{mathematical bold italic capital phi}% +\UnicodeMathSymbol{"1D732}{\mbfitChi }{\mathalpha}{mathematical bold italic capital chi}% +\UnicodeMathSymbol{"1D733}{\mbfitPsi }{\mathalpha}{mathematical bold italic capital psi}% +\UnicodeMathSymbol{"1D734}{\mbfitOmega }{\mathalpha}{mathematical bold italic capital omega}% +\UnicodeMathSymbol{"1D735}{\mbfitnabla }{\mathalpha}{mathematical bold italic nabla}% +\UnicodeMathSymbol{"1D736}{\mbfitalpha }{\mathalpha}{mathematical bold italic small alpha}% +\UnicodeMathSymbol{"1D737}{\mbfitbeta }{\mathalpha}{mathematical bold italic small beta}% +\UnicodeMathSymbol{"1D738}{\mbfitgamma }{\mathalpha}{mathematical bold italic small gamma}% +\UnicodeMathSymbol{"1D739}{\mbfitdelta }{\mathalpha}{mathematical bold italic small delta}% +\UnicodeMathSymbol{"1D73A}{\mbfitvarepsilon }{\mathalpha}{mathematical bold italic small varepsilon}% +\UnicodeMathSymbol{"1D73B}{\mbfitzeta }{\mathalpha}{mathematical bold italic small zeta}% +\UnicodeMathSymbol{"1D73C}{\mbfiteta }{\mathalpha}{mathematical bold italic small eta}% +\UnicodeMathSymbol{"1D73D}{\mbfittheta }{\mathalpha}{mathematical bold italic small theta}% +\UnicodeMathSymbol{"1D73E}{\mbfitiota }{\mathalpha}{mathematical bold italic small iota}% +\UnicodeMathSymbol{"1D73F}{\mbfitkappa }{\mathalpha}{mathematical bold italic small kappa}% +\UnicodeMathSymbol{"1D740}{\mbfitlambda }{\mathalpha}{mathematical bold italic small lambda}% +\UnicodeMathSymbol{"1D741}{\mbfitmu }{\mathalpha}{mathematical bold italic small mu}% +\UnicodeMathSymbol{"1D742}{\mbfitnu }{\mathalpha}{mathematical bold italic small nu}% +\UnicodeMathSymbol{"1D743}{\mbfitxi }{\mathalpha}{mathematical bold italic small xi}% +\UnicodeMathSymbol{"1D744}{\mbfitomicron }{\mathalpha}{mathematical bold italic small omicron}% +\UnicodeMathSymbol{"1D745}{\mbfitpi }{\mathalpha}{mathematical bold italic small pi}% +\UnicodeMathSymbol{"1D746}{\mbfitrho }{\mathalpha}{mathematical bold italic small rho}% +\UnicodeMathSymbol{"1D747}{\mbfitvarsigma }{\mathalpha}{mathematical bold italic small final sigma}% +\UnicodeMathSymbol{"1D748}{\mbfitsigma }{\mathalpha}{mathematical bold italic small sigma}% +\UnicodeMathSymbol{"1D749}{\mbfittau }{\mathalpha}{mathematical bold italic small tau}% +\UnicodeMathSymbol{"1D74A}{\mbfitupsilon }{\mathalpha}{mathematical bold italic small upsilon}% +\UnicodeMathSymbol{"1D74B}{\mbfitvarphi }{\mathalpha}{mathematical bold italic small phi}% +\UnicodeMathSymbol{"1D74C}{\mbfitchi }{\mathalpha}{mathematical bold italic small chi}% +\UnicodeMathSymbol{"1D74D}{\mbfitpsi }{\mathalpha}{mathematical bold italic small psi}% +\UnicodeMathSymbol{"1D74E}{\mbfitomega }{\mathalpha}{mathematical bold italic small omega}% +\UnicodeMathSymbol{"1D74F}{\mbfitpartial }{\mathalpha}{mathematical bold italic partial differential}% +\UnicodeMathSymbol{"1D750}{\mbfitepsilon }{\mathalpha}{mathematical bold italic varepsilon symbol}% +\UnicodeMathSymbol{"1D751}{\mbfitvartheta }{\mathalpha}{mathematical bold italic theta symbol}% +\UnicodeMathSymbol{"1D752}{\mbfitvarkappa }{\mathalpha}{mathematical bold italic kappa symbol}% +\UnicodeMathSymbol{"1D753}{\mbfitphi }{\mathalpha}{mathematical bold italic phi symbol}% +\UnicodeMathSymbol{"1D754}{\mbfitvarrho }{\mathalpha}{mathematical bold italic rho symbol}% +\UnicodeMathSymbol{"1D755}{\mbfitvarpi }{\mathalpha}{mathematical bold italic pi symbol}% +\UnicodeMathSymbol{"1D756}{\mbfsansAlpha }{\mathalpha}{mathematical sans-serif bold capital alpha}% +\UnicodeMathSymbol{"1D757}{\mbfsansBeta }{\mathalpha}{mathematical sans-serif bold capital beta}% +\UnicodeMathSymbol{"1D758}{\mbfsansGamma }{\mathalpha}{mathematical sans-serif bold capital gamma}% +\UnicodeMathSymbol{"1D759}{\mbfsansDelta }{\mathalpha}{mathematical sans-serif bold capital delta}% +\UnicodeMathSymbol{"1D75A}{\mbfsansEpsilon }{\mathalpha}{mathematical sans-serif bold capital epsilon}% +\UnicodeMathSymbol{"1D75B}{\mbfsansZeta }{\mathalpha}{mathematical sans-serif bold capital zeta}% +\UnicodeMathSymbol{"1D75C}{\mbfsansEta }{\mathalpha}{mathematical sans-serif bold capital eta}% +\UnicodeMathSymbol{"1D75D}{\mbfsansTheta }{\mathalpha}{mathematical sans-serif bold capital theta}% +\UnicodeMathSymbol{"1D75E}{\mbfsansIota }{\mathalpha}{mathematical sans-serif bold capital iota}% +\UnicodeMathSymbol{"1D75F}{\mbfsansKappa }{\mathalpha}{mathematical sans-serif bold capital kappa}% +\UnicodeMathSymbol{"1D760}{\mbfsansLambda }{\mathalpha}{mathematical sans-serif bold capital lambda}% +\UnicodeMathSymbol{"1D761}{\mbfsansMu }{\mathalpha}{mathematical sans-serif bold capital mu}% +\UnicodeMathSymbol{"1D762}{\mbfsansNu }{\mathalpha}{mathematical sans-serif bold capital nu}% +\UnicodeMathSymbol{"1D763}{\mbfsansXi }{\mathalpha}{mathematical sans-serif bold capital xi}% +\UnicodeMathSymbol{"1D764}{\mbfsansOmicron }{\mathalpha}{mathematical sans-serif bold capital omicron}% +\UnicodeMathSymbol{"1D765}{\mbfsansPi }{\mathalpha}{mathematical sans-serif bold capital pi}% +\UnicodeMathSymbol{"1D766}{\mbfsansRho }{\mathalpha}{mathematical sans-serif bold capital rho}% +\UnicodeMathSymbol{"1D767}{\mbfsansvarTheta }{\mathalpha}{mathematical sans-serif bold capital theta symbol}% +\UnicodeMathSymbol{"1D768}{\mbfsansSigma }{\mathalpha}{mathematical sans-serif bold capital sigma}% +\UnicodeMathSymbol{"1D769}{\mbfsansTau }{\mathalpha}{mathematical sans-serif bold capital tau}% +\UnicodeMathSymbol{"1D76A}{\mbfsansUpsilon }{\mathalpha}{mathematical sans-serif bold capital upsilon}% +\UnicodeMathSymbol{"1D76B}{\mbfsansPhi }{\mathalpha}{mathematical sans-serif bold capital phi}% +\UnicodeMathSymbol{"1D76C}{\mbfsansChi }{\mathalpha}{mathematical sans-serif bold capital chi}% +\UnicodeMathSymbol{"1D76D}{\mbfsansPsi }{\mathalpha}{mathematical sans-serif bold capital psi}% +\UnicodeMathSymbol{"1D76E}{\mbfsansOmega }{\mathalpha}{mathematical sans-serif bold capital omega}% +\UnicodeMathSymbol{"1D76F}{\mbfsansnabla }{\mathalpha}{mathematical sans-serif bold nabla}% +\UnicodeMathSymbol{"1D770}{\mbfsansalpha }{\mathalpha}{mathematical sans-serif bold small alpha}% +\UnicodeMathSymbol{"1D771}{\mbfsansbeta }{\mathalpha}{mathematical sans-serif bold small beta}% +\UnicodeMathSymbol{"1D772}{\mbfsansgamma }{\mathalpha}{mathematical sans-serif bold small gamma}% +\UnicodeMathSymbol{"1D773}{\mbfsansdelta }{\mathalpha}{mathematical sans-serif bold small delta}% +\UnicodeMathSymbol{"1D774}{\mbfsansvarepsilon }{\mathalpha}{mathematical sans-serif bold small varepsilon}% +\UnicodeMathSymbol{"1D775}{\mbfsanszeta }{\mathalpha}{mathematical sans-serif bold small zeta}% +\UnicodeMathSymbol{"1D776}{\mbfsanseta }{\mathalpha}{mathematical sans-serif bold small eta}% +\UnicodeMathSymbol{"1D777}{\mbfsanstheta }{\mathalpha}{mathematical sans-serif bold small theta}% +\UnicodeMathSymbol{"1D778}{\mbfsansiota }{\mathalpha}{mathematical sans-serif bold small iota}% +\UnicodeMathSymbol{"1D779}{\mbfsanskappa }{\mathalpha}{mathematical sans-serif bold small kappa}% +\UnicodeMathSymbol{"1D77A}{\mbfsanslambda }{\mathalpha}{mathematical sans-serif bold small lambda}% +\UnicodeMathSymbol{"1D77B}{\mbfsansmu }{\mathalpha}{mathematical sans-serif bold small mu}% +\UnicodeMathSymbol{"1D77C}{\mbfsansnu }{\mathalpha}{mathematical sans-serif bold small nu}% +\UnicodeMathSymbol{"1D77D}{\mbfsansxi }{\mathalpha}{mathematical sans-serif bold small xi}% +\UnicodeMathSymbol{"1D77E}{\mbfsansomicron }{\mathalpha}{mathematical sans-serif bold small omicron}% +\UnicodeMathSymbol{"1D77F}{\mbfsanspi }{\mathalpha}{mathematical sans-serif bold small pi}% +\UnicodeMathSymbol{"1D780}{\mbfsansrho }{\mathalpha}{mathematical sans-serif bold small rho}% +\UnicodeMathSymbol{"1D781}{\mbfsansvarsigma }{\mathalpha}{mathematical sans-serif bold small final sigma}% +\UnicodeMathSymbol{"1D782}{\mbfsanssigma }{\mathalpha}{mathematical sans-serif bold small sigma}% +\UnicodeMathSymbol{"1D783}{\mbfsanstau }{\mathalpha}{mathematical sans-serif bold small tau}% +\UnicodeMathSymbol{"1D784}{\mbfsansupsilon }{\mathalpha}{mathematical sans-serif bold small upsilon}% +\UnicodeMathSymbol{"1D785}{\mbfsansvarphi }{\mathalpha}{mathematical sans-serif bold small phi}% +\UnicodeMathSymbol{"1D786}{\mbfsanschi }{\mathalpha}{mathematical sans-serif bold small chi}% +\UnicodeMathSymbol{"1D787}{\mbfsanspsi }{\mathalpha}{mathematical sans-serif bold small psi}% +\UnicodeMathSymbol{"1D788}{\mbfsansomega }{\mathalpha}{mathematical sans-serif bold small omega}% +\UnicodeMathSymbol{"1D789}{\mbfsanspartial }{\mathalpha}{mathematical sans-serif bold partial differential}% +\UnicodeMathSymbol{"1D78A}{\mbfsansepsilon }{\mathalpha}{mathematical sans-serif bold varepsilon symbol}% +\UnicodeMathSymbol{"1D78B}{\mbfsansvartheta }{\mathalpha}{mathematical sans-serif bold theta symbol}% +\UnicodeMathSymbol{"1D78C}{\mbfsansvarkappa }{\mathalpha}{mathematical sans-serif bold kappa symbol}% +\UnicodeMathSymbol{"1D78D}{\mbfsansphi }{\mathalpha}{mathematical sans-serif bold phi symbol}% +\UnicodeMathSymbol{"1D78E}{\mbfsansvarrho }{\mathalpha}{mathematical sans-serif bold rho symbol}% +\UnicodeMathSymbol{"1D78F}{\mbfsansvarpi }{\mathalpha}{mathematical sans-serif bold pi symbol}% +\UnicodeMathSymbol{"1D790}{\mbfitsansAlpha }{\mathalpha}{mathematical sans-serif bold italic capital alpha}% +\UnicodeMathSymbol{"1D791}{\mbfitsansBeta }{\mathalpha}{mathematical sans-serif bold italic capital beta}% +\UnicodeMathSymbol{"1D792}{\mbfitsansGamma }{\mathalpha}{mathematical sans-serif bold italic capital gamma}% +\UnicodeMathSymbol{"1D793}{\mbfitsansDelta }{\mathalpha}{mathematical sans-serif bold italic capital delta}% +\UnicodeMathSymbol{"1D794}{\mbfitsansEpsilon }{\mathalpha}{mathematical sans-serif bold italic capital epsilon}% +\UnicodeMathSymbol{"1D795}{\mbfitsansZeta }{\mathalpha}{mathematical sans-serif bold italic capital zeta}% +\UnicodeMathSymbol{"1D796}{\mbfitsansEta }{\mathalpha}{mathematical sans-serif bold italic capital eta}% +\UnicodeMathSymbol{"1D797}{\mbfitsansTheta }{\mathalpha}{mathematical sans-serif bold italic capital theta}% +\UnicodeMathSymbol{"1D798}{\mbfitsansIota }{\mathalpha}{mathematical sans-serif bold italic capital iota}% +\UnicodeMathSymbol{"1D799}{\mbfitsansKappa }{\mathalpha}{mathematical sans-serif bold italic capital kappa}% +\UnicodeMathSymbol{"1D79A}{\mbfitsansLambda }{\mathalpha}{mathematical sans-serif bold italic capital lambda}% +\UnicodeMathSymbol{"1D79B}{\mbfitsansMu }{\mathalpha}{mathematical sans-serif bold italic capital mu}% +\UnicodeMathSymbol{"1D79C}{\mbfitsansNu }{\mathalpha}{mathematical sans-serif bold italic capital nu}% +\UnicodeMathSymbol{"1D79D}{\mbfitsansXi }{\mathalpha}{mathematical sans-serif bold italic capital xi}% +\UnicodeMathSymbol{"1D79E}{\mbfitsansOmicron }{\mathalpha}{mathematical sans-serif bold italic capital omicron}% +\UnicodeMathSymbol{"1D79F}{\mbfitsansPi }{\mathalpha}{mathematical sans-serif bold italic capital pi}% +\UnicodeMathSymbol{"1D7A0}{\mbfitsansRho }{\mathalpha}{mathematical sans-serif bold italic capital rho}% +\UnicodeMathSymbol{"1D7A1}{\mbfitsansvarTheta }{\mathalpha}{mathematical sans-serif bold italic capital theta symbol}% +\UnicodeMathSymbol{"1D7A2}{\mbfitsansSigma }{\mathalpha}{mathematical sans-serif bold italic capital sigma}% +\UnicodeMathSymbol{"1D7A3}{\mbfitsansTau }{\mathalpha}{mathematical sans-serif bold italic capital tau}% +\UnicodeMathSymbol{"1D7A4}{\mbfitsansUpsilon }{\mathalpha}{mathematical sans-serif bold italic capital upsilon}% +\UnicodeMathSymbol{"1D7A5}{\mbfitsansPhi }{\mathalpha}{mathematical sans-serif bold italic capital phi}% +\UnicodeMathSymbol{"1D7A6}{\mbfitsansChi }{\mathalpha}{mathematical sans-serif bold italic capital chi}% +\UnicodeMathSymbol{"1D7A7}{\mbfitsansPsi }{\mathalpha}{mathematical sans-serif bold italic capital psi}% +\UnicodeMathSymbol{"1D7A8}{\mbfitsansOmega }{\mathalpha}{mathematical sans-serif bold italic capital omega}% +\UnicodeMathSymbol{"1D7A9}{\mbfitsansnabla }{\mathalpha}{mathematical sans-serif bold italic nabla}% +\UnicodeMathSymbol{"1D7AA}{\mbfitsansalpha }{\mathalpha}{mathematical sans-serif bold italic small alpha}% +\UnicodeMathSymbol{"1D7AB}{\mbfitsansbeta }{\mathalpha}{mathematical sans-serif bold italic small beta}% +\UnicodeMathSymbol{"1D7AC}{\mbfitsansgamma }{\mathalpha}{mathematical sans-serif bold italic small gamma}% +\UnicodeMathSymbol{"1D7AD}{\mbfitsansdelta }{\mathalpha}{mathematical sans-serif bold italic small delta}% +\UnicodeMathSymbol{"1D7AE}{\mbfitsansvarepsilon }{\mathalpha}{mathematical sans-serif bold italic small varepsilon}% +\UnicodeMathSymbol{"1D7AF}{\mbfitsanszeta }{\mathalpha}{mathematical sans-serif bold italic small zeta}% +\UnicodeMathSymbol{"1D7B0}{\mbfitsanseta }{\mathalpha}{mathematical sans-serif bold italic small eta}% +\UnicodeMathSymbol{"1D7B1}{\mbfitsanstheta }{\mathalpha}{mathematical sans-serif bold italic small theta}% +\UnicodeMathSymbol{"1D7B2}{\mbfitsansiota }{\mathalpha}{mathematical sans-serif bold italic small iota}% +\UnicodeMathSymbol{"1D7B3}{\mbfitsanskappa }{\mathalpha}{mathematical sans-serif bold italic small kappa}% +\UnicodeMathSymbol{"1D7B4}{\mbfitsanslambda }{\mathalpha}{mathematical sans-serif bold italic small lambda}% +\UnicodeMathSymbol{"1D7B5}{\mbfitsansmu }{\mathalpha}{mathematical sans-serif bold italic small mu}% +\UnicodeMathSymbol{"1D7B6}{\mbfitsansnu }{\mathalpha}{mathematical sans-serif bold italic small nu}% +\UnicodeMathSymbol{"1D7B7}{\mbfitsansxi }{\mathalpha}{mathematical sans-serif bold italic small xi}% +\UnicodeMathSymbol{"1D7B8}{\mbfitsansomicron }{\mathalpha}{mathematical sans-serif bold italic small omicron}% +\UnicodeMathSymbol{"1D7B9}{\mbfitsanspi }{\mathalpha}{mathematical sans-serif bold italic small pi}% +\UnicodeMathSymbol{"1D7BA}{\mbfitsansrho }{\mathalpha}{mathematical sans-serif bold italic small rho}% +\UnicodeMathSymbol{"1D7BB}{\mbfitsansvarsigma }{\mathalpha}{mathematical sans-serif bold italic small final sigma}% +\UnicodeMathSymbol{"1D7BC}{\mbfitsanssigma }{\mathalpha}{mathematical sans-serif bold italic small sigma}% +\UnicodeMathSymbol{"1D7BD}{\mbfitsanstau }{\mathalpha}{mathematical sans-serif bold italic small tau}% +\UnicodeMathSymbol{"1D7BE}{\mbfitsansupsilon }{\mathalpha}{mathematical sans-serif bold italic small upsilon}% +\UnicodeMathSymbol{"1D7BF}{\mbfitsansvarphi }{\mathalpha}{mathematical sans-serif bold italic small phi}% +\UnicodeMathSymbol{"1D7C0}{\mbfitsanschi }{\mathalpha}{mathematical sans-serif bold italic small chi}% +\UnicodeMathSymbol{"1D7C1}{\mbfitsanspsi }{\mathalpha}{mathematical sans-serif bold italic small psi}% +\UnicodeMathSymbol{"1D7C2}{\mbfitsansomega }{\mathalpha}{mathematical sans-serif bold italic small omega}% +\UnicodeMathSymbol{"1D7C3}{\mbfitsanspartial }{\mathalpha}{mathematical sans-serif bold italic partial differential}% +\UnicodeMathSymbol{"1D7C4}{\mbfitsansepsilon }{\mathalpha}{mathematical sans-serif bold italic varepsilon symbol}% +\UnicodeMathSymbol{"1D7C5}{\mbfitsansvartheta }{\mathalpha}{mathematical sans-serif bold italic theta symbol}% +\UnicodeMathSymbol{"1D7C6}{\mbfitsansvarkappa }{\mathalpha}{mathematical sans-serif bold italic kappa symbol}% +\UnicodeMathSymbol{"1D7C7}{\mbfitsansphi }{\mathalpha}{mathematical sans-serif bold italic phi symbol}% +\UnicodeMathSymbol{"1D7C8}{\mbfitsansvarrho }{\mathalpha}{mathematical sans-serif bold italic rho symbol}% +\UnicodeMathSymbol{"1D7C9}{\mbfitsansvarpi }{\mathalpha}{mathematical sans-serif bold italic pi symbol}% +\UnicodeMathSymbol{"1D7CA}{\mbfDigamma }{\mathalpha}{mathematical bold capital digamma}% +\UnicodeMathSymbol{"1D7CB}{\mbfdigamma }{\mathalpha}{mathematical bold small digamma}% +\UnicodeMathSymbol{"1D7CE}{\mbfzero }{\mathord}{mathematical bold digit 0}% +\UnicodeMathSymbol{"1D7CF}{\mbfone }{\mathord}{mathematical bold digit 1}% +\UnicodeMathSymbol{"1D7D0}{\mbftwo }{\mathord}{mathematical bold digit 2}% +\UnicodeMathSymbol{"1D7D1}{\mbfthree }{\mathord}{mathematical bold digit 3}% +\UnicodeMathSymbol{"1D7D2}{\mbffour }{\mathord}{mathematical bold digit 4}% +\UnicodeMathSymbol{"1D7D3}{\mbffive }{\mathord}{mathematical bold digit 5}% +\UnicodeMathSymbol{"1D7D4}{\mbfsix }{\mathord}{mathematical bold digit 6}% +\UnicodeMathSymbol{"1D7D5}{\mbfseven }{\mathord}{mathematical bold digit 7}% +\UnicodeMathSymbol{"1D7D6}{\mbfeight }{\mathord}{mathematical bold digit 8}% +\UnicodeMathSymbol{"1D7D7}{\mbfnine }{\mathord}{mathematical bold digit 9}% +\UnicodeMathSymbol{"1D7D8}{\Bbbzero }{\mathord}{mathematical double-struck digit 0}% +\UnicodeMathSymbol{"1D7D9}{\Bbbone }{\mathord}{mathematical double-struck digit 1}% +\UnicodeMathSymbol{"1D7DA}{\Bbbtwo }{\mathord}{mathematical double-struck digit 2}% +\UnicodeMathSymbol{"1D7DB}{\Bbbthree }{\mathord}{mathematical double-struck digit 3}% +\UnicodeMathSymbol{"1D7DC}{\Bbbfour }{\mathord}{mathematical double-struck digit 4}% +\UnicodeMathSymbol{"1D7DD}{\Bbbfive }{\mathord}{mathematical double-struck digit 5}% +\UnicodeMathSymbol{"1D7DE}{\Bbbsix }{\mathord}{mathematical double-struck digit 6}% +\UnicodeMathSymbol{"1D7DF}{\Bbbseven }{\mathord}{mathematical double-struck digit 7}% +\UnicodeMathSymbol{"1D7E0}{\Bbbeight }{\mathord}{mathematical double-struck digit 8}% +\UnicodeMathSymbol{"1D7E1}{\Bbbnine }{\mathord}{mathematical double-struck digit 9}% +\UnicodeMathSymbol{"1D7E2}{\msanszero }{\mathord}{mathematical sans-serif digit 0}% +\UnicodeMathSymbol{"1D7E3}{\msansone }{\mathord}{mathematical sans-serif digit 1}% +\UnicodeMathSymbol{"1D7E4}{\msanstwo }{\mathord}{mathematical sans-serif digit 2}% +\UnicodeMathSymbol{"1D7E5}{\msansthree }{\mathord}{mathematical sans-serif digit 3}% +\UnicodeMathSymbol{"1D7E6}{\msansfour }{\mathord}{mathematical sans-serif digit 4}% +\UnicodeMathSymbol{"1D7E7}{\msansfive }{\mathord}{mathematical sans-serif digit 5}% +\UnicodeMathSymbol{"1D7E8}{\msanssix }{\mathord}{mathematical sans-serif digit 6}% +\UnicodeMathSymbol{"1D7E9}{\msansseven }{\mathord}{mathematical sans-serif digit 7}% +\UnicodeMathSymbol{"1D7EA}{\msanseight }{\mathord}{mathematical sans-serif digit 8}% +\UnicodeMathSymbol{"1D7EB}{\msansnine }{\mathord}{mathematical sans-serif digit 9}% +\UnicodeMathSymbol{"1D7EC}{\mbfsanszero }{\mathord}{mathematical sans-serif bold digit 0}% +\UnicodeMathSymbol{"1D7ED}{\mbfsansone }{\mathord}{mathematical sans-serif bold digit 1}% +\UnicodeMathSymbol{"1D7EE}{\mbfsanstwo }{\mathord}{mathematical sans-serif bold digit 2}% +\UnicodeMathSymbol{"1D7EF}{\mbfsansthree }{\mathord}{mathematical sans-serif bold digit 3}% +\UnicodeMathSymbol{"1D7F0}{\mbfsansfour }{\mathord}{mathematical sans-serif bold digit 4}% +\UnicodeMathSymbol{"1D7F1}{\mbfsansfive }{\mathord}{mathematical sans-serif bold digit 5}% +\UnicodeMathSymbol{"1D7F2}{\mbfsanssix }{\mathord}{mathematical sans-serif bold digit 6}% +\UnicodeMathSymbol{"1D7F3}{\mbfsansseven }{\mathord}{mathematical sans-serif bold digit 7}% +\UnicodeMathSymbol{"1D7F4}{\mbfsanseight }{\mathord}{mathematical sans-serif bold digit 8}% +\UnicodeMathSymbol{"1D7F5}{\mbfsansnine }{\mathord}{mathematical sans-serif bold digit 9}% +\UnicodeMathSymbol{"1D7F6}{\mttzero }{\mathord}{mathematical monospace digit 0}% +\UnicodeMathSymbol{"1D7F7}{\mttone }{\mathord}{mathematical monospace digit 1}% +\UnicodeMathSymbol{"1D7F8}{\mtttwo }{\mathord}{mathematical monospace digit 2}% +\UnicodeMathSymbol{"1D7F9}{\mttthree }{\mathord}{mathematical monospace digit 3}% +\UnicodeMathSymbol{"1D7FA}{\mttfour }{\mathord}{mathematical monospace digit 4}% +\UnicodeMathSymbol{"1D7FB}{\mttfive }{\mathord}{mathematical monospace digit 5}% +\UnicodeMathSymbol{"1D7FC}{\mttsix }{\mathord}{mathematical monospace digit 6}% +\UnicodeMathSymbol{"1D7FD}{\mttseven }{\mathord}{mathematical monospace digit 7}% +\UnicodeMathSymbol{"1D7FE}{\mtteight }{\mathord}{mathematical monospace digit 8}% +\UnicodeMathSymbol{"1D7FF}{\mttnine }{\mathord}{mathematical monospace digit 9}% +\UnicodeMathSymbol{"1EEF0}{\arabicmaj }{\mathop}{arabic mathematical operator meem with hah with tatweel}% +\UnicodeMathSymbol{"1EEF1}{\arabichad }{\mathop}{arabic mathematical operator hah with dal}% + +% /© +% +% ------------------------------------------------ +% 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 +% ------------------------------------------------ +% +% ©/ + diff --git a/Master/texmf-dist/tex/optex/base/usebib.opm b/Master/texmf-dist/tex/optex/base/usebib.opm new file mode 100644 index 00000000000..f37d21b3159 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/usebib.opm @@ -0,0 +1,398 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \MakeReference {Reading bib databases <2021-03-12>} % loaded on demand by \usebib + + \_doc ----------------------------- + Loading the `librarian.tex` macro package. See `texdoc librarian` + for more information about it. + + We want to ignore `\errmessage` and we want not to create `\jobname.lbr` + file. + \_cod ----------------------------- + +\_def\errmessage#1{} +\_def\newwrite#1{\_csname lb@restoreat\_endcsname \_endinput} +\_def\_tmpb{\_catcode`\_=12 \_input librarian \_catcode`\_=11 }\_tmpb +\_let\errmessage=\_errmessage +\_let\newwrite=\_newwrite + +\_private \BibFile \ReadList \SortList \SortingOrder \NameCount \AbbreviateFirstname + \CreateField \RetrieveFieldInFor \RetrieveFieldIn ; + + \_doc ----------------------------- + The `\usebib` command. + \_cod ----------------------------- + +\_def\_usebib/#1 (#2) #3 {% + \_let\_citeI=\_relax \_xdef\_citelist{\_citelist\_citelistB}% + \_global\_let\_addcitelist=\_writeXcite + \_ifx\_citelist\_empty + \_opwarning{No cited items. \_noexpand\usebib ignored}% + \_else + \_bgroup \_par + \_emergencystretch=.3\_hsize + \_ifx\_bibpart\_undefined \_def\_bibpart{none}\_fi + \_def\_optexbibstyle{#2}% + \_setctable\_optexcatcodes + \_ea \_skiptoendinput \_input languages.opm + \_input bib-#2.opm + \_the \_bibtexhook + \_ifcsname _mt:bib.and:\_cs{_lan:\_the\_language}\_endcsname \_else + \_opwarning{\_string\usebib: No phrases for language + "\_cs{_lan:\_the\_language}" (using "en")}% + \_language=0 \_chardef\_documentlanguage=0 + \_fi + \_def\_tmp##1[*]##2\_relax{\_def\_tmp{##2}}\_ea\_tmp\_citelist[*]\_relax + \_ifx\_tmp\_empty\_else % there was \nocite[*] used. + \_setbox0=\_vbox{\_hsize=\_maxdimen \_def\_citelist{}\_adef@{\_readbibentry}% + \_input #3.bib + \_ea}\_ea\_def\_ea\_citelist\_ea{\_citelist}% + \_fi + \_def\_citeI[##1]{\_csname lb@cite\_endcsname{##1}{\_bibpart}{}{}}\_citelist + \_BibFile{#3}% + \_if s#1\_SortList{\_bibpart}\_fi + \_ReadList{\_bibpart}% + \_restorectable + \_egroup + \_fi +} +\_long\_def\_skiptoendinput#1\_endinput{} +\_def\_readbibentry#1#{\_readbibentryA} +\_def\_readbibentryA#1{\_readbibentryB#1,,\_relax!.} +\_def\_readbibentryB#1#2,#3\_relax!.{\_addto\_citelist{\_citeI[#1#2]}} + + \_doc ----------------------------- + Corrections in librarian macros. + \_cod ----------------------------- + +\_tmpnum=\_catcode`\@ \_catcode`\@=11 +\_def\lb@checkmissingentries#1,{% we needn't \errmessage here, only \opmacwarning + \_def\lb@temp{#1}% + \_unless\_ifx\lb@temp\lb@eoe + \lb@ifcs{#1}{fields}% + {}% + {\_opwarning{\_string\usebib: entry [#1] isn't found in .bib}}% + \_ea\lb@checkmissingentries + \_fi +} +\_def\lb@readentry#1#2#3,{% space before key have to be ingnored + \_def\lb@temp{#2#3}% we need case sensitive keys + \_def\lb@next{\_ea\lb@gotoat\lb@gobbletoeoe}% + \lb@ifcs\lb@temp{requested}% + {\_let\lb@entrykey\lb@temp + \lb@ifcs\lb@entrykey{fields}{}% + {\lb@defcs\lb@entrykey{fields}{}% + \_lowercase{\lb@addfield{entrytype}{#1}}% + \_let\lb@next\lb@analyzeentry}}{}% + \lb@next +} +\_let\lb@compareA=\lb@compare +\_let\lb@preparesortA=\lb@preparesort +\_def\lb@compare#1\lb@eoe#2\lb@eoe{% SpecialSort: + \_ifx\lb@sorttype\lb@namestring + \_ifx\_sortfield\_undefined \lb@compareA#1\lb@eoe#2\lb@eoe + \_else + \_ea\_RetrieveFieldInFor\_ea{\_sortfield}\lb@entrykey\lb@temp + \_ifx\lb@temp\_empty \_toks1={#1\lb@eoe}\_else \_toks1=\_ea{\lb@temp\lb@eoe}\_fi + \_ea\_RetrieveFieldInFor\_ea{\_sortfield}\lb@currententry\lb@temp + \_ifx\lb@temp\_empty \_toks2={#2\lb@eoe}\_else \_toks2=\_ea{\lb@temp\lb@eoe}\_fi + \_edef\lb@temp{\_noexpand\lb@compareA\_space\_the\_toks1 \_space\_the\_toks2}\lb@temp + \_fi + \_else \lb@compareA#1\lb@eoe#2\lb@eoe \_fi +} +\_def\lb@preparesort#1#2\lb@eoe{% + \_if#1-% + \_def\lb@sorttype{#2}% + \_else + \_def\lb@sorttype{#1#2}% + \_fi + \lb@preparesortA#1#2\lb@eoe +} +\_def\_SpecialSort#1{\_def\_sortfield{#1}} +\_def\WriteImmediateInfo#1{} % the existence of .lbr file bocks new reading of .bib +\_catcode`\@=\_tmpnum + + \_doc ----------------------------- + Main action per each entry. + \_cod ----------------------------- + +\_def\MakeReference{\_par \_bibskip + \_advance\_bibnum by1 + \_isdefined{_bim:\_the\_bibnum}\_iftrue + \_edef\_tmpb{\_csname _bim:\_the\_bibnum\_endcsname}% + \_bibmark=\_ea{\_tmpb}% + \_else \_bibmark={}\_fi + \_edef\_tmpb{\EntryKey}% + \_noindent \_dest[cite:\_the\_bibnum]\_printlabel\EntryKey + \_printbib + {% + \_RetrieveFieldIn{entrytype}\_entrytype + \_csname _print:BEGIN\_endcsname + \_isdefined{_print:\_entrytype}\_iftrue + \_csname _print:\_entrytype\_endcsname + \_else + \_ifx\_entrytype\_empty \_else + \_opwarning{Entrytype @\_entrytype\_space from [\EntryKey] undefined}% + \_csname _print:misc\_endcsname + \_fi\_fi + \_csname _print:END\_endcsname + \_ifx\_wref\_wrefrelax\_else + \_immediate\_wref\_Xbib{{\EntryKey}{\_the\_bibnum}{\_the\_bibmark}}\_fi + }\_par +} + + \_doc ----------------------------- + The \`\_bprinta`, \`\_bprintb`, \`\_bprintc`, \`\_bprintv` + commands used in the style files: + \_cod ----------------------------- + +\_def\_bprinta {\_bprintb*} +\_def\_bprintb #1[#2#3]{% + \_def\_bibfieldname{#2#3}% + \_if!#2\_relax + \_def\_bibfieldname{#3}% + \_RetrieveFieldIn{#3}\_bibfield + \_ifx\_bibfield\_empty\_else + \_RetrieveFieldIn{#3number}\_namecount + \_def\_bibfield{\_csname _Read#3\_ea\_endcsname \_csname _pp:#3\_endcsname}% + \_fi + \_else + \_RetrieveFieldIn{#2#3}\_bibfield + \_fi + \_if^#1^% + \_ifx\_bibfield\_empty \_ea\_ea\_ea \_doemptyfield + \_else \_ea\_ea\_ea \_dofullfield \_fi + \_else \_ea \_bprintaA + \_fi +} +\_def\_dofullfield#1#2{\_def\_dofield##1{#1}\_ea\_dofield\_ea{\_bibfield}} +\_def\_doemptyfield#1#2{\_def\_dofield##1{#2}\_ea\_dofield\_ea{\_bibfield}} +\_let\_Readauthor=\ReadAuthor \_let\_Readeditor=\ReadEditor +\_def\_bprintaA #1#2{\_ifx\_bibfield\_empty #2\_else\_bprintaB #1**\_eee\_fi} +\_def\_bprintaB #1*#2*#3\_eee{\_if^#3^#1\_else\_ea\_bprintaC\_ea{\_bibfield}{#1}{#2}\_fi} +\_def\_bprintaC #1#2#3{#2#1#3} +\_def\_bprintc#1#2{\_bprintcA#1#2**\_relax} +\_def\_bprintcA#1#2*#3*#4\_relax{\_ifx#1\_empty \_else \_if^#4^#2\_else#2#1#3\_fi\_fi} +\_def\_bprintv [#1]#2#3{\_def\_tmpa{#2}\_def\_tmpb{#3}\_bprintvA #1,,} +\_def\_bprintvA #1,{% + \_if^#1^\_tmpb\_else + \_RetrieveFieldIn{#1}\_tmp + \_ifx \_tmp\_empty + \_else \_tmpa \_def\_tmpb{}\_def\_tmpa{}% + \_fi + \_ea \_bprintvA + \_fi +} +\_sdef{_pp:author}{\_letNames\_authorname} +\_sdef{_pp:editor}{\_letNames\_editorname} +\_def\_letNames{\_let\_Firstname=\Firstname \_let\_Lastname=\Lastname + \_let\_Von=\Von \_let\_Junior=\Junior +} + + \_doc ----------------------------- + Various macros + multilingual. Note that \`\_nobibwarnlist` is used in + \`\_bibwarning` and it is set by \^`\nobibwarning` macro. + \_cod ----------------------------- + +\_def\_bibwarning{% + \_ea\_isinlist \_ea\_nobibwarnlist\_ea{\_ea,\EntryKey,}\_iffalse + \_opwarning{Missing field "\_bibfieldname" in [\EntryKey]}\_fi} + +\_endcode + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +The file `usebib.opm` implements the command +\~`\usebib/<sorttype> (<style>) <bibfiles>` +where `<sorttype>` is one letter `c` (references ordered by citation order in +the text) or `s` (references ordered by key in the style file), +`<style>` is the part of the name `bib-<style>.opm` of the style file +and `<bibfiles>` are one or more `.bib` file names without suffix separated by +comma without space. Example: + +\begtt +\usebib/s (simple) mybase,yourbase +\endtt + +This command reads the `<bibfiles>` directly and creates the list of +bibliographic references (only those declared by \~`\cite[]` or +\~`\nocite[]` in the text). The formatting of such references is defined in the style +file. + +The principle \"first entry wins" is used. Suppose `\usebib/s (simple) local,global`. +If an entry with the same label is declared in `local.bib` and in +`global.bib` too then the first wins. So, you can set exceptions in your +`local.bib` file for your document. + +The `bib-<style>.opm` declares entry types (like `@BOOK`, `@ARTICLE`) and declares +their mandatory and optional fields (like `author`, `title`). When +a mandatory field is missing in an entry in the `.bib` file then a warning is printed on the +terminal about it. You can suppress such warnings by command +\^`\nobibwarning`~`[<bib-labels>]`, where <bib-labels> is a comma-separated list +of labels (without spaces) where missing mandatory fields will be no warned. + +Old `.bib` files may use the obscure notation for accents like `{\"o}`. +Recommendation: convert such old files to Unicode encoding. If you are +unable to do this then you can set \^`\bibtexhook={`\^`\oldaccents}`. + +\secc Notes for bib-style writers + +The `.bib` files include records in the format: + +\begtt \catcode`\<=13 +@<entry-type>{<label>, + <field-name> = "<field-data>", + <field-name> = "<field-data>", + ...etc +} +\endtt +% +see the file `demo/op-biblist.bib` for a real example. The <entry-types> and +<field-names> are case insensitive. + +Ancient Bib\TeX/ has read such files and has generated files appropriate for +reading by \LaTeX. It has worked with a set of <entry-types>, see the www +page \url{http://en.wikipedia.org/wiki/BibTeX}. The set of entry types +listed on this www page is de facto the Bib\TeX/ standard. The \OpTeX/ bib +style writer must \"declare" all such entry types and more non-standard +entry types can be declared too if there is a good reason for doing it. The +word \"declare" used in the previous sentence means that a bib-style writer must +define the printing rules for each <entry-type>. +The printing rules for <entry-type> include: which fields will be printed, in +what order, by what format they will be printed on (italic, caps, etc.), +which fields are mandatory, which are optional, and which are ignored in +`.bib` records. + +The style writer can be inspired by two styles already done: `bib-simple.opm` +and `bib-iso690.opm`. The second one is documented in detail in +section~\ref[isobib]. + +The printing rules for each <entry-type> must be declared by +`\_sdef{_print:<entry-type>}` in `bib-<style>.opm` file. +The `<entry-type>` has to be lowercase here. \OpTeX/ supports following +macros for a more comfortable setting of printing rules: + +\begitems +* \^`\_bprinta` `[<field-name>] {<if defined>} {<if not defined>}`. The part <if defined> + is executed if <field-name> is declared in .bib file for the entry which is + currently processed. Else the part <if not defined> is processed. + The part <if defined> can include the `*` parameter which is replaced + by the value of the <field-name>. +* The part <if not defined> can include + the \^`\_bibwarning` command if the <field-name> is mandatory. +* \^`\_bprintb` `[<field-name>] {<if defined>} {<if not defined>}`. The same as + `\_bprinta`, but the `##1` parameter is used instead `*`. Differences: `##1` + parameter can be used more than once and can be enclosed in nested + braces. The `*` parameter can be used at most once and cannot be enclosed + in braces. Warning: if the `\_bprintb` commands are nested (`\_bprintb` in + `\_bprintb`), then you need to write the `####1` parameter for internal `\_bprintb`. + But if `\_bprinta` commands are nested then the parameter is not duplicated. +* \^`\_bprintc` `\macro {<if non-empty>}`. The <if non-empty> part is executed if + `\macro` is non-empty. The `*` parameter can be used, it is replaced by + the `\macro`. +* \^`\_bprintv` `[<field1>,<field2>,...] {<if defined>} {<if not defined>}`. + The part <if defined> is executed if <field1> or <filed2> or ... + is defined, else the second part <if not defined> is executed. + There is one filed name or the list field names separated by commas. + The parts cannot include any parameters. +\enditems + +There are two special field-names: `!author` and `!editor`. The processed list of +authors or editors are printed here instead of raw data, see the commands +\~`\_authorname` and \~`\_editorname` below. + +The bib-style writer can define `_print:BEGIN` and/or `_print:END`. +They are executed at the beginning or +end of each `<entry-type>`. The formatting does not solve the numbering and +paragraph indentation of the entry. This is processed by \^`\_printbib` macro +used in \OpTeX/ (and may be redefined by the author or document designer). + +The \^`\bibmark={something}` can be declared, for instance in the `_print:END` macro. +Such \"bibmark" is saved to the `.ref` file and used in next \TeX/ run as +`\cite` marks when `\nonumcitations` is set. + +Moreover, the bib-style writer must declare the format of +special fields `author` and `editor`. These fields include a +list of names, each name is precessed individually in a loop. The +\^`\_authorname` or \^`\_editorname` is called for each name on the list. +The bib-style writer must define +the \`\_authorname` and \`\_editorname` commands +in order to declare the format of printing each individual name. +The following control sequences can be used in these macros: + +\begitems +* `\_NameCount`: the number of the currently processed author in the list +* `\_namecont`: the total number of the authors in the list +* `\_Lastname`, `\_Firstname`, `\_Von`, `\_Junior`: the parts of the name. +\enditems + +The whole style file is read in the group during the `\usebib` command is executed +before typesetting the reference list. Each definition or setting is local +here. + +The auto-generated phrases (dependent on current language) can be used in +bib-style files by `\_mtext{bib.<identifier>}`, where <ident> is an identifier of +the phrase and the phrase itself is defined by +`\_sdef{_mt:bib.<identifier>:<language>}{<phrase>}`. See section~\ref[langphrases] +for more detail. Phrases for <identifiers>: +and, etal, edition, citedate, volume, number, prepages, postpages, editor, +editors, available, availablealso, bachthesis, masthesis, phdthesis +are defined already, see the end of section~\ref[langphrases]. + +If you are using non-standard field-names in .bib database and bib-style, +you have to declare them by `\_CreateField {<fieldname>}`. + +You can declare `\_SortingOrder` in the manner documented by librarian package. + +User or author of the bib-style can create the hidden field which has a +precedence while sorting names. Example: + +\begtt +\CreateField {sortedby} +\SpecialSort {sortedby} +\endtt +Suppose that the .bib file includes: +\begtt +... +author = "Jan Chadima", +sortedby = "Hzzadima Jan", +... +\endtt +Now, this author is sorted between H and I, because the Ch digraph in this +name has to be sorted by this rule. + +If you need (for example) to place the auto-citations before other citations, +then you can mark your entries in `.bib` file by `sortedby = "@"`, because this +character is sorted before `A`. + +\_endinput + +History: +-------- + +2021-03-12 \_citelistB added before first test. +2021-02-15 \_expandafter -> \_ea +Apr. 2014: released in OPmac +Jan. 2016: "first entry wins" implemented +Apr. 2016: \readentry -> \readbibentry, \usebib->\MakeReference +Feb. 2018: \input librarian does not create \jobname.lbr + +% Source: + +% opmac-bib +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Petr Olsak, version Feb. 2018 (beta) + +% This is module for OPmac macros, see http://petr.olsak.net/opmac.html +% The command: +% \usebib/<sorttype> (<style>) (bibfiles> +% for direct reading .bib files by OPmac macros (without bibTeX) is implemented here. +% The implementation depends on librarian.tex package by Paul Isambert. +% Use: +% \input opmac \input opmac-bib +% or simply: +% \input opmac-bib +% before using the command \usebib. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end + diff --git a/Master/texmf-dist/tex/optex/base/verbatim.opm b/Master/texmf-dist/tex/optex/base/verbatim.opm new file mode 100644 index 00000000000..8fd20ee5317 --- /dev/null +++ b/Master/texmf-dist/tex/optex/base/verbatim.opm @@ -0,0 +1,372 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \begtt {Verbatim <2021-01-22>} % preloaded in format + + \_doc ---------------------------- + The internal parameters + \`\_ttskip`, \`\_ttpenalty`, \`\_viline`, \`\_vifile` and \`\_ttfont` + for verbatim macros are set. + \_cod ---------------------------- + +\_def\_ttskip{\_medskip} % space above and below \begtt, \verbinput +\_mathchardef\_ttpenalty=100 % penalty between lines in \begtt, \verbinput +\_newcount\_viline % last line number in \verbinput +\_newread\_vifile % file given by \verinput +\_def\_ttfont{\_tt} % default tt font + + \_doc ---------------------------- + \`\code``{<text>}` expands to `\detokenize{<text>}` when `\escapechar=-1`. In + order to do it more robust when it is used in `\write` then it expands as + noexpanded `\code<space>` (followed by space in its csname). This macro + does the real work. + + The \`\_printinverbatim``{<text>}` macro is used for `\code{<text>}` printing and for + \code{`}<text>\code{`} printing. It is defined as `\hbox`, so the in-verbatim <text> + will be never broken. But you can re-define this macro. + + When `\code` occurs in PDF outlines then it does the same as `\detokenize`. + The macro for preparing outlines sets `\escapechar` to $-1$ and uses + \^`\_regoul` token list before `\edef`. + + The `\code` is not `\proteced` because we want it expands to + `\unexpanded{\code<space>{<text>}}` in `\write` parameters. This protect the + expansions of the `\code` parameter (like `\\`, `\^` etc.). + \_cod ---------------------------- + +\_def\_code#1{\_unexpanded\_ea{\_csname _code \_endcsname{#1}}} +\_protected\_sdef{_code }#1{{\_escapechar=-1 \_ttfont \_the\_everyintt \_relax + \_ea\_printinverbatim\_ea{\_detokenize{#1}}}} +\_def\_printinverbatim#1{\_leavevmode\_hbox{#1}} + +\_regmacro {}{}{\_let\code=\_detokenize \_let\_code=\_detokenize} +\_public \code ; + + \_doc ---------------------------- + The \`\_setverb` macro sets all catcodes to \"verbatim mode". It should be used only + in a group, so we prepare a new catcode table with \"verbatim" catcodes and we define + it as\nl `\_catcodetable`\`\_verbatimcatcodes`. After the group is finished then + original catcode table is restored. + \_cod ---------------------------- + +\_newcatcodetable \_verbatimcatcodes +\_def\_setverb{\_begingroup + \_def\do##1{\_catcode`##1=12 } + \_dospecials + \_savecatcodetable\_verbatimcatcodes % all characters are normal + \_endgroup +} +\_setverb +\_def\_setverb{\_catcodetable\_verbatimcatcodes }% + + \_doc ---------------------------- + \`\verbchar``<char>` saves original catcode of previously declared `<char>` (if + such character was declared) using \`\_savedttchar` and \`\_savedttcharc` + values. Then new such values are stored. The declared character is activated + by `\_adef` as a macro (active character) which opens a group, + does `\_setverb` and other settings and reads its parameter until second the same + character. This is done by the \`\_readverb` macro. Finally, it prints scanned + `<text>` by \^`\_printinverbatim` and closes group. Suppose that `\verbchar"` is + used. Then the following work is schematically done: + \begtt + \_def "{\_begingroup \_setverb ... \_readverb} + \_def \_readverb #1"{\_printinverbatim{#1}\_endgroup} + \endtt + Note that the second occurrence of `"` is not active because `\_setverb` + deactivates it. + \_cod ---------------------------- + +\_def\_verbchar#1{% + \_ifx\_savedttchar\_undefined\_else \_catcode\_savedttchar=\_savedttcharc \_fi + \_chardef\_savedttchar=`#1 + \_chardef\_savedttcharc=\_catcode`#1 + \_adef{#1}{\_begingroup \_setverb \_adef{ }{\_dsp}\_ttfont \_the\_everyintt\_relax \_readverb}% + \_def\_readverb ##1#1{\_printinverbatim{##1}\_endgroup}% +} +\_let \_activettchar=\_verbchar % for backward compatibility +\_public \verbchar \activettchar ; + + \_doc ---------------------------- + \`\begtt` is defined only as public. We don't need a private `\_begtt` variant. + This macro opens a group and sets `%` as an active character (temporary). + This will allow it to be used as the comment character at the same line after + `\begtt`. Then \`\_begtti` is run. It is defined by \^`\eoldef`, + so users can put a parameter at the + same line where `\begtt` is. This `#1` parameter is used after \^`\everytt` + parameters settings, so users can change them locally. + + The \^`\_begtti` macro does \^`\_setverb` and another preprocessing, sets + `\endlinechar` to `^^J` and reads the following text in verbatim mode + until \`\endtt` occurs. This scanning is done by \`\_startverb` macro which is + defined as: + \begtt \adef/{\bslash} + \_def\_startverb #1/endtt #2^^J{...} + \endtt + We must to ensure that the backslash in `\endtt` has category 12 (this is a + reason of the `\ea` chain in real code). + The `#2` is something between `\endtt` and the end of the same line and it is simply + ignored. + + The `\_startverb` puts the scanned data to \`\_prepareverbdata`. It sets the data + to `\_tmpb` without changes by default, but you should re-define it in order + to do special changes if you want. (For example, \^`\hisyntax` redefines + this macro.) The scanned data have `^^J` at each end of line and all spaces are + active characters (defined as {\visiblesp`\ `}). + Other characters have normal category 11 or 12. + + When `\_prepareverbdata` finishes then `\_startverb` runs `\_printverb` loop + over each line of the data and does a final work: last skip plus `\noindent` + in the next paragraph. + \_cod --------------------------- + +\_def\begtt{\_par \_begingroup \_adef\%##1\_relax{\_relax}\_begtti} +\_eoldef \_begtti#1{\_wipeepar \_setxhsize + \_vskip\_parskip \_ttskip + \_setverb + \_ifnum\_ttline<0 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi + \_adef{ }{\_dsp}\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt + \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}% + \_the\_everytt \_relax #1\_relax \_ttfont + \_def\_testcommentchars##1\_iftrue{\_iffalse}\_let\_hicomments=\_relax + \_endlinechar=`^^J + \_startverb +} +\_ea\_def\_ea\_startverb \_ea#\_ea1\_csstring\\endtt#2^^J{% + \_prepareverbdata\_tmpb{#1^^J}% + \_ea\_printverb \_tmpb\_end + \_par + \_endgroup \_ttskip + \_isnextchar\_par{}{\_noindent}% +} +\_def\_prepareverbdata#1#2{\_def#1{#2}} + + \_doc + The \`\_printverb` macro calls \^`\_printverbline``{<line>}` repeatedly + to each scanned line of verbatim text. The `\_printverb` is used from + `\begtt...\endtt` and from `\verbinput` too. + + The \^`\_testcommentchars` replaces the following `\_iftrue` to + `\_iffalse` by default unless the \~`\commentchars` are set. So, the main body + of the loop is written in the `\_else` part of the `\_iftrue` condition. + The \^`\_printverbline``{<line>}` is called here. + + The \`\_printverbline``{<line>}` expects that it starts in vertical mode and it must + do `\par` to return the vertical mode. The \`\_printverblinenum` + is used here: it does nothing when `\_ttline`\code{<0} else it prints the line + number using `\_llap`. + + \`\_putttpenalty` puts \^`\_ttpenalty` before second and next lines, but + not before first line in each `\begtt...\endtt` environment. + \_cod ---------------------------- + +\_def\_printverb #1^^J#2{% + \_ifx\_printverblinenum\_relax \_else \_incr\_ttline \_fi + \_testcommentchars #1\_relax\_relax\_relax + \_iftrue + \_ifx\_end#2 \_printcomments\_fi + \_else + \_ifx\_vcomments\_empty\_else \_printcomments \_def\_vcomments{}\_fi + \_ifx\_end#2 + \_bgroup \_adef{ }{}\_def\t{}% if the last line is emtpy, we don't print it + \_ifcat&\_egroup \_else\_egroup \_printverbline{#1}\_fi + \_else + \_printverbline{#1}% + \_fi + \_fi + \_ifx\_end#2 \_let\_next=\_relax \_else \_def\_next{\_printverb#2}\_fi + \_next +} +\_def\_printverbline#1{\_putttpenalty \_indent \_printverblinenum \_kern\_ttshift #1\par} +\_def\_initverblinenum{\_tenrm \_thefontscale[700]\_ea\_let\_ea\_sevenrm\_the\_font} +\_def\_printverblinenum{\_llap{\_sevenrm \_the\_ttline\_kern.9em}} +\_def\_putttpenalty{\_def\_putttpenalty{\_penalty\_ttpenalty}} + + \_doc ---------------------------- + Macro \`\verbinput` uses a file read previously or opens the given file. Then + it runs the parameter scanning by \`\_viscanparameter` and \`\_viscanminus`. + Finally the \`\_doverbinput` is run. At the beginning of `\_doverbinput`, we have + `\_viline`= number of lines already read using previous `\verbinput`, + `\_vinolines`= the number of lines we need to skip and `\_vidolnes`= the + number of lines we need to print. + A similar preparation is done as in `\begtt` after the group is opened. Then + we skip \`\_vinolines` lines in a loop a and we read \`\_vidolines` lines. The + read data is accumulated into `\_tmpb` macro. The next steps are equal to + the steps done in \^`\_startverb` macro: data are processed via + \^`\_prepareverbdata` and printed via \^`\_printverb` loop. + \_cod \_fin ---------------------- + +\_def\_verbinput #1(#2) #3 {\_par \_def\_tmpa{#3}% + \_def\_tmpb{#1}% cmds used in local group + \_ifx\_vifilename\_tmpa \_else + \_openin\_vifile={#3}% + \_global\_viline=0 \_global\_let\_vifilename=\_tmpa + \_ifeof\_vifile + \_opwarning{\_string\verbinput: file "#3" unable to read} + \_ea\_ea\_ea\_skiptorelax + \_fi + \_fi + \_viscanparameter #2+\_relax +} +\_def\_skiptorelax#1\_relax{} + +\_def \_viscanparameter #1+#2\_relax{% + \_if$#2$\_viscanminus(#1)\_else \_viscanplus(#1+#2)\_fi +} +\_def\_viscanplus(#1+#2+){% + \_if$#1$\_tmpnum=\_viline + \_else \_ifnum#1<0 \_tmpnum=\_viline \_advance\_tmpnum by-#1 + \_else \_tmpnum=#1 + \_advance\_tmpnum by-1 + \_ifnum\_tmpnum<0 \_tmpnum=0 \_fi % (0+13) = (1+13) + \_fi \_fi + \_edef\_vinolines{\_the\_tmpnum}% + \_if$#2$\_def\_vidolines{0}\_else\_edef\_vidolines{#2}\_fi + \_doverbinput +} +\_def\_viscanminus(#1-#2){% + \_if$#1$\_tmpnum=0 + \_else \_tmpnum=#1 \_advance\_tmpnum by-1 \_fi + \_ifnum\_tmpnum<0 \_tmpnum=0 \_fi % (0-13) = (1-13) + \_edef\_vinolines{\_the\_tmpnum}% + \_if$#2$\_tmpnum=0 + \_else \_tmpnum=#2 \_advance\_tmpnum by-\_vinolines \_fi + \_edef\_vidolines{\_the\_tmpnum}% + \_doverbinput +} +\_def\_doverbinput{% + \_tmpnum=\_vinolines + \_advance\_tmpnum by-\_viline + \_ifnum\_tmpnum<0 + \_openin\_vifile={\_vifilename}% + \_global\_viline=0 + \_else + \_edef\_vinolines{\_the\_tmpnum}% + \_fi + \_vskip\_parskip \_ttskip \_wipeepar \_setxhsize + \_begingroup + \_ifnum\_ttline<-1 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi + \_setverb \_adef{ }{\_dsp}\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt + \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}% + \_the\_everytt\_relax \_tmpb\_relax \_ttfont + \_endlinechar=`^^J \_tmpnum=0 + \_loop \_ifeof\_vifile \_tmpnum=\_vinolines\_space \_fi + \_ifnum\_tmpnum<\_vinolines\_space + \_vireadline \_advance\_tmpnum by1 \_repeat %% skip lines + \_edef\_ttlinesave{\_ttline=\_the\_ttline}% + \_ifnum\_ttline=-1 \_ttline=\_viline \_fi + \_tmpnum=0 \_def\_tmpb{}% + \_ifnum\_vidolines=0 \_tmpnum=-1 \_fi + \_ifeof\_vifile \_tmpnum=\_vidolines\_space \_fi + \_loop \_ifnum\_tmpnum<\_vidolines\_space + \_vireadline + \_ifnum\_vidolines=0 \_else\_advance\_tmpnum by1 \_fi + \_ifeof\_vifile \_tmpnum=\_vidolines\_space \_else \_visaveline \_fi %% save line + \_repeat + \_ea\_prepareverbdata \_ea \_tmpb\_ea{\_tmpb^^J}% + \_catcode`\ =10 \_catcode`\%=9 % used in \commentchars comments + \_ea\_printverb \_tmpb\_end + \_global\_ttlinesave + \_par + \_endgroup + \_ttskip + \_isnextchar\_par{}{\_noindent}% +} +\_def\_vireadline{\_read\_vifile to \_tmp \_incr\_viline } +\_def\_visaveline{\_ea\_addto\_ea\_tmpb\_ea{\_tmp}} + +\_public \verbinput ; + + \_doc ----------------------------- + If the language of your code\label[commentchars]\wlabel{} + printed by \^`\verbinput` supports the + format of comments started by two characters from the beginning of the + line then you can set these characters by \^`\commentchars``<first><second>`. + Such comments are printed in the non-verbatim mode without these two + characters and they look like the verbatim printing is interrupted + at the places where such comments are. + See the section~\ref[lua] for good illustration. + The file `optex.lua` is read by a single command + `\verbinput (4-) optex.lua` here and the `\commentchars --` was set before it. + + If you need to set a special character by \^`\commentchars` then you must + to set the catcode to 12 (and space to 13). Examples: + \begtt + \commentchars // % C++ comments + \commentchars -- % Lua comments + {\catcode`\%=12 \_ea}\commentchars %% % TeX comments + {\catcode`\#=12 \catcode`\ =13 \_ea}\commentchars#{ } % bash comments + \endtt + + There is one limitation when \TeX/ interprets the comments declared by + \^`\commentchars`. Each block of comments is accumulated to one line + and then it is re-interpreted by \TeX. So, the ends of lines in the + comments block are lost. You cannot use macros which + need to scan end of lines, for example `\begtt...\endtt` inside the comments + block does not work. The character `%` is ignored in comments but you can use `\%` + for printing or `%` alone for de-activating `\_endpar` from empty + comment lines. + + Implementation: The \`\commentchars``<first><second>` redefines the \`\_testcommentchars` + used in \^`\_printverb` in order to it removes the following `\_iftrue` + and returns `\_iftrue` or `\_iffalse` depending on the fact that + the comment characters are or aren't present at the beginning of tested line. + If it is true (`\ifnum` expands to `\ifnum 10>0`) then the rest of the + line is added to the \`\_vcomments` macro. + + The \`\_hicomments` is `\relax` by default but it is redefined by \^`\commentchars` + in order to keep no-colorized comments if we need to use feature from + \^`\commentchars`. + + The accumulated comments are printed whenever the non-comment line + occurs. This is done by \`\_printcomments` macro. + You can re-define it, but the main idea must be kept: it is printed in the + group, `\_reloding \_rm` initializes normal font, `\catcodetable0` + returns to normal catcode table used before `\verbinput` is started, and + the text accumulated in `\_vcomments` must be printed by + `\_scantextokens` primitive. + \_cod ----------------------------- + +\_def\_vcomments{} +\_let\_hicomments=\_relax + +\_def\_commentchars#1#2{% + \_def\_testcommentchars ##1##2##3\_relax ##4\_iftrue{\_ifnum % not closed in this macro + \_ifx #1##1\_ifx#2##21\_fi\_fi 0>0 + \_ifx\_relax##3\_relax \_addto\_vcomments{\_endgraf}% empty comment=\enfgraf + \_else \_addto\_vcomments{##3 }\_fi}% + \_def\_hicomments{\_replfromto{\b\n#1#2}{^^J}{\w{#1#2####1}^^J}}% used in \hisyntax +} +\_def\_testcommentchars #1\_iftrue{\_iffalse} % default value of \_testcommentchar +\_def\_printcomments{\_ttskip + {\_catcodetable0 \_reloading \_rm \_everypar={}% + \_noindent \_ignorespaces \_scantextokens\_ea{\_vcomments}\_par}% + \_ttskip +} +\_public \commentchars ; + + \_doc ----------------------------- + The \`\visiblesp` sets spaces as visible characters \char9251. + It redefines the \^`\_dsp`, so it is useful for verbatim modes only. + + The \`\_dsp` is equivalent to {\visiblesp`\ `} primitive. + It is used in all verbatim environments: spaces are active and defined as + `\_dsp` here. + \_cod ----------------------------- + +\_def \_visiblesp{\_ifx\_initunifonts\_relax \_def\_dsp{\_char9251 }% + \_else \_def\_dsp{\_char32 }\_fi} +\_let\_dsp=\ % primitive "direct space" + +\_public \visiblesp ; + +\_endcode + +\_endinput + +History: +2020-01-22 ... \activettchar changed to \verbchar +2020-12-30 ... \secc followed by \begtt must be unbreakable +2020-11-13 ... \commentchars implemented +2020-04-22 ... \ttshift introduced +2020-04-06 ... \visiblesp added +2020-04-04 ... ^^I activated as \t for multiline verbatim + \verbinput <cmds> (...) <filename>, <cmds> added. diff --git a/Master/texmf-dist/tex/optex/demo/op-biblist.bib b/Master/texmf-dist/tex/optex/demo/op-biblist.bib new file mode 100644 index 00000000000..691a02ea0ea --- /dev/null +++ b/Master/texmf-dist/tex/optex/demo/op-biblist.bib @@ -0,0 +1,298 @@ +This is an example of .bib file using by OpTeX. +Petr Olsak 2014 +---------------------------------------------------------- +See the section 1.5.3 of OpTeX documentation for more information. + +@BOOK{white, + author = "David J. Whitehouse", + title = "Handbook of surface and nanometrology", + edition = "2nd", + address = "Boca Raton", + publisher = "CRC Press", + year = 2011, + isbn = "978-1-4200-8201-2", + lang = "en", +} +@BOOK{lech, + author = "Richard Lech", + title = "Fundamental principles of engineering nanometrology", + howpublished = "online", + address = "Oxford", + publisher = "Elsevier", + year = 2009, + isbn = "978-0-08-096454-6", + citedate = "2011/08/29", + url = "http://www.sciencedirect.com/science/book/9780080964546", + option = "autrim:1", +} +@BOOK{Cmej, + author = "Světla Čmejrková and František Daneš and Jindra Světlá", + title = "Jak napsat odborný text", + address = "Praha", + publisher = "Leda", + year = 1999, + isbn = "80-85927-69-1", + key = "Czzmejrkova", +} +@BOOK{ tbn, + bibmark = "Ol00", + author = "Petr Olšák", + title = "\TeX{}book naruby", + edition = "2.", + address = "Brno", + publisher = "Konvoj", + year = 2001, + isbn = "80-7302-007-6", + url = "http://math.feld.cvut.cz/olsak/tbn.html", + option = "urlalso", +} +@BOOK{ tst, + author = "Petr Olšák", + title = "Typografický systém \TeX{}", + edition = "2.", + address = "Brno", + publisher = "Konvoj", + year = 2000, + url = "http://math.feld.cvut.cz/olsak/tst.html", + isbn = "80-85615-91-6", +} +@BOOK{ tpp, + author = "Petr Olšák", + title = "\TeX{} pro pragmatiky", + year = "2013", + address = "Brno", + publisher = "CsTUG", + isbn = "978-80-901950-1-1", + option = "titlepost:{\TeX{} -- CSplain -- OPmac}", + howpublished = "online", + url = "http://math.feld.cvut.cz/olsak/tpp.html", +} +@BOOK{texbook, + author = "Donald Ervin Knuth", + title = "The \TeX{}book", + address = "Boston", + publisher = "Addison-Wesley", + year = 1984, + isbn = "02-011-3448-9", +} +@BOOK{ rowling, + author = "Robert Calbraith", + option = "auprint:{\AU\space [pseudonym of J. K. Rowling]}", + title = "The Cuckoo's Calling", + address = "New York", + publisher = "Mulholland Books", + isbn = "0-316-20684-6", + year = 2013, +} +@BOOK{ earle, + author = "Richard Earle", + title = "The art of cause marketing: + how to use advertising to change personal behavior and public policy", + ednote = "Cover and interior design by Monica \upper{Baziuk}", + address = "New York", + publisher = "McGraw-Hill", + year = 2000, + isbn = "0-07-138702-1", + option = "yearprint:{\copyright2000}", +} +@BOOK{ novaci, + author = "Jan Novák and Helena Nováková", + title = "Alergenní rostliny", + address = "Praha", + publisher = "Knižní klub", + year = 2010, + isbn = "80-242-2591-3", +} +@BOOK{ adobe, + author = "Adobe\ creative\ team", + title = "Adobe Flash CS4 Professional: Oficiální výukový kurz", + ednote = "Přeložil Lukáš \upper{Krejčí}", + address = "Brno", + publisher = "Computer Press", + year = 2009, + isbn = "80-251-2334-8", +} +@BOOK{ nierhaus, + author = "Grehard Nierhaus", + title = "Algorithmic Composition: Paradigms of Automated Music Generation", + address = "Wien", + publisher = "Springer", + year = 2009, + isbn = "3-211-77539-6", + url = "http://www.springerlink.com/content/g7h129", + option = "yearprint:{\copyright2009} urlalso", +} +@BOOK{ taschen, + author = "Laszlo Taschen", + title = "Modern architekture A-Z", + ednote = "vol. 1, A-L", + address = "Köln", + publisher = "Tashen", + year = 2010, + isbn = "383-6521-321", +} +@ARTICLE{ opmactug, + author = "Petr Olšák", + title = "OPmac: Macros for Plain \TeX", + journal = "TUGboat", + publisher = "\TeX{} Users Group", + year = 2013, + volume = 34, + number = 1, + pages = "88--96", + issn = "0896-3207", + url = "http://petr.olsak.net/ftp/olsak/bulletin/tb106olsak-csplain.pdf", + option = "urlalso", + lang = "en", +} +@ARTICLE{ optextug, + author = "Petr Olšák", + title = "\OpTeX/ -- A new generation of Plain \TeX/", + journal = "TUGboat", + publisher = "\TeX{} Users Group", + year = 2020, + volume = 41, + number = 3, + pages = "348--354", + issn = "0896-3207", + url = "http://petr.olsak.net/ftp/olsak/bulletin/tb128olsak-optex.pdf", + option = "urlalso", + lang = "en", +} +@THESIS{ mirekB, + author = "Miroslav Olšák", + title = "Kvadratické rovnice na slovech", + school = "Univerzita Karlova v~Praze, fakulta Matematicko-fyzikální", + address = "Praha", + year = 2013, + url = "http://www.olsak.net/mirek/bakalarka/", + type = "Bakalářská práce", + option = "urlalso", +} +@THESIS{ mirekM, + author = "Miroslav Olšák", + title = "Součiny Fréchetovských prostorů", + school = "Univerzita Karlova v~Praze, fakulta Matematicko-fyzikální", + address = "Praha", + year = 2015, + url = "http://www.olsak.net/mirek/diplomka/", + type = "Diplomová práce", + option = "urlalso", +} +@THESIS{ mirekD, + author = "Miroslav Olšák", + title = "Generalizing CSP-related results to infinite algebras", + school = "Univerzita Karlova v~Praze, fakulta Matematicko-fyzikální", + address = "Praha", + year = 2019, + url = "https://dspace.cuni.cz/handle/20.500.11956/108756", + type = "Disertační práce", + option = "urlalso", + lang = "en", +} +@INBOOK{ zakonVS, + author = "Česko", + title = "Zákon č. 111 ze dne 22. dubna 1998 o vysokých školách a o změně a + doplnění dalších zákonů (zákon o vysokých školách)", + booktitle = "Sbírka zákonů České republiky", + year = 1998, + series = "částka 39, s. 5388--5419", + url = "http://aplikace.mvcr.cz/archiv2008/sbirka/1998/sb039-98.pdf", + issn = "1211-1244", + option = "urlalso unpublished", + key = "Czzesko", +} +@INBOOK{ lonka, + author = "Kristi Lonka", + title = "Helping doctoral students to finish their theses", + booktitle = "Teaching academic writing in European higher education", + editor = "Lennart Björk and Gerd Bräuer and Lotte Reinecker and Peter Stray Jörgensen", + address = "Dordrecht", + publisher = "Kluwer Academic Publ.", + year = 2003, + pages = "113--131", + isbn = "1-4020-1208-X", + option = "edprint:{\ED,~eds.}", +} +@INBOOK{ demay, + author = "Y. Demay", + title = "Computation of 2D viscoelastic flows for a differential constitutive equation", + editor = "J-M. Piau and J-F. Agassant", + booktitle = "Rheology for Polymer Melt Processing", + howpublished = "online", + publisher = "Elsevier", + year = 2011, + numbering = "s.~237--255", + isbn = "0444822369", + citedate = "2011/08/29", + url = "htpp://www.sciencedirect.com/science/article/pii/S0169310796800098", + option = "nowarn", +} +@INPROCEEDINGS{ distler, + author = "Tobias Distler and Rüdiger Kapitza", + title = "Increasing performance in Byzantine fault-tolerant systems on-demand replica consistency", + booktitle = "Proceedings of the Eurosys' 2011 conference. April 10 -- April 13, 2011, Salzburg, Austria", + address = "New York", + publisher = "Association of computer machinery", + year = 2011, + numbering = "pp.~91--105", + isbn = "1-4503-0634-8", +} +@INPROCEEDINGS{ talich, + author = "Milan Talich and Filip Antoš", + title = "Metody a postupy doigitalizace a online zpřístupnění starých kartografických děl", + howpublished = "online", + booktitle = "INFORUM 2011: 17. ročník konference o profesionálních informačních zdrojích, + 24.--26. května 2011, Vysoká škola ekonomická v Praze", + option = "unpublished", + url = "http://www.inforum.cz/pdf/2011/talich-milan.pdf", + citedate = "2011/08/29", + year = 2011, + option = "nowarn", +} +@ARTICLE{ mansouri, + author = "Majdi Mansouri and Quachani Ilham and Hicham Snoussi and Richard Cédric", + title = "Adaptive quantized target tracking in wireless sensors networks", + journal = "Wireles Networks", + number = 7, + volume = 17, + pages = "1625--1639", + lang = "en", + option = "nowarn", +} +@ARTICLE{ calafiore, + author = "Giuseppe C. Calafiore and Fabrizio Dabbene and Roberto Tempo", + title = "Research~ on probabilistic methods for control system design", + journal = "Automatica", + howpublished = "online", + Publisher = "Elsevier", + month = "July", + year = 2011, + volume = 47, + number = 7, + pages = "1279--1293", + issn = "0005-1090", + citedate = "2011/07/17", + doi = "10.1016/j.automatica.2011.02.029", + lang = "en", +} +@MISC{ bowles, + title = "What is fluid technology?", + ednote = "Bowles Fluidics Corp.", + citedate = "2011/10/10", + url = "http://www.bowlesfluidics.com/capabilites/technology/", + key = "zzzz" +} +@MISC{ biernatova, + author = "Olga Biernátová and Jan Skůpa", + title = "Bibliografické okazy a citace dokumentů: dle ČSN ISO 690 (01~0197) platné od 1. dubna 2011", + ednote = "Brno, 2011. Vytvořeno ve spolupráci s portálem citace.com", + url = "http://www.citace.com/dokumenty.php", +} +@MISC{ trtikova, + author = "Ilona Trtíková and Ludmila Tichá", + title = "Jak citovat", + ednote = "Ústřední knihovna ČVUT, 2011, 2012, 2013", + citedate = "2014/04/22", + url = "http://knihovna.cvut.cz/studium/jak-psat-vskp/doporuceni/jak-citovat/", +} diff --git a/Master/texmf-dist/tex/optex/demo/op-demo.tex b/Master/texmf-dist/tex/optex/demo/op-demo.tex new file mode 100644 index 00000000000..e17b2f0b2f7 --- /dev/null +++ b/Master/texmf-dist/tex/optex/demo/op-demo.tex @@ -0,0 +1,127 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\fontfam[LMfonts] % Default font family: Latin Modern + +\margins/1 a5 (1,1,1,1.4)cm % A5 paper + 1cm margins +\typosize[9/10.5] % 9pt font / 10.5pt baselineskip +\parindent=10pt % typesetting parameters +\hyperlinks \Blue\Blue % active hyperlinks +\verbchar` % in-text verbatim by `...` +\everyintt={\Red} % in-text verbatim Red +\enquotes % use \"text" for English quotation + +\tit Demonstration + +\nonum\notoc\sec Contents + +\maketoc % Table of Contents is auto-generated here + +\sec Lists + +The lists have to be surrounded by `\begitems` +and `\enditems` sequences. + +\begitems +* First item. +* Second item. + \begitems \style i + * Nested item list, + * numbered by roman numerals. + \enditems +* Last item. +\enditems + +\secc Title of\nl Subsection + +The subsection text\dots + +\sec References + +There is a numbered equation. +The number is auto-generated by `\eqmark` sequence. +$$\label[my-eq] + a^2 + b^2 = c^2 \eqmark +$$ +We can refer to Equation~\ref[my-eq] +on page~\pgref[my-eq]. +We can refer to Table~\ref[my-tab] in +Section~\ref[tab-sec] too. And Figure~\ref[my-pic] +is on page~\pgref[my-pic]. + +\sec Hyperlinks + +You can refer to \url{http://petr.olsak.net} using `\url`. +Or use `\ulink` if the raw URL needs to be hidden: +\ulink[http://petr.olsak.net/optex]{\OpTeX/ page}. +The parameter text is colorized and it becomes +an active link if the `\hyperlinks` sequence +is used at the beginning of the document. +Internal links are activated too. + +\sec[tab-sec] Tables + +The `\table` sequence can be used +instead of \"low level" `\halign`. +The following table is framed by the `\frame` sequence +to get a double frame. + +\bigskip +\caption/t [my-tab] Testing table. +\cskip +\centerline{% + \frame{\table{|r|c|l|}{\crl + \bf Title A & \bf Title B & \bf Title C \crll + first & second & third \cr + next & text & last \crl }}} + +\sec Images + +The images (PDF, JPG, PNG, TIFF) can be inserted +by `\inspic` sequence. The `\caption` +can be added if you need to refer to a figure. + +\label[my-pic] +\centerline {\picwidth=2.7cm \inspic{op-ring.png}} +\cskip +\caption/f The nonempty ideal of a simple ring -- + the ring itself. + +\sec Verbatim + +In-text verbatim is surrounded by the character declared +by `\verbchar` sequence. The listing can be surrounded +by `\begtt` and `\endtt` sequences +\begtt +This is verbatim. + All characters are printed $$, \, # etc. +\endtt +or it can be included by `\verbinput` from an external file. + +\verbinput (98-100) op-demo.tex + +\sec Math + +The Math alphabets +`\mit`, `\cal`, `\script`, `\frak`, `\bbchar`, `\bi` +are provided. For example: +$$ + {\bi A} = \pmatrix {\cal C & \script C \cr + \frak M & \bbchar R }. +$$ +Hundreds of AMS symbols are available: +$\sphericalangle, \boxplus, \Cup, \Cap, \ldots$ + +\sec Others + +The `\fontfam` command selects a desired family of fonts. +The `\typosize` or `\typoscale` sequences set the size +and baselineskip of used fonts (including math fonts). +The `\fnote` generates a footnote\fnote{Like this} and +`\mnote` generates a margin note. +The `\margins` sets margins and paper dimensions. +The `\cite` sequence can be used for bibliographic citations. +The `\bib` sequence creates one bibliography record. Or +you can use `\usebib` for direct access to the {\tt.bib} files. +The list of features does not end here\dots + +\bye diff --git a/Master/texmf-dist/tex/optex/demo/op-letter-cs.tex b/Master/texmf-dist/tex/optex/demo/op-letter-cs.tex new file mode 100644 index 00000000000..b6883cb74c6 --- /dev/null +++ b/Master/texmf-dist/tex/optex/demo/op-letter-cs.tex @@ -0,0 +1,41 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\letter % \letter OpTeX style activated +\fontfam[bonum] +\cslang + +\address + Vážený pan + Mgr. Bořek Byrokrat + ředitel Ústavu pro další možnosti + Úřední 789 + 123 45 Praha 1 + +\hfill V Praze dne \today + +\subject Žádost o možnost další možnosti + +Vážený pane řediteli, + +na základě Vašeho dopisu č.j.~123456/78-dat a elektronické výzvy si dovoluji +Vás požádat o prozkoumání mé možnosti další možnosti. +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do +eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim +veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea +commodo consequat. + +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do +eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim +veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea +commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit +esse cillum dolore eu fugiat nulla pariatur. + +S úctou + +\hfill \address + {\it Petr Olšák} + specialista na \TeX/ + Ulice 12345 + Praha 13 + +\bye diff --git a/Master/texmf-dist/tex/optex/demo/op-letter-en.tex b/Master/texmf-dist/tex/optex/demo/op-letter-en.tex new file mode 100644 index 00000000000..0154e48c018 --- /dev/null +++ b/Master/texmf-dist/tex/optex/demo/op-letter-en.tex @@ -0,0 +1,38 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex +\useOpTeX + +\letter % \letter OpTeX style activated +\enlang \enquotes % Language and quote style +\fontfam[bonum] + +\hfill\address + Alice Author + 123 Sender Street + City 4567 + +\bigskip + +\address + Mr. Bobby Bureaucrat + 456 Magnolia Street + City 8901 + +\hfill\today + +\subject Inquiry regarding \"lorem ipsum" + +Dear Mr. Bureaucrat, + +\lorem[1-2] % 2 paragraphs of blindtext + +Thank you for your time. + +With best regards, + +\bigskip % leave some space for signature +\bigskip + +Alice Author + +\bye + diff --git a/Master/texmf-dist/tex/optex/demo/op-ring.png b/Master/texmf-dist/tex/optex/demo/op-ring.png new file mode 100644 index 00000000000..de7811df83e Binary files /dev/null and b/Master/texmf-dist/tex/optex/demo/op-ring.png differ diff --git a/Master/texmf-dist/tex/optex/demo/op-slides-bg.png b/Master/texmf-dist/tex/optex/demo/op-slides-bg.png new file mode 100644 index 00000000000..4ac1ad8c38c Binary files /dev/null and b/Master/texmf-dist/tex/optex/demo/op-slides-bg.png differ diff --git a/Master/texmf-dist/tex/optex/demo/op-slides.tex b/Master/texmf-dist/tex/optex/demo/op-slides.tex new file mode 100644 index 00000000000..50bcdaffa60 --- /dev/null +++ b/Master/texmf-dist/tex/optex/demo/op-slides.tex @@ -0,0 +1,322 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\slides % OpTeX slides style activated + +\catcode`<=13 % special printing of <text> +\def<#1>{\hbox{$\langle$\it#1\/$\rangle$}} +\everyintt={\catcode`\<=13} + +\hyperlinks\Blue\Blue % hyperlinks are used in the title page +\backgroundpic{op-slides-bg.png} % background picture + +\verbchar` % inline verbatim +\enquotes % English quotes \"..." + +\slideshow %------------------------------------------------------------ + + +\tit \OpTeX/ slides + +\subtit Petr Olšák\nl petr@olsak.net + +\subtit\rm \url{http://petr.olsak.net/optex} + +\pg; %------------------------------------------------------------------ + +\sec Basics + +* The the simple document looks like: + +\begtt +\slides % style initialized +%\wideformat % 16:9 +\slideshow % partially uncovering ideas + +\sec First slide +text +\pg; + +\sec Second slide +text +\pg. +\endtt + +* If `\slideshow` is missing or commented out then + \"partially uncovering ideas" (see later) are deactivated. It is useful + for printing. +* The `\slideshow` must be the last command in the declaration part of the + document. +* By default, the slides have A5 landscape format. + You can declare `\wideformat`. Then the height is the same + but width is 263\,mm, i.\,e.~the ratio width:height is 16:9. + +\pg; %------------------------------------------------------------------ + +\sec Title slide + +* Title of the document (used at the first slide) is created + by `\tit Title` (terminated by end of line). +* The `\subtit Author name etc.`\ (terminated by end of line) + can be used after `\tit` at the first slide. +* You can use `\nl` for a new line in paragraphs or titles. + +\sec Default design + +* The paragraph texts are ragged right. +* Titles, subtitles, and section titles are centered. +* The `\sec` and `\secc` are printed without numbers. +* No paragraph indentation, a little vertical space between paragraphs. +* The Heros font family (aka Helvetica) is initialized as default.\nl + Sans-serif FiraMath font for math typesetting is used.\nl + If `\fontfam[<famname>]` precedes `\slides` then it rewrites default. +* The items in lists are started by a blue square (`\type X` and `\type x` ). + +\pg; %------------------------------------------------------------------ + +\sec One slide (one page) + +* Top-level item list is activated by default. The asterisk `*` opens + new item at the top-level list. +* Nested items lists (second and more level) should be created in + the `\begitems`\dots`\enditems` environments. +* Each slide (page) must be terminated by `\pg;` command. +* The last slide must be terminated by `\pg.` command or by `\bye`. + +\begtt +\sec My ideas + +* First idea +* Second idea + \begitems + * First sub-idea + * Second sub-idea + \enditems +* Final idea +\endtt + +* Note: each page is processed in a group, so: put your own definitions + (if~exist) before `\slideshow` or use `\global` assignment. + +\pg; %------------------------------------------------------------------ + +\sec Partially uncovering ideas + +* The control sequence `\pg` must be followed by:\pg+ +\begitems +* the character `;` -- normal next page,\pg+ +* the character `.` -- the end of the document,\pg+ +* the character `+` -- next page keeps the same text + and a next text is added (usable for partially uncovering of ideas).\pg+ +\enditems + +* Summary: +\begtt +\pg; ... next page +\pg. ... the end of the document +\pg+ ... uncover next text on the same page +\endtt +\pg+ + +* When `\slideshow` is not declared then `\pg+` is deactivated.\pg+ +* The `\pg+` creates a new \"virtual page", so the current paragraph is + terminated. + +\pg; %------------------------------------------------------------------ + +\sec Example with partially uncovering ideas + +The previous page was created by: + +\begtt +\sec Partially uncovering ideas + +* The control sequence `\pg` must be followed by:\pg+ + +\begitems +* the character `.` -- normal next page,\pg+ +* the character `;` -- the end of the document,\pg+ +* the character `+` -- next ... \pg+ +\enditems + +* Summary +... +* When `\slideshow` is not declared + then `\pg+` is deactivated.\pg+ +* The `\pg+` creates a new \"virtual page", + so the current paragraph is terminated. +\pg; +\endtt + +\pg; %------------------------------------------------------------------ + +\sec Notes to `\slideshow` + +* When `\slideshow` is active then you cannot reference sections by + hyperlinked `\ref`. Only `\pgref` works (and goes to the last layer + of the referenced page). +* If the text overfull the page (slide) then it follows to the next page without + saying explicitly `\pg;`. But `\slideshow` cannot work in this case.\pg+ +* If `\slideshow` then each part of page between two `\pg`'s or between + `\slideshow` and the first `\pg` is processed in a local group. +* If not `\slideshow` then the document is not separated to groups. + This can lead to different results. So, you can put `\slideopen` command + instead of `\slideshow`. Then local groups are opened exactly as when + `\slideshow` is used but `\slideshow` is not activated. Example: + +\begtt +\slides +\def\foo...{...} % global definitions. +%\slideshow % printing version, no slide show. +\slideopen % opens group for first page. +... first page +\pg; % closes group and opens group for second page. +... second page +\pg. % closes group of the last page. +\endtt + +\pg; %------------------------------------------------------------------ + +\sec More about design + +* You can use `\backgroundpic{<image-file>}` for putting an image to the background. +* You can re-declare `\footline` or re-define internal macros for design as + you wish. +* The TeXGyre Heros font is used as default text font, the FiraMath is used + for math. +* If you want to use another text font fmaily, use `\fontfam` + {\em before} `\slides` command. +* If you want to use different math font, use + `\loadmath{[font]}` before `\fontfam` (if used) and before `\slides`. For example: + +\begtt +\loadmath{[Asana-Math]} % Math font: Asana +\fontfam[Termes] % Text font: Termes +\slides +... +\endtt + +* You can put the images or text wherever using `\putimege` or `\puttext` + macros... + +\pg; %------------------------------------------------------------------ + +\sec Putting images and texts wherever + +* `\puttext <right> <up> {<text>}` puts a <text> to the desired place: + It moves the current point <right> and <up>, puts the <text> and returns + back, so the typesetting continues from previous position. The parameters + <right> and <up> are dimensions. For example + +\begtt +\puttext 0mm 50mm {\Red HELLO} +\endtt + + \puttext 0mm 50mm {\Red HELLO} + prints red HELLO, as shown here.\pg+ + +* `\putpic <right> <up> <width> <height> {<image-file>}` + puts the image with desired <width> and <height> at the position like + `\puttext` puts the text. + + \putpic .8\hsize 20mm 30mm \nospec {op-ring.png} +* The ring above is the result of + +\begtt +\putpic .8\hsize 20mm 30mm \nospec {op-ring.png} +\endtt + % + used at beginning of this paragraph.\pg+ +* Use `\nospec` for <width> or <height> of the image if you don't want to specify both + dimensions (because you don't want to change the image aspect ratio). + +\pg; %------------------------------------------------------------------ + +\sec Limits of the \code{\\pg+} sequence + +* The \code{\\pg+} sequence (partially uncovering ideas) cannot be used inside + a~group. +* The exception is the nested environment `\begitems...\enditems`. +* The `\pg+` always finalizes the current paragraph. + It is impossible to hide only a part of the horizontal mode.\pg+ + +\sec The \code{\\layers}\,...\code{\\endlayers} environment + +If you really need something unsupported by `\pg+` then you can use + +\begtt \catcode`\<=13 +\layers <number> +<layered text> +\endlayers +\endtt + +* The <layered text> should include conditions like + `\ifnum\layernum...` or `\ifcase\layernum`. + It is printed <number> times to more slide pages (layers) with the same + surrounding text. See next page... + +\pg; %------------------------------------------------------------------ + +\sec Example of \code{\\layers} environment + +The `\slides` style provides a shortcut `\use` and a macro `\pshow` (means +partially show): + +\begtt +\def\use#1#2{\ifnum\layernum#1\relax#2\fi} +\def\pshow#1{\use{=#1}\Red \use{<#1}\Transparent \ignorespaces} +\endtt +`\use{=3}{do something}` does something only if `\layernum=3`. + +The `{\pshow<num> <text>}` prints <text> in Red when current layer is equal +to <num> or it prints <text> normally when current layers is greater than <num>. +The transparent (invisible) text is used in other cases. + +The following dance: +\layers 3 +{\pshow2 Second text.} {\pshow3 Third text.} {\pshow1 First text.} +\endlayers +\pg+ + +was generated by + +\begtt +\layers 3 +{\pshow2 Second text.} {\pshow3 Third text.} {\pshow1 First text.} +\endlayers +\endtt + +\pg+ +* The <layered text> is treated as a macro parameter. So, you cannot use verbatim + nor `\sec` titles here. Maximal one `\layers` environment can be per one + page (terminated by `\pg+` or `\pg;` or `\pg.` + +\pg; %------------------------------------------------------------------ + +\sec Comparison \OpTeX/ slides with Beamer\fnote{\url{http://www.ctan.org/pkg/beamer}} + +The \LaTeX{} package {\bf\Blue Beamer} gives much more features and many themes +are prepared for Beamer, {\bf\Red but} +\pg+ +* the user of Beamer is forced to {\em program} his/her document using + dozens of \code{\\begin{foo}} and \code{\\end{foo}} and many another + programming constructions,\pg+ +* plain \TeX{} gives you a possibility to simply + {\em write} your document with minimal markup. The result is more compact. + You can concentrate on the contents of your document, not on the + programming syntax.\pg+ +* User needs to read 250 pages of doc for understanding Beamer,\pg+ +* on the other hand, you need to read only eleven + slides\fnote{this twelfth slide isn't counted} + and you are ready to use {\bf\Blue\OpTeX/ slides}. + +\pg; %------------------------------------------------------------------ + +\null +\vskip2cm +\centerline{\typosize[35/40]\bf Thanks for your attention}\pg+ + +\vskip2cm +\centerline{\Blue\typosize[60/70]\bf Questions?} + +\pg. %----------------------------- THE END ---------------------------- + diff --git a/Master/texmf-dist/tex/optex/pkg/emoji.opm b/Master/texmf-dist/tex/optex/pkg/emoji.opm new file mode 100644 index 00000000000..e14579135f1 --- /dev/null +++ b/Master/texmf-dist/tex/optex/pkg/emoji.opm @@ -0,0 +1,55 @@ +% This is the macro package used by OpTeX, see http://petr.olsak.net/optex + +% emoji.opm, Petr Olšák <petr@olsak.net>, 2021 + +% Emoji allows us to use colored emoticons as characters from the font. +% The \emoji{<name>} command is available, see texdoc emoji (from +% corresponding LaTeX package). + +\_namespace{emoji} + +\_codedecl \.emoji {Emotikons from the TwemojiMozilla.ttf font} + + \_doc ----------------------------- + Font TwemojiMozilla.ttf is loaded. The font feature +colr is needed. + The `\emojifont` is implemented using `\_resizethefont` as size-dependent. + \_cod ----------------------------- + +\_initunifonts +\_font\.tenemoji=[TwemojiMozilla]:+colr +\_def\.emojifont{\.tenemoji\_resizethefont} +\_def\.emoji#1{{\.emojifont\_trycs{_emoji_:#1}{\_opwarning{uknown emoji "#1"}}}} + + \_doc ----------------------------- + The mapping from names or aliases to the codes are declared in the + `emoji-table.def` file from the \LaTeX/ package emoji. + \_cod ----------------------------- + +\_bgroup + \_def\__emoji_def #1 #2#3#4#5#6{% #1=n, #2=data, #3=name, #4=aliases, #5=descr, #6=versi + \_sxdef{_emoji_:#3}{#2}% + \_ifx^#4^\_else \_foreach #4, \_do ##1, {\_global\_slet{_emoji_:##1}{_emoji_:#3}}\_fi + } + \_def\ProvidesExplFile#1#2#3#4{} + \_def\__emoji_group#1 #2{} + \_def\__emoji_subgroup#1 #2{} + \_catcode`\#=12 + \_input {emoji-table.def}% defining emoji names +\_egroup + +\_nspublic \emoji \emojifont ; + +\_endnamespace + +\_endcode + +\begtt % ----------------------- Testing file --------------------------- +\load[emoji] +We can use \emoji{grinning} or directly: {\emojifont 😀} too. +\bye +\endtt % ---------------------------------------------------------------- + +More than 3000 emoticons are available. + +If you want black-and-white pictograms, see another font: +\url{http://petr.olsak.net/optex/optex-tricks.html\#fawesome} diff --git a/Master/texmf-dist/tex/optex/pkg/plain-at.opm b/Master/texmf-dist/tex/optex/pkg/plain-at.opm new file mode 100644 index 00000000000..3277d7b24ea --- /dev/null +++ b/Master/texmf-dist/tex/optex/pkg/plain-at.opm @@ -0,0 +1,43 @@ +% This is macro package used by OpTeX, see http://petr.olsak.net/optex + +\_codedecl \_undefined {Obscure @ names from plain TeX <2020-05-22>} + +\_setctable \_optexcatcodes +% PlainTeX obscure names: +\_catcode`\@=11 +\_let\z@=\_zo +\_let\z@skip=\_zoskip +\_newdimen\p@ \p@=1pt +\_chardef\@ne=1 +\_chardef\tw@=2 +\_chardef\thr@@=3 +\_chardef\sixt@@n=16 +\_mathchardef\@m=1000 +\_mathchardef\@M=10000 +\_mathchardef\@MM=20000 +\_countdef\m@ne=22 \m@ne=-1 +\_chardef\@cclv=255 +\_mathchardef\@cclvi=256 +\_skipdef\skip@=0 +\_dimendef\dimen@=0 +\_dimendef\dimen@i=1 +\_dimendef\dimen@ii=2 +\_countdef\count@=255 +\_def\m@th{\_mathsurround\z@} +\_def\o@lign{\_lineskiplimit\z@ \_oalign} +\_def\n@space{\_nulldelimiterspace\z@ \m@th} +\_newdimen\p@renwd \p@renwd=8.75pt +\_def\alloc@#1#2#3#4#5{\_allocator#5{\_csstring#2}#3} +\_restorectable + +\_endcode + +We absolutely don't recommend to use such obscure names in your macros. But +sometimes you need to read an old plain TeX document or a macro file. You +can load this file in such cases. For example: + +\begtt + \load [plain-at, shapepar.sty] +\endtt + +\_endinput diff --git a/Master/texmf-dist/tex/optex/pkg/qrcode.opm b/Master/texmf-dist/tex/optex/pkg/qrcode.opm new file mode 100644 index 00000000000..5df0ad2c074 --- /dev/null +++ b/Master/texmf-dist/tex/optex/pkg/qrcode.opm @@ -0,0 +1,2707 @@ +% This is macro package used by OpTeX, see http://petr.olsak.net/optex +% qrcode.opm, Petr Olšák <petr@olsak.net>, 2020 + +% See end of the file for more information + +\_codedecl \qrcode {Macro for QR code printing <2020-05-04>} + +\_namespace{qr} + +\_newcount\.i +\_newcount\.j +\_newcount\.a +\_newcount\.b +\_newcount\.c + +\_def\.relax{\_relax}% + +\_def\.utfstring#1{\_directlua{ + local text="\_luaescapestring{#1}" + tex.print(string.format('\_pcent.2x',string.len(text))) + for i=1,string.len(text) do + tex.print(string.format('\_pcent.2x',string.byte(text,i))) + end +}} +\_def\.utfstringlen#1{\_directlua{ + tex.print(string.len("\_luaescapestring{#1}")) +}} + +\_def\.g_preface_macro#1#2{% + % #1 = macro to be appended to + % #2 = code to add + \_edef\.codeA{#2}% + \_ea\_ea\_ea\_gdef\_ea\_ea\_ea#1\_ea\_ea\_ea{\_ea\.codeA#1}% +} + +\_def\.getstringlength#1{% + \_xdef\.stringlength{\.utfstringlen{#1}}% +}% + +\_def\.for#1=#2to#3by#4#{\.forA{#1}{#2}{#3}{#4}} +\_long\_def\.forA#1#2#3#4#5{\_begingroup + {\_escapechar=`\\ % allocation of #1 as counter: + \_ea \_ifx\_csname for:\_string#1\_endcsname \_relax + \_csname newcount\_ea\_endcsname \_csname for:\_string#1\_endcsname\_fi + \_ea}\_ea\_let\_ea#1\_csname for:\_string#1\_endcsname + #1=#2% + \_def\.forB{#5\_advance#1by#4\_relax \_ea\.forC}% + \_ifnum#4>0 \_def\.forC{\_ifnum#1>#3\_relax\_else\.forB\_fi}% + \_else \_def\.forC{\_ifnum#1<#3\_relax\_else\.forB\_fi}% + \_fi + \_ifnum#4=0 \let\.forC=\_relax \_fi + \.forC \_endgroup +} + +\_def\.padatfront#1#2{% + % #1 = macro containing text to pad + % #2 = desired number of characters + % Pads a number with initial zeros. + \.getstringlength{#1}% + \.a=\.stringlength\_relax + \_advance\.a by 1\_relax + \.for \.iz = \.a to #2 by 1 + {\.g_preface_macro{#1}{0}}% +} + +\.a=-1\_relax +\_def\.savehexsymbols(#1#2){% + \_advance\.a by 1\_relax% + \_ea\_def\_csname _qr_hexchar:\_the\.a\_endcsname{#1}% + \_ea\_edef\_csname _qr_hextodecimal:#1\_endcsname{\_the\.a}% + \_ifnum\.a=15\_relax + %Done. + \_let\.next=\_relax + \_else + \_def\.next{\.savehexsymbols(#2)}% + \_fi + \.next +}% +\.savehexsymbols(0123456789abcdef\_relax\_relax)% + +\_def\.decimaltobase#1#2#3{% + % #1 = macro to store result + % #2 = decimal representation of a positive integer + % #3 = new base + \_bgroup + \_edef\.newbase{#3}% + \_gdef\.base_result{}% + \.a=#2\_relax% + \.decimaltobase_recursive% + \_xdef#1{\.base_result}% + \_egroup +} +\_def\.decimaltobase_recursive{% + \.b=\.a + \_divide\.b by \.newbase\_relax + \_multiply\.b by -\.newbase\_relax + \_advance\.b by \.a\_relax + \_divide\.a by \.newbase\_relax + \_ifnum\.b<10\_relax + \_edef\.newdigit{\_the\.b}% + \_else + \_edef\.newdigit{\_csname _qr_hexchar:\_the\.b\_endcsname}% + \_fi + \_edef\.argument{{\_noexpand\.base_result}{\.newdigit}}% + \_ea\.g_preface_macro\.argument + \_ifnum\.a=0\_relax + \_relax + \_else + \_ea\.decimaltobase_recursive + \_fi +} +\_long\_def\.xaddto#1#2{\_xdef#1{#1#2}} + +\_def\.decimaltohex[#1]#2#3{% + % #1 (opt.) = number of hex digits to create + % #2 = macro to store result + % #3 = decimal digits to convert + \.decimaltobase{#2}{#3}{16}% + \.padatfront{#2}{#1}% +} +\_def\.decimaltobinary[#1]#2#3{% + % #1 (opt.) = number of bits to create + % #2 = macro to store result + % #3 = decimal digits to convert + \.decimaltobase{#2}{#3}{2}% + \.padatfront{#2}{#1}% +} + +\.for \.iz = 0 to 15 by 1% + {% + \.decimaltohex[1]{\.hexchar}{\_the\.iz}% + \.decimaltobinary[4]{\.bits}{\_the\.iz}% + \_ea\_xdef\_csname _qr_b2h:\.bits\_endcsname{\.hexchar}% + \_ea\_xdef\_csname _qr_h2b:\.hexchar\_endcsname{\.bits}% + }% + +\_def\.binarytohex[#1]#2#3{% + % #1 (optional) = # digits desired + % #2 = macro to save to + % #3 = binary string (must be multiple of 4 bits) + \_def\.testi{#1}% + \_ifx\.testi\.relax% + %No argument specified + \_def\.desireddigits{0}% + \_else + \_def\.desireddigits{#1}% + \_fi + \_gdef\.base_result{}% + \_edef\.argument{(#3\_relax\_relax\_relax\_relax\_relax)}% + \_ea\.binarytohex_int\.argument% + \.padatfront{\.base_result}{\.desireddigits}% + \_xdef#2{\.base_result}% +} +\_def\.binarytohex_int(#1#2#3#4#5){% + % #1#2#3#4 = 4 bits + % #5 = remainder, including \_relax\_relax\_relax\_relax\_relax terminator + \_def\.testi{#1}% + \_ifx\.testi\.relax% + %Done. + \_def\.next{\_relax}% + \_else% + \_xdef\.base_result{\.base_result\_csname _qr_b2h:#1#2#3#4\_endcsname}% + \_def\.next{\.binarytohex_int(#5)}% + \_fi% + \.next% +} + +\_def\.hextobinary[#1]#2#3{% + % #1 (optional) = # bits desired + % #2 = macro to save to + % #3 = hexadecimal string + \_bgroup + \_def\.testi{#1}% + \_ifx\.testi\.relax + %No argument specified + \_def\.desireddigits{0}% + \_else + \_def\.desireddigits{#1}% + \_fi + \_gdef\.base_result{}% + \_edef\.argument{(#3\_relax\_relax)}% + \_ea\.hextobinary_int\.argument% + \.padatfront{\.base_result}{\.desireddigits}% + \_xdef#2{\.base_result}% + \_egroup +} +\_def\.hextobinary_int(#1#2){% + % #1 = hexadecimal character + % #2 = remainder, including \_relax\_relax terminator + \_def\.testii{#1}% + \_ifx\.testii\.relax + %Done. + \_def\.next{\_relax}% + \_else + \_xdef\.base_result{\.base_result\_csname _qr_h2b:#1\_endcsname}% + \_def\.next{\.hextobinary_int(#2)}% + \_fi + \.next +} + +\_def\.hextodecimal#1#2{% + \_edef\.argument{#2}% + \_ea\.a\_ea=\_ea\_number\_ea"\.argument\_relax + \_edef#1{\_the\.a}% +} + +\_def\.hextodecimal#1#2{% + % #1 = macro to store result + % #2 = hexadecimal representation of a positive integer + \_bgroup + \.a=0\_relax + \_edef\.argument{(#2\_relax)}% + \_ea\.hextodecimal_recursive\.argument% + \_xdef#1{\_the\.a}% + \_egroup +} +\_def\.hextodecimal_recursive(#1#2){% + % #1 = first hex char + % #2 = remainder + \_advance \.a by \_csname _qr_hextodecimal:#1\_endcsname\_relax% + \_edef\.testii{#2}% + \_ifx\.testii\.relax% + %Done. + \_let\.next=\_relax% + \_else + %There's at least one more digit. + \_multiply\.a by 16\_relax + \_edef\.next{\_noexpand\.hextodecimal_recursive(#2)}% + \_fi% + \.next% +} + +\_def\.storetomatrix#1#2#3#4{% + % #1 = matrix name + % #2 = row number + % #3 = column number + % #4 = value of matrix entry + \_ea\_gdef\_csname #1@#2@#3\_endcsname{#4}% +}% + +\_def\.estoretomatrix#1#2#3#4{% + % This version performs exactly one expansion on #4. + % #1 = matrix name + % #2 = row number + % #3 = column number + % #4 = value of matrix + \_ea\_gdef\_csname #1@#2@#3\_ea\_endcsname\_ea{#4}% +}% + +\_def\.matrixentry#1#2#3{% + % #1 = matrix name + % #2 = row number + % #3 = column number + \_csname #1@#2@#3\_endcsname +}% + +\_def\.createsquareblankmatrix#1#2{% +% \.creatematrix{#1}% + \_ea\_gdef\_csname #1@numrows\_endcsname{#2}% + \_ea\_gdef\_csname #1@numcols\_endcsname{#2}% + \.for \.iz = 1 to #2 by 1% + {\.for \.jz = 1 to #2 by 1% + {\.storetomatrix{#1}{\_the\.iz}{\_the\.jz}{\.blank}}}% +}% + +\_def\.numberofrowsinmatrix#1{% + \_csname #1@numrows\_endcsname% +}% + +\_def\.numberofcolsinmatrix#1{% + \_csname #1@numcols\_endcsname% +}% + +\_def\.setnumberofrows#1#2{% + \_ea\_xdef\_csname #1@numrows\_endcsname{#2}% +}% + +\_def\.setnumberofcols#1#2{% + \_ea\_xdef\_csname #1@numcols\_endcsname{#2}% +}% + +\_newdimen\.desiredheight +\_newdimen\.modulesize + +\_def\.link#1#2{\_hbox{\_pdfstartlink height\_ht0 depth0pt \.border + user{/Subtype/Link/A <</Type/Action/S/URI/URI(#1)>>}\_relax #2\_pdfendlink}% +} +\_def\.border{% + \_ifcsname _qr_kv:qrborder\_endcsname attr{/C[\.kv{qrborder}] /Border[0 0 .6]}% + \_else attr{/Border[0 0 0]}% + \_fi +} + +\_def\.createliteralmatrix#1#2#3{% + % #1 = matrix name + % #2 = m, the number of rows and columns in the square matrix + % #3 = a string of m^2 tokens to be written into the matrix +% \.creatematrix{#1}% + \_ea\_xdef\_csname #1@numrows\_endcsname{#2}% + \_ea\_xdef\_csname #1@numcols\_endcsname{#2}% + \_gdef\.literalmatrix_tokens{#3}% + \.for \.iz = 1 to #2 by 1% + {\.for \.jz = 1 to #2 by 1% + {\_ea\.createliteralmatrix_int\_ea(\.literalmatrix_tokens)% + \.estoretomatrix{#1}{\_the\.iz}{\_the\.jz}{\.entrytext}% + }% + }% +} +\_def\.createliteralmatrix_int(#1#2){% + \_def\.entrytext{#1}% + \_gdef\.literalmatrix_tokens{#2}% +} + +\.createliteralmatrix{finderpattern}{8}{% + \.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.whitefixed + \.blackfixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.blackfixed\.whitefixed + \.blackfixed\.whitefixed\.blackfixed\.blackfixed\.blackfixed\.whitefixed\.blackfixed\.whitefixed + \.blackfixed\.whitefixed\.blackfixed\.blackfixed\.blackfixed\.whitefixed\.blackfixed\.whitefixed + \.blackfixed\.whitefixed\.blackfixed\.blackfixed\.blackfixed\.whitefixed\.blackfixed\.whitefixed + \.blackfixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.blackfixed\.whitefixed + \.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.whitefixed + \.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed +}% + +\.createliteralmatrix{alignmentpattern}{5}{% + \.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed + \.blackfixed\.whitefixed\.whitefixed\.whitefixed\.blackfixed + \.blackfixed\.whitefixed\.blackfixed\.whitefixed\.blackfixed + \.blackfixed\.whitefixed\.whitefixed\.whitefixed\.blackfixed + \.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed +}% + +\_def\.copymatrixentry#1#2#3#4#5#6{% + % Copy the (#2,#3) entry of matrix #1 + % to the (#5,#6) position of matrix #4. + \_ea\_ea\_ea\_global% + \_ea\_ea\_ea\_let\_ea\_ea\_csname #4@#5@#6\_endcsname + \_csname #1@#2@#3\_endcsname +}% + +\_def\.createduplicatematrix#1#2{% + % #1 = name of copy + % #2 = original matrix to be copied +% \.creatematrix{#1}% + \.for \.iz = 1 to \.numberofrowsinmatrix{#2} by 1% + {\.for \.jz = 1 to \.numberofcolsinmatrix{#2} by 1% + {\.copymatrixentry{#2}{\_the\.iz}{\_the\.jz}{#1}{\_the\.iz}{\_the\.jz}% + }% + }% + \.setnumberofrows{#1}{\.numberofrowsinmatrix{#2}}% + \.setnumberofcols{#1}{\.numberofcolsinmatrix{#2}}% +}% + +\_def\.placefinderpattern_int#1#2#3#4#5{% + % Work on matrix #1. + % Start in position (#2, #3) -- should be a corner + % #4 indicates horizontal direction (1=right, -1=left) + % #5 indicates vertical direction (1=down, -1=up) + % + % In this code, \sourcei and \sourcej are TeX counts working through the finderpattern matrix, + % and i and j are counters indicating positions in the big matrix. + \.setcounter\.i{#2}% + \.for \.sourcei=1 to 8 by 1% + {\.setcounter\.j{#3}% + \.for \.sourcej=1 to 8 by 1% + {\.copymatrixentry{finderpattern}{\_the\.sourcei}{\_the\.sourcej}% + {#1}{\_the\.i}{\_the\.j}% + \.addtocounter\.j{#5}% + }% + \.addtocounter\.i{#4}% + }% +}% + +\_def\.placefinderpatterns#1{% + % #1=matrix name + \.placefinderpattern_int{#1}{1}{1}{1}{1}% + \.placefinderpattern_int{#1}{\.numberofrowsinmatrix{#1}}{1}{-1}{1}% + \.placefinderpattern_int{#1}{1}{\.numberofcolsinmatrix{#1}}{1}{-1}% +}% + +\_def\.placetimingpatterns#1{% + %Set \.endingcol to n-8. + \.a=\.size\_relax% + \_advance\.a by -8\_relax% + \_edef\.endingcol{\_the\.a}% + \.for \.jz = 9 to \.endingcol by 1% + {\_ifodd\.jz\_relax% + \.storetomatrix{#1}{7}{\_the\.jz}{\.blackfixed}% + \.storetomatrix{#1}{\_the\.jz}{7}{\.blackfixed}% + \_else% + \.storetomatrix{#1}{7}{\_the\.jz}{\.whitefixed}% + \.storetomatrix{#1}{\_the\.jz}{7}{\.whitefixed}% + \_fi% + }% +}% + +\_def\.placealignmentpattern_int#1#2#3{% + % Work on matrix #1. + % Write an alignment pattern into the matrix, centered on (#2,#3). + \.a=#2\_relax% + \_advance\.a by -2\_relax% + \.b=#3\_relax% + \_advance\.b by -2\_relax% + \.setcounter\.i{\_the\.a}% + \.for \.iz=1 to 5 by 1% + {\.setcounter\.j{\_the\.b}% + \.for \.jz=1 to 5 by 1% + {\.copymatrixentry{alignmentpattern}{\_the\.iz}{\_the\.jz}% + {#1}{\_the\.i}{\_the\.j}% + \.stepcounter\.j + }% + \.stepcounter\.i + }% +}% + +\_newifi\_ifqr_incorner% +\_def\.placealignmentpatterns#1{% + %There are k^2-3 alignment patterns, + %arranged in a (k x k) grid within the matrix. + %They begin in row 7, column 7, + %except that the ones in the NW, NE, and SW corners + %are omitted because of the finder patterns. + %Recall that + % * \.k stores k, + % * \.alignment_firstskip stores how far between the 1st and 2nd row/col, & + % * \.alignment_generalskip stores how far between each subsequent row/col. + \_ea\_ifnum\.k>0\_relax + %There will be at least one alignment pattern. + %N.B. k cannot equal 1. + \_ea\_ifnum\.k=2\_relax + % 2*2-3 = exactly 1 alignment pattern. + \.a=7\_relax + \_advance\.a by \.alignment_firstskip\_relax + \_xdef\.targetii{\_the\.a}% + \.placealignmentpattern_int{#1}{\.targetii}{\.targetii}% + \_else + % k is at least 3, so the following loops should be safe. + \_xdef\.targetii{7}% + \.for \.ii = 1 to \.k by 1% + {\_ifcase\.ii\_relax% + \_relax% \.ii should never equal 0. + \_or + \_xdef\.targetii{7}% If \.ii = 1, we start in row 7. + \_or + %If \.ii = 2, we add the firstskip. + \.a=\.targetii\_relax% + \_advance\.a by \.alignment_firstskip\_relax% + \_xdef\.targetii{\_the\.a}% + \_else + %If \.ii>2, we add the generalskip. + \.a=\.targetii\_relax% + \_advance\.a by \.alignment_generalskip\_relax% + \_xdef\.targetii{\_the\.a}% + \_fi + \.for \.jj = 1 to \.k by 1% + {\_ifcase\.jj\_relax% + \_relax% \.jj should never equal 0. + \_or + \_xdef\.targetjj{7}% If \.jj=1, we start in row 7. + \_or + %If \.jj=2, we add the firstskip. + \.a=\.targetjj\_relax% + \_advance\.a by \.alignment_firstskip% + \_xdef\.targetjj{\_the\.a}% + \_else + %If \.jj>2, we add the generalskip. + \.a=\.targetjj\_relax% + \_advance\.a by \.alignment_generalskip% + \_xdef\.targetjj{\_the\.a}% + \_fi + \.incornerfalse% + \_ifnum\.ii=1\_relax + \_ifnum\.jj=1\_relax + \.incornertrue + \_else + \_ifnum\.k=\.jj\_relax + \.incornertrue + \_fi + \_fi + \_else + \_ea\_ifnum\.k=\.ii\_relax + \_ifnum\.jj=1\_relax + \.incornertrue + \_fi + \_fi + \_fi + \_ifqr_incorner + \_relax + \_else + \.placealignmentpattern_int{#1}{\.targetii}{\.targetjj}% + \_fi + }% ends \.for \.jj + }% ends \.for \.ii + \_fi + \_fi +}% + +\_def\.placedummyformatpatterns#1{% + \.for \.jz = 1 to 9 by 1% + {\_ifnum\.jz=7\_relax% + \_else% + \.storetomatrix{#1}{9}{\_the\.jz}{\.formatsquare}% + \.storetomatrix{#1}{\_the\.jz}{9}{\.formatsquare}% + \_fi% + }% + \.setcounter\.j{\.size}% + \.for \.jz = 1 to 8 by 1% + {\.storetomatrix{#1}{9}{\_the\.j}{\.formatsquare}% + \.storetomatrix{#1}{\_the\.j}{9}{\.formatsquare}% + \.addtocounter\.j{-1}% + }% + %Now go back and change the \.formatsquare in (n-8,9) to \.blackfixed. + \.addtocounter\.j{1}% + \.storetomatrix{#1}{\_the\.j}{9}{\.blackfixed}% +}% + +\_def\.placedummyversionpatterns#1{% + \_ea\_ifnum\.version>6\_relax + %Must include version information. + \_global\.i=\.size% + \_global\_advance\.i by -10\_relax% + \.for \.iz = 1 to 3 by 1% + {\.for \.jz = 1 to 6 by 1% + {\.storetomatrix{#1}{\_the\.i}{\_the\.jz}{\.formatsquare}% + \.storetomatrix{#1}{\_the\.jz}{\_the\.i}{\.formatsquare}% + }% + \.stepcounter\.i + }% + \_fi +}% + +\_def\.writebit(#1#2)#3{% + % #3 = matrix name + % (qr_i,qr_j) = position to write in (counters) + % #1 = bit to be written + % #2 = remaining bits plus '\_relax' as an end-of-file marker + \_edef\.datatowrite{#2}% + \_ifnum#1=1 + \.storetomatrix{#3}{\_the\.i}{\_the\.j}{\.black}% + \_else + \.storetomatrix{#3}{\_the\.i}{\_the\.j}{\.white}% + \_fi +}% + +\_newifi\_ifqr_rightcol +\_newifi\_ifqr_goingup + +\_def\.writedata_hex#1#2{% + % #1 = name of a matrix that has been prepared with finder patterns, timing patterns, etc. + % #2 = a string consisting of bytes to write into the matrix, in two-char hex format. + \.setcounter\.i{\.numberofrowsinmatrix{#1}}% + \.setcounter\.j{\.numberofcolsinmatrix{#1}}% + \.rightcoltrue + \.goinguptrue + \_edef\.argument{{#1}(#2\_relax\_relax\_relax)}% + \_ea\.writedata_hex_recursive\.argument% +}% + +\_def\.writedata_hex_recursive#1(#2#3#4){% + % #1 = name of a matrix that has been prepared with finder patterns, timing patterns, etc. + % (qr_i,qr_j) = position to write in counters + % #2#3#4 contains the hex codes of the bytes to be written, plus \_relax\_relax\_relax + % as an end-of-file marker + \_edef\.testii{#2}% + \_ifx\.testii\.relax% + % #2 is \_relax, so there is nothing more to write. + \_relax + \_let\.go=\_relax + \_else + % #2 is not \_relax, so there is another byte to write. + \.hextobinary[8]{\.bytetowrite}{#2#3}% + \_xdef\.datatowrite{\.bytetowrite\_relax}% %Add terminating "\_relax" + \.writedata_recursive{#1}% %This function actually writes the 8 bits. + \_edef\.argument{{#1}(#4)}% + \_ea\_def\_ea\.go\_ea{\_ea\.writedata_hex_recursive\.argument}% %Call self to write the next bit. + \_fi + \.go +}% + +\_def\.writedata#1#2{% + % #1 = name of a matrix that has been prepared with finder patterns, timing patterns, etc. + % #2 = a string consisting of 0's and 1's to write into the matrix. + \.setcounter\.i{\.numberofrowsinmatrix{#1}}% + \.setcounter\.j{\.numberofcolsinmatrix{#1}}% + \.rightcoltrue + \.goinguptrue + \_edef\.datatowrite{#2\_relax}% + \.writedata_recursive{#1}% +}% + +\_def\.iblank{\.blank}% + +\_def\.writedata_recursive#1{% + % #1 = matrix name + % (qr_i,qr_j) = position to write in (counters) + % \.datatowrite contains the bits to be written, plus '\_relax' as an end-of-file marker + \_ea\_let\_ea\.squarevalue\_csname #1@\_the\.i @\_the\.j\_endcsname% + \_ifx\.squarevalue\.iblank + %Square is blank, so write data in it. + \_ea\.writebit\_ea(\.datatowrite){#1}% + %The \.writebit macro not only writes the first bit of \.datatowrite into the matrix, + %but also removes the bit from the 'bitstream' of \.datatowrite. + \_fi + %Now adjust our position in the matrix. + \_ifqr_rightcol + %From the right-hand half of the two-bit column, we always move left. Easy peasy. + \.addtocounter\.j{-1}% + \.rightcolfalse + \_else + %If we're in the left-hand column, things are harder. + \_ifqr_goingup + %First, suppose we're going upwards. + \_ifnum\.i>1\_relax% + %If we're not in the first row, things are easy. + %We move one to the right and one up. + \.addtocounter\.j{1}% + \.addtocounter\.i{-1}% + \.rightcoltrue + \_else + %If we are in the first row, then we move to the left, + %and we are now in the right-hand column on a downward pass. + \.addtocounter\.j{-1}% + \.goingupfalse + \.rightcoltrue + \_fi + \_else + %Now, suppose we're going downwards. + \_ea\_ifnum\.size>\.i\_relax% + %If we're not yet in the bottom row, things are easy. + %We move one to the right and one down. + \.addtocounter\.j{1}% + \.addtocounter\.i{1}% + \.rightcoltrue + \_else + %If we are in the bottom row, then we move to the left, + %and we are now in the right-hand column on an upward pass. + \.addtocounter\.j{-1}% + \.rightcoltrue + \.goinguptrue + \_fi + \_fi + %One problem: what if we just moved into the 7th column? + %Das ist verboten. + %If we just moved (left) into the 7th column, we should move on into the 6th column. + \_ifnum\.j=7\_relax% + \.setcounter\.j{6}% + \_fi + \_fi + %Now check whether there are any more bits to write. + \_ifx\.datatowrite\.relax + % \.datatowrite is just `\_relax', so we're done. + \_let\.nexttoken=\_relax + \_relax + \_else + % Write some more! + \_def\.nexttoken{\.writedata_recursive{#1}}% + \_fi + \.nexttoken +}% + +\_def\.writeremainderbits#1{% + % #1 = name of a matrix that has been prepared and partly filled. + % (qr_i,qr_j) = position to write in counters + \_ea\_ifnum\.numremainderbits>0\_relax + \_def\.datatowrite{}% + \.for \.iz = 1 to \.numremainderbits by 1% + {\.xaddto{\.datatowrite}{0}}% + \.xaddto{\.datatowrite}{\_relax}% terminator + \.writedata_recursive{#1}% + \_fi +}% + +\_newifi\_ifqr_cellinmask + +\_def\.setmaskingfunction#1{% + % #1 = 1 decimal digit for the mask. (I see no reason to use the 3-bit binary code.) + % The current position is (\themaski,\themaskj), with indexing starting at 0. + \_edef\.maskselection{#1}% + \_ea\_ifcase\.maskselection\_relax + %Case 0: checkerboard + \_def\.parsemaskingfunction{% + % Compute mod(\themaski+\themaskj,2)% + \.a=\.maski% + \_advance\.a by \.maskj% + \.b=\.a% + \_divide\.b by 2% + \_multiply\.b by 2% + \_advance\.a by -\.b% + \_edef\.maskfunctionresult{\_the\.a}% + }% + \_or + %Case 1: horizontal stripes + \_def\.parsemaskingfunction{% + % Compute mod(\themaski,2)% + \_ifodd\.maski\_relax% + \_def\.maskfunctionresult{1}% + \_else% + \_def\.maskfunctionresult{0}% + \_fi% + }% + \_or + %Case 2: vertical stripes + \_def\.parsemaskingfunction{% + % Compute mod(\themaskj,3)% + \.a=\.maskj% + \_divide\.a by 3% + \_multiply\.a by 3% + \_advance\.a by -\.maskj% + \_edef\.maskfunctionresult{\_the\.a}% + }% + \_or + %Case 3: diagonal stripes + \_def\.parsemaskingfunction{% + % Compute mod(\themaski+\themaskj,3)% + \.a=\.maski% + \_advance\.a by \.maskj% + \.b=\.a% + \_divide\.b by 3% + \_multiply\.b by 3% + \_advance\.b by -\.a% + \_edef\.maskfunctionresult{\_the\.b}% + }% + \_or + %Case 4: wide checkerboard + \_def\.parsemaskingfunction{% + % Compute mod(floor(\themaski/2) + floor(\themaskj/3),2) % + \.a=\.maski% + \_divide\.a by 2% + \.b=\.maskj% + \_divide\.b by 3% + \_advance\.a by \.b% + \.b=\.a% + \_divide\.a by 2% + \_multiply\.a by 2% + \_advance\.a by -\.b% + \_edef\.maskfunctionresult{\_the\.a}% + }% + \_or + %Case 5: quilt + \_def\.parsemaskingfunction{% + % Compute mod(\themaski*\themaskj,2) + mod(\themaski*\themaskj,3) % + \.a=\.maski% + \_multiply\.a by \.maskj% + \.b=\.a% + \.c=\.a% + \_divide\.a by 2% + \_multiply\.a by 2% + \_advance\.a by -\.c% (result will be -mod(i*j,2), which is negative.) + \_divide\.b by 3% + \_multiply\.b by 3% + \_advance\.b by -\.c% (result will be -mod(i*j,3), which is negative.) + \_advance\.a by \.b% (result is negative of what's in the spec.) + \_edef\.maskfunctionresult{\_the\.a}% + }% + \_or + %Case 6: arrows + \_def\.parsemaskingfunction{% + % Compute mod( mod(\themaski*\themaskj,2) + mod(\themaski*\themaskj,3) , 2 ) % + \.a=\.maski% + \_multiply\.a by \.maskj% + \.b=\.a% + \.c=\.a% + \_multiply\.c by 2% % \.c equals 2*i*j. + \_divide\.a by 2% + \_multiply\.a by 2% + \_advance\.c by -\.a% Now \.c equals i*j + mod(i*j,2). + \_divide\.b by 3% + \_multiply\.b by 3% + \_advance\.c by -\.b% (Now \.c equals mod(i*j,2) + mod(i*j,3). + \.a=\.c% + \_divide\.a by 2% + \_multiply\.a by 2% + \_advance\.c by-\.a% + \_edef\.maskfunctionresult{\_the\.c}% + }% + \_or + %Case 7: shotgun + \_def\.parsemaskingfunction{% + % Compute mod( mod(\themaski+\themaskj,2) + mod(\themaski*\themaskj,3) , 2 ) % + \.a=\.maski% + \_advance\.a by \.maskj% %So \.a = i+j + \.b=\.maski% + \_multiply\.b by \.maskj% %So \.b = i*j + \.c=\.a% + \_advance\.c by \.b% So \.c = i+j+i*j + \_divide\.a by 2% + \_multiply\.a by 2% + \_advance\.c by -\.a% So \.c = mod(i+j,2) + i*j + \_divide\.b by 3% + \_multiply\.b by 3% + \_advance\.c by -\.b% So \.c = mod(i+j,2) + mod(i*j,3) + \.a=\.c% + \_divide\.c by 2% + \_multiply\.c by 2% + \_advance\.a by -\.c% + \_edef\.maskfunctionresult{\_the\.a}% + }% + \_fi +}% + +\_def\.checkifcellisinmask{% + % The current position is (\.iz,\.jz), in TeX counts, + % but the counters (maski,maskj) should contain + % the current position with indexing starting at 0. + % That is, maski = \.iz-1 and maskj = \.jz-1. + % + % \.parsemaskingfunction must have been set by a call to \.setmaskingfunction + \.parsemaskingfunction + \_ea\_ifnum\.maskfunctionresult=0\_relax + \.cellinmasktrue + \_else + \.cellinmaskfalse + \_fi +}% + +\_newcount\.maski +\_newcount\.maskj + +\_def\.applymask#1#2#3{% + % #1 = name of a matrix that should be filled out completely + % except for the format and/or version information. + % #2 = name of a new matrix to contain the masked version + % #3 = 1 decimal digit naming the mask + \.createduplicatematrix{#2}{#1}% + \.setmaskingfunction{#3}% + \.setcounter\.maski{-1}% + \.for \.iz = 1 to \.size by 1% + {\.stepcounter\.maski + \.setcounter\.maskj{-1}% + \.for \.jz = 1 to \.size by 1% + {\.stepcounter\.maskj + \.checkifcellisinmask + \_ifqr_cellinmask + \.checkifcurrentcellcontainsdata{#2}% + \_ifqr_currentcellcontainsdata + \.flipcurrentcell{#2}% + \_fi + \_fi + }% + }% +}% + +\_newifi\_ifqr_currentcellcontainsdata +\.currentcellcontainsdatafalse + +\_def\.iwhite{\.white}% +\_def\.iblack{\.black}% + +\_def\.checkifcurrentcellcontainsdata#1{% + % #1 = name of matrix + \.currentcellcontainsdatafalse + \_ea\_ifx\_csname #1@\_the\.iz @\_the\.jz\_endcsname\.iwhite + \.currentcellcontainsdatatrue + \_fi + \_ea\_ifx\_csname #1@\_the\.iz @\_the\.jz\_endcsname\.iblack + \.currentcellcontainsdatatrue + \_fi +}% + +\_def\.flippedblack{\.black}% +\_def\.flippedwhite{\.white}% + +\_def\.flipcurrentcell#1{% + % #1 = name of matrix + % (\.iz, \.jz) = current position, in TeX counts. + % This assumes the cell contains data, either black or white! + \_ea\_ifx\_csname #1@\_the\.iz @\_the\.jz\_endcsname\.iwhite + \.storetomatrix{#1}{\_the\.iz}{\_the\.jz}{\.flippedblack}% + \_else + \.storetomatrix{#1}{\_the\.iz}{\_the\.jz}{\.flippedwhite}% + \_fi +}% + +\_def\.chooseandapplybestmask#1{% + % #1 = name of a matrix that should be filled out completely + % except for the format and/or version information. + % This function applies all eight masks in succession, + % calculates their penalties, and remembers the best. + % The number indicating which mask was used is saved in \.mask_selected. + \.createduplicatematrix{originalmatrix}{#1}% + \.message{<Applying Mask 0...}% + \.applymask{originalmatrix}{#1}{0}% + \.message{done. Calculating penalty...}% + \.evaluatemaskpenalty{#1}% + \_xdef\.currentbestpenalty{\.penalty}% + \.message{penalty is \.penalty>^^J}% + \_gdef\.currentbestmask{0}% + \.for \.iz = 1 to 7 by 1% + {\.message{<Applying Mask \_the\.iz...}% + \.applymask{originalmatrix}{currentmasked}{\_the\.iz}% + \.message{done. Calculating penalty...}% + \.evaluatemaskpenalty{currentmasked}% + \.message{penalty is \.penalty>^^J}% + \_ea\_ea\_ea\_ifnum\_ea\.penalty\_ea<\.currentbestpenalty\_relax + %We found a better mask. + \_xdef\.currentbestmask{\_the\.iz}% + \.createduplicatematrix{#1}{currentmasked}% + \_xdef\.currentbestpenalty{\.penalty}% + \_fi + }% + \_xdef\.mask_selected{\.currentbestmask}% + \.message{<Selected Mask \.mask_selected>^^J}% +}% + +\_def\.Ni{3}% +\_def\.Nii{3}% +\_def\.Niii{40}% +\_def\.Niv{10}% +\_def\.fiveones{11111}% +\_def\.fivezeros{00000}% +\_def\.twoones{11}% +\_def\.twozeros{00}% +\_def\.finderA{00001011101}% +\_def\.finderB{10111010000}% +\_def\.finderBthree{1011101000}% +\_def\.finderBtwo{101110100}% +\_def\.finderBone{10111010}% +\_def\.finderBzero{1011101}% +\_newifi\_ifqr_stringoffive +\_def\.addpenaltyiii{% + \.addtocounter\.penaltyiii{\.Niii}% +}% +\_newcount\.totalones +\_newcount\.penaltyi +\_newcount\.penaltyii +\_newcount\.penaltyiii +\_newcount\.penaltyiv +\_def\.evaluatemaskpenalty#1{% + % #1 = name of a matrix that we will test for the penalty + % according to the specs. + \.setcounter\.penaltyi{0}% + \.setcounter\.penaltyii{0}% + \.setcounter\.penaltyiii{0}% + \.setcounter\.penaltyiv{0}% + \_bgroup%localize the meanings we give to the symbols + \_def\.black{1}\_def\.white{0}% + \_def\.blackfixed{1}\_def\.whitefixed{0}% + \_def\.formatsquare{0}% This is not stated in the specs, but seems + % to be the standard implementation. + \_def\.blank{0}% These would be any bits at the end. + % + \.setcounter\.totalones{0}% + \.for \.iz=1 to \.size by 1% + {\_def\.lastfive{z}% %The z is a dummy, that will be removed before any testing. + \.stringoffivefalse + \_def\.lasttwo_thisrow{z}% %The z is a dummy. + \_def\.lasttwo_nextrow{z}% %The z is a dummy. + \_def\.lastnine{z0000}% %The 0000 stands for the white space to the left. The z is a dummy. + \_def\.ignore_finderBat{0}% + \.for \.jz=1 to \.size by 1% + {\_edef\.newbit{\.matrixentry{#1}{\_the\.iz}{\_the\.jz}}% + % + % LASTFIVE CODE FOR PENALTY 1 + % First, add the new bit to the end. + \_ea\.xaddto\_ea\.lastfive\_ea{\.newbit}% + \_ifnum\.jz<5\_relax% + %Not yet on the 5th entry. + %Don't do any testing. + \_else + % 5th entry or later. + % Remove the old one, and then test. + \.removefirsttoken\.lastfive% + \_ifx\.lastfive\.fiveones% + \_ifqr_stringoffive + %This is a continuation of a previous block of five or more 1's. + \.stepcounter\.penaltyi + \_else + %This is a new string of five 1's. + \.addtocounter\.penaltyi{\.Ni}% + \_global\.stringoffivetrue + \_fi + \_else + \_ifx\.lastfive\.fivezeros% + \_ifqr_stringoffive + %This is a continuation of a previous block of five or more 0's. + \.stepcounter\.penaltyi + \_else + %This is a new string of five 0's. + \.addtocounter\.penaltyi{\.Ni}% + \_global\.stringoffivetrue + \_fi + \_else + %This is not a string of five 1's or five 0's. + \_global\.stringoffivefalse + \_fi + \_fi + \_fi + % + % 2x2 BLOCKS FOR PENALTY 2 + % Every 2x2 block of all 1's counts for \.Nii penalty points. + % We do not need to run this test in the last row. + \_ea\_ifnum\_ea\.iz\_ea<\.size\_relax + \_ea\.xaddto\_ea\.lasttwo_thisrow\_ea{\.newbit}% + %Compute \.iplusone + \.a=\.iz\_relax% + \_advance\.a by 1% + \_edef\.iplusone{\_the\.a}% + % + \_edef\.nextrowbit{\.matrixentry{#1}{\.iplusone}{\_the\.jz}}% + \_ea\.xaddto\_ea\.lasttwo_nextrow\_ea{\.nextrowbit}% + \_ifnum\.jz<2\_relax% + %Still in the first column; no check. + \_else + %Second column or later. Remove the old bits, and then test. + \.removefirsttoken\.lasttwo_thisrow + \.removefirsttoken\.lasttwo_nextrow + \_ifx\.lasttwo_thisrow\.twoones + \_ifx\.lasttwo_nextrow\.twoones + \.addtocounter\.penaltyii{\.Nii}% + \_fi + \_else + \_ifx\.lasttwo_thisrow\.twozeros + \_ifx\.lasttwo_nextrow\.twozeros + \.addtocounter\.penaltyii{\.Nii}% + \_fi + \_fi + \_fi + \_fi + \_fi + % + % LASTNINE CODE FOR PENALTY 3 + % First, add the new bit to the end. + \_ea\.xaddto\_ea\.lastnine\_ea{\.newbit}% + \_ifnum\.jz<7\_relax% + %Not yet on the 7th entry. + %Don't do any testing. + \_else + % 7th entry or later. + % Remove the old one, and then test. + \.removefirsttoken\.lastnine + \_ea\_ifnum\.size=\.jz\_relax% + % Last column. Any of the following should count: + % 1011101 (\.finderBzero) + % 10111010 (\.finderBone) + % 101110100 (\.finderBtwo) + % 1011101000 (\.finderBthree) + % 10111010000 (\.finderB) + \_ifx\.lastnine\.finderB + \.addpenaltyiii + \_else + \.removefirsttoken\.lastnine + \_ifx\.lastnine\.finderBthree + \.addpenaltyiii + \_else + \.removefirsttoken\.lastnine + \_ifx\.lastnine\.finderBtwo + \.addpenaltyiii + \_else + \.removefirsttoken\.lastnine + \_ifx\.lastnine\.finderBone + \.addpenaltyiii + \_else + \.removefirsttoken\.lastnine + \_ifx\.lastnine\.finderBzero + \.addpenaltyiii + \_fi + \_fi + \_fi + \_fi + \_fi + \_else + \_ifx\.lastnine\.finderA% %Matches 0000 1011101 + \.addpenaltyiii + %Also, we record our discovery, so that we can't count this pattern again + %if it shows up four columns later as 1011101 0000. + % + %Set \.ignore_finderBat to \.jz+4. + \.a=\.jz\_relax% + \_advance\.a by 4% + \_xdef\.ignore_finderBat{\_the\.a}% + \_else + \_ifx\.lastfive\.finderB% %Matches 1011101 0000. + \_ea\_ifnum\.ignore_finderBat=\.jz\_relax + %This pattern was *not* counted already earlier. + \.addpenaltyiii + \_fi + \_fi + \_fi + \_fi + \_fi + % + %COUNT 1's FOR PENALTY 4 + \_ea\_ifnum\.newbit=1\_relax% + \.stepcounter\.totalones + \_fi + }% end of j-loop + }% end of i-loop + % + %NOW WE ALSO NEED TO RUN DOWN THE COLUMNS TO FINISH CALCULATING PENALTIES 1 AND 3. + \.for \.jz=1 to \.size by 1% + {\_def\.lastfive{z}% %The z is a dummy, that will be removed before any testing. + \.stringoffivefalse + \_def\.lastnine{z0000}% %The 0000 stands for the white space to the left. The z is a dummy. + \_def\.ignore_finderBat{0}% + \.for \.iz=1 to \.size by 1% + {\_edef\.newbit{\.matrixentry{#1}{\_the\.iz}{\_the\.jz}}% + % + % LASTFIVE CODE FOR PENALTY 1 + % First, add the new bit to the end. + \_ea\.xaddto\_ea\.lastfive\_ea{\.newbit}% + \_ifnum\.iz<5\_relax% + %Not yet on the 5th entry. + %Don't do any testing. + \_else + % 5th entry or later. + % Remove the old one, and then test. + \.removefirsttoken\.lastfive + \_ifx\.lastfive\.fiveones% + \_ifqr_stringoffive + %This is a continuation of a previous block of five or more 1's. + \.stepcounter\.penaltyi + \_else + %This is a new string of five 1's. + \.addtocounter\.penaltyi{\.Ni}% + \_global\.stringoffivetrue + \_fi + \_else + \_ifx\.lastfive\.fivezeros% + \_ifqr_stringoffive + %This is a continuation of a previous block of five or more 0's. + \.stepcounter\.penaltyi + \_else + %This is a new string of five 0's. + \.addtocounter\.penaltyi{\.Ni}% + \_global\.stringoffivetrue + \_fi + \_else + %This is not a string of five 1's or five 0's. + \_global\.stringoffivefalse + \_fi + \_fi + \_fi + % + % HAPPILY, WE DON'T NEED TO CALCULATE PENALTY 2 AGAIN. + % + % LASTNINE CODE FOR PENALTY 3 + % First, add the new bit to the end. + \_ea\.xaddto\_ea\.lastnine\_ea{\.newbit}% + \_ifnum\.iz<7\_relax% + %Not yet on the 7th entry. + %Don't do any testing. + \_else + % 7th entry or later. + % Remove the old one, and then test. + \.removefirsttoken\.lastnine + \_ea\_ifnum\.size=\.iz\_relax% + % Last column. Any of the following should count: + % 1011101 (\.finderBzero) + % 10111010 (\.finderBone) + % 101110100 (\.finderBtwo) + % 1011101000 (\.finderBthree) + % 10111010000 (\.finderB) + \_ifx\.lastnine\.finderB + \.addpenaltyiii + \_else + \.removefirsttoken\.lastnine + \_ifx\.lastnine\.finderBthree + \.addpenaltyiii + \_else + \.removefirsttoken\.lastnine + \_ifx\.lastnine\.finderBtwo + \.addpenaltyiii + \_else + \.removefirsttoken\.lastnine + \_ifx\.lastnine\.finderBone + \.addpenaltyiii + \_else + \.removefirsttoken\.lastnine + \_ifx\.lastnine\.finderBzero + \.addpenaltyiii + \_fi + \_fi + \_fi + \_fi + \_fi + \_else + \_ifx\.lastnine\.finderA% %Matches 0000 1011101 + \.addpenaltyiii + %Also, we record our discovery, so that we can't count this pattern again + %if it shows up four columns later as 1011101 0000. + % + %Set \.ignore_finderBat to \.iz+4. + \.a=\.iz\_relax% + \_advance\.a by 4% + \_xdef\.ignore_finderBat{\_the\.a}% + \_else + \_ifx\.lastfive\.finderB% %Matches 1011101 0000. + \_ea\_ifnum\.ignore_finderBat=\.iz\_relax + %This pattern was *not* counted already earlier. + \.addpenaltyiii + \_fi + \_fi + \_fi + \_fi + \_fi + % + }% end of i-loop + }% end of j-loop + \_egroup + % + %CALCULATE PENALTY 4 + %According to the spec, penalty #4 is computed as + % floor( |(i/n^2)-0.5|/0.05 ) + % where i is the total number of 1's in the matrix. + % This is equal to abs(20*i-10n^2) div n^2. + % + \.a=\.totalones\_relax + \_multiply\.a by 20\_relax + \.b=\.size\_relax + \_multiply\.b by \.size\_relax + \.c=10\_relax + \_multiply\.c by \.b\_relax + \_advance\.a by -\.c\_relax + \_ifnum\.a<0\_relax + \_multiply\.a by -1\_relax + \_fi + \_divide\.a by \.b\_relax + \.setcounter\.penaltyiv{\_the\.a}% + % + %CALCULATE TOTAL PENALTY + \.a=\_the\.penaltyi\_relax% + \_advance\.a by \_the\.penaltyii\_relax% + \_advance\.a by \_the\.penaltyiii\_relax% + \_advance\.a by \_the\.penaltyiv\_relax% + \_edef\.penalty{\_the\.a}% +}% + +\_def\.removefirsttoken#1{% + %Removes the first token from the macro named in #1. + \_edef\.argument{(#1)}% + \_ea\.removefirsttoken_int\.argument% + \_xdef#1{\.removefirsttoken_result}% +}% +\_def\.removefirsttoken_int(#1#2){% + \_def\.removefirsttoken_result{#2}% +}% + +\_def\.writeformatstring#1#2{% + % #1 = matrix name + % #2 = binary string representing the encoded and masked format information + \.setcounter\.i{9}% + \.setcounter\.j{1}% + \_edef\.argument{{#1}(#2\_relax)}% + \_ea\.writeformatA_recursive\.argument + % + \.setcounter\.i{\.numberofrowsinmatrix{#1}}% + \.setcounter\.j{9}% + \_ea\.writeformatB_recursive\.argument +}% + +\_def\.writeformatA_recursive#1(#2#3){% + % #1 = matrix name + % #2 = first bit of string + % #3 = rest of bitstream + % (qr_i,qr_j) = current (valid) position to write (in counters) + \_ifnum#2=1\_relax + \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.blackformat}% + \_else + \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.whiteformat}% + \_fi + % Now the tricky part--moving \.iz and \.jz to their next positions. + \_ifnum\.j<9\_relax + %If we're not yet in column 9, move right. + \.stepcounter\.j + \_ifnum\.j=7\_relax + %But we skip column 7! + \.stepcounter\.j + \_fi + \_else + %If we're in column 9, we move up. + \.addtocounter\.i{-1}% + \_ifnum\.i=7\_relax + %But we skip row 7! + \.addtocounter\.i{-1}% + \_fi + \_fi + %N.B. that at the end of time, this will leave us at invalid position (0,9). + %That makes for an easy test to know when we are done. + \_ifnum\.i<1 + \_let\.nexttoken=\_relax + \_else + \_def\.nexttoken{\.writeformatA_recursive{#1}(#3)}% + \_fi + \.nexttoken +}% + +\_def\.writeformatB_recursive#1(#2#3){% + % #1 = matrix name + % #2 = first bit of string + % #3 = rest of bitstream + % (qr_i,qr_j) = current (valid) position to write (in counters) + \_ifnum#2=1\_relax + \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.blackformat}% + \_else + \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.whiteformat}% + \_fi + % Now the tricky part--moving counters i and j to their next positions. + \.a=\.size% + \_advance\.a by -6\_relax% + \_ifnum\.a<\.i\_relax + %If we're not yet in row n-6, move up. + \.addtocounter\.i{-1}% + \_else + \_ifnum\.a=\.i\_relax + %If we're actually in row n-6, we jump to position (9,n-7). + \.setcounter\.i{9}% + %Set counter j equal to \.size-7. + \_global\.j=\.size\_relax% + \_global\_advance\.j by -7\_relax% + \_else + %Otherwise, we must be in row 9. + %In this case, we move right. + \.stepcounter\.j + \_fi + \_fi + %N.B. that at the end of time, this will leave us at invalid position (9,n+1). + %That makes for an easy test to know when we are done. + \_ea\_ifnum\.size<\.j\_relax + \_let\.nexttoken=\_relax + \_else + \_def\.nexttoken{\.writeformatB_recursive{#1}(#3)}% + \_fi + \.nexttoken +}% + +\_def\.writeversionstring#1#2{% + % #1 = matrix name + % #2 = binary string representing the encoded version information + % + % Plot the encoded version string into the matrix. + % This is only done for versions 7 and higher. + \_ea\_ifnum\.version>6\_relax + %Move to position (n-8,6). + \.setcounter\.i{\.size}\_relax% + \.addtocounter\.i{-8}\_relax% + \.setcounter\.j{6}% + \_edef\.argument{{#1}(#2\_relax)}% + \_ea\.writeversion_recursive\.argument + \_fi +}% + +\_def\.writeversion_recursive#1(#2#3){% + % #1 = matrix name + % #2 = first bit of string + % #3 = rest of bitstream + % (qr_i,qr_j) = current (valid) position to write (in counters) + % + % The version information is stored symmetrically in the matrix + % In two transposed regions, so we can write both at the same time. + % In the comments, we describe what happens in the lower-left region, + % not the upper-right. + % + %Set \.topline equal to n-10. + \.a=\.size\_relax% + \_advance\.a by -10\_relax% + \_edef\.topline{\_the\.a}% + % + \_ifnum#2=1\_relax + \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.blackformat}% + \.storetomatrix{#1}{\_the\.j}{\_the\.i}{\.blackformat}% + \_else + \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.whiteformat}% + \.storetomatrix{#1}{\_the\.j}{\_the\.i}{\.whiteformat}% + \_fi + % Now the tricky part--moving counters i and j to their next positions. + \.addtocounter\.i{-1}% + \_ea\_ifnum\.topline>\.i\_relax + %We've overshot the top of the region. + %We need to move left one column and down three. + \.addtocounter\.j{-1}% + \.addtocounter\.i{3}% + \_fi + %N.B. that at the end of time, this will leave us at invalid position (n-8,0). + %That makes for an easy test to know when we are done. + \_ifnum\.j<1\_relax + \_let\.nexttoken=\_relax + \_else + \_def\.nexttoken{\.writeversion_recursive{#1}(#3)}% + \_fi + \.nexttoken +}% +\_newcount\.hexchars + +\_def\.encode_binary#1{% + % #1 = string of ascii characters, to be converted into bitstream + % + % We do this one entirely in hex, rather than binary, because we can. + % + %Now comes the actual data. + % + {\_endlinechar=-1 \_xdef\.codetext{4\.utfstring{#1}0}}% + %The terminator is 0 + %\.xaddto\.codetext{0}% %This is '0000' in binary. + % + %There is no need to pad bits to make a multiple of 8, + %because the data length is already 4 + 8 + 8n + 4. + % + %Now add padding codewords if needed. + \.setcounter\.hexchars{0}% + \.getstringlength{\.codetext}% + \.setcounter\.hexchars{\.stringlength}% + %Set \.numpaddingcodewords equal to \.totaldatacodewords - hexchars/2. + \.a=-\.hexchars\_relax + \_divide\.a by 2\_relax + \_advance\.a by \.totaldatacodewords\_relax + \_edef\.numpaddingcodewords{\_the\.a}% + % + \_ea\_ifnum\.numpaddingcodewords<0% + \_edef\.ds{ERROR: Too much data! Over by \.numpaddingcodewords bytes.}\_show\.ds + \_fi + \_ea\_ifnum\.numpaddingcodewords>0% + \.for \.iz = 2 to \.numpaddingcodewords by 2% + {\.xaddto{\.codetext}{ec11}}% + \_ea\_ifodd\.numpaddingcodewords\_relax + \.xaddto{\.codetext}{ec}% + \_fi + \_fi +}% + +\_def\.splitcodetextintoblocks{% + \.setcounter\.i{0}% + \.for \.jz = 1 to \.numshortblocks by 1% + {\.stepcounter\.i + \.splitoffblock{\.codetext}{\_the\.i}{\.shortblock_size}% + }% + \_ea\_ifnum\.numlongblocks>0\_relax + \.for \.jz = 1 to \.numlongblocks by 1% + {\.stepcounter\.i + \.splitoffblock{\.codetext}{\_the\.i}{\.longblock_size}% + }% + \_fi +}% + +\_def\.splitoffblock#1#2#3{% + % #1 = current codetext in hexadecimal + % #2 = number to use in csname "\datablock@#2". + % #3 = number of bytes to split off + \.message{<Splitting off block #2>}% + \_ea\_gdef\_csname datablock@#2\_endcsname{}% %This line is important! + \.for \.iz = 1 to #3 by 1% + {\_edef\.argument{{#2}(#1)}% + \_ea\.splitoffblock_int\.argument + }% +}% + +\_def\.splitoffblock_int#1(#2#3#4){% + % #1 = number to use in csname "\datablock@#1". + % #2#3 = next byte to split off + % #4 = remaining text + % + % We add the next byte to "\datablock@#1", + % and we remove it from the codetext. + \_ea\_xdef\_csname datablock@#1\_endcsname{\_csname datablock@#1\_endcsname#2#3}% + \_xdef\.codetext{#4}% +}% + +\_def\.createerrorblocks{% + \.for \.ii = 1 to \.numblocks by 1% + {\.message{<Making error block \_the\.ii>}% + \.FXgenerate_errorbytes{\_csname datablock@\_the\.ii\_endcsname}{\.numeccodewords}% + \_ea\_xdef\_csname errorblock@\_the\.ii\_endcsname{\.FXerrorbytes}% + }% +}% + +\_def\.interleave{% + \.setcounter\.i{0}% + \_def\.interleaved_text{}% + \.message{<Interleaving datablocks of length \.shortblock_size\_space and \.longblock_size: }% + \.for \.ii = 1 to \.shortblock_size by 1% + {\.for \.jj = 1 to \.numblocks by 1% + {\.writefromblock{datablock}{\_the\.jj}% + }% + \.message{\_the\.ii,}% + }% + %The long blocks are numbered \.numshortblocks+1, \.numshortblocks+2, ..., \.numblocks. + \.a=\.numshortblocks\_relax + \_advance\.a by 1\_relax + \.for \.jj = \.a to \.numblocks by 1% + {\.writefromblock{datablock}{\_the\.jj}}% + \_ea\_ifnum\.numlongblocks>0\_relax% + \.message{\.longblock_size.>}% + \_else + \.message{.>}% + \_fi + \.message{<Interleaving errorblocks of length \.numeccodewords: }% + \.for \.ii = 1 to \.numeccodewords by 1% + {\.message{\_the\.ii,}% + \.for \.jj = 1 to \.numblocks by 1% + {\.writefromblock{errorblock}{\_the\.jj}% + }% + }% + \.message{.><Interleaving complete.>}% +}% + +\_def\.writefromblock#1#2{% + % #1 = either 'datablock' or 'errorblock' + % #2 = block number, in {1,...,\.numblocks}% + \_edef\.argument{(\_csname #1@#2\_endcsname\_relax\_relax\_relax)}% + \_ea\.writefromblock_int\.argument + \_ea\_xdef\_csname #1@#2\_endcsname{\.writefromblock_remainder}% +}% + +\_def\.writefromblock_int(#1#2#3){% + % #1#2 = first byte (in hex) of text, which will be written to \.interleaved_text + % #3 = remainder, including \_relax\_relax\_relax terminator. + \.xaddto{\.interleaved_text}{#1#2}% + \.writefromblock_intint(#3)% +}% + +\_def\.writefromblock_intint(#1\_relax\_relax\_relax){% + \_xdef\.writefromblock_remainder{#1}% +}% + +\_newifi\_ifqr_leadingcoeff +\_def\.testleadingcoeff(#1#2){% + % Tests whether the leading digit of #1#2 is 1. + \_ifnum#1=1\_relax + \.leadingcoefftrue + \_else + \.leadingcoefffalse + \_fi +}% + +\_def\.polynomialdivide#1#2{% + \_edef\.numerator{#1}% + \_edef\.denominator{#2}% + \.divisiondonefalse% + \_ea\_ea\_ea\.oneroundofdivision\_ea\_ea\_ea{\_ea\.numerator\_ea}\_ea{\.denominator}% +}% + +\_def\.empty{}% +\_def\.oneroundofdivision#1#2{% + % #1 = f(x), of degree n + % #2 = g(x), of degree m + % Obtains a new polynomial h(x), congruent to f(x) modulo g(x), + % but of degree at most n-1. + % + % If leading coefficient of f(x) is 1, subtracts off g(x) * x^(n-m). + % If leading coefficient of f(x) is 0, strips off that leading zero. + % + \.testleadingcoeff(#1)% + \_ifqr_leadingcoeff + \.xorbitstrings{#1}{#2}% + \_ifqr_xorfailed + %If xor failed, that means our #1 was already the remainder! + \.divisiondonetrue + \_edef\.theremainder{#1}% + \_else + %xor succeeded. We need to recurse. + \_ea\_ea\_ea\_edef\_ea\_ea\_ea\.numerator\_ea\_ea\_ea{\_ea\.stripleadingzero\_ea(\.xorresult)}% + \_fi + \_else + \_ea\_def\_ea\.numerator\_ea{\.stripleadingzero(#1)}% + \_ifx\.numerator\.empty + \.divisiondonetrue + \_def\.theremainder{0}% + \_fi + \_fi + \_ifqr_divisiondone + \_relax + \_else + \_ea\.oneroundofdivision\_ea{\.numerator}{#2}% + \_fi +}% + +\_def\.stripleadingzero(0#1){#1}%Strips off a leading zero. + +\_newifi\_ifqr_xorfailed% This flag will trigger when #2 is longer than #1. + +\_def\.xorbitstrings#1#2{% + % #1 = bitstring + % #2 = bitstring no longer than #1 + \.xorfailedfalse + \_edef\.argument{(,#1\_relax\_relax)(#2\_relax\_relax)}% + \_ea\.xorbitstrings_recursive\.argument + %\.xorbitstrings_recursive(,#1\_relax\_relax)(#2\_relax\_relax)% +}% + +\_def\.xorbitstrings_recursive(#1,#2#3)(#4#5){% + % #1#2#3 is the first bitstring, xor'ed up through #1. + % #4#5 is the remaining portion of the second bitstring. + \_def\.testii{#2}% + \_def\.testiv{#4}% + \_ifx\.testii\.relax + % #1 contains the whole string. + % Now if #4 is also \_relax, that means the two strings started off with equal lengths. + % If, however, #4 is not \_relax, that means the second string was longer than the first, a problem. + \_ifx\.testiv\.relax + %No problem. We are done. + \.xorbit_saveresult(#1#2#3)% + \_else + %Problem! The second string was longer than the first. + \.xorfailedtrue + \_def\.xorresult{}% + \_fi + \_else + % There is still a bit to manipulate in #2. + % Check whether #4 contains anything. + \_ifx\.testiv\.relax + % No, #4 is empty. We are done. "#2#3" contains the remainder of the first string, + % which we append untouched and then strip off the two \_relax-es. + \.xorbit_saveresult(#1#2#3)% + \_else + % Yes, #4 still has something to XOR. Do the task. + \_ifnum#2=#4\_relax + \.xorbitstrings_recursive(#1% + 0,#3)(#5)% + \_else + \.xorbitstrings_recursive(#1% + 1,#3)(#5)% + \_fi + \_fi + \_fi +}% + +\_def\.xorbit_saveresult(#1\_relax\_relax){% + %Strips off the extra '\_relax'es at the end. + \_def\.xorresult{#1}% +}% + +\_newifi\_ifqr_divisiondone + +\_def\.BCHcode#1{% + \_edef\.formatinfo{#1}% + \_def\.formatinfopadded{\.formatinfo 0000000000}% + \_def\.divisor{10100110111}% + \.divisiondonefalse + \.polynomialdivide{\.formatinfopadded}{\.divisor}% + % + \.getstringlength{\.theremainder}% + %Run loop from stringlength+1 to 10. + \.a=\.stringlength\_relax% + \_advance\.a by 1\_relax% + \.for \.iz = \.a to 10 by 1% + {% + \_xdef\.theremainder{0\.theremainder}% + }% + \_edef\.BCHresult{\.formatinfo\.theremainder}% +}% + +\_def\.formatmask{101010000010010}% + +\_def\.encodeandmaskformat#1{% + \.BCHcode{#1}% + \.xorbitstrings{\.BCHresult}{\.formatmask}% + \_edef\.formatbitstring{\.xorresult}% +}% + +\_def\.Golaycode#1{% + % #1 = 6-bit version number + \_edef\.versioninfo{#1}% + \_def\.versioninfopadded{\.versioninfo 000000000000}% %Append 12 zeros. + \_def\.divisor{1111100100101}% + \.divisiondonefalse + \.polynomialdivide{\.versioninfopadded}{\.divisor}% + % + \.getstringlength{\.theremainder}% + %Run loop from stringlength+1 to 12. + \.a=\.stringlength\_relax% + \_advance\.a by 1\_relax% + \.for \.iz = \.a to 12 by 1% + {% + \_xdef\.theremainder{0\.theremainder}% + }% + \_edef\.Golayresult{\.versioninfo\.theremainder}% +}% +\_def\.Fresult{}% + +\_def\.xorbitstring#1#2#3{% + % #1 = new macro to receive result + % #2, #3 = bitstrings to xor. The second can be shorter than the first. + \_def\.xor_result{}% + \_edef\.argument{(#2\_relax\_relax)(#3\_relax\_relax)}% + \_ea\.xorbitstring_recursive\.argument% + \_edef#1{\.xor_result}% +}% +\_def\.xorbitstring_recursive(#1#2)(#3#4){% + \_edef\.testi{#1}% + \_ifx\.testi\.relax% + %Done. + \let\.next=\_relax% + \_else + \_if#1#3\_relax + \.xaddto{\.xor_result}{0}% + \_else + \.xaddto{\.xor_result}{1}% + \_fi + \_edef\.next{\_noexpand\.xorbitstring_recursive(#2)(#4)}% + \_fi + \.next +} + +\_def\.Faddchar_raw#1#2{% + %Add two hexadecimal digits using bitwise xor + \.hextobinary[4]{\.summandA}{#1}% + \.hextobinary[4]{\.summandB}{#2}% + \.xorbitstring{\.Fresult}{\.summandA}{\.summandB}% + \.binarytohex[1]{\.Fresult}{\.Fresult}% +}% + +\_def\.canceltwos#1{% + \_edef\.argument{(#1\_relax\_relax)}% + \_ea\.canceltwos_int\.argument% +}% + +\_def\.canceltwos_int(#1#2){% + \_ea\.canceltwos_recursion(,#1#2)% +}% + +\_def\.canceltwos_recursion(#1,#2#3){% + \_def\.testii{#2}% + \_ifx\.testii\.relax + %Cancelling complete. + \.striptworelaxes(#1#2#3)% + %Now \.Fresult contains the answer. + \_else + \_relax + \_ifnum#2=2\_relax + \.canceltwos_recursion(#10,#3)% + \_else + \.canceltwos_recursion(#1#2,#3)% + \_fi + \_fi +}% + +\_def\.striptworelaxes(#1\_relax\_relax){% + \_gdef\.Fresult{#1}% +}% + +\.for \.iz = 0 to 15 by 1% + {\.decimaltohex[1]{\.tempa}{\_the\.iz}% + \.for \.jz = 0 to 15 by 1% + {\.decimaltohex[1]{\.tempb}{\_the\.jz}% + \.Faddchar_raw\.tempa\.tempb + \_ea\_xdef\_csname F@addchar@\.tempa\.tempb\_endcsname{\.Fresult}% + }% + }% + +\_def\.Faddchar#1#2{% + \_ea\_def\_ea\.Fresult\_ea{\_csname F@addchar@#1#2\_endcsname}% +}% + +\_def\.Faddstrings#1#2{% + \_edef\.argument{(,#1\_relax\_relax)(#2\_relax\_relax)}% + \_ea\.Faddstrings_recursion\.argument% +}% + +\_def\.Faddstrings_recursion(#1,#2#3)(#4#5){% + %Adds two hexadecimal strings, bitwise, from left to right. + %The second string is allowed to be shorter than the first. + \_def\.testii{#2}% + \_def\.testiv{#4}% + \_ifx\.testii\.relax + %The entire string has been processed. + \_gdef\.Fresult{#1}% + \_else + \_ifx\.testiv\.relax + %The second string is over. + \.striptworelaxes(#1#2#3)% + %Now \.Fresult contains the answer. + \_else + %We continue to add. + \.Faddchar{#2}{#4}% + \_edef\.argument{(#1\.Fresult,#3)(#5)}% + \_ea\.Faddstrings_recursion\.argument% + \_fi + \_fi +}% +\_gdef\.Fstripleadingzero(0#1){\_edef\.Fresult{#1}}% + +\.i=0% +\_def\.poweroftwo{1}% +\.for \.iz = 1 to 254 by 1% + {\_global\_advance\.i by1% + \.a=\.poweroftwo\_relax + \_multiply\.a by 2\_relax + \_edef\.poweroftwo{\_the\.a}% + \.decimaltohex[2]{\.poweroftwo_hex}{\.poweroftwo}% + \_ea\_ifnum\.poweroftwo>255\_relax + %We need to bitwise add the polynomial represented by 100011101, i.e. 0x11d. + \.Faddstrings{\.poweroftwo_hex}{11d}% %Now it should start with 0. + \_ea\.Fstripleadingzero\_ea(\.Fresult)% %Now it should be two hex digits. + \_edef\.poweroftwo_hex{\.Fresult}% %Save the hex version. + \.hextodecimal{\.poweroftwo}{\.Fresult}% + \_fi + \_xdef\.poweroftwo{\.poweroftwo}% + \_ea\_xdef\_csname F@twotothe@\_the\.i\_endcsname{\.poweroftwo_hex}% + \_ea\_xdef\_csname F@logtwo@\.poweroftwo_hex\_endcsname{\_the\.i}% + }% +\_ea\_xdef\_csname F@twotothe@0\_endcsname{01}% +\_ea\_xdef\_csname F@logtwo@01\_endcsname{0}% + +\_def\.Ftwotothe#1{% + \_ea\_xdef\_ea\.Fresult\_ea{\_csname F@twotothe@#1\_endcsname}% +}% +\_def\.Flogtwo#1{% + \_ea\_xdef\_ea\.Fresult\_ea{\_csname F@logtwo@#1\_endcsname}% +}% + +\_def\.zerozero{00}% + +\_def\.Fmultiply#1#2{% + % #1 and #2 are two elements of F_256, + % given as two-character hexadecimal strings. + % Multiply them within F_256, and place the answer in \.Fresult + \_edef\.argA{#1}% + \_edef\.argB{#2}% + \_ifx\.argA\.zerozero + \_def\.Fresult{00}% + \_else + \_ifx\.argB\.zerozero + \_def\.Fresult{00}% + \_else + \_ea\.Flogtwo\_ea{\.argA}% + \_edef\.logA{\.Fresult}% + \_ea\.Flogtwo\_ea{\.argB}% + \_edef\.logB{\.Fresult}% + \_ea\.a\_ea=\.logA\_relax% \.a = \logA + \_ea\_advance\_ea\.a\.logB\_relax% \advance \.a by \logB + \_ifnum\.a>254\_relax% + \_advance\.a by -255\_relax + \_fi + \_ea\.Ftwotothe\_ea{\_the\.a}% + % Now \.Fresult contains the product, as desired. + \_fi + \_fi +}% + +\_newifi\_ifqr_FXleadingcoeff_zero +\_def\.FXtestleadingcoeff(#1#2#3){% + % Tests whether the leading coefficient of the hex-string #1#2#3 is '00'. + \_edef\.FXleadingcoefficient{#1#2}% + \.FXleadingcoeff_zerofalse + \_ifx\.FXleadingcoefficient\.zerozero + \.FXleadingcoeff_zerotrue + \_fi +}% + +\_newifi\_ifqr_FXdivisiondone + +\_newcount\.divisionsremaining %Keep track of how many divisions to go! +\_def\.FXpolynomialdivide#1#2{% + \_edef\.FXnumerator{#1}% + \_edef\.denomin{#2}% + \.getstringlength\.FXnumerator + \.setcounter\.divisionsremaining{\.stringlength}% + \.getstringlength\.denomin + \.addtocounter\.divisionsremaining{-\.stringlength}% + \.addtocounter\.divisionsremaining{2}% + \_divide\.divisionsremaining by 2\_relax %2 hex chars per number + \.FXdivisiondonefalse + \_ea\_ea\_ea\.FXpolynomialdivide_recursive\_ea\_ea\_ea{\_ea\.FXnumerator\_ea}\_ea{\.denomin}% +}% + +\_def\.FXpolynomialdivide_recursive#1#2{% + % #1 = f(x), of degree n + % #2 = g(x), of degree m + % Obtains a new polynomial h(x), congruent to f(x) modulo g(x), + % but of degree at most n-1. + % + % If leading coefficient of f(x) is 0, strips off that leading zero. + % If leading coefficient of f(x) is a, subtracts off a * g(x) * x^(n-m). + % N.B. we assume g is monic. + % + \.FXtestleadingcoeff(#1)% + \_ifqr_FXleadingcoeff_zero + %Leading coefficient is zero, so remove it. + \_ea\_def\_ea\.FXnumerator\_ea{\.FXstripleadingzero(#1)}% + \_else% + %Leading coefficient is nonzero, and contained in \.FXleadingcoefficient + \.FXsubtractphase{#1}{#2}{\.FXleadingcoefficient}% + \_ifqr_FXsubtractfailed + %If subtraction failed, that means our #1 was already the remainder! + \.FXdivisiondonetrue + \_edef\.theremainder{#1}% + \_else% + %xor succeeded. We need to recurse. + \_ea\_ea\_ea\_edef\_ea\_ea\_ea\.FXnumerator\_ea\_ea\_ea{\_ea\.FXstripleadingzero\_ea(\.FXsubtraction_result)}% + \_fi% + \_fi% + \.addtocounter\.divisionsremaining{-1}% + \_ifnum\.divisionsremaining=0\_relax + %Division is done! + \.FXdivisiondonetrue + \_edef\.theremainder{\.FXnumerator}% + \_relax% + \_else% + \_ea\.FXpolynomialdivide_recursive\_ea{\.FXnumerator}{#2}% + \_fi% +}% + +\_def\.FXstripleadingzero(00#1){#1}%Strips off a single leading zero of F_256. + +\_newifi\_ifqr_FXsubtractfailed% This flag will trigger when #2 is longer than #1. + +\_def\.FXsubtractphase#1#2#3{% + % #1 = bitstring + % #2 = bitstring no longer than #1 + % #3 = leading coefficient + \.FXsubtractfailedfalse + \_edef\.argument{(,#1\_relax\_relax\_relax)(#2\_relax\_relax\_relax)(#3)}% + \_ea\.FXsubtract_recursive\.argument% +}% + +\_def\.FXsubtract_recursive(#1,#2#3#4)(#5#6#7)(#8){% + % This is a recursive way to compute f(x) - a*g(x)*x^k. + % #1#2#3#4 is the first bitstring, subtracted up through #1. + % Thus #2#3 constitutes the next two-character coefficient. + % #5#6#7 is the remaining portion of the second bitstring. + % Thus #5#6 constitutes the next two-character coefficient + % #8 is the element a of F_256. It should contain two characters. + \_def\.testii{#2}% + \_def\.testv{#5}% + \_ifx\.testii\.relax + % #1 contains the whole string. + % Now if #5 is also \_relax, that means the two strings started off with equal lengths. + % If, however, #5 is not \_relax, that means the second string was longer than the first, a problem. + \_ifx\.testv\.relax + %No problem. We are done. + \.FXsubtract_saveresult(#1#2#3#4)% %We keep the #2#3#4 to be sure we have all three relax-es to strip off. + \_else + %Problem! The second string was longer than the first. + %This usually indicates the end of the long division process. + \.FXsubtractfailedtrue + \_def\.FXsubtraction_result{}% + \_fi + \_else + % There is still a coefficient to manipulate in #2#3. + % Check whether #5 contains anything. + \_ifx\.testv\.relax + % No, #5 is empty. We are done. "#2#3#4" contains the remainder of the first string, + % which we append untouched and then strip off the three \_relax-es. + \.FXsubtract_saveresult(#1#2#3#4)% + \_else + % Yes, #5#6 still has something to XOR. Do the task. + \.Fmultiply{#5#6}{#8}% Multiply by the factor 'a'. + \.Faddstrings{#2#3}{\.Fresult}% Subtract. (We're in characteristic two, so adding works.) + \_edef\.argument{(#1\.Fresult,#4)(#7)(#8)}% + \_ea\.FXsubtract_recursive\.argument% + \_fi + \_fi +}% + +\_def\.FXsubtract_saveresult(#1\_relax\_relax\_relax){% + %Strips off the three extra '\_relax'es at the end. + \_def\.FXsubtraction_result{#1}% +}% + +\_def\.FXcreategeneratorpolynomial#1{% + % #1 = n, the number of error codewords desired. + % We need to create \prod_{j=0}^{n-1} (x-2^j). + \_edef\.FXgenerator_degree{#1}% + \_def\.FXgeneratorpolynomial{01}% Initially, set it equal to 1. + \.setcounter\.i{0}% + \.FXcreategenerator_recursive% + %The result is now stored in \.FXgeneratorpolynomial +}% + +\_def\.FXcreategenerator_recursive{% + % \.FXgeneratorpolynomial contains the current polynomial f(x), + % which should be a degree-i polynomial + % equal to \prod_{j=0}^{i-1} (x-2^j). + % (If i=0, then \.FXgeneratorpolynomial should be 01.) + % This recursion step should multiply the existing polynomial by (x-2^i), + % increment i by 1, and check whether we're done or not. + \_edef\.summandA{\.FXgeneratorpolynomial 00}% This is f(x) * x + \_edef\.summandB{00\.FXgeneratorpolynomial}% This is f(x), with a 0x^{i+1} in front. + \.Ftwotothe{\_the\.i}% + \_edef\.theconstant{\.Fresult}% + \.FXsubtractphase{\.summandA}{\.summandB}{\.theconstant}% + %This calculates \.summandA + \.theconstant * \.summandB + %and stores the result in \.FXsubtraction_result + \_edef\.FXgeneratorpolynomial{\.FXsubtraction_result}% + \.stepcounter\.i + \_ea \_ifnum\.FXgenerator_degree=\.i\_relax + %We just multiplied by (x-2^{n-1}), so we're done. + \_relax + \_else% + %We need to do this again! + \_ea \.FXcreategenerator_recursive + \_fi +}% + +\_def\.FXgenerate_errorbytes#1#2{% + % #1 = datastream in hex + % #2 = number of error correction bytes requested + \_edef\.numerrorbytes{#2}% + \_ea\.FXcreategeneratorpolynomial\_ea{\.numerrorbytes}% + \_edef\.FXnumerator{#1}% + \.for \.iz = 1 to \.numerrorbytes by 1% + {\.xaddto\.FXnumerator{00}}% %One error byte means two hex codes. + \.FXpolynomialdivide{\.FXnumerator}{\.FXgeneratorpolynomial}% + \_edef\.FXerrorbytes{\.theremainder}% +}% +\_newifi\_ifqr_versionmodules + +\_def\.level_char#1{% + \_ea\_ifcase#1 + M\_or L\_or H\_or Q\_fi}% + +\_newifi\_ifqr_versiongoodenough +\_def\.choose_bestversion#1{% + % \.desiredversion = user-requested version + % \.desiredlevel = user-requested error-correction level + \_edef\.stringlength{\.utfstringlen{#1}}% + % + %Run double loop over levels and versions, looking for + %the smallest version that can contain our data, + %and then choosing the best error-correcting level at that version, + %subject to the level being at least as good as the user desires. + \_global\.versiongoodenoughfalse% + \_gdef\.bestversion{0}% + \_gdef\.bestlevel{0}% + \_ifnum\.desiredversion=0\_relax + \.a=1\_relax + \_else + \.a=\.desiredversion\_relax + \_fi + \.for \.iz=\.a to 40 by 1 + {\_edef\.version{\_the\.iz}% + \_global\.versiongoodenoughfalse + \.for \.jz=0 to 3 by 1% + {%First, we map {0,1,2,3} to {1,0,4,3}, so that we loop through {M,L,H,Q} + %in order of increasing error-correction capabilities. + \.a = \.jz\_relax + \_divide \.a by 2\_relax + \_multiply \.a by 4\_relax + \_advance \.a by 1\_relax + \_advance \.a by -\.jz\_relax + \_edef\.level{\_the\.a}% + \_ifnum\.desiredlevel=\.a\_relax + \_global\.versiongoodenoughtrue + \_fi + \_ifqr_versiongoodenough + \.calculate_capacity{\.version}{\.level}% + \_ea\_ea\_ea\_ifnum\_ea\.truecapacity\_ea<\.stringlength\_relax + %Too short + \_relax + \_else + %Long enough! + \_xdef\.bestversion{\.version}% + \_xdef\.bestlevel{\.level}% + \_global\.iz=40% + \_fi + \_fi + }% + }% + \_edef\.version{\.bestversion}% + \_edef\.level{\.bestlevel}% + \_ea\_ifnum\.desiredversion>0\_relax + \_ifx\.bestversion\.desiredversion\_relax + %No change from desired version. + \_else + %Version was increased + \.message{<Requested QR version '\.desiredversion' is too small for desired text.}% + \.message{Version increased to '\.bestversion' to fit text.>^^J}% + \_fi + \_fi + \_ifx\.bestlevel\.desiredlevel\_relax + %No change in level. + \_else + \.message{<Error-correction level increased from \.level_char{\.desiredlevel}}% + \.message{to \.level_char{\.bestlevel} at no cost.>^^J}% + \_fi +}% + +\_def\.calculate_capacity#1#2{% + \_edef\.version{#1}% + \_edef\.level{#2}% + %Calculate \.size, the number of modules per side. + % The formula is 4\.version+17. + \.a=\.version\_relax + \_multiply\.a by 4\_relax + \_advance\.a by 17\_relax + \_xdef\.size{\_the\.a}% + % + % Calculate \.k, which governs the number of alignment patterns. + % The alignment patterns lie in a kxk square, except for 3 that are replaced by finding patterns. + % The formula is 2 + floor( \.version / 7 ), except that k=0 for version 1. + \_ea\_ifnum\.version=1\_relax% + \_def\.k{0}% + \_else% + \.a=\.version\_relax + \_divide \.a by 7\_relax + \_advance\.a by 2\_relax + \_edef\.k{\_the\.a}% + \_fi% + % + %Calculate number of function pattern modules. + %This consists of the three 8x8 finder patterns, the two timing strips, and the (k^2-3) 5x5 alignment patterns. + %The formula is 160+2n+25(k^2-3)-10(k-2), unless k=0 in which case we just have 160+2n. + \.a=\.size\_relax + \_multiply\.a by 2\_relax + \_advance\.a by 160\_relax + \_ea\_ifnum\.k=0\_relax\_else + %\.k is nonzero, hence at least 2, so we continue to add 25(k^2-3)-10(k-2). + \.b=\.k\_relax + \_multiply\.b by \.k\_relax + \_advance\.b by -3\_relax + \_multiply\.b by 25\_relax + \_advance\.a by \.b\_relax + \.b=\.k\_relax + \_advance\.b by -2\_relax + \_multiply\.b by 10\_relax + \_advance\.a by -\.b\_relax + \_fi + \_edef\.numfunctionpatternmodules{\_the\.a}% + % + %Calculate the number of version modules, either 36 or 0. + \_ea\_ifnum\.version>6\_relax + \.versionmodulestrue + \_def\.numversionmodules{36}% + \_else + \.versionmodulesfalse + \_def\.numversionmodules{0}% + \_fi + % + %Now calculate the codeword capacity and remainder bits. + %Take n^2 modules, subtract all those dedicated to finder patterns etc., format information, and version information, + %and what's left is the number of bits we can play with. + %The number of complete bytes is \.numdatacodewords; + %the leftover bits are \.numremainderbits. + \.a=\.size\_relax + \_multiply \.a by \.size\_relax + \_advance \.a by -\.numfunctionpatternmodules\_relax + \_advance \.a by -31\_relax% % There are 31 format modules. + \_advance \.a by -\.numversionmodules\_relax + \.b=\.a\_relax + \_divide \.a by 8\_relax + \_edef\.numdatacodewords{\_the\.a}% + \_multiply\.a by 8\_relax + \_advance \.b by -\.a\_relax + \_edef\.numremainderbits{\_the\.b}% + % + %The size of the character count indicator also varies by version. + %There are only two options, so hardcoding seems easier than expressing these functionally. + \_ea\_ifnum\.version<10\_relax + \_def\.charactercountbytes_byte{1}% + \_def\.charactercountbits_byte{8}% + \_else + \_def\.charactercountbytes_byte{2}% + \_def\.charactercountbits_byte{16}% + \_fi + % + %Now we call on the table, from the QR specification, + %of how many blocks to divide the message into, and how many error bytes each block gets. + %This affects the true capacity for data, which we store into \.totaldatacodewords. + % The following macro sets \.numblocks and \.numeccodewords + % based on Table 9 of the QR specification. + \.settableix + \.a = -\.numblocks\_relax + \_multiply \.a by \.numeccodewords\_relax + \_advance\.a by \.numdatacodewords\_relax + \_edef\.totaldatacodewords{\_the\.a}% + \_advance\.a by -\.charactercountbytes_byte\_relax%Subtract character count + \_advance\.a by -1\_relax% Subtract 1 byte for the 4-bit mode indicator and the 4-bit terminator at the end. + \_edef\.truecapacity{\_the\.a}% +} + +\_def\.setversion#1#2{% + % #1 = version number, an integer between 1 and 40 inclusive. + % #2 = error-correction level, as an integer between 0 and 3 inclusive. + % 0 = 00 = M + % 1 = 01 = L + % 2 = 10 = H + % 3 = 11 = Q + % This macro calculates and sets a variety of global macros and/or counters + % storing version information that is used later in construction the QR code. + % Thus \setversion should be called every time! + % + \_edef\.version{#1}% + \_edef\.level{#2}% + % + \.calculate_capacity{\.version}{\.level}% + %The capacity-check code sets the following: + % * \.size + % * \.k + % * \_ifqr_versionmodules + % * \.numversionmodules + % * \.numdatacodewords + % * \.numremainderbits + % * \.charactercountbits_byte + % * \.charactercountbytes_byte + % * \.numblocks (via \.settableix) + % * \.numeccodewords (via \.settableix) + % * \.totaldatacodewords + % + % The alignment patterns' square is 7 modules in from each edge. + % They are spaced "as evenly as possible" with an even number of modules between each row/column, + % unevenness in division being accommodated by making the first such gap smaller. + % The formula seems to be + % general distance = 2*round((n-13)/(k-1)/2+0.25) + % = 2*floor((n-13)/(k-1)/2+0.75) + % = 2*floor( (2*(n-13)/(k-1)+3) / 4 ) + % = (((2*(n-13)) div (k-1) + 3 ) div 4 ) * 2 + % first distance = leftovers + % The 0.25 is to accommodate version 32, which is the only time we round down. + % Otherwise a simple 2*ceiling((n-13)/(k-1)/2) would have sufficed. + % + \.a = \.size\_relax + \_advance\.a by -13\_relax + \_multiply\.a by 2\_relax + \.b = \.k\_relax + \_advance \.b by -1\_relax + \_divide\.a by \.b\_relax + \_advance\.a by 3\_relax + \_divide\.a by 4\_relax + \_multiply\.a by 2\_relax + \_edef\.alignment_generalskip{\_the\.a}% + % + %Now set \.alignment_firstskip to (\.size-13)-(\.k-2)*\.alignment_generalskip % + \.a = \.k\_relax + \_advance\.a by -2\_relax + \_multiply\.a by -\.alignment_generalskip\_relax + \_advance\.a by \.size\_relax + \_advance\.a by -13\_relax + \_edef\.alignment_firstskip{\_the\.a}% + % + % + % + % Our \.totaldatacodewords bytes of data are broken up as evenly as possible + % into \.numblocks datablocks; some may be one byte longer than others. + % We set \.shortblock_size to floor(\.totaldatacodewords / \.numblocks) + % and \.numlongblocks to mod(\.totaldatacodewords , \.numblocks). + \.a=\.totaldatacodewords\_relax + \_divide\.a by \.numblocks\_relax + \_edef\.shortblock_size{\_the\.a}% + \_multiply\.a by -\.numblocks\_relax + \_advance\.a by \.totaldatacodewords\_relax + \_edef\.numlongblocks{\_the\.a}% + % + %Set \.longblock_size to \.shortblock_size+1. + \.a=\.shortblock_size\_relax + \_advance\.a by 1\_relax + \_edef\.longblock_size{\_the\.a}% + % + %Set \.numshortblocks to \.numblocks - \.numlongblocks + \.b=\.numblocks\_relax + \_advance\.b by -\.numlongblocks\_relax + \_edef\.numshortblocks{\_the\.b}% +}% + +\_def\.settableix_int(#1,#2){% + \_edef\.numblocks{#1}% + \_edef\.numeccodewords{#2}% +}% + +\_def\.settableix{% +\_ea\_ifcase\.level\_relax + %00: Level 'M', medium error correction + \_edef\.tempdata{(% + \_ifcase\.version\_relax + \_relax %There is no version 0. + \_or1,10% + \_or1,16% + \_or1,26% + \_or2,18% + \_or2,24% + \_or4,16% + \_or4,18% + \_or4,22% + \_or5,22% + \_or5,26% + \_or5,30% + \_or8,22% + \_or9,22% + \_or9,24% + \_or10,24% + \_or10,28% + \_or11,28% + \_or13,26% + \_or14,26% + \_or16,26% + \_or17,26% + \_or17,28% + \_or18,28% + \_or20,28% + \_or21,28% + \_or23,28% + \_or25,28% + \_or26,28% + \_or28,28% + \_or29,28% + \_or31,28% + \_or33,28% + \_or35,28% + \_or37,28% + \_or38,28% + \_or40,28% + \_or43,28% + \_or45,28% + \_or47,28% + \_or49,28% + \_fi)}% +\_or + %01: Level 'L', low error correction + \_edef\.tempdata{% + (\_ifcase\.version\_relax + \_relax %There is no version 0. + \_or 1,7% + \_or 1,10% + \_or 1,15% + \_or 1,20% + \_or 1,26% + \_or 2,18% + \_or 2,20% + \_or 2,24% + \_or 2,30% + \_or 4,18% + \_or 4,20% + \_or 4,24% + \_or 4,26% + \_or 4,30% + \_or 6,22% + \_or 6,24% + \_or 6,28% + \_or 6,30% + \_or 7,28% + \_or 8,28% + \_or 8,28% + \_or 9,28% + \_or 9,30% + \_or 10,30% + \_or 12,26% + \_or 12,28% + \_or 12,30% + \_or 13,30% + \_or 14,30% + \_or 15,30% + \_or 16,30% + \_or 17,30% + \_or 18,30% + \_or 19,30% + \_or 19,30% + \_or 20,30% + \_or 21,30% + \_or 22,30% + \_or 24,30% + \_or 25,30% + \_fi)}% +\_or + %10: Level 'H', high error correction + \_edef\.tempdata{(% + \_ifcase\.version\_relax + \_relax %There is no version 0. + \_or1,17% + \_or1,28% + \_or2,22% + \_or4,16% + \_or4,22% + \_or4,28% + \_or5,26% + \_or6,26% + \_or8,24% + \_or8,28% + \_or11,24% + \_or11,28% + \_or16,22% + \_or16,24% + \_or18,24% + \_or16,30% + \_or19,28% + \_or21,28% + \_or25,26% + \_or25,28% + \_or25,30% + \_or34,24% + \_or30,30% + \_or32,30% + \_or35,30% + \_or37,30% + \_or40,30% + \_or42,30% + \_or45,30% + \_or48,30% + \_or51,30% + \_or54,30% + \_or57,30% + \_or60,30% + \_or63,30% + \_or66,30% + \_or70,30% + \_or74,30% + \_or77,30% + \_or81,30% + \_fi)}% +\_or + %11: Level 'Q', quality error correction + \_edef\.tempdata{(% + \_ifcase\.version\_relax + \_relax %There is no version 0. + \_or1,13% + \_or1,22% + \_or2,18% + \_or2,26% + \_or4,18% + \_or4,24% + \_or6,18% + \_or6,22% + \_or8,20% + \_or8,24% + \_or8,28% + \_or10,26% + \_or12,24% + \_or16,20% + \_or12,30% + \_or17,24% + \_or16,28% + \_or18,28% + \_or21,26% + \_or20,30% + \_or23,28% + \_or23,30% + \_or25,30% + \_or27,30% + \_or29,30% + \_or34,28% + \_or34,30% + \_or35,30% + \_or38,30% + \_or40,30% + \_or43,30% + \_or45,30% + \_or48,30% + \_or51,30% + \_or53,30% + \_or56,30% + \_or59,30% + \_or62,30% + \_or65,30% + \_or68,30% + \_fi)}% +\_fi +\_ea\.settableix_int\.tempdata +}% + +\_def\.qM{M}\_def\.qz{0}% +\_def\.qL{L}\_def\.qi{1}% +\_def\.qH{H}\_def\.qii{2}% +\_def\.qQ{Q}\_def\.qiii{3}% +\_def\.setlevel#1{% + \_edef\.level_selected{#1}% + \_ifx\.level_selected\.qM + \_edef\.desiredlevel{0}% + \_fi + \_ifx\.level_selected\.qL + \_edef\.desiredlevel{1}% + \_fi + \_ifx\.level_selected\.qH + \_edef\.desiredlevel{2}% + \_fi + \_ifx\.level_selected\.qQ + \_edef\.desiredlevel{3}% + \_fi + \_ifx\.level_selected\.qz + \_edef\.desiredlevel{0}% + \_fi + \_ifx\.level_selected\.qi + \_edef\.desiredlevel{1}% + \_fi + \_ifx\.level_selected\.qii + \_edef\.desiredlevel{2}% + \_fi + \_ifx\.level_selected\.qiii + \_edef\.desiredlevel{3}% + \_fi +}% + +% key-value pairs (OPmac trick 0069) +\_def\.kv#1{\_ifcsname _qr_kv:#1\_endcsname \_csname _qr_kv:#1\_ea\_endcsname + \_else \_ea\.kvunknown \_fi +} +\_def\.kvunknown{???} +\_def\.kvscan #1#2=#3,{\_ifx#1,\_else \_sdef{_qr_kv:#1#2}{#3}\_ea\.kvscan\_fi} + +\_def\.qrset#1{\_def\.tmpb{#1,}% + \_replstring\.tmpb{ =}{=}\_replstring\.tmpb{= }{=}% + \_replstring\.tmpb{tight,}{qr-border=0,}% + \_replstring\.tmpb{padding,}{qr-border=1,}% + \_replstring\.tmpb{verbose,}{qr-message=1,}% + \_replstring\.tmpb{silent,}{qr-message=0,}% + \_replstring\.tmpb{draft,}{qr-final=0,}% + \_replstring\.tmpb{final,}{qr-final=1,}% + \_replstring\.tmpb{nolink,}{qr-link=0,}% + \_replstring\.tmpb{link,}{qr-link=1,}% + \_ea\.kvscan\.tmpb,=,% + \.desiredheight=\.kv{height}\_relax + \.setlevel{\.kv{level}}% + \_edef\.desiredversion{\.kv{version}}% +} +\.qrset{height=2cm, version=0, level=M, tight, silent, final, nolink} + +\_def\.setcounter #1#2{\_global#1=#2\_relax} +\_def\.stepcounter #1{\_global\_advance#1 by1\_relax} +\_def\.addtocounter#1#2{\_global\_advance#1 by#2\_relax} + +\_def\.qrcode{\_begingroup + \_isnextchar[{\.qrcodeA}{\.qrcodeB}% +} +\_def\.qrcodeA[#1]{\.qrset{#1}\_ea\.qrcodeB\_romannumeral-`\.} +\_def\.qrcodeB#1{% + \_if1\.kv{qr-message}\_let\.message=\_message \_else \_def\.message##1{}\_fi + \_if1\.kv{qr-border}\_def\.padd{\_kern4\.modulesize}\_else\_def\.padd{}\_fi + \_bgroup + \_escapechar=-1 + \_xdef\.etext{\_detokenize{#1}}\_gdef\.text{#1}% + \_egroup + \.qrcode_int + \_endgroup +} +\_def\.qrcode_int{% + \.message{<QR code requested for "\.etext" in version + \.desiredversion-\.level_char{\.desiredlevel}.>^^J}% + %First, choose the version and level. + %Recall that \.choose_bestversion sets \.version and \.level. + \_ea\.choose_bestversion\_ea{\.etext}% + \_if1\.kv{qr-final}% + \.setversion{\.version}{\.level}% + \.qrcode_int_new + \_else + \.modulesize=\.desiredheight + \_divide\.modulesize by \.size\_relax + \_let\.d=\.desiredheight + \_vbox{\.padd\_hbox{\.padd\_vbox to\.d{\_hrule\_vss + \_hbox to\.d{\_vrule height.7\.d depth.3\.d \_hss ...QR...\_hss\_vrule}% + \_vss\_hrule}\.padd}\.padd}% + \_fi +}% + +\_nspublic \qrcode \qrset ; + +\_def\.qrcode_int_new{% + \.qrbeginhook + \.createsquareblankmatrix{newqr}{\.size}% + \.placefinderpatterns{newqr}% + \.placetimingpatterns{newqr}% + \.placealignmentpatterns{newqr}% + \.placedummyformatpatterns{newqr}% + \.placedummyversionpatterns{newqr}% + \.message{<Calculating QR code for "\.etext" in + version \.version-\.level_char{\.level}.>^^J}% + \_ea\.encode_binary\_ea{\.etext}% + \.splitcodetextintoblocks + \.createerrorblocks + \.interleave + \.message{<Writing data...}% + \.writedata_hex{newqr}{\.interleaved_text}% + \.message{done.>^^J}% + \.writeremainderbits{newqr}% + \.chooseandapplybestmask{newqr}% + \.decimaltobinary[2]{\.level_binary}{\.level}% + \.decimaltobinary[3]{\.mask_binary}{\.mask_selected}% + \_edef\.formatstring{\.level_binary\.mask_binary}% + \.message{<Encoding and writing format string...}% + \_ea\.encodeandmaskformat\_ea{\.formatstring}% + \.writeformatstring{newqr}{\.formatbitstring}% + \.message{done.>^^J}% + \.message{<Encoding and writing version information...}% + \.decimaltobinary[6]{\.version_binary}{\.version}% + \.Golaycode{\.version_binary}% + \.writeversionstring{newqr}{\.Golayresult}% + \.message{done.>^^J}% + \.message{<Printing QR code...}% + \.matrixtobinary{newqr}% + \.restore\.data + \.message{done.>^^J}% + \.qrendhook +}% + +\_def\.matrixtobinary#1{% + \_bgroup + \_gdef\.data{}% + \_def\.black{1}\_let\.blackfixed=\.black \_let\.blackformat=\.black + \_def\.white{0}\_let\.whitefixed=\.white \_let\.whiteformat=\.white + \.for \.iz = 1 to \.size by 1 + {\.for \.jz = 1 to \.size by 1 + {\_xdef\.data{\.data\.matrixentry{#1}{\_the\.iz}{\_the\.jz}}}}% + \_xdef\.data{{\.size}{\.data}}% + \_egroup +} + +\_def\.restore#1{\_ea\.restoreA#1} +\_def\.restoreA#1#2{% + \.modulesize=\.desiredheight \_divide\.modulesize by#1 + \_if1\.kv{qr-link}\_setbox0=\_fi + \_vbox\_bgroup\.padd \_offinterlineskip \_baselineskip=\.modulesize + \.i=0 \.j=0 \_let\.next=\.restoreB + \_hbox\_bgroup\.padd \.restoreB #2% + \_if1\.kv{qr-link}\.link{\.etext}{\_box0}\_fi +} +\_def\.restoreB#1{\_advance \.j by1 + \_ifx1#1\_vrule height\.modulesize width\.modulesize\_else \_kern\.modulesize\_fi + \_ifnum\.size=\.j \_vrule height\.modulesize width 0pt \.padd\_egroup \_advance\.i by1 + \_ifnum\.size=\.i \.padd\_egroup \_let\.next=\_relax \_else \_hbox\_bgroup\.padd \_fi + \_fi \.next +} + +\_def\.qrbeginhook{} +\_def\.qrendhook{} + +\_endnamespace +\_endcode + +This macro file is created for \OpTeX/. It is derived from: + +\begtt +% qrcode.tex +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Petr Olsak <petr@olsak.net> Jul. 2015 + +% This macro qrcode.tex is (roughly speaking) a copy of qrcode.sty +% macro by Anders Hendrickson <ahendric@cord.edu>, see +% http://www.ctan.org/tex-archive/macros/latex/contrib/qrcode + +% The main difference between qrcode.sty and qrcode.tex is, that +% the LaTeX ballast was removed from qrcode.sty by Petr Olsak. The result: +% The qrcode.tex macro can be used in plain TeX format too. +\endtt + +\secc Usage + +Load this macro file by `\load[qrcode]` and then the command +`\qrcode{<encoded text>}` or `\qrcode[<options>]{<encoded text>}` is ready to use. + +The parameter <encoded text> is used as is (without expanding). +It follows the same rules as in the `\code{<text>}` macro. +Use these rules if the encoded text includes a \TeX/ sensitive characters. + +The characters from all Unicode table are allowed in <encoded text>. + +\secc Options + +You can use `\qrset{<options>}` for global-like options and +`\qrcode[<options>]{<encoded text>}` for local options for one QR code. +The `\qrset{<options>}` is valid within a group (if exists) or in whole +document. + +Options are separated by comma and they are in two types: single +word or key=value format. Default options are: + +\begtt +\qrset{height=2cm, version=0, level=M, tight, silent, final, nolink} +\endtt + +The options are the same as described in `qrcode.pdf` at +\url{http://www.ctan.org/tex-archive/macros/latex/contrib/qrcode}. +In short: + +\begitems +* `height=dimen` ... The height of the QRcode without padding. + +* `version=number` ... Number 0 to 40 linearly depends on the density of QRcode. + The 0 means that the density is automatically selected. + +* `level=letter` ... L, M, Q o H (low, medium, quality, hight) sets the amount + of redundancy in the code in order of error recovering. + +* `tight` ... Code without margins. +* `padding` ... 4module blank margins around the code. + +* `verbose` ... Information about calculating in terminal and in the log. +* `silent` ... No information about calculating. + +* `final` ... The QR code is calculated and printed. +* `draft` ... Only empty rectangle in the same size as QR code is printed. + +* `nolink` ... The QR code is not active hyperlink. +* `link` ... The QR code is active hyperlink to <encoded text>. + +* `qrborder={R G B}` ... The color of the frame around active hypertext space + if link option is set. R G B (red green blue) are decimal + numbers from 0 to 1. The frame is visible only in + pdf viewers. Default: invisible frame. +\enditems + + +Example: + +\begtt +\qrset{silent} % ... all codes will be silent in the log and terminal. +\qrcode [height=3cm, link, padding, qrborder={1 0 0}] {http://petr.olsak.net} + % ... 3cm QRcode as hyperlink +\endtt + +Note: + +The saving/restoring pre-calculated QRcodes isn't supported by default. +If you are printing the same QR codes repeatedly, use \setbox/\copy +technique. For example: + +\begtt +\newbox\mybox +\setbox\mybox=\hbox{\qrcode{encoded text}} +\copy\mybox \copy\mybox \copy\mybox etc. +\endtt + +If you have a huge amount of different QR codes, you can use draft/final +options. + +The `\_qr_data` macro is saved after each \qrcode calculation in the format +`{size}{111101011...001}` where size is the number of columns or rows in QR +square and second parameter includes size^2 ones or zeros which means black +or white modules (scanned left to right, top to bottom). Another information +can be retrieved from `\_qr_text` macro (encoded text before expanding) and +`\_qr_etext` macro (raw encoded text, each charater is detokeinized). +The macros `\_qr_data`, `\_qr_text` and `\_qr_etext` are saved globally. + diff --git a/Master/texmf-dist/tex/optex/pkg/vlna.opm b/Master/texmf-dist/tex/optex/pkg/vlna.opm new file mode 100644 index 00000000000..4db22aa0cc9 --- /dev/null +++ b/Master/texmf-dist/tex/optex/pkg/vlna.opm @@ -0,0 +1,193 @@ +% This is the macro package used by OpTeX, see http://petr.olsak.net/optex + +% vlna.opm, Petr Olšák <petr@olsak.net>, 2021 + +% Vlna prevents breaks in spaces after single-letter prepositions, after (or +% before) degrees, and between value and SI units. It enables or disables +% split hyphens too. All folks are done at the postprocessing phase before TeX splits +% the typesetting material into the paragraph lines. + +% vlna.opm is based on Lua code from the package `luavlna` (by Michal Hoftich +% and Miro Hrončok). See `texdoc luavlna` or end of this file for more information. + +\_namespace{vlna} + +\_codedecl \.singlechars {Preventing single-chars prepositions and more <2021-01-08>} + + \_doc ----------------------------- + We declare new attribute, register callbacks, and define Lua functions that + point to Lua functions from `luavlna.lua` package. + We need this package installed. + + We need not `require ltluatex` because `luatexbase.callbaks` are defined + in the `optex.lua` file and it is part of the OpTeX format. + \_cod ----------------------------- + +\_newattribute \.preventsinglestatus + +\_directlua{% + luavlna = require "luavlna" + + luatexbase.add_to_callback("pre_linebreak_filter", luavlna.preventsingle,"LuaVlna") + luatexbase.add_to_callback("hyphenate", luavlna.split_hyphens, "allow hyphen breaks") + luavlna.preventsingleid = \_the\_attributealloc + + set_singlechars = function(lang,chars) + if (lang == "") then return nil end + local utf_gmatch = unicode.utf8.gmatch + local chars = chars or "" + local singlechars = {} + for char in unicode.utf8.gmatch(chars,"(\_csstring\%a)") do + singlechars[char] = true + end + luavlna.singlechars(lang,singlechars) + end + + set_compounds = function(lang, compounds) + if (lang == "") then return nil end + local c = compounds:explode(",+") % match multiple colons as one + local compoundstable = {} + for _, compound in pairs(c) do + compoundstable[compound] = true + end + luavlna.initials(lang, compoundstable) + end + + set_main_language = function(lang) + if (lang == "") then return nil end + luavlna.set_main_language(tonumber(lang)) + end + + enable_split_hyphens = function(lang) + if (lang == "") then return nil end + luavlna.split_hyphen_langs[tonumber(lang)] = true + end + + disable_split_hyphens = function(lang) + if (lang == "") then return nil end + luavlna.split_hyphen_langs[tonumber(lang)] = nil + end +} + + \_doc ----------------------------- + We need not `require luavlna-langno` because of the conversion from + language name to the `\language` number is done by the macro + `\.langtonum``<sequence>={<langname>}` defined here. + It does `\def<sequence>{<langnumber>}` or `\def\sequence{}` if <langname> + is unknown. The <langname> is case insensitive and these names are + declared in the hyphen-lan.opm file, section 2.37.2 in OpTeX documentation. + \_cod ----------------------------- + +\_def\.langtonum#1=#2{\_lowercase{\_edef#1{\_trycs{_ulan:#2}{}}}% + \_ifx#1\_empty \_opwarning{vlna: unknown language "#2", ignored}% + \_else \_edef#1{\_the\_cs{_#1Patt}}\_fi} + + \_doc ----------------------------- + `\singlechars``{<langname>}{<prepositions>}` sets <prepositions> for + given language.\nl + `\compoundinitials``{<langname>}{<comma-separated-list>}` sets + compound characters from the list for given language. + \_cod ----------------------------- + +\_def\.singlechars#1#2{\.langtonum\.l={#1}\_directlua{set_singlechars("\.l","#2")}} +\_def\.compoundinitials#1#2{\.langtonum\.l={#1}\_directlua{set_compounds("\.l","#2")}} + + \_doc ----------------------------- + `\enablesplithyphens` and `\disablesplithyphens` are dependent on the language. + \_cod ----------------------------- + +\_def\.enablesplithyphens#1{\.langtonum\.l={#1}\_directlua{enable_split_hyphens("\.l")}} +\_def\.disablesplithyphens#1{\.langtonum\.l={#1}\_directlua{disable_split_hyphens("\.l")}} + + \_doc ----------------------------- + By default, the language-dependent features of the `luavlna` depend on + the current `\language` value, i.e. on the currently selected hyphenation. + `\preventsinglelang``{<langname>}` activates the language-dependent + features regardless of the current `\language` value. + \_cod ----------------------------- + +\_def\.preventsinglelang#1{\.langtonum\.l={#1}\_directlua{set_main_language("\.l")}} + + \_doc ----------------------------- + Switching on/off `luavlna` preposition features should be done using attribute + setting. It will allow you to switch them on/off in the middle of the paragraph. + \_cod ----------------------------- + +\_def\.preventsingleon{\.preventsinglestatus=2 } +\_def\.preventsingleoff{\.preventsinglestatus=1 } + + \_doc ----------------------------- + Switching on/off the other `luavlna` features is implemented only by + setting a special `luavlna` variable. + \_cod ----------------------------- + +\_def\.preventsingledebugon{\_directlua{luavlna.debug(true)}} +\_def\.preventsingledebugoff{\_directlua{luavlna.debug(false)}} + +\_def\.nopredegrees{\_directlua{luavlna.no_predegrees = true}} +\_def\.nosufdegrees{\_directlua{luavlna.no_sufdegrees = true}} +\_def\.nounits{\_directlua{luavlna.no_unit = true}} +\_def\.noinitials{\_directlua{luavlna.no_initials = true}} + +\_nspublic + \singlechars % declare single-letter prepositions per language + \compoundinitials % declare compound characters per language + \enablesplithyphens % enable split hyphens per language + \disablesplithyphens % disable split hyphens per language + \preventsinglelang % declare main language independent of current hyphenation + \preventsingleon % switch on the prepositions feature (default) + \preventsingleoff % switch off the prepositions feature + \nopredegrees % switch off pre-degrees feature (default is on) + \nosufdegrees % switch off post-degrees feature (default is on) + \nounits % switch off SI units feature (default is on) + \noinitials % switch off initials feature (default is on) + \preventsingledebugon % switch on debug printing (purple squares) + \preventsingledebugoff % switch off debug printing (default) + ; + +\_endnamespace + +% Default values: +\singlechars{Czech}{AIiVvOoUuSsZzKk} +\singlechars{Slovak}{AIiVvOoUuSsZzKk} +\compoundinitials{Czech}{Ch,CH} % doesn't work in version v0.1g of luavlna +\enablesplithyphens{Czech} +\enablesplithyphens{Slovak} +% + predegrees, sufdegrees, units, initials (they are independent of language value) + +\_endcode + +What should be done automatically after `\load[vlna]`: + + Prepositions feature: v lese -> v~lese, (A taky zde) -> (A~taky zde). + + Pre-degrees feature: Mgr. Bown -> Mgr.~Brown. + + Post-degrees feature: John Brown, PhD. -> John Brown,~PhD. + + SI units feature: 42 cm -> 42~cm (with thin space) + + Initials feature: J. Brown -> J.~Brown + + Split hyphens feature: propan-butan -> propan\discretionary{-}{-}{-}butan. + +The prepositions and split-hyphens features are language-dependent, the other +features are language-independent. + +A testing file: + +\begtt +\load[vlna] +\fontfam[LMfonts] +\cslang +\preventsingledebugon + +Mgr. J. Brown, PhD., zkusí v lese (A taky v závorce) zkontrolovat rozměr 42 m. +Obejde se bez propan-butanových lahví. +\bye +\endtt + +Note, that versinon v0.1g 2020-06-02 of the luavlna package is an +experimental code. It seems that `\compoundinitials` does not work in this +version and when you use `\hbox{-}` in a paragraph when +`\enablesplithyphens` then LuaTeX hangs. diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index ffb5406f230..15ded6a1b10 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -1753,7 +1753,6 @@ $standarddest = "texmf-dist"; 'ocherokee', 'lambda', 'ofs', 'generic', 'oinuit', 'lambda', - 'optex', 'luatex', 'outerhbox', 'generic', 'passivetex', 'xmltex', 'pdcmac', 'plain', @@ -2473,7 +2472,6 @@ $standardtex 'ofs', 'generic', 'oinuit', 'fonts', 'oldlatin', 'fonts', - 'optex', 'luatex', 'orkhun', 'fonts', 'ot2cyr', 'fonts', 'pacioli', 'fonts', @@ -6865,10 +6863,10 @@ sub POSTnwejm { &SYSTEM ("$MV images $DEST/tex/latex/$package"); } -sub POSToptex { - print "POST$package - mv base demo pkg subdirs\n"; - &mv_with_mkdir ("base", "demo", "pkg", "$DEST/tex/luatex/$package"); - &SYSTEM ("$MV doc/* ."); +sub POSToptex { # its own formats, so directly under tex/ and doc/ + print "POST$package - mv base demo pkg doc subdirs\n"; + &mv_with_mkdir ("base", "demo", "pkg", "$DEST/tex/$package"); + &mv_with_mkdir ("README", "doc/*", "$DEST/doc/$package"); } sub POSTpas_vc { -- cgit v1.2.3