texlive[59000] Master/texmf-dist: optex (26apr21)

commits+karl at tug.org commits+karl at tug.org
Tue Apr 27 15:34:04 CEST 2021


Revision: 59000
          http://tug.org/svn/texlive?view=revision&revision=59000
Author:   karl
Date:     2021-04-27 15:34:03 +0200 (Tue, 27 Apr 2021)
Log Message:
-----------
optex (26apr21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/optex/README
    trunk/Master/texmf-dist/doc/optex/omls.tex
    trunk/Master/texmf-dist/doc/optex/optex-doc.pdf
    trunk/Master/texmf-dist/doc/optex/optex-doc.tex
    trunk/Master/texmf-dist/doc/optex/optex-math.tex
    trunk/Master/texmf-dist/doc/optex/optex-techdoc.tex
    trunk/Master/texmf-dist/doc/optex/optex-userdoc.tex
    trunk/Master/texmf-dist/tex/optex/base/bib-iso690.opm
    trunk/Master/texmf-dist/tex/optex/base/bib-simple.opm
    trunk/Master/texmf-dist/tex/optex/base/cite-bib.opm
    trunk/Master/texmf-dist/tex/optex/base/f-adventor.opm
    trunk/Master/texmf-dist/tex/optex/base/f-antt.opm
    trunk/Master/texmf-dist/tex/optex/base/f-baskerville.opm
    trunk/Master/texmf-dist/tex/optex/base/f-bonum.opm
    trunk/Master/texmf-dist/tex/optex/base/f-cursor.opm
    trunk/Master/texmf-dist/tex/optex/base/f-ebgaramond.opm
    trunk/Master/texmf-dist/tex/optex/base/f-garamondl.opm
    trunk/Master/texmf-dist/tex/optex/base/f-gfsbodoni.opm
    trunk/Master/texmf-dist/tex/optex/base/f-heros.opm
    trunk/Master/texmf-dist/tex/optex/base/f-kpfonts.opm
    trunk/Master/texmf-dist/tex/optex/base/f-libertine-s.opm
    trunk/Master/texmf-dist/tex/optex/base/f-libertine.opm
    trunk/Master/texmf-dist/tex/optex/base/f-libertinus.opm
    trunk/Master/texmf-dist/tex/optex/base/f-librecaslon.opm
    trunk/Master/texmf-dist/tex/optex/base/f-lmfonts.opm
    trunk/Master/texmf-dist/tex/optex/base/f-merriweather.opm
    trunk/Master/texmf-dist/tex/optex/base/f-pagella.opm
    trunk/Master/texmf-dist/tex/optex/base/f-poltawski.opm
    trunk/Master/texmf-dist/tex/optex/base/f-roboto.opm
    trunk/Master/texmf-dist/tex/optex/base/f-schola.opm
    trunk/Master/texmf-dist/tex/optex/base/f-sourcepro.opm
    trunk/Master/texmf-dist/tex/optex/base/f-technika.opm
    trunk/Master/texmf-dist/tex/optex/base/f-termes.opm
    trunk/Master/texmf-dist/tex/optex/base/f-xcharter.opm
    trunk/Master/texmf-dist/tex/optex/base/fams-ini.opm
    trunk/Master/texmf-dist/tex/optex/base/fnotes.opm
    trunk/Master/texmf-dist/tex/optex/base/fonts-resize.opm
    trunk/Master/texmf-dist/tex/optex/base/fonts-select.opm
    trunk/Master/texmf-dist/tex/optex/base/graphics.opm
    trunk/Master/texmf-dist/tex/optex/base/hyperlinks.opm
    trunk/Master/texmf-dist/tex/optex/base/hyphen-lan.opm
    trunk/Master/texmf-dist/tex/optex/base/luatex-ini.opm
    trunk/Master/texmf-dist/tex/optex/base/math-macros.opm
    trunk/Master/texmf-dist/tex/optex/base/math-unicode.opm
    trunk/Master/texmf-dist/tex/optex/base/more-macros.opm
    trunk/Master/texmf-dist/tex/optex/base/optex.ini
    trunk/Master/texmf-dist/tex/optex/base/parameters.opm
    trunk/Master/texmf-dist/tex/optex/base/plain-macros.opm
    trunk/Master/texmf-dist/tex/optex/base/prefixed.opm
    trunk/Master/texmf-dist/tex/optex/base/ref-file.opm
    trunk/Master/texmf-dist/tex/optex/base/references.opm
    trunk/Master/texmf-dist/tex/optex/base/slides.opm
    trunk/Master/texmf-dist/tex/optex/base/table.opm
    trunk/Master/texmf-dist/tex/optex/base/uni-lcuc.opm
    trunk/Master/texmf-dist/tex/optex/base/unimath-codes.opm
    trunk/Master/texmf-dist/tex/optex/base/usebib.opm
    trunk/Master/texmf-dist/tex/optex/base/verbatim.opm
    trunk/Master/texmf-dist/tex/optex/demo/op-slides.tex
    trunk/Master/texmf-dist/tex/optex/pkg/emoji.opm

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/optex/base/f-newcm.opm
    trunk/Master/texmf-dist/tex/optex/demo/op-mathalign.tex

Modified: trunk/Master/texmf-dist/doc/optex/README
===================================================================
--- trunk/Master/texmf-dist/doc/optex/README	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/doc/optex/README	2021-04-27 13:34:03 UTC (rev 59000)
@@ -19,6 +19,17 @@
 
 History:
 
+<1.02> Apr. 2021
+       Location CTAN:macros/luatex/optex moved to CTAN:macros/optex (similarly for TDS).
+       NewComputerModern font support added.
+       Microtypography support added.
+       Various colors for links can be declared by \def\_<type>linkolor.
+       unimath-codes: \nabla math-code set similar as \Delta.
+       Actual version of UnicodeData.txt read during format generation.
+       Reading mathclacss.opm improved.
+       slides: hyperlink destinations allowed in \slideshow mode too.
+       \bibpart allows to create independent bib-lists in single document.
+       \setwordspace: format of the parameter improved.
 <1.01> Mar. 2021
        Minor code fixes (thanks to reports from users).
        LibreCaslon font file added.

Modified: trunk/Master/texmf-dist/doc/optex/omls.tex
===================================================================
--- trunk/Master/texmf-dist/doc/optex/omls.tex	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/doc/optex/omls.tex	2021-04-27 13:34:03 UTC (rev 59000)
@@ -493,14 +493,14 @@
 \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
+* \.`\tit <title><eol>` should be a title of the document.
+* \.`\chap <title><eol>` or `\chap [<label>] <title><eof>` is the title of
   first level.
-* \.`\sec <title><eof>` or `\sec [<label>] <title><eof>` is the title of
+* \.`\sec <title><eol>` or `\sec [<label>] <title><eof>` is the title of
   second level.
-* \.`\secc <title><eof>` or `\secc [<label>] <title><eof>` is the title of
+* \.`\secc <title><eol>` or `\secc [<label>] <title><eof>` is the title of
   third level.
-* \.`\secl<level> <title><eof>` is the title of given level.
+* \.`\secl<level> <title><eol>` is the title of given level.
 \enditems
 
 \secc Fonts

Modified: trunk/Master/texmf-dist/doc/optex/optex-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/optex/optex-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/optex/optex-doc.tex	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/doc/optex/optex-doc.tex	2021-04-27 13:34:03 UTC (rev 59000)
@@ -20,7 +20,7 @@
 \tit Format Based on Plain \TeX/ and OPmac\fnotemark1
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-\hfill Version 1.01
+\hfill Version 1.02
 
 \centerline{\it Petr Olšák, 2020, 2021}
 

Modified: trunk/Master/texmf-dist/doc/optex/optex-math.tex
===================================================================
--- trunk/Master/texmf-dist/doc/optex/optex-math.tex	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/doc/optex/optex-math.tex	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1476,6 +1476,9 @@
 } $$
 \endtt
 
+More examples of alignments in display math mode (including comparison with
+\LaTeX/ code) are shown in the document
+\ulink[http://petr.olsak.net/ftp/olsak/optex/op-mathalign.pdf]{op-mathalign.pdf}.
 
 \sec Concept of loading math fonts
 

Modified: trunk/Master/texmf-dist/doc/optex/optex-techdoc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/optex/optex-techdoc.tex	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/doc/optex/optex-techdoc.tex	2021-04-27 13:34:03 UTC (rev 59000)
@@ -51,38 +51,38 @@
 %
 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/.
+Other category codes are set as in plain \TeX/.
 
 \verbinput (6-20) optex.ini
 %
 The \`\optexversion` and \`\fmtname` are defined.
 
-\verbinput (22-25) optex.ini
+\verbinput (22-26) 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
+\verbinput (28-37) 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
+\verbinput (39-43) optex.ini
 %
 Individual `*.opm` macro files are read.
 
-\verbinput (44-87) optex.ini
+\verbinput (45-89) 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
+\verbinput (91-94) optex.ini
 
 The `\everyjob` register is initialized and the format is saved by
 the `\dump` command.
 
-\verbinput (94-102) optex.ini
+\verbinput (96-104) optex.ini
 
 }
 

Modified: trunk/Master/texmf-dist/doc/optex/optex-userdoc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/optex/optex-userdoc.tex	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/doc/optex/optex-userdoc.tex	2021-04-27 13:34:03 UTC (rev 59000)
@@ -375,7 +375,7 @@
 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]
+\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf\#ref:objects]
 {Typesetting Math with \OpTeX/} for complete list of math symbols.
 
 The following math alphabets are available:
@@ -1309,6 +1309,29 @@
 reference list. If \^`\nocite[*]` is used then all records from <bib-base>
 are printed.
 
+You can create more independent lists of references (you are creating proceedings,
+for example). Use \^`\bibpart` `{<name>}` to set the scope where \~`\cite`s
+and references list are printed (and interconnected) independent of another
+parts of your document. The \~`\cite` labels used in different parts can be
+the same and they are not affected. References lists can be created manualy
+by \^`\bib` or from a database by `\usebib`.
+Example:
+
+\begtt \typosize[10/12]
+\bibpart {AA}
+...\cite[labelX] ... \cite[labelY] ... % They belong to AA bib-list
+\usebib/c (simple) file.bib            % generates AA bib-list numbered 1, 2, ...
+                                       % \cite prints [1], [2], ... by bib-list AA
+\bibpart {BB}
+...\cite[labelZ] ... \cite[labelX] ... % They belong to BB bib-list
+\bibnum=0 \usebib/c (simple) my.bib    % generates BB bib-list numbered 1, 2, ...
+                                       % \cite prints [1], [2], ... by bib-list BB
+\endtt
+%
+By default, \^`\bibpart` is empty. So \~`\cite`s and the references list are conneted
+using this empty internal name.
+
+
 \sec Graphics
 %%%%%%%%%%%%%
 

Modified: trunk/Master/texmf-dist/tex/optex/base/bib-iso690.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/bib-iso690.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/bib-iso690.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 % 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
+\_codedecl \_undefined {BIB style (iso690) <2021-04-07>} % loaded on demand by \usebib
 
 \_ifx\_optexbibstyle\_undefined \_errmessage
    {This file can be read by: \_string\usebib/? (iso690) bibfiles command only}
@@ -33,8 +33,6 @@
    \_toks1=\_ea{\_biboptionsi}%
    \_edef\_biboptionsi{\_space \_the\_toks1 \_space \_the\_biboptions \_space}%
 }
-\_newtoks\_biboptions
-\_public \biboptions ;
 
    \_doc -----------------------------
    Formating of Author/Editor lists.
@@ -399,12 +397,12 @@
 
 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:
+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
+\endtt
 
 Examples:
 \begtt
@@ -904,3 +902,8 @@
 \endtt
 
 Other options in the option field are silently ignored.
+
+\_endinput
+
+2021-04-07 ... \biboptions toks declaration moved, bug fixed.
+2020-03-10 ... released

Modified: trunk/Master/texmf-dist/tex/optex/base/bib-simple.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/bib-simple.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/bib-simple.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% 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
+\_codedecl \_undefined {BIB style (simple) <2020-03-10>} % loaded on demand by \usebib
 
 \_ifx\_optexbibstyle\_undefined \_errmessage
    {This file can be read by: \_string\usebib/? (simple) bibfiles command only}

Modified: trunk/Master/texmf-dist/tex/optex/base/cite-bib.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/cite-bib.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/cite-bib.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% This is part of the OpTeX project, see http://petr.olsak.net/optex
 
-\_codedecl \cite {Cite, Biblioraphy <2020-03-09>} % loaded in format
+\_codedecl \cite {Cite, Biblioraphy <2021-04-13>} % loaded in format
 
    \_doc -----------------------------
    Registers used by `\cite`, `\bib` macros are declared here.
@@ -14,6 +14,15 @@
 \_public \bibnum \bibmark ;
 
    \_doc -----------------------------
+   \`\_bibp` expands to \^`\bibpart``/`.
+   By default, \^`\bibpart` is empty, so internal links are in the form
+   `cite:/<number>`. If \^`\bibpart` is set to `<bibpart>`, then internal
+   links are `cite:<bibpart>/<number>`.
+   \_cod -----------------------------
+
+\_def\_bibp{\_the\_bibpart/}             % unique name for each bibliography list
+
+   \_doc -----------------------------
    \`\cite` `[<label>,<label>,...,<label>]` manages <labes> using `\_citeA`
    and prints `[<bib-marks>]` using `\_printsavedcites`.
    \nl
@@ -35,7 +44,7 @@
 \_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\_eciteB#1,#2;#3{\_if?#1\_relax #3\_else \_ilink[cite:\_bibp#1]{#3}\_fi\_egroup}
 \_def\_savedcites{}
 
 \_public \cite \nocite \rcite \ecite ;
@@ -45,39 +54,42 @@
    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
+   \`\_Xbib``{<bibpart>}{<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
+   `\_bib:<bibpart>/<label>` and `\_bim:<bibpart>/<number>`.
+   First one includes <number> and second one includes <nonumber>.
+   The `\_lastbn:<bibpart>` macro includes last number of
+   bib-entry used in the document with given <bibpart>.
+   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}}
+\_def\_Xbib#1#2#3#4{\_sxdef{_bib:#1/#2}{\_bibnn{#3}&}%
+   \_if^#4^\_else\_sxdef{_bim:#1/#3}{#4}\_fi\_sxdef{_lastbn:#1}{#3}}
 
    \_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
+   <label> to a global list `\_ctlst:<bibpart>/` 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
+   space and to avoid duplications of <label> in the `\_ctlst:<bibpart>/`, 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
+   * `<label>` was not declared by \^`\_Xbib` before and it is first such a <label> in the
+     document: Then `\_bib:<bibpart>/<label>` is undefined and we save label using
+     \^`\_addcitelist`, write warning on the terminal and define
+     `\_bib:<bibpart>/<label>` as empty.
+   * `<label>` was not declared by \^`\_Xbib` before but it was used previously in the
+     document: Then `\_bib:<bibpart>/<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` before and it is first such <label>
+     used in the document: Then `\_bib:<bibpart>/<label>` includes \`\_bibnn``{<number>}&` and we
+     test this case by the command `\if &\_bibnn{<number>}&`. This is true when `\_bibnn{<number>}`
+     expands to empty. The <label> is saved by \^`\_addcitelist` and
+     `\_bib:<bibpart>/<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
@@ -86,29 +98,54 @@
 
 \_def\_citeA #1#2,{\_if#1,\_else
    \_if *#1\_addcitelist{*}\_ea\_skiptorelax \_fi
-   \_ifcsname _bib:#1#2\_endcsname \_else
+   \_ifcsname _bib:\_bibp#1#2\_endcsname \_else
       \_addcitelist{#1#2}%
-      \_opwarning{\_noexpand\cite [#1#2] unknown. Try to TeX me again}\_openref
+      \_opwarning{{\_the\_bibpart} \_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\_gdef \_csname _bib:\_bibp#1#2\_endcsname {}%
       \_ea\_skiptorelax \_fi
-   \_ea\_ifx \_csname _bib:#1#2\_endcsname \_empty
+   \_ea\_ifx \_csname _bib:\_bibp#1#2\_endcsname \_empty
       \_addto\_savedcites{?,}\_def\_sortcitesA{}\_lastcitenum=0
       \_ea\_skiptorelax \_fi
    \_def\_bibnn##1{}%
-   \_if &\_csname _bib:#1#2\_endcsname
+   \_if &\_csname _bib:\_bibp#1#2\_endcsname
       \_def\_bibnn##1##2{##1}%
       \_addcitelist{#1#2}%
-      \_sxdef{_bib:#1#2}{\_csname _bib:#1#2\_endcsname}%
+      \_sxdef{_bib:\_bibp#1#2}{\_csname _bib:\_bibp#1#2\_endcsname}%
    \_fi
-   \_edef\_savedcites{\_savedcites \_csname _bib:#1#2\_endcsname,}%
+   \_edef\_savedcites{\_savedcites \_csname _bib:\_bibp#1#2\_endcsname,}%
    \_relax
    \_ea\_citeA\_fi
 }
-\_def\_addcitelist#1{\_global\_addto\_citelist{\_citeI[#1]}}
-\_def\_citelist{}
+\_let\_bibnn=\_relax
 
+   \_doc ----------------------------
+   Because we implement possibility of more independent bibliography lists
+   distinguished by <bibpart>, the \`\_addcitelist``{<label>}` macro
+   must add the <label> to given `\_ctlst:<bibpart>/`.\nl
+   When `\_addcitelist` is processed before \^`\usebib`,
+   then \`\_citeI``[<label>]` is added. \^`\usebib` will use this list for selecting
+   right records from `.bib` file. Then \^`\usebib` sets
+   `\_ctlst:<bibpart>/` to `\_write`.\nl
+   If `\_addcitelist` is processed after \^`\usebib`, then
+   \`\_Xcite``{<bibpart>/}{<label>}` is saved to the `.ref`
+   file. The `\_Xcite` creates `\_ctlstB:<bibpart>/` as a list of saved
+   `\_citeI[<label>]`. Finally, \^`\usebib` concats boths lists `\_ctlst:<bibpart>/`
+   and `\_ctlstB:<bibpart>/` in the second \TeX/ run.
+   \_cod ----------------------------
+
+\_def\_addcitelist#1{%
+   \_unless \_ifcsname _ctlst:\_bibp\_endcsname \_sxdef{_ctlst:\_bibp}{}\_fi
+   \_ea \_ifx \_csname _ctlst:\_bibp\_endcsname \_write
+       \_openref \_immediate\_wref\_Xcite{{\_bibp}{#1}}%
+   \_else \_global \_ea\_addto \_csname _ctlst:\_bibp\_endcsname {\_citeI[#1]}\_fi
+}
+\_def\_Xcite#1#2{%
+   \_unless \_ifcsname _ctlstB:#1\_endcsname \_sxdef{_ctlstB:#1}{}\_fi
+   \_global \_ea\_addto \_csname _ctlstB:#1\_endcsname {\_citeI[#2]}%
+}
+
    \_doc -----------------------------
    The `<bib-marks>` (in numeric or text form) are saved in \^`\_savedcites`
    macro separated by commas.
@@ -167,13 +204,14 @@
 }
 \_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\_printcite#1{\_citesep
+   \_ilink[cite:\_bibp#1]{\_citelinkA{#1}}\_def\_citesep{,\_hskip.2em\_relax}}
+\_def\_printdashcite#1{\_ifmmode-\_else\_hbox{--}\_fi\_ilink[cite:\_bibp#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##1{\_trycs{_bim:\_bibp##1}
+       {##1\_opwarning{\_noexpand\nonumcitations + empty bibmark. Maybe bad bib-style}}}%
 }
 \_def\_citelinkA{}
 
@@ -180,12 +218,17 @@
 \_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.
+   The \`\bib` `[<label>]` or `\bib [<label>] ={<bib-mark>}` prints one bib-entry
+   without reading any database. The bib-entry 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>`.
+   saves \^`\_Xbib``{<bibpart>}{<label>}{<number>}{<nonumber>}` into `.ref` file
+   immediately using \`\_wbib``{<label>}{<number>}{<nonumber>}`.
+   This is the core of creation of mapping from `<labels>` to `<number>` and
+   `<nonumber>`.\nl
+   \`\_bibA` and \`\_bibB` implement the scanner of the optional argument
+   with the \^`\bibmark`.\nl
+   \`\_bibgl` is `\relax` by default but \^`\slides` do `\let\_bibgl=\_global`.\nl
+   \`\_dbib``{<label>}` creates destination for hyperlinks.
    \_cod -----------------------------
 
 \_def\_bib[#1]{\_def\_tmp{\_isnextchar={\_bibA[#1]}{\_bibmark={}\_bibB[#1]}}%
@@ -192,13 +235,16 @@
    \_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}%
+   \_bibgl\_advance\_bibnum by1
+   \_noindent \_def\_tmpb{#1}\_dbib{#1}\_wbib{#1}{\_the\_bibnum}{\_the\_bibmark}%
    \_printbib \_ignorespaces
 }
-\_def\_wbib#1#2#3{\_dest[cite:\_the\_bibnum]%
-   \_ifx\_wref\_wrefrelax\_else \_immediate\_wref\_Xbib{{#1}{#2}{#3}}\_fi}
+\_def\_dbib#1{\_dest[cite:\_bibp\_the\_bibnum]\_printlabel{#1}}
+\_def\_wbib#1#2#3{%
+   \_ifx\_wref\_wrefrelax\_else \_immediate\_wref\_Xbib{{\_the\_bibpart}{#1}{#2}{#3}}\_fi
+   \_unless \_ifcsname bib:\_bibp#1\_endcsname \_Xbib{\_the\_bibpart}{#1}{#2}{#3}\_fi
+}
+\_let\_bibgl=\_relax
 
 \_public \bib ;
 
@@ -245,22 +291,6 @@
 \_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
@@ -269,3 +299,7 @@
 See end of the `bib-iso690.opm` file for large documentation about `.bib` files
 structure and about the usage of `iso690` bib-style.
 
+History:
+2021-04-13 ... \bibpart implemented
+2021-04-13 ... \_bibgl introduced (used in \slides)
+2020-03-09 ... released

Modified: trunk/Master/texmf-dist/tex/optex/base/f-adventor.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-adventor.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-adventor.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -11,7 +11,7 @@
 }}
 
 \_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic }
-\_moddef \caps     {\_fsetV caps=+smcp;+onum; }
+\_moddef \caps     {\_fsetV caps=+smcp;\_ffonum; }
 
 \_initfontfamily % new font family must be initialized
 

Modified: trunk/Master/texmf-dist/tex/optex/base/f-antt.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-antt.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-antt.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -19,7 +19,7 @@
                     \_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; }
+\_moddef \caps     {\_fsetV caps=+smcp;\_ffonum; }
 
 \_initfontfamily % new font family must be initialized
 

Modified: trunk/Master/texmf-dist/tex/optex/base/f-baskerville.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-baskerville.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-baskerville.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -11,7 +11,7 @@
 }}
 
 \_moddef \resetmod {\_fsetV caps={} \_fvars Regular Bold Italic BoldItalic }
-\_moddef \caps     {\_fsetV caps=+smcp;+onum; }
+\_moddef \caps     {\_fsetV caps=+smcp;\_ffonum; }
 
 \_initfontfamily % new font family must be initialized
 

Modified: trunk/Master/texmf-dist/tex/optex/base/f-bonum.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-bonum.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-bonum.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -11,7 +11,7 @@
 }}
 
 \_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic }
-\_moddef \caps     {\_fsetV caps=+smcp;+onum; }
+\_moddef \caps     {\_fsetV caps=+smcp;\_ffonum; }
 
 \_initfontfamily % new font family must be initialized
 

Modified: trunk/Master/texmf-dist/tex/optex/base/f-cursor.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-cursor.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-cursor.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -11,7 +11,7 @@
 }}
 
 \_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic }
-\_moddef \caps     {\_fsetV caps=+smcp;+onum; }
+\_moddef \caps     {\_fsetV caps=+smcp;\_ffonum; }
 
 \_initfontfamily % new font family must be initialized
 

Modified: trunk/Master/texmf-dist/tex/optex/base/f-ebgaramond.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-ebgaramond.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-ebgaramond.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -18,7 +18,7 @@
 \_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 \caps     {\_fsetV caps=+smcp;\_ffonum; }
 \_moddef \nocaps   {\_fsetV caps={} }
 \_moddef \swash    {\_fsetV swa=+swsh; }
 \_moddef \noswash  {\_fsetV swa={} }

Modified: trunk/Master/texmf-dist/tex/optex/base/f-garamondl.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-garamondl.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-garamondl.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -13,7 +13,7 @@
 }}
 
 \_moddef \resetmod {\_fsetV caps={},swa={} \_fvars Regular Bold Italic Bolditalic }
-\_moddef \caps     {\_fsetV caps=+smcp;+onum;-liga; }
+\_moddef \caps     {\_fsetV caps=+smcp;\_ffonum;-liga; }
 \_moddef \nocaps   {\_fsetV caps={} }
 \_moddef \swash    {\_fsetV swa=+swsh; }
 \_moddef \noswash  {\_fsetV swa={} }

Modified: trunk/Master/texmf-dist/tex/optex/base/f-gfsbodoni.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-gfsbodoni.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-gfsbodoni.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -11,7 +11,7 @@
 }}
 
 \_moddef \resetmod {\_fsetV caps={} \_fvars {} Bold It BoldIt }
-\_moddef \caps     {\_fsetV caps=+smcp;+onum; }
+\_moddef \caps     {\_fsetV caps=+smcp;\_ffonum; }
 
 \_initfontfamily % new font family must be initialized
 

Modified: trunk/Master/texmf-dist/tex/optex/base/f-heros.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-heros.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-heros.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -12,7 +12,7 @@
 }}
 
 \_moddef \resetmod {\_fsetV caps={},cond={} \_fvars regular bold italic bolditalic }
-\_moddef \caps     {\_fsetV caps=+smcp;+onum; }
+\_moddef \caps     {\_fsetV caps=+smcp;\_ffonum; }
 \_moddef \nocaps   {\_fsetV caps={} }
 \_moddef \cond     {\_fsetV cond=cn }
 \_moddef \nocond   {\_fsetV cond={} }
@@ -140,12 +140,12 @@
 \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
+family, then `\def\_capsV{+smcp;\_ffonum;}` 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
+  \font {[texgyreheroscn-bold]:+smcp;+onum;+pnum;+tlig;} at11pt
 \endtt
 %
 is processed. We assume that a font file `texgyreheroscn-bold.otf` is present

Modified: trunk/Master/texmf-dist/tex/optex/base/f-kpfonts.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-kpfonts.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-kpfonts.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -19,7 +19,7 @@
 \_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 \caps     {\_fsetV caps=+smcp;\_ffonum; }
 \_moddef \nocaps   {\_fsetV caps={} }
 \_moddef \swash    {\_fsetV swa=+swsh; }
 \_moddef \noswash  {\_fsetV swa={} }

Modified: trunk/Master/texmf-dist/tex/optex/base/f-libertine-s.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-libertine-s.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-libertine-s.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -19,7 +19,7 @@
 \_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 \caps     {\_fsetV caps=+smcp;\_ffonum; }
 \_moddef \nocaps   {\_fsetV caps={} }
 
 \_famvardef \initials {\_fsetV mainfam=Libertine,subfam={Initials } \_fvars {} . . . \rm}

Modified: trunk/Master/texmf-dist/tex/optex/base/f-libertine.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-libertine.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-libertine.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -21,7 +21,7 @@
 \_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 \caps     {\_fsetV caps=+smcp;\_ffonum; }
 \_moddef \nocaps   {\_fsetV caps={} }
 
 \_famvardef \initials {\_fsetV subfam=Libertine \_fvars I . . . \rm}

Modified: trunk/Master/texmf-dist/tex/optex/base/f-libertinus.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-libertinus.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-libertinus.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -20,7 +20,7 @@
 \_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 \caps     {\_fsetV caps=+smcp;\_ffonum; }
 \_moddef \nocaps   {\_fsetV caps={} }
 
 \_famvardef \mono     {\_fsetV subfam=Mono \_fvars Regular . . . \_rm}

Modified: trunk/Master/texmf-dist/tex/optex/base/f-librecaslon.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-librecaslon.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-librecaslon.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -12,7 +12,7 @@
 
 \_moddef \resetmod {\_fsetV caps={},csl={CaslonText} 
                     \_fvars \_cslV-Regular \_cslV-Bold \_cslV-Italic Csln-Bolditalic }
-\_moddef \onum     {\_fsetV caps=+onum; }
+\_moddef \onum     {\_fsetV caps=\_ffonum; }
 
 \_initfontfamily % new font family must be initialized
 

Modified: trunk/Master/texmf-dist/tex/optex/base/f-lmfonts.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-lmfonts.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-lmfonts.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -21,7 +21,9 @@
  \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
+ \bolder .... extended bold^^J%
+Note: Text fonts support optical sizes, but LatinModern-Math only for scripts.^^J
+ Use another CM-like family if optical sizes not wanted: \fontfam[NewCM].
 }}
 
 \_def\_LMregfont #1 #2 #3{%

Modified: trunk/Master/texmf-dist/tex/optex/base/f-merriweather.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-merriweather.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-merriweather.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -17,7 +17,7 @@
 }}
 
 \_moddef \resetmod {\_fsetV caps={},sans={} \_fvars Regular Bold Italic BoldItalic }
-\_moddef \caps     {\_fsetV caps=+smcp;+onum; }
+\_moddef \caps     {\_fsetV caps=+smcp;\_ffonum; }
 \_moddef \nocaps   {\_fsetV caps={} }
 \_moddef \sans     {\_fsetV sans=Sans }
 \_moddef \serif    {\_fsetV sans={} }

Added: trunk/Master/texmf-dist/tex/optex/base/f-newcm.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-newcm.opm	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/optex/base/f-newcm.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -0,0 +1,37 @@
+%% This is part of the OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [New Computer Modern] \NewCM {CM with Book variants, Cyrillic, Greek}
+        {\book \ttset \sans \caps} {\rm \bf \it \bi} {NewCMMath}
+        {[NewCM10-Regular]}
+        {\_def\_fontnamegen {[NewCM\_typfV-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifiers:^^J
+ \book ...... slightly bolder \rm, \it^^J
+ \ttset ..... Typewriter variants^^J
+ \sans ...... Sans serif variants^^J
+ \caps ...... caps & small caps (not in Italic variants)^^J%
+Note: use \book\normalmath if you want Math in book-style too.
+}}
+
+\_moddef \resetmod {\_fsetV caps={},typf=10,book={} \_fvars Regular Bold {\_ncmI} {\_ncmBI} }
+\_moddef \book     {\_fsetV book=Book \_fvars Book Bold {\_ncmI} {\_ncmBI}
+                    \_def\_unimathfont{NewCMMath-Book}}
+\_moddef \ttset    {\_fsetV typf=Mono10 }
+\_moddef \sans     {\_fsetV typf=Sans10 }
+\_moddef \caps     {\_fsetV caps=+smcp;\_ffonum; }
+
+\_def\_ncmtyprm{10}
+\_def\_ncmtypsans{Sans10}
+\_def\_ncmI  {\_bookV \_ifx\_typfV\_ncmtypsans Oblique\_else Italic\_fi}
+\_def\_ncmBI {Bold\_ifx\_typfV\_ncmtyprm Italic\_else Oblique\_fi}
+
+\_initfontfamily % new font family must be initialized
+
+\_loadmath {[NewCMMath-Regular]}
+
+\_endcode
+
+See the file `f-heros.opm` for information about principles of such
+font-macro-files.
+


Property changes on: trunk/Master/texmf-dist/tex/optex/base/f-newcm.opm
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/optex/base/f-pagella.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-pagella.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-pagella.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -11,7 +11,7 @@
 }}
 
 \_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic }
-\_moddef \caps     {\_fsetV caps=+smcp;+onum; }
+\_moddef \caps     {\_fsetV caps=+smcp;\_ffonum; }
 
 \_initfontfamily % new font family must be initialized
 

Modified: trunk/Master/texmf-dist/tex/optex/base/f-poltawski.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-poltawski.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-poltawski.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -24,7 +24,7 @@
 \_moddef \expd     {\_fsetV cond=semiexpd }
 \_moddef \cond     {\_fsetV cond=semicond }
 \_moddef \ccond    {\_fsetV cond=cond }
-\_moddef \caps     {\_fsetV caps=+smcp;+onum; }
+\_moddef \caps     {\_fsetV caps=+smcp;\_ffonum; }
 \_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 <*}

Modified: trunk/Master/texmf-dist/tex/optex/base/f-roboto.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-roboto.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-roboto.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -40,7 +40,7 @@
                     \_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 \caps     {\_fsetV caps=+smcp;\_ffonum; }
 \_moddef \nocaps   {\_fsetV caps={} }
 
 \_famvardef \tf    {\_thinM \_rm}

Modified: trunk/Master/texmf-dist/tex/optex/base/f-schola.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-schola.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-schola.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -11,7 +11,7 @@
 }}
 
 \_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic }
-\_moddef \caps     {\_fsetV caps=+smcp;+onum; }
+\_moddef \caps     {\_fsetV caps=+smcp;\_ffonum; }
 
 \_initfontfamily % new font family must be initialized
 

Modified: trunk/Master/texmf-dist/tex/optex/base/f-sourcepro.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-sourcepro.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-sourcepro.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -25,7 +25,7 @@
 \_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 \caps     {\_fsetV caps=+smcp;\_ffonum; }
 \_moddef \nocaps   {\_fsetV caps={} }
 
 \_initfontfamily % new font family must be initialized

Modified: trunk/Master/texmf-dist/tex/optex/base/f-technika.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-technika.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-technika.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,7 +1,7 @@
 %% 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} {}
+        {\caps \light \book} {\rm \bf \it \bi \stencil} {}
         {[Technika-Regular]}
         {\_def\_fontnamegen {[Technika\_stencilV-\_currV]:\_capsV\_fontfeatures}}
 
@@ -17,7 +17,7 @@
 \_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; }
+\_moddef \caps     {\_fsetV caps=+smcp\_ffonum; }
 
 \_famvardef \stencil {\_fsetV stencil=Stencil \_fvars Bold . Bold . \rm}
 

Modified: trunk/Master/texmf-dist/tex/optex/base/f-termes.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-termes.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-termes.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -11,7 +11,7 @@
 }}
 
 \_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic }
-\_moddef \caps     {\_fsetV caps=+smcp;+onum; }
+\_moddef \caps     {\_fsetV caps=+smcp;\_ffonum; }
 
 \_initfontfamily % new font family must be initialized
 

Modified: trunk/Master/texmf-dist/tex/optex/base/f-xcharter.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/f-xcharter.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/f-xcharter.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -13,7 +13,7 @@
 
 \_moddef \resetmod {\_fsetV caps={} \_fvars Roman Bold Italic BoldItalic }
 \_moddef \slant    {\_fvars Roman Bold Slanted BoldSlanted }
-\_moddef \caps     {\_fsetV caps=+smcp;+onum; }
+\_moddef \caps     {\_fsetV caps=+smcp;\_ffonum; }
 
 \_initfontfamily % new font family must be initialized
 

Modified: trunk/Master/texmf-dist/tex/optex/base/fams-ini.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/fams-ini.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/fams-ini.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -49,6 +49,13 @@
 
 \_famtext {Other fonts:}
 
+\_famfrom{Antonis Tsolomitis}
+\_faminfo [New Computer Modern] {CM with Book variants, Cyrillic, Greek} {f-newcm}
+   { -: {\rm\bf\it\bi} \book: {\rm\it} \ttset: {\rm\bf\it\bi} \book\ttset: {\rm\it}
+     \sans: {\rm\bf\it\bi} \book\sans: {\rm\it}
+     \caps: {\rm\bf} \book\caps: {\rm} }
+\_famalias [NewCM] \_famalias [NewCMfonts]
+
 \_famfrom {Philipp H. Poll}
 \_faminfo [Linux Libertine] {Free fonts typically installed on systems} {f-libertine}
    { -: {\rm\bf\it\bi} \semibold: {\bf\bi}
@@ -153,7 +160,7 @@
 \_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
+\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:
@@ -178,7 +185,7 @@
 `\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
+\~`\_faminfo`, \~`\_famalias` and \~`\_famtext`. See the example from
 `fams-ini.tex`:
 
 {\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip}

Modified: trunk/Master/texmf-dist/tex/optex/base/fnotes.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/fnotes.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/fnotes.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -50,9 +50,9 @@
 \_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}%
+   \_def\_printfnotemarkA{\_link[fnt:\_the\_gfnotenum]{#1}{\_printfnotemark}%
                           \_dest[fnf:\_the\_gfnotenum]}%
-   \_def\_printfnotemarkB{\_link[fnf:\_the\_gfnotenum]{\_localcolor#2}{\_printfnotemark}%
+   \_def\_printfnotemarkB{\_link[fnf:\_the\_gfnotenum]{#2}{\_printfnotemark}%
                           \_dest[fnt:\_the\_gfnotenum]}%
 }
 \public \fnotelinks ;

Modified: trunk/Master/texmf-dist/tex/optex/base/fonts-resize.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/fonts-resize.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/fonts-resize.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% This is part of the OpTeX project, see http://petr.olsak.net/optex
 
-\_codedecl \setfontsize {Font resizing macros <2020-04-17>} % preloaded in format
+\_codedecl \setfontsize {Font resizing macros <2021-04-17>} % preloaded in format
 
    \_doc -----------------------------
    The \`\setfontsize` `{<sizespec>}` saves the `<sizespec>` to the \`\_sizespec` macro.
@@ -34,27 +34,36 @@
 
    \_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
+   resizes the font given by the variant.
+   The <variant-name> is `rm` or `bf` or `it` or `bi`.
+   The new <font-switch> is declared (roughly speaking) by:
+   \begtt \catcode`<=13
+   \_font <font switch> = <fontname of>\_ten<variant-name> \_sizepec
    \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
+   If the \^`\_fontselector` is defined then it has priority before <font-switch>
+   and the font is loaded by:
+   \begtt \catcode`<=13
+   \_ea\_font \_fontselector = <fontname of>\_ten<variant-name> \_sizepec
+   \endtt
+   The font is loaded by \`\_doresizefont``<font switch>`. This macro has
+   meaning \`\_doresizetfmfont` in TFM mode and it switches to
+   \^`\_doresizeunifont` when \^`\initunifonts` is used.\nl
+   The `<fontname of>` is generated by the `\fontname` \TeX/ primitive where
+   \`\_rfontskipat` removes the `at<dimen>` part of the `\fontname` output.
+   The `<fontname of>` is generated differently in OTF mode, see
    \^`\_doresizeunifont` macro.\nl
-   The \`\_whatresize` is defined as `<variant-name>`.
+   The \`\_whatresize` is defined as `<variant-name>`.\nl
+   The \^`\_fontloaded``<font switch>` is a macro which can be used for
+   post-processing when a font is loaded.
    \_cod -----------------------------
 
 \_def\_resizefont#1#2{%
-    \_edef\_whatresize{#1}%
-    \_ifx \_fontselector \_undefined \_doresizefont#2%
-    \_else \_ea \_doresizefont \_fontselector \_fi
-    \_lastmagsize=\_zo
-    \_slet{_tryload#1}{_relax}%
+   \_edef\_whatresize{#1}%
+   \_ifx \_fontselector \_undefined
+          \_doresizefont#2\_relax  \_ea\_fontloaded \_csname _ten#1\_endcsname
+   \_else \_ea\_doresizefont \_fontselector  \_ea\_fontloaded \_fontselector \_fi
+   \_lastmagsize=\_zo
+   \_slet{_tryload#1}{_relax}%
 }
 \_def\_doresizetfmfont#1{\_logfont{#1}%
    \_ea\_font\_ea#1\_ea\_rfontskipat
@@ -68,6 +77,24 @@
 \_def\_rfskipatN #1 #2\_relax{\_whichtfm{#1}}
 
    \_doc -----------------------------
+   If a font is loaded by \^`\_resizefont` or \^`\resizethefont` then the
+   \`\_fontloaded``<font switch>` is called immediately after it. If the font
+   is loaded first then its `\skewchar` is equal to $-1$. We run
+   \`\_newfontloaded``<font switch>` and set `\skewchar=-2` in this case.
+   A user can define a `\_newfontloaded` macro. We are sure that
+   `\_newfontloaded` macro is called only once for each instance of the font
+   given by its name, OTF features and size specification. The `\skewchar` value is
+   globally saved to the font (like `\fontdimen`). If it is used in math
+   typesetting then it is set to a positive value.\nl
+   The `\_newfontloaded` should be defined for micro-typographic configuration of
+   fonts, for example. See
+   \ulink[http://petr.olsak.net/optex/optex-tricks.html\#fontexpand]{OpTeX/ trick 0058}.
+   \_cod -----------------------------
+
+\_def\_fontloaded #1{\_ifnum\_skewchar#1=-1 \_skewchar#1=-2 \_newfontloaded#1\_fi}
+\_def\_newfontloaded #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
@@ -110,7 +137,7 @@
 \_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
+   \_ea\_fontloaded \_csname \_tmp \_ea\_endcsname \_csname \_tmp\_endcsname
 }
 \_protected\_def \_resizethefont{\_newcurrfontsize\_sizespec}
 
@@ -127,7 +154,7 @@
    \_loadf{it}\_tenit \_loadf{bi}\_tenbi
 }
 \_def\_loadf#1#2{\_sdef{_tryload#1}{\_ifmmode \_else \_resizefont{#1}#2\_fi}}
-\_def\_tryloadtt{\_resizefont{tt}\_tentt}
+\_def\_tryloadtt{\_resizefont{tt}\_tentt} % only in TFM mode
 
 \_let\_tryloadrm=\_relax
 \_let\_tryloadbf=\_relax
@@ -350,5 +377,6 @@
 
 \_endinput
 
+2021-04-17 \_fontloaded, \_newfontloaded introduced
 2020-04-17 \resizethefont introduced
 2020-03-17 released

Modified: trunk/Master/texmf-dist/tex/optex/base/fonts-select.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/fonts-select.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/fonts-select.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% This is part of the OpTeX project, see http://petr.olsak.net/optex
 
-\_codedecl \fontfam {Fonts selection system <2021-02-25>} % preloaded in format
+\_codedecl \fontfam {Fonts selection system <2021-04-22>} % preloaded in format
 
    \_doc -----------------------------
    \`\initunifonts` macro extends \LuaTeX's font capabalities,
@@ -114,7 +114,10 @@
    `<value-b>` or ... or `<value-z>`.
    \nl
    \`\_prepcommalist` `ab,{},cd,\_end,` expands to `ab,,cd,` (auxiliary macro
-   used in `\_onlyif`).
+   used in `\_onlyif`).\nl
+   \`\_ffonum` is a shortcut for oldstyle digits font features used in
+   font family files. You can do `\let\_ffonum=\ignoreit` if you don't want
+   to set old digits together with `\caps`.
    \_cod -----------------------------
 
 \_def\_fvars #1 #2 #3 #4 {%
@@ -137,6 +140,7 @@
     \_iftrue #3\_fi
 }
 \_def\_prepcommalist#1,{\_ifx\_end#1\_empty\_else #1,\_ea\_prepcommalist\_fi}
+\_def\_ffonum {+onum;+pnum}
 
    \_doc -----------------------------
    The \`\moddef` `\<modifier> {<data>}` simply speaking does
@@ -359,7 +363,7 @@
    \_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`
+   our business). The \`\setwordspace` recalculates 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
@@ -381,12 +385,14 @@
 }
 \_def \_setwordspace #1{%
    \_if^#1^\_def\_setwsp##1{}\_removefeature{+Ws}%
-   \_else \_def\_setwsp{\_setwspA{#1}}\_setff{+Ws}\_fi
+   \_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\_setwspA #1{\_ifx/#1\_ea\_setwspB \_else\_afterfi{\_setwspC#1}\_fi}
+\_def\_setwspB #1/#2/#3/#4{\_fontdimen2#4=#1\_fontdimen2#4%
+   \_fontdimen3#4=#2\_fontdimen3#4\_fontdimen4#4=#3\_fontdimen4#4}
+\_def\_setwspC #1/{\_setwspB #1/#1/#1/}
 
 \_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}
@@ -774,19 +780,23 @@
 \^`\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.
+\^`\setwordspace` can use different multiplication factors if its parameter is in the
+format `{/<default>/<stretching>/<shrinking>}`. For example,
+`\setwordspace{/1/2.5/1}` enlarges only stretching 2.5~times.
 
-If you need another font transformations, you can use `\setff`
-with following font features provided by Lua\TeX/:
+You can use `\setff` with other font features provided by Lua\TeX/ and `luaotfload` package
+(see documentation of `loaotfload` package for more information):
 
 \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
+\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
+\setff{fallback=name}\rm % use fonts from a list given by name if missing chars
 \endtt
 
-Use font transformations mentioned above and \^`\setletterspace`,
+Use font transformations `embolden`, `slant`, `extend` 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}`
@@ -838,6 +848,8 @@
 
 \endinput
 
+2021-04-22  \_ffonum introduced
+2021-04-19  \setwordspace: parameter format {/A/B/C} implemented.
 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

Modified: trunk/Master/texmf-dist/tex/optex/base/graphics.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/graphics.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/graphics.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% This is part of the OpTeX project, see http://petr.olsak.net/optex
 
-\_codedecl \inspic {Graphics <2020-04-12>} % preloaded in format
+\_codedecl \inspic {Graphics <2021-03-19>} % preloaded in format
 
    \_doc -----------------------------
    \`\inspic` accepts old syntax `\inspic <filename><space>`
@@ -40,6 +40,7 @@
 \_def\_inkinspicA #1 {\_inkinspicB {#1}}
 \_def\_inkinspicB #1{%
   \_ifdim\_picwidth=0pt \_setbox0=\_hbox{\_inspic{#1}}\_picwidth=\_wd0 \_fi
+  \_tmptoks={#1}%
   \_the\_inkdefs
   \_opinput {\_the\_picdir #1_tex}% file with labels
   \_egroup}
@@ -46,7 +47,7 @@
 
 \_newtoks\_inkdefs  \_inkdefs={%
   \_def\makeatletter#1\makeatother{}%
-  \_def\includegraphics[#1]#2{\_inkscanpage#1,page=,\_end \_inspic{#2}\_hss}%
+  \_def\includegraphics[#1]#2{\_inkscanpage#1,page=,\_end \_inspic{\_the\_tmptoks}\_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}}%
@@ -440,6 +441,7 @@
 
 \_endinput
 
+2021-03-19: \inkinspic: pictures in subdirectories, bug fixed
 2020-12-21: \puttext: \box0 in goup, bugfix
 2020-04-12: \_public \clipinoval \clipincircle ; added, bug fixed
 

Modified: trunk/Master/texmf-dist/tex/optex/base/hyperlinks.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/hyperlinks.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/hyperlinks.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% This is part of the OpTeX project, see http://petr.olsak.net/optex
 
-\_codedecl \ulink {Hyperlinks <2021-01-27>} % preloaded in format
+\_codedecl \ulink {Hyperlinks <2021-04-17>} % preloaded in format
 
    \_doc ----------------------------
    \`\dest``[<type>:<spec>]` creates a destination of internal links. The
@@ -28,20 +28,30 @@
    \`\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
+   command is not used, then `\link` only prints `<text>` else its meaning is set to
    `\_linkactive`.
    The \`\_linkactive` is implemented by `\_pdfstartlink...\_pdfendlink`
-   primitives.
+   primitives. The `<color>` is the color of the link text generated by
+   the `\_linkactive` macro.
+   The `<color>` parameter can be overwritten by definition of
+   `\_<type>linkcolor`. For example `\def\_toclinkcolor{\Red}` means that
+   links from table of contents are in red. This is similar concept as
+   `\_def\_tocborder`.
    \nl
    \`\ilink``[<type>:<spec>]{<text>}` is equivalent to `\_link` but
-   the `<color>` is used from \^`\hyperlinks` declaration.
+   the `<color>` is used from \^`\hyperlinks` declaration
+   (or it is overwriten by `\def\_<type>linkcolor`).
+   \nl
+   \`\_linkdimens` are default dimensions of the link area.
    \_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\_linkactive[#1:#2]#3#4{\_leavevmode\_pdfstartlink \_linkdimens
+      attr{\_pdfborder{#1}} goto name{#1:#2}\_relax
+      {\_localcolor\_trycs{_#1linkcolor}{#3}#4}\_pdfendlink
 }
 \_protected\_def\_link[#1]#2#3{\_leavevmode{#3}}
-\_protected\_def\_ilink[#1]#2{\_leavevmode{#2}}
+\_def\_ilink[#1]#2{\_link[#1]{}{#2}}
+\_def\_linkdimens{height.9em depth.3em}
 \_public \ilink \link ;
 
    \_doc ----------------------------
@@ -53,19 +63,18 @@
    \_cod ----------------------------
 
 \_protected\_def\_urlactive[#1:#2]#3#4{\_leavevmode{\_escapechar=-1
-   \_pdfstartlink height.9em depth.3em \_pdfborder{#1}%
+   \_pdfstartlink \_linkdimens attr{\_pdfborder{#1}}%
       user{/Subtype/Link/A <</Type/Action/S/URI/URI(\_detokenize{#2})>>}\_relax
-      {#3#4}\_pdfendlink}%
+      {\_localcolor\_trycs{_#1linkcolor}{#3}#4}\_pdfendlink}%
 }
 \_def\_ulink[#1]#2{\_leavevmode{#2}}
-\_def\_urlcolor{}
 \_public \ulink ;
 
    \_doc ----------------------------
-   The `\_pdfstartlink` primitive uses `\_pdfborder{<type>}` in its parameter
+   The `\_pdfstartlink` primitive uses `attr{\_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`,
+   macro expands to `/C[? ? ?] /Border[0 0 .6]` if the
+   `\_<type>border` macro (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
@@ -74,8 +83,7 @@
    \_cod ----------------------------
 
 \_def\_pdfborder#1{\_ifcsname _#1border\_endcsname
-       attr{/C[\_csname _#1border\_endcsname] /Border[0 0 .6]}%
-   \_else attr{/Border[0 0 0]}\_fi
+     /C [\_csname _#1border\_endcsname] /Border [0 0 .6]\_else  /Border [0 0 0]\_fi
 }
 
    \_doc ----------------------------
@@ -86,8 +94,8 @@
 
 \_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}}%
+   \_def\_ilink[##1]##2{\_link[##1]{#1}{##2}}%
+   \_def\_ulink[##1]##2{\_urlactive[url:##1]{#2}{##2}}%
    \_public \dest \ilink \ulink \link ;%
 }
 \_public \hyperlinks ;
@@ -136,8 +144,8 @@
                        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].
+* `cite:<bibpart>/<bibnum>`   -- the destination is created in bibliography reference,
+                       see section \ref[bib].
 * `url:<url>`       -- used by `\url` or `\ulink`,
                        see also the end of this section.
 \enditems
@@ -152,6 +160,8 @@
 
 \_endinput
 
+2021-04-17 attr{\_pdfborder{...}} instead expanding \_pdfborder to attr{...}
+2021-04-02 The possibility of \def\_toclinkcolor introduced, \localcolor moved
 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
+2020-03-15 introduced

Modified: trunk/Master/texmf-dist/tex/optex/base/hyphen-lan.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/hyphen-lan.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/hyphen-lan.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% 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
+\_codedecl \langlist {Initialization of hypenation patterns <2021-03-29>} % preloaded in format
 
    \_doc -----------------------------
    The <iso-code> means a shortcut of language name (mostly by ISO 639-1).
@@ -208,6 +208,7 @@
 \_preplang sv    Swedish         sv                239 22
 \_preplang th    Thai            th                240 23
 \_preplang ethi  Ethiopic        mul-ethi          241 11
+\_preplang fis   schoolFinnish   fi-x-school       242 11
 
    \_doc -----------------------------
    The \`\langlist` includes names of all languages which are ready to load
@@ -243,3 +244,9 @@
 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.
+
+\_endinput
+
+2021-03-29 \_preplang schoolFinnish added
+2020-11-11 load patterns without lua code
+2020-03-10 released

Modified: trunk/Master/texmf-dist/tex/optex/base/luatex-ini.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/luatex-ini.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/luatex-ini.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -49,9 +49,7 @@
 \_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 \_pdfcreationdate   {\_pdffeedback creationdate}
            \_def \_pdffontname       {\_pdffeedback fontname}
            \_def \_pdffontobjnum     {\_pdffeedback fontobjnum}
            \_def \_pdffontsize       {\_pdffeedback fontsize}

Modified: trunk/Master/texmf-dist/tex/optex/base/math-macros.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/math-macros.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/math-macros.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% 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
+\_codedecl \sin {Math macros plus mathchardefs <2021-04-25>} % preloaded in format
 
    \_doc -----------------------------
    The category code of the character `_` remains as the letter (11) and the mathocode
@@ -218,7 +218,7 @@
 \_mathchardef\smallint="1273
 
 \_mathchardef\triangleleft="212F   \_private \triangleleft;
-\_mathchardef\triangleright="212E  \_private \trianglerigt;
+\_mathchardef\triangleright="212E  \_private \triangleright;
 \_mathchardef\bigtriangleup="2234
 \_mathchardef\bigtriangledown="2235
 \_mathchardef\wedge="225E \let\land=\wedge
@@ -513,10 +513,13 @@
 \_protected\_def\Downarrow{\_delimiter"322B37F }
 \_protected\_def\Updownarrow{\_delimiter"326D377 }
 \_protected\_def\backslash{\_delimiter"26E30F } % for double coset G\_backslash H
+\_protected\_def\langle{\_delimiter"426830A }
 \_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\lbrace{\_delimiter"4266308 } \_let\_lbrace=\lbrace
+\_protected\_def\rbrace{\_delimiter"5267309 } \_let\_rbrace=\rbrace
+\_protected\_def\{{\_ifmmode \_lbrace\_else\_char`\{ \_fi}
+\_protected\_def\}{\_ifmmode \_rbrace\_else\_char`\} \_fi}
+
 \_protected\_def\rceil{\_delimiter"5265307 }
 \_protected\_def\lceil{\_delimiter"4264306 }
 \_protected\_def\rfloor{\_delimiter"5263305 }
@@ -716,12 +719,12 @@
 \_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
+    &\_hbox to\_zo{\_hss$\_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
+    &\_kern-\_displaywidth\_hbox to\_zo{$\_elign##$\_hss}\_tabskip\_displaywidth\_crcr
     #1\_crcr}}
 \_public \openup \eqalignno \leqalignno ;
 
@@ -1063,6 +1066,9 @@
 
 \_endcode %---------------------------------------------------
 
+2021-04-25 \triangleright: typo fixed
+2021-03-22 \(l)eqalignno: \hbox instead \llap, \rlap (\par error suppressed)
+2021-03-19 allow text mode \{ and \}
 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

Modified: trunk/Master/texmf-dist/tex/optex/base/math-unicode.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/math-unicode.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/math-unicode.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% This is part of the OpTeX project, see http://petr.olsak.net/optex
 
-\_codedecl \loadmath {Unicode Math fonts <2021-03-09>} % preloaded in format
+\_codedecl \loadmath {Unicode Math fonts <2021-04-05>} % preloaded in format
 
    \_doc -----------------------------
    \`\loadmath` `{<Unicode-math font>}` loads the given font. It does:
@@ -88,9 +88,9 @@
   \_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
+  \_setbox0=\_hbox{\_everymath{}$\_fam1\_displaystyle{0\_atop0}$}%
   \_Umathfractiondelsize\_displaystyle = \_dimexpr(\_ht0-\_Umathaxis\_displaystyle)*2\_relax
+  \_setbox0=\_box\_voidbox
 }
 
    \_doc -----------------------------
@@ -258,6 +258,7 @@
 
 \_endinput
 
+2021-04-04 \_setunimathdimens: \setbox0=\box\voidbox added
 2021-03-09 \_setunimathdimes: \_begin/end/group instead {}, bug fixed
 2021-02-15 \_textmff, \_scriptmff and \_sscriptmff introduced
 2021-02-15 \_expandafter -> \_ea

Modified: trunk/Master/texmf-dist/tex/optex/base/more-macros.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/more-macros.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/more-macros.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% This is part of the OpTeX project, see http://petr.olsak.net/optex
 
-\_codedecl \eoldef {OpTeX useful macos <2020-05-22>} % preloaded in format
+\_codedecl \eoldef {OpTeX useful macros <2021-04-25>} % preloaded in format
 
    \_doc -----------------------------
    We define \`\opinput` `{<file name>}` macro which
@@ -51,17 +51,16 @@
    `\_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\_setctable#1{\_edef\_ctablelist{{\_the\_catcodetable}\_ctablelist}%
+   \_catcodetable#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
+   \_else \_def\_ctablelist{#2}\_catcodetable#1\_relax \_fi
 }
 \_def\_ctablelist{.}
 
@@ -76,7 +75,7 @@
    \_cod -----------------------------
 
 \_def\_normalcatcodes {\_catcodetable\_optexcatcodes \_savecatcodetable0 \_catcodetable0 }
-\_public \normalcatodes ; 
+\_public \normalcatcodes ;
 
    \_doc -----------------------------
    The \`\load` `[<filename-list>]` loads files specfied in
@@ -279,6 +278,8 @@
 
 \_endcode % -------------------------------------
 
+2021-04-25 \normalcatcodes: typo fixed
+2021-04-22 \the\_currctable replaced by \the\_catcodetable, bug fixed.
 2020-05-22 robust \catcode newly defined in order \catcode\string.... be possible
 2020-05-03 \load macro introduced
 2020-03-15 released

Modified: trunk/Master/texmf-dist/tex/optex/base/optex.ini
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/optex.ini	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/optex.ini	2021-04-27 13:34:03 UTC (rev 59000)
@@ -21,7 +21,7 @@
 
 % OpTeX version
 
-\def\optexversion{1.01 Mar.2021}
+\def\optexversion{1.02 Apr.2021}
 \def\fmtname{OpTeX}
 \let\fmtversion=\optexversion
 
@@ -47,7 +47,7 @@
 \message{OpTeX (Olsak's Plain TeX) initialization <\optexversion>^^J}
 
 \input prefixed.opm        % prefixed primitives and code syntax
-\input luatex-ini.opm      % luaTeX initialization
+\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
@@ -74,7 +74,7 @@
 \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 hi-syntax.opm       % syntax highlighting of verbatim listings
 \input graphics.opm        % graphics
 \input table.opm           % table macro
 \input multicolumns.opm    % more columns by \begmulti ...\endmulti
@@ -86,10 +86,10 @@
 \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
+\input others.opm          % miscellaneous
 
 \_directlua{
-   % preload OpTeX's lua code into format as bytecode
+   % preload OpTeX's Lua code into format as bytecode
    lua.bytecode[1] = assert(loadfile(kpse.find_file("optex", "lua")))
 }
 

Modified: trunk/Master/texmf-dist/tex/optex/base/parameters.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/parameters.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/parameters.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% This is part of the OpTeX project, see http://petr.olsak.net/optex
 
-\_codedecl \normalbaselineskip {Parameter settings <2020-03-17>} % preloaded in format
+\_codedecl \normalbaselineskip {Parameter settings <2021-04-13>} % preloaded in format
 
    \_doc -----------------------------
    \secc Primitive registers
@@ -335,11 +335,17 @@
    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.
+   define specific macros used in your `.bib` file.\nl
+   The \`\biboptions` is used in the `iso690` bib-style for global options,
+   see section~\ref[isobib].\nl
+   The \`\bibpart` saves the name of bib-list if there are more bib-lists in
+   single document, see section~\ref[bib].
    \_cod -----------------------------
 
 \_newtoks\_bibtexhook
-\_public \bibtexhook ;
+\_newtoks\_biboptions
+\_newtoks\_bibpart
+\_public \bibtexhook \biboptions \bibpart ;
 
    \_doc -----------------------------
    \`\everycapitonf` is used before printing caption in figures and
@@ -584,5 +590,7 @@
 \_endinput
 
 History:
+2021-04-13 ... \bibpart added
+2021-04-07 ... \biboptions added, bug from iso690 fixed
 2020-04-04 ... \tabspaces added
 2020-04-03 ... \hicolors added

Modified: trunk/Master/texmf-dist/tex/optex/base/plain-macros.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/plain-macros.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/plain-macros.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% 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
+\_codedecl \magstep {Macros from plain TeX <2021-04-09>} % preloaded in format
 
    \_doc -----------------------------
    The \`\dospecials` works like in plain TeX but does nothing with `_`.
@@ -340,7 +340,9 @@
   \_pretolerance=-1 \tolerance=-1 \hbadness=0 \showboxdepth=0 \ #1}}
 
 \_def \_bye {\_par \_vfill \_supereject \_byehook \_end}
-\_public \bye ;
+\_public \showhyphens \bye ;
 
 \_endcode % -------------------------------------
 
+2021-04-09 ... \_public\showhyphens, bug fixed
+2020-02-14 ... released

Modified: trunk/Master/texmf-dist/tex/optex/base/prefixed.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/prefixed.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/prefixed.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% 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
+\_codedecl \public {Prefixing and code syntax <2020-02-25>} % preloaded in format
 
    \_doc ---------
    All \TeX/ primitives have alternative control sequence `\_hbox` `\_string`, ...
@@ -27,6 +27,10 @@
    \`\private` `<sequence> <sequence> ...;` does
    `\let \_<sequence> = \<sequence>` for all sequences.
    \nl
+   \`\_checkexists` `<where> <prefix><sequence>` prints error 
+   if the control sequence propagated to
+   a new name space by `\public` etc. macros is not declared.
+   \nl
    \`\xargs` `<what> <sequence> <sequence> ... ;`
    does `<what><sequence>` for each sequences.
    \_cod -----------------
@@ -37,11 +41,18 @@
 
 \_def \_pkglabel{}
 \_def \_public {\_xargs \_publicA}
-\_def \_publicA #1{\_ea\_let \_ea#1\_csname  _\_csstring #1\_endcsname}
-
+\_def \_publicA #1{%
+   \_checkexists \public _#1%
+   \_ea\_let \_ea#1\_csname  _\_csstring #1\_endcsname
+}
 \_def \_private {\_xargs \_privateA}
-\_def \_privateA #1{\_ea\_let \_csname  _\_csstring #1\_endcsname =#1}
-
+\_def \_privateA #1{%
+   \_checkexists \private {}#1%
+   \_ea\_let \_csname  _\_csstring #1\_endcsname =#1%
+}
+\_def\_checkexists #1#2#3{\_unless \_ifcsname #2\_csstring#3\_endcsname
+   \_errmessage {\_string#1: \_bslash#2\_csstring#3 must be declared}\_fi
+}   
 \_public \public \private \xargs \ea ;
 
    \_doc -----------------------
@@ -101,12 +112,16 @@
 
 \_def \_nspublic {\_xargs \_nspublicA}
 \_def \_nspublicA #1{%
+   \_checkexists \nspublic {\_pkglabel _}#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}
-
+   \_ea\_let \_ea#1\_csname \_pkglabel _\_csstring #1\_endcsname
+}
 \_def \_nsprivate {\_xargs \_nsprivateA}
-\_def \_nsprivateA #1{\_ea\_let \_csname \_pkglabel _\_csstring #1\_endcsname =#1}
+\_def \_nsprivateA #1{%
+   \_checkexists \nsprivate {}#1%
+   \_ea\_let \_csname \_pkglabel _\_csstring #1\_endcsname =#1%
+}
 
 
 \_endcode %----------------------------------------------------
@@ -117,8 +132,8 @@
 \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
+The user can be sure that when he/she does `\def\foo` then neither internal macros of
+\OpTeX/ nor \TeX/ primitives will be damaged. For example
 `\def\if{...}` will not damage macros because \OpTeX/'s macros
 are using `\_if` instead of `\if`.
 
@@ -127,18 +142,18 @@
 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
+\OpTeX/ sets the character `_` as 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.
+if he/she explicitly knows 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/.
+redefined by user without problems if it is desired. We don't need
+something like `\makeatletter` 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
+we need to set their non-prefixed versions. This is done by
 
 \begtt \catcode`\<=13
 \public <list of control sequences> ;
@@ -147,9 +162,9 @@
 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.
+can see which macros are defined for public usage in that code segment.
 
-The macro \^`\private` does a reverse job to `\public` with the same syntax.
+The macro \^`\private` does the reverse job of `\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.
@@ -163,7 +178,7 @@
 
 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)
+sequence `\par`. It is generated by the tokenizer (at empty lines)
 and used as internal in \TeX/.
 
 User can define or declare control sequences with `_` character, for
@@ -172,7 +187,7 @@
 \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
+* Multiletter control sequences 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
@@ -182,7 +197,7 @@
   \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
+  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$
@@ -226,7 +241,7 @@
 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`
+The package writer does not need 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>}`
@@ -265,8 +280,8 @@
 
 \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
+  bodies if there is no explicit and documented reason to do this.
+* Don't declare control sequences in the user namespace if there are no
   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
@@ -279,14 +294,19 @@
   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.
+* Use \^`\_doc` ... \^`\_cod` pairs for documenting the code pieces.
+* You can write more documentation after the \^`\_endcode` command.
+* The \OpTeX/ catcodes are set when \^`\load` your package (i.e. plain \TeX/
+  catcodes plus catcode of `_` is 11). If a catcode is changed during
+  loading your package then it is forgot because \^`\load` returns to catcodes
+  used before loading package. If you want to offer a catcode changing for
+  users then insert it to a macro which can be used after loading.
 \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
+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/
@@ -294,5 +314,6 @@
 
 \endinput
 
+2021-04-25 \_checkexists introduced
 2021-02-15 \_expandafter -> \_ea in \_codedecl
 2020-02-14 released

Modified: trunk/Master/texmf-dist/tex/optex/base/ref-file.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/ref-file.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/ref-file.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% This is part of the OpTeX project, see http://petr.olsak.net/optex
 
-\_codedecl \openref {File for references <2021-02-05>} % preloaded in format
+\_codedecl \openref {File for references <2021-04-13>} % preloaded in format
 
    \_doc --------------------------
    The \`\_inputref` macro is used in `\everyjob`. It reads `\jobname.ref` file
@@ -69,7 +69,7 @@
    versa.
    \_cod ----------------------
 
-\_def\_REFversion{5} % actual version of .ref files in OpTeX
+\_def\_REFversion{6} % 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
 
@@ -139,3 +139,9 @@
 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.
 
+\_endinput
+
+History:
+2021-04-13  \Xrefversion incremented (6), new format of \_Xbib
+2021-02-05  \_ewref introduced
+2020-02-14  released

Modified: trunk/Master/texmf-dist/tex/optex/base/references.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/references.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/references.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% This is part of the OpTeX project, see http://petr.olsak.net/optex
 
-\_codedecl \ref {References <2020-03-03>} % preloaded in format
+\_codedecl \ref {References <2021-04-13>} % preloaded in format
 
    \_doc ----------------------------
    \`\_Xpage` `{<gpageno>}{<pageno>}` saves the parameter pair into \`\_currpage`.
@@ -25,7 +25,7 @@
 \_def\_bracketspg#1#2{[pg:#1]{#2}}
 
    \_doc ----------------------------
-   \`\label``[<label>]` saves the decalred label to `\_lastlabel` and
+   \`\label``[<label>]` saves the declared label to `\_lastlabel` and
    \`\wlabel``{<text>}` uses the `\_lastlabel` and activates
    `\_wref\_Xlabel{<label>}{<text>}`.
    \_cod ----------------------------
@@ -32,9 +32,10 @@
 
 \_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
+     \_iftrue \_slideshook\_opwarning{Duplicated label [#1], ignored}\_else \_xdef\_lastlabel{#1}\_fi
   \_fi \_ignorespaces
 }
+\_let \_slideshook=\_relax % redefined if \slides + \slideshow.
 \_def\_wlabel#1{%
   \_ifx\_lastlabel\_undefined \_else
      \_dest[ref:\_lastlabel]%
@@ -92,3 +93,7 @@
 `.ref` file first in order to get appropriate information.
 See section \ref[ref-file] for more information about `.ref` file concept.
 
+\_endinput
+
+2021-04-13 ... \_slideshook introduced (used by \slides)
+2020-03-03 ... released

Modified: trunk/Master/texmf-dist/tex/optex/base/slides.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/slides.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/slides.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 % 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
+\_codedecl \slideshow {Slides style for OpTeX <2021-04-22>} % loaded on demand by \slides
 
    \_doc -----------------------------
    Default margins and design is declared here.
@@ -79,7 +79,7 @@
 
 \_newcount\_gilevel
 \_def\*{*}
-\_adef*{\_relax\_ifmmode*\_else\_ea\_startitem\_fi}
+\_adef*{\_relax\_ifmmode*\_else\_ea\_startitem\_fi} % defined also in styles.opm
 \_sdef{_item:X}{\Blue\_raise.2ex\_fullrectangle{.8ex}\_kern.5em}
 \_sdef{_item:x}{\Blue\_raise.3ex\_fullrectangle{.6ex}\_kern.4em}
 \_style X
@@ -98,7 +98,7 @@
 \_sdef{_spg:+}{\_par}
 
    \_doc -----------------------------
-   The \`\_endslides` is defined as `\_end` primitive, but
+   The \`\_endslides` is defined as `\_end` primitive (preceeded by `\_byehook`), 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
@@ -107,7 +107,7 @@
    The `\bye` macro is redefined here as an alternative to `\pg.`.
    \_cod -----------------------------
 
-\_def\_endslides{\_end}
+\_def\_endslides{\_byehook \_end}
 \_def\bye{\_pg.}
 
    \_doc -----------------------------
@@ -139,9 +139,9 @@
 
    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`
+   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.
+   \`\layernum` register and prints page by the \`\_printlayers`
    \_cod -----------------------------
 
 \_newbox\_slidepage  \_newbox\_slidepageB
@@ -156,10 +156,8 @@
    \_sdef{_spg:.}{\_closepage \_endslides}
    \_sdef{_spg:+}{\_closepage \_incr\_slidelayer \_decr\_pageno \_openslide}
    \_let\_layers=\_layersactive
-   \_destboxslide % to prevent hyperlink-dests duplication
+   \_slidelinks % 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}
@@ -186,9 +184,8 @@
 }
 \_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
+\_def\_printlayers{\_unvcopy\_slidepage \_prevdepth=\_dp\_slidepage
+   {\_layertext \_endgraf}%
    \_vskip\_parskip
    \_unvcopy\_slidepageB
 }
@@ -198,28 +195,88 @@
 \_maxlayers=0
 
 \_long\_def\_layersactive #1 #2\endlayers{%
-   \_par\_penalty0\_egroup
-   \_gdef\_layertext{#2}%
+   \_par\_penalty0\_egroup\_egroup
+   \_gdef\_layertext{\_settinglayer#2}%
    \_global\_maxlayers=#1
-   \_setbox\_slidepageB=\_vbox\_bgroup
+   \_setbox\_slidepageB=\_vbox\_bgroup\_bgroup
+      \_setbox0=\_vbox{{\_layernum=1 \_globaldefs=-1 \_layertext\_endgraf}}\_prevdepth=\_dp0
 }
+\_public \subtit \slideshow \pg \wideformat \use \pshow \layernum ;
+
+   \_doc -----------------------------
+   \`\slideopen` should be used instead \^`\slideshow` to deactivate it
+   but keep the borders of groups.
+   \_cod -----------------------------
+
 \_def\_slideopen{\_let\slideshow=\_relax % first wins
    \_sdef{_spg:;}{\_egroups\_vfil\_break \_lfnotenumreset\_bgroup \_setilevel}
    \_sdef{_spg:.}{\_egroups\_endslides}
    \_sdef{_spg:+}{\_egroups\_bgroup \_setilevel}
+   \_let\_layersopen=\_egroup \_let\_layersclose\_bgroup
    \_bgroup
 }
+\_public \slideopen ;
 
-\_public \subtit \slideshow \slideopen \pg \wideformat \use \pshow \layernum ;
+   \_doc -----------------------------
+   When \^`\slideshow` is active then the destinations of internal hyperlinks
+   cannot be duplicated to more \"virtual" pages because
+   hyperlink destinations have to be unique in the whole document.
 
+   The \^`\slideshow` creates boxes of typesetting material and copies them to
+   more pages. So, we have to suppress creating destinations in these boxes.
+   This is done in the \`\_slidelinks` macro. We
+   can move creating these destinations to the output routine. \`\_sdestbox` is
+   saved value of the original `\_destbox` which is redefined to do only
+   `\addto\_destboxes{\_sdestbox[<label>]}`. All destinations saved to
+   \`\_destboxes` are created at the start of the next output routine in the
+   \^`\_pagedest` macro. The output routine removes `\_destboxes`, so each
+   destination is created only once.
+
+   Limitations of this solution: destinations are only at the start of the
+   page, no at the real place where \^`\wlabel` was used. The first \"virtual"
+   page where \^`\wlabel` is used includes its destination. If you want to
+   go to the final page of the partially uncovering ideas then
+   use \^`\label``[<label>]`\^`\wlabel``{text}` in the last part of
+   the page (before `\pg;`) o use \^`\pgref` instead \^`\ref`.
+   \_cod -----------------------------
+
+\_def\_slidelinks{%
+   \_def \_destbox[##1]{\_edef\_tmp{\_noexpand\_sdestbox[##1]}%
+      \_global\_ea\_addto\_ea\_destboxes\_ea{\_tmp}}%
+   \_def \_pagedest {%
+      \_hbox{\_def\_destheight{25pt}\_sdestbox[pg:\_the\_gpageno]\_destboxes}%
+      \_nointerlineskip \_gdef\_destboxes{}%
+   }%
+   \_ifx \_dest\_destactive \_else \_let\_pagedest=\_relax \_fi
+}
+\_let\_sdestbox = \_destbox
+\_def\_destboxes{}    % initial value of \_destboxes
+\_let\_bibgl=\_global % \advance\bibnum must be global if they are at more pages
+
    \_doc -----------------------------
+   The \`\_settinglayer` is used in the \^`\_layertext` macro to prevent
+   printing \"Duplicate label" warning when it is expanded. It is done
+   by special value of \`\_slideshook` (used by the \^`\label` macro).
+   Moreower, the warning about illegal use of `\bib`, `\usebib` in `\layers`
+   environment is activated.
+   \_cod -----------------------------
+
+\_def\_settinglayer{%
+   \_def\_slideshook ##1##2{}%
+   \_def\_bibB[##1]{\_nousebib}\_def\_usebib/##1 (##2) ##3 {\_nousebib}%
+}
+\_def\_nousebib{\_opwarning{Don't use \noexpand\bib nor \noexpand\usebib in \string\layers}}
+
+   \_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
+\_long\_def\_layers #1 #2\endlayers{\_par
+   \_layersopen {\_layernum=\_numexpr#1+1\_relax #2\_endgraf}\_layersclose}
+\_let\_layersopen=\_relax
+\_let\_layersclose=\_relax
 
 \_def\layers{\_layers}
 
@@ -240,6 +297,13 @@
 
 The user manual of \OpTeX/ slides are in `op-slides.tex` file.
 
+2021-04-22 \adef* moved back, bug fixed in more-macros.opm
+2021-04-21 \adef* removed from slides.opm, bug fixed
+2021-04-19 \_byehook added to \_endslides.
+2021-04-13 hyperlinks destinations are moved to the output routine when \slideshow
+2021-04-10 \layers: \prevdepth calculation added, {\_layertext} group added
+2021-04-10 \layers: bug with \setbox\_slidepageB fixed
+2021-04-10 \layers: \vskip\parskip added after \unvcopy\_slidepage
 2021-03-10 \slideopen introduced, bug with colors in \setbox fixed
 2021-03-10 \ifmmode* added to \adef*
 2021-02-15 \_def\_decr removed

Modified: trunk/Master/texmf-dist/tex/optex/base/table.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/table.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/table.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% 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
+\_codedecl \table {Basic macros for OpTeX <2021-04-12>} % preloaded in format
 
    \_doc -----------------------------
    The result of the \`\table``{<declaration>}{<data>}` macro is inserted into
@@ -213,7 +213,7 @@
 \_def\_tabdeclarer{\_the\_tabiteml\_hfil##\_unsskip\_the\_tabitemr}
 \_def\_paramtabdeclarep#1{\_the\_tabiteml
    \_vtop{\_hsize=#1\_relax \_baselineskip=\_normalbaselineskip
-   \_lineskiplimit=\_zo \_noindent##\_unsskip
+   \_lineskiplimit=\_zo \_noindent \_hskip\_zo \_relax ##\_unsskip
    \_ifvmode\_vskip\_dp\_tstrutbox \_else\_lower\_dp\_tstrutbox\_hbox{}\_fi}\_the\_tabitemr}
 
    \_doc -----------------------------
@@ -512,6 +512,7 @@
 
 \_endinput
 
+2021-04-12 p declarator: \hskip0pt added to allow first word hyphenated
 2021-03-09 \_tablepxpreset introduced
 2021-02-15 \_expandafter -> \_ea
 2021-01-27 \_tableB: \long\def added, \vspan syntax improved

Modified: trunk/Master/texmf-dist/tex/optex/base/uni-lcuc.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/uni-lcuc.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/uni-lcuc.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,12 +1,20 @@
 %% 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:
+\_wterm{Setting lccodes and uccodes for Unicode characters <2021-04-07>} % preloaded in format.
 
-% uni-lcuc.tex -- sets \lccodes and \uccodes for Unicode chars, nothing more
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Petr Olsak,  Jul. 2014
+\_isfile{UnicodeData.txt}\_iftrue
+\_begingroup
+   \_sdef{lc:Ll}#1#2#3#4{\_global\_lccode"#2="#2  \_global\_uccode"#2="0#3 }
+   \_sdef{lc:Lu}#1#2#3#4{\_global\_lccode"#2="0#4 \_global\_uccode"#2="#2 }
+   \_sdef{lc:Lo}#1#2#3#4{\_global\_lccode"#2="#2  \_global\_uccode"#2="#2 }
+   \_def\_pa#1;#2;#3;#4;#5;#6;#7;#8;#9;{\_ifx;#1;\_else\_ea\_pb\_fi{#1}{#3}}
+   \_def\_pb#1#2#3;#4;#5;#6;#7;#8 {\_csname lc:#2\_endcsname\_pc{#1}{#6}{#7}\_pa}
+   \_def\_pc#1#2#3{}      % ignored if the character hasn't Ll, Lu, nor Lo type
+   \_everyeof={;;;;;;;;;} % end of file
+   \_ea\_pa\_input UnicodeData.txt
+\_endgroup \_endinput \_fi  % \endinput here, if UnicodeData.txt was loaded
 
-\_wterm{Setting lccodes and uccodes for Unicode characters}
+% If UnicodeData.txt not found, we have internal copy here from csplain, 2014:
 
 \_def\_tmp #1 #2 {\_ifx^#1^\_else
    \_lccode"#1="#1
@@ -15928,17 +15936,30 @@
 % end of file
 \_endcode
 
-All codes in unicode table keep information about pairs lowecase-uppercase
+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.
+The file `UnicodeData.txt` is read if this file exists in your \TeX/
+distribution. The format is specified
+at \url{http://www.unicode.org/L2/L1999/UnicodeData.html}. We read only `Ll`
+(lowercase letters), `Lu` (upperase letters) and `Lo` (other letters) and
+set appopriate codes. The scanner of `UnicodeData.txt` is implemented here
+in the group (lines 6 to 15). After the group is closed then
+the file `uni-lcuc.opm` is leaved by `\endinput`.
 
+If the file `UnicodeData.txt` does not exsists then internal data are used.
+They follow to the end of the file `uni-lcuc.opm`.
+
 {\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip}\ttline=-1
 \def\docfile{uni-lcuc.opm}
-\verbinput (3-30) uni-lcuc.opm
+\verbinput (3-39) uni-lcuc.opm
 \vskip-\medskipamount
-\noindent\typosize[8/]\dots etc. (see {\tt\Brown\docfile})
+\noindent\typosize[8/]\dots etc., 15900 similar lines (see {\tt\Brown\docfile})
 }
+
+\_endinput
+
+2021-04-07 ... UnicodeData.txt scanner implemented
+2020-03-10 ... released

Modified: trunk/Master/texmf-dist/tex/optex/base/unimath-codes.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/unimath-codes.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/unimath-codes.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% 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
+\_codedecl \_ncharrmA {Uni math codes <2021-04-25>} % preloaded on demand by \loadmath
 
    \_doc -----------------------------
    The control sequences for `\alpha`, `\beta` etc are redefined here.
@@ -68,13 +68,31 @@
 \_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}
+\_protected\_def\_itGreek    {\_umathrangeGREEK71\_greekitA \_setnablait}
+\_protected\_def\_rmGreek    {\_umathrangeGREEK71\_greekrmA \_setnablarm}
+\_protected\_def\_bfGreek    {\_umathrangeGREEK71\_greekbfA \_setnablabf}
+\_protected\_def\_biGreek    {\_umathrangeGREEK71\_greekbiA \_setnablabi}
+\_protected\_def\_bsansGreek {\_umathrangeGREEK71\_greeksnA \_setnablabsans}
+\_protected\_def\_bisansGreek{\_umathrangeGREEK71\_greeksiA \_setnablabisans}
 
+   \_doc -----------------------------
+   \`\_setnabla` is used in order to `\nabla` behaves like uppercase Greek
+   letter, similar like `\Delta`. It depends on `\bf`, `\it` etc. selectors.
+   If you want to deactivate this behavior, use `\def\_setnabla#1 {}`.
+   \_cod -----------------------------
+
+\_def \_setnabla {\_Umathcode"2207 = 7 1}
+\_def \_setnablarm     {\_setnabla"02207 }
+\_def \_setnablabf     {\_setnabla"1D6C1 }
+\_def \_setnablait     {\_setnabla"1D6FB }
+\_def \_setnablabi     {\_setnabla"1D735 }
+\_def \_setnablabsans  {\_setnabla"1D76F }
+\_def \_setnablabisans {\_setnabla"1D7A9 }
+
+   \_doc -----------------------------
+   Digits are configured like math alphabets.
+   \_cod -----------------------------
+
 \_chardef\_digitrmO=`0
 \_chardef\_digitbfO="1D7CE
 \_chardef\_digitbbO="1D7D8
@@ -90,8 +108,7 @@
 \_protected\_def\_ttdigits    {\_umathrange{0-9}71\_digitttO}
 
    \_doc -----------------------------
-   The  \`\cal`, \`\bbchar`, \`\frak`, \`\script`
-   and
+   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
@@ -114,7 +131,7 @@
 % \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\_it {\_tryloadit \_tenit \_inmath{\_itvariables \_itGreek}}
 \_protected\_def\_bf
    {\_tryloadbf \_tenbf \_inmath{\_bsansvariables \_bsansgreek \_bsansGreek \_bsansdigits}}
 \_protected\_def\_bi
@@ -132,7 +149,7 @@
 
    \_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
+   the file `MathClass-15.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.
@@ -139,26 +156,21 @@
    \_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}
+   \_long\_def\_p#1;#2 {\_ifx^#2^\_else
+      \_edef\_tmp{\_csname _c:#2\_endcsname}\_if\_relax\_tmp\_else \_pA#1....\_end#2\_fi
+      \_ea\_p \_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
+      \_ifx\_relax#2\_relax \_pset{"#1}{#4}\_else \_fornum "#1.."#2\_do{\_pset{##1}{#4}}\_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
+   \_sdef{_c:L}{1}\_sdef{_c:B}{2}\_sdef{_c:V}{2}\_sdef{_c:R}{3}\_sdef{_c:N}{0}\_sdef{_c:U}{0}
+   \_sdef{_c:F}{0}\_sdef{_c:O}{4}\_sdef{_c:C}{5}\_sdef{_c:P}{6}\_sdef{_c:A}{7}
+   \_def\_pset#1#2{\_Umathcode#1=\_tmp\_space 1 #1\_relax
+      \_if#2O\_Udelcode#1=1 #1\_relax\_fi
+      \_if#2C\_Udelcode#1=1 #1\_relax\_fi
+      \_if#2F\_Udelcode#1=1 #1\_relax\_fi
    }
-   \_catcode`#=14
-   \_everypar={\_setbox0=\_lastbox \_par \_p}
-   \_setbox0=\_vbox{\_input mathclass.opm }
+   \_catcode`#=14 \_everyeof={;{} } \_def\par{}
+   \_globaldefs=1 \_ea \_p \_input mathclass.opm
 \_endgroup
 
    \_doc -----------------------------
@@ -171,13 +183,13 @@
 \_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
+          \_Umathchardef#2=0 1 #1 \_Umathcode#1=0 1 #1
+      \_else \_Umathcharnumdef#2=\_Umathcodenum#1 \_fi
+      \_ifx#3\_mathopen   \_def#2{\_Udelimiter 4 1 #1 }\_fi
+      \_ifx#3\_mathclose  \_def#2{\_Udelimiter 5 1 #1 }\_fi
+      \_ifx#3\_mathaccent \_def#2{\_Umathaccent fixed 7 1 #1 }\_fi
    }
-   \_input unimath-table.opm
+   \_globaldefs=1 \_input unimath-table.opm
 \_endgroup
 
    \_doc -----------------------------
@@ -195,8 +207,6 @@
 % 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 `!
@@ -210,6 +220,8 @@
 \_protected\_def \_cuberoot   {\_Uradical 1 "0221B }
 \_protected\_def \_fourthroot {\_Uradical 1 "0221C }
 
+\_def \nabla {^^^^2207} % \nabla behaves as uppercase Gereek letter, see \_setnabla
+
 \_public \sqrt \cuberoot \fourthroot ;
 
 \_def\_intwithnolimits#1#2 {\_ifx#1\_relax \_else
@@ -405,9 +417,9 @@
    \_cod -----------------------------
 
 \_private
-   \ldotp \cdotp \bullet \triangleleft \trianglerigt \mapstochar \rightarrow
+   \ldotp \cdotp \bullet \triangleleft \triangleright \mapstochar \rightarrow
    \prime \lhook \rightarrow \leftarrow \rhook \triangleright \triangleleft
-   \Relbar \Rightarrow \relbar \rightarrow \Leftarrow \mapstochar
+   \rbrace \lbrace \Relbar \Rightarrow \relbar \rightarrow \Leftarrow \mapstochar
    \longrightarrow \Longleftrightarrow \unicodevdots \unicodeddots \unicodeadots ;
 
 \_endcode
@@ -427,6 +439,11 @@
 \_endinput
 
 History:
+2021-04-25  \triangleright: typo fixed
+2021-04-20  reading mathclass.opm improved
+2021-04-07  \_setnabla introduced, \nabla as uppercase Greek letter
+2021-03-26  \it does \_itGreek
+2021-03-19  \{, \} are defined as mode independent macros in math-macros.opm
 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

Modified: trunk/Master/texmf-dist/tex/optex/base/usebib.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/usebib.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/usebib.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% 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
+\_codedecl \MakeReference {Reading bib databases <2021-04-13>} % loaded on demand by \usebib
 
    \_doc -----------------------------
    Loading the `librarian.tex` macro package. See `texdoc librarian`
@@ -24,14 +24,13 @@
    \_cod -----------------------------
 
 \_def\_usebib/#1 (#2) #3 {%
-  \_let\_citeI=\_relax \_xdef\_citelist{\_citelist\_citelistB}%
-  \_global\_let\_addcitelist=\_writeXcite
+  \_let\_citeI=\_relax \_xdef\_citelist{\_trycs{_ctlst:\_bibp}{}\_trycs{_ctlstB:\_bibp}{}}%
+  \_global \_ea\_let \_csname _ctlst:\_bibp\_endcsname =\_write
   \_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
@@ -48,10 +47,10 @@
            \_input #3.bib
            \_ea}\_ea\_def\_ea\_citelist\_ea{\_citelist}%
         \_fi
-        \_def\_citeI[##1]{\_csname lb at cite\_endcsname{##1}{\_bibpart}{}{}}\_citelist
+        \_def\_citeI[##1]{\_csname lb at cite\_endcsname{##1}{\_bibp}{}{}}\_citelist
         \_BibFile{#3}%
-        \_if s#1\_SortList{\_bibpart}\_fi
-        \_ReadList{\_bibpart}%
+        \_if s#1\_SortList{\_bibp}\_fi
+        \_ReadList{\_bibp}%
         \_restorectable
      \_egroup
   \_fi
@@ -117,13 +116,13 @@
    \_cod -----------------------------
 
 \_def\MakeReference{\_par \_bibskip
-  \_advance\_bibnum by1
-  \_isdefined{_bim:\_the\_bibnum}\_iftrue
-     \_edef\_tmpb{\_csname _bim:\_the\_bibnum\_endcsname}%
+  \_bibgl\_advance\_bibnum by1
+  \_isdefined{_bim:\_bibp\_the\_bibnum}\_iftrue
+     \_edef\_tmpb{\_csname _bim:\_bibp\_the\_bibnum\_endcsname}%
      \_bibmark=\_ea{\_tmpb}%
   \_else \_bibmark={}\_fi
   \_edef\_tmpb{\EntryKey}%
-  \_noindent \_dest[cite:\_the\_bibnum]\_printlabel\EntryKey
+  \_noindent \_dbib\EntryKey
   \_printbib
   {%
      \_RetrieveFieldIn{entrytype}\_entrytype
@@ -136,8 +135,7 @@
            \_csname _print:misc\_endcsname
      \_fi\_fi
      \_csname _print:END\_endcsname
-     \_ifx\_wref\_wrefrelax\_else
-         \_immediate\_wref\_Xbib{{\EntryKey}{\_the\_bibnum}{\_the\_bibmark}}\_fi
+     \_wbib \EntryKey {\_the\_bibnum}{\_the\_bibmark}%
   }\_par
 }
 
@@ -369,7 +367,8 @@
 
 History:
 --------
-
+2021-04-13  \bibpart implemented
+2021-04-13  \_bibgl introduced (used by \slides)
 2021-03-12  \_citelistB added before first test.
 2021-02-15  \_expandafter -> \_ea
 Apr. 2014:  released in OPmac

Modified: trunk/Master/texmf-dist/tex/optex/base/verbatim.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/base/verbatim.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/base/verbatim.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -1,6 +1,6 @@
 %% This is part of the OpTeX project, see http://petr.olsak.net/optex
 
-\_codedecl \begtt {Verbatim <2021-01-22>} % preloaded in format
+\_codedecl \begtt {Verbatim <2021-04-18>} % preloaded in format
 
    \_doc ----------------------------
    The internal parameters
@@ -125,15 +125,16 @@
    \_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}%
+   \_protrudechars=0 % disable protrusion
    \_the\_everytt \_relax #1\_relax \_ttfont
    \_def\_testcommentchars##1\_iftrue{\_iffalse}\_let\_hicomments=\_relax
-   \_endlinechar=`^^J
+   \_savemathsb \_endlinechar=`^^J
    \_startverb
 }
 \_ea\_def\_ea\_startverb \_ea#\_ea1\_csstring\\endtt#2^^J{%
    \_prepareverbdata\_tmpb{#1^^J}%
    \_ea\_printverb \_tmpb\_end
-   \_par
+   \_par \_restoremathsb
    \_endgroup \_ttskip
    \_isnextchar\_par{}{\_noindent}%
 }
@@ -246,8 +247,9 @@
    \_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}%
+   \_protrudechars=0 % disable protrusion
    \_the\_everytt\_relax \_tmpb\_relax \_ttfont
-   \_endlinechar=`^^J \_tmpnum=0
+   \_savemathsb \_endlinechar=`^^J \_tmpnum=0
    \_loop \_ifeof\_vifile \_tmpnum=\_vinolines\_space \_fi
          \_ifnum\_tmpnum<\_vinolines\_space
          \_vireadline \_advance\_tmpnum by1 \_repeat      %% skip lines
@@ -265,7 +267,7 @@
    \_catcode`\ =10 \_catcode`\%=9 % used in \commentchars comments
    \_ea\_printverb \_tmpb\_end
    \_global\_ttlinesave
-   \_par
+   \_par \_restoremathsb
    \_endgroup
    \_ttskip
    \_isnextchar\_par{}{\_noindent}%
@@ -276,6 +278,17 @@
 \_public \verbinput ;
 
    \_doc -----------------------------
+   \`\_savemathsb`, \`\_restoremathsb` pair is used
+   in \^`\begtt`...\^`\endtt` or in \^`\verbinput` to temporary suppress
+   the \^`\mathsbon` because we don't need to print `\int _a`
+   in verbatim mode if `\int``_a` is really written. The \^`\_restoremathsb`
+   is defined locally as \^`\mathsbon` only if it is needed.
+   \_cod -----------------------------
+
+\_def\_savemathsb{\_ifmathsb \_mathsboff \_def\_restoremathsb{\_mathsbon}\_fi}
+\_def\_restoremathsb{}
+
+   \_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
@@ -363,7 +376,9 @@
 \_endinput
 
 History:
-2020-01-22 ... \activettchar changed to \verbchar
+2021-04-18 ... \_protrudechars=0 added
+2021-04-07 ... \_savemathsb, \_restoremathsb introduced
+2021-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

Added: trunk/Master/texmf-dist/tex/optex/demo/op-mathalign.tex
===================================================================
--- trunk/Master/texmf-dist/tex/optex/demo/op-mathalign.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/optex/demo/op-mathalign.tex	2021-04-27 13:34:03 UTC (rev 59000)
@@ -0,0 +1,367 @@
+%% This is part of the OpTeX project, see http://petr.olsak.net/optex
+
+% Math alignment examples inspired by https://www.ntg.nl/maps/34/06.pdf 
+
+\fontfam[newcm]
+\margins/1 a4 (2,2,2,2)cm
+\hyperlinks\Blue\Blue
+
+\refdecl{
+   \def\Xpos#1#2#3{\sxdef{pos:#1}{{#2}{#3}\_currpage}}
+}
+\def\setpos[#1]{\openref\pdfsavepos
+   \_ewref\Xpos{{#1}\unexpanded{{\the\pdflastxpos}{\the\pdflastypos}}}}
+
+\def\posx [#1]{\_ea \posi   \romannumeral-`\.\trycs{pos:#1}{{0}{0}{0}{0}}sp}
+\def\posy [#1]{\_ea \posii  \romannumeral-`\.\trycs{pos:#1}{{0}{0}{0}{0}}sp}
+\def\pospg[#1]{\_ea \posiii \romannumeral-`\.\trycs{pos:#1}{{0}{0}{0}{0}}}
+
+\def\posi   #1#2#3#4{#1}
+\def\posii  #1#2#3#4{#2}
+\def\posiii #1#2#3#4{#3}
+
+\newcount\tomarginno
+\def\toright#1{\_incr\tomarginno {\setpos[tr:\the\tomarginno]%
+   \rlap{\kern-\posx[tr:\the\tomarginno]\kern\hoffset\kern\hsize\llap{#1}}}}
+\def\toleft#1{\_incr\tomarginno {\setpos[tr:\the\tomarginno]%
+   \rlap{\kern-\posx[tr:\the\tomarginno]\kern\hoffset\rlap{#1}}}}
+
+\def\eqm{\toright\eqmark}
+
+\def\\{\begingroup
+   \_setverb \obeylines \scanlatex
+}
+\def\scanlatex#1//{\tt #1\endgroup \scanoptex}
+\long\def\scanoptex#1$${\begingroup
+   \_setverb \obeylines \scanoptexA
+}
+\ea\def\ea\scanoptexA\ea#\ea1\detokenize{$$}{\bigskip \tt
+   \detokenize{$$}#1\detokenize{$$}\endgroup
+   $$\catcode`\^^M=9 \scantextokens{#1}$$
+   \bigskip
+}
+
+\tit Math alignment examples
+
+The document \url{https://www.ntg.nl/maps/34/06.pdf} shows examples how to
+do special math alignments in display mode in ConTeXt (and in \LaTeX/ for
+comparison). We present the same examples here. They are created in
+\OpTeX/ and the \LaTeX/ source is shown for comparison.
+
+Note that several examples here use the macro \code{\\eqm} for placing 
+an equation mark. The macro is defined~by
+
+\begtt
+\def\eqm{\toright\eqmark}
+\endtt
+%
+and the \code{\\toright} macro is defined in
+\ulink[http://petr.olsak.net/optex/optex-tricks.html#torighteq]{\OpTeX/ trick 0028}
+which is based on 
+\ulink[http://petr.olsak.net/optex/optex-tricks.html#setpos]{\OpTeX/ trick 0020}.
+I.e. the following macros are used here:
+
+\begtt
+\refdecl{
+   \def\Xpos#1#2#3{\sxdef{pos:#1}{{#2}{#3}\_currpage}}
+}
+\def\setpos[#1]{\openref\pdfsavepos
+   \_ewref\Xpos{{#1}\unexpanded{{\the\pdflastxpos}{\the\pdflastypos}}}}
+
+\def\posx [#1]{\_ea \posi   \romannumeral-`\.\trycs{pos:#1}{{0}{0}{0}{0}}sp}
+\def\posy [#1]{\_ea \posii  \romannumeral-`\.\trycs{pos:#1}{{0}{0}{0}{0}}sp}
+\def\pospg[#1]{\_ea \posiii \romannumeral-`\.\trycs{pos:#1}{{0}{0}{0}{0}}}
+
+\def\posi   #1#2#3#4{#1}
+\def\posii  #1#2#3#4{#2}
+\def\posiii #1#2#3#4{#3}
+
+\newcount\tomarginno
+\def\toright#1{\_incr\tomarginno {\setpos[tr:\the\tomarginno]%
+   \rlap{\kern-\posx[tr:\the\tomarginno]\kern\hoffset\kern\hsize\llap{#1}}}}
+\def\toleft#1{\_incr\tomarginno {\setpos[tr:\the\tomarginno]%
+   \rlap{\kern-\posx[tr:\the\tomarginno]\kern\hoffset\rlap{#1}}}}
+\endtt
+%
+and we have to run \TeX/ twice.
+
+\notoc\nonum\sec Contents
+
+\centerline{\vbox{\hsize=.5\hsize
+\maketoc
+}}
+
+\vfil\break
+
+\let\_firstnoindent=\relax
+\mathsboff \catcode`\_=12 \everytable{\catcode`\_=11}
+
+\sec Gather
+
+\\
+\begin{gather}
+   v = u  + at,           \\
+   d = ut + \frac12 at^2.
+\end{gather}
+//
+
+$$
+  \displaylines{
+     v = u  + at,              \eqm \cr
+     d = ut + {1\over2} at^2.  \eqm
+  }  
+$$
+
+\sec Left gather
+
+\\
+\begin{align}
+  & v = u + at,            \\
+  & d = ut + \frac12 at^2.
+\end{align}
+//
+
+$$
+  \eqalignno{
+     & v = u + at,               & \eqmark \cr
+     & d = ut + {1\over2} at^2.  & \eqmark 
+  }
+$$
+
+\sec Right gather
+
+\\
+\begin{align}
+  v = u + at ,           & \\
+  d = ut + \frac12 atˆ2. &
+\end{align}
+//
+
+$$
+  \eqalignno{
+     v = u + at,               && \eqmark \cr
+     d = ut + {1\over2} at^2.  && \eqmark 
+  }  
+$$
+
+\sec Align
+
+\\
+\begin{align}
+  v &= u + at,            \\
+  d &= ut + \frac12 at^2.
+\end{align}
+//
+
+$$
+  \eqalignno{
+    v &= u + at,               & \eqmark \cr
+    d &= ut + {1\over2} at^2.  & \eqmark
+  }
+$$
+
+\sec Split
+
+\\
+\begin{equation} \begin{split}
+  (x+1)^8 ={} & x^8 + 8 x^7 + 28 x^6 + 56 x^5 + 70 x^4 \\
+              & + 56 x^3 + 28 x^2 + 8 x + 1.
+\end{split} \end{equation}
+//
+
+$$
+  \eqalign{
+       (x+1)^8 = {}& x^8 + 8 x^7 + 28 x^6 + 56 x^5 + 70 x^4 \cr
+                   & + 56 x^3 + 28 x^2 + 8 x + 1.
+  } \eqmark
+$$
+
+\sec Alignat
+
+\\
+\begin{alignat}{2}
+  \nabla\cdot \mathbf  E &= \frac{\rho}{\varepsilon_0}, \qquad
+& \nabla\times \mathbf E &= -\frac{\partial \mathbf B}{\partial t},\\
+  \nabla\cdot \mathbf  B &= 0,
+& \nabla\times \mathbf B &= \mu_0{\mathbf j}+\varepsilon_0\mu_0
+                            \frac{\partial \mathbf E}{\partial t}.
+\end{alignat}
+//
+
+$$
+  \eqalign{
+     \nabla\cdot {\bf E}     &= {\rho\over\varepsilon_0}, \qquad
+     && \nabla\times {\bf E} &= -{\partial {\bf B}\over\partial t}, \eqm\cr
+     \nabla\cdot {\bf B}     &= 0,
+     && \nabla\times {\bf B} &= \mu_0{\bf j}+\varepsilon_0\mu_0
+                                {\partial {\bf E}\over \partial t}. \eqm
+  }
+$$
+
+\sec Flalign
+
+\\
+\begin{flalign*}
+  \nabla\cdot \mathbf  E &= \frac{\rho}{\varepsilon_0},
+& \nabla\times \mathbf E &= -\frac{\partial \mathbf B}{\partial t}.\\
+  \nabla\cdot \mathbf  B &= 0,
+& \nabla\times \mathbf B &= \mu_0{\mathbf j}+\varepsilon_0\mu_0
+                              \frac{\partial \mathbf E}{\partial t}.
+\end{flalign*}
+//
+
+$$
+  \eqspace=10em
+  \eqalign{
+     \nabla\cdot {\bf E}     &= {\rho\over\varepsilon_0}, \qquad
+     && \nabla\times {\bf E} &= -{\partial {\bf B}\over\partial t}, \cr
+     \nabla\cdot {\bf B}     &= 0,
+     && \nabla\times {\bf B} &= \mu_0{\bf j}+\varepsilon_0\mu_0
+                                {\partial {\bf E}\over \partial t}.     
+  }
+$$
+
+\sec Intertext
+
+\\
+\begin{align*}
+  \cos 2\theta &= \cos^2 \theta + \sin^2 \theta \\
+  \intertext{replace $\sin^2 \theta$ by $1 - \cos^2 \theta$}
+  &= 2\cos^2 \theta - 1
+\end{align*}
+//
+
+$$
+  \eqalignno{
+     \cos 2\theta &= \cos^2 \theta + \sin^2 \theta \cr
+      \noalign{\hbox{replace $\sin^2 \theta$ by $1 - \cos^2 \theta$}}
+                  &= 2\cos^2 \theta - 1
+  }
+$$
+
+\sec Linear equations
+
+\\
+\begin{alignat}{5}
+    x_1 & {} + {}& x_2    &{} + {}& 6x_3 &{} = {}& 170, \\
+   3x_1 & {} - {}& 110x_2 &{} - {}& x_3   &{} = {}& 4,  \\
+  14x_1 & {} + {}& 13x_2  &{} + {}& 10x_3 &{} = {}& 25.
+\end{alignat}
+//
+
+$$
+  \thistable{\tablinespace=0pt \tabiteml={${}}\tabitemr={{}$}
+             \tabstrut={\lower1.5ex\vbox to3.5ex{}}}
+  \table{3{rc}r}{
+     x_1 &+&    x_2  &+&  6x_3  &=& 170, \eqm \cr
+    3x_1 &-& 110x_2  &-&   x_3  &=& 4,   \eqm \cr
+   14x_1 &+&  13x_2  &+& 10x_3  &=& 25.  \eqm
+  }    
+$$
+
+\sec Matrix and Arrays
+
+\\
+\begin{equation*}
+\setlength{\arraycolsep}{1em}
+  \begin{array}{ccc}
+    A   &   B & C \\
+    AA  &  BB & CC \\
+    AAA & BBB & CCC
+  \end{array}
+\end{equation*}
+//
+
+$$
+  \matrix{
+    A   &   B & C    \cr
+    AA  &  BB & CC   \cr
+    AAA & BBB & CCC
+  }
+$$
+
+\\
+\begin{equation*}
+\setlength{\arraycolsep}{1em}
+  \begin{array}{lcr}
+    A   &   B & C \\
+    AA  &  BB & CC \\
+    AAA & BBB & CCC
+  \end{array}
+\end{equation*}
+//
+
+$$
+  \thistable{\tabstrut{}\tabiteml={\kern.5em${}}\tabitemr={{}$\kern.5em}}
+  \table{lcr}{
+    A   &   B & C  \cr
+    AA  &  BB & CC \cr
+    AAA & BBB & CCC
+  }
+$$
+
+\sec Pmatrix
+
+\\
+\begin{equation*}
+  A = \begin{pmatrix} 1 \\ 2 \\ 3 \end{pmatrix}
+\end{equation*}
+//
+
+$$
+  \pmatrix {1\cr 2\cr 3}
+$$
+
+\sec Delarray package
+
+\\
+\begin{equation*}
+  \begin{array}[b]({c}) 1 \\ 2 \\ 3 \end{array}
+  \begin{array}[c]({c}) 1 \\ 2 \\ 3 \end{array}
+  \begin{array}[t]({c}) 1 \\ 2 \\ 3 \end{array}
+\end{equation*}
+//
+
+$$
+  \def\mybox#1{\hbox{$\displaystyle{#1}$}}
+  \raise3ex\mybox{\pmatrix {1\cr 2\cr 3}}
+  \pmatrix {1\cr 2\cr 3}
+  \lower3ex\mybox{\pmatrix {1\cr 2\cr 3}}
+$$
+
+\sec Cases
+
+\\
+\begin{equation*}
+  |x| =
+  \begin{cases}
+     x, & \text{if $x \ge 0$;} \\
+    -x, & \text{otherwise.}
+  \end{cases}
+\end{equation*}
+//
+
+$$
+  |x| = \cases {  x & if $x \ge 0$; \cr
+                 -x & otherwise }
+$$
+
+\\
+\begin{equation*}
+  f(x) =
+  \begin{dcases}
+    \int_0ˆx g(y)\,dy,    & \text{if $x \ge 0$;} \\
+    \int_{-x}ˆ0 g(y)\,dy, & \text{otherwise.}
+  \end{dcases}
+\end{equation*}
+//
+
+$$
+  \let\ds=\displaystyle
+  f(x) = \cases { \ds \int_0^x g(y)\,dy,    & if $x \ge 0$; \cr \noalign{\medskip}
+                  \ds \int_{-x}^0 g(y)\,dy, & otherwise. }
+$$
+
+
+
+\end


Property changes on: trunk/Master/texmf-dist/tex/optex/demo/op-mathalign.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/optex/demo/op-slides.tex
===================================================================
--- trunk/Master/texmf-dist/tex/optex/demo/op-slides.tex	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/demo/op-slides.tex	2021-04-27 13:34:03 UTC (rev 59000)
@@ -151,15 +151,15 @@
 
 \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
+* When `\slideshow` is active then references created by `\ref`
+  point to the first uncovering \"virtual" page where the destination is
+  and references created by `\pgref` point to the last \"virtual" page.
+* If the text overfulls 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
+  This can create 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:
 
@@ -166,7 +166,7 @@
 \begtt
 \slides
 \def\foo...{...} % global definitions.
-%\slideshow      % printing version, no slide show.
+%\slideshow
 \slideopen       % opens group for first page.
 ... first page
 \pg;             % closes group and opens group for second page.
@@ -216,7 +216,7 @@
 
 * `\putpic <right> <up> <width> <height> {<image-file>}`
   puts the image with desired <width> and <height> at the position like
-  `\puttext` puts the text.
+  `\puttext` puts the text.\pg+
 
   \putpic .8\hsize 20mm 30mm \nospec {op-ring.png}
 * The ring above is the result of
@@ -249,10 +249,11 @@
 \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...
+* The `\layers` opens <number> following pages with the same
+  surrounding text. The counter `\layernum` is incemented from one to
+  <number> . The <layered text> should use `\layernum` including
+  conditions like `\ifnum\layernum` or `\ifcase\layernum`.
+  See next page...
 
 \pg; %------------------------------------------------------------------
 
@@ -265,10 +266,10 @@
 \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`.
+`\use{=<num>}{<something>}` does <something> only if `\layernum=<num>`.\kern-1em
 
 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>.
+to <num> or it prints <text> normally when the current layer is greater than <num>.
 The transparent (invisible) text is used in other cases.
 
 The following dance:
@@ -288,7 +289,7 @@
 \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.`
+  page (terminated by `\pg+` or `\pg;` or `\pg.`).
 
 \pg; %------------------------------------------------------------------
 
@@ -298,7 +299,7 @@
 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
+  dozens of \code{\\begin{foo}} and \code{\\end{foo}} and many other
   programming constructions,\pg+
 * plain \TeX{} gives you a possibility to simply
   {\em write} your document with minimal markup. The result is more compact.

Modified: trunk/Master/texmf-dist/tex/optex/pkg/emoji.opm
===================================================================
--- trunk/Master/texmf-dist/tex/optex/pkg/emoji.opm	2021-04-27 13:33:33 UTC (rev 58999)
+++ trunk/Master/texmf-dist/tex/optex/pkg/emoji.opm	2021-04-27 13:34:03 UTC (rev 59000)
@@ -51,5 +51,8 @@
 
 More than 3000 emoticons are available.
 
+See also \ulink[http://petr.olsak.net/optex/optex-tricks.html#emoji]
+{\OpTeX/ trick 0062}.
+
 If you want black-and-white pictograms, see another font:
 \url{http://petr.olsak.net/optex/optex-tricks.html\#fawesome}



More information about the tex-live-commits mailing list.