OpTeX: the LuaTeX format based on Plain TeX and OPmac

Author:    Petr Olsak, <petr@olsak.net>

Co-author: Michal Vlasák, <lahcim8@gmail.com>
           (Lua code, colors by attributes, interface to tikz, minim)

This software is in public domain.

See http://petr.olsak.net/optex

Files:

base/  ... basic set of macro files used when optex.fmt is generated
           and more basic macros loaded on demand during document processing.
demo/  ... examples: short document: op-demo.tex, short letter: op-letter.tex,
           presentation slides: op-slides.tex.
pkg/   ... external macros. Maybe, they can be created by other authors if 
           the macro file conforms to the rules given in the section 2.2.5 
           in the OpTeX documentation.
doc/   ... PDF version of the OpTeX documentation and sources.

History:

<1.19> Feb 2026:
       Little improvements and bug fixes
       f-raleway font file added
       More OpTeX tricks
<1.18> May 2025:
       Bug causing slow processing fixed (the bug occurred in version 1.17)
       \foreachx introduced
       several font files added
       doc.opm enables to set strings without backslash as main-point too

<1.17> Feb 2025:
       OpTeX uses luahbtex instead luatex as default engine (from TeXlive 2025)
       Default PDF version changed from 1.5 to 1.7
       f-alegreya added
       math.opm: \mathselector (for using text fonts in math mode) introduced
       \it, \rm in math mode use script=latn, no italic corrections between letters
       \pdfstring implemented using Lua, newly used for PDF outlines
       optex.lua modified
       several OpTeX tricks added
       minor bugs fixed
<1.16> Dec 2024:
       JSON files and tree structure support as a set of OpTeX tricks
       CSV databases support as a set of OpTeX tricks
       \xloop implemented
       Processing speed slightly improved for sort and \replstring
       \replstring, \foreach: fixed the braces-loss problem
       Font family files added
       Multicolumn: measurement of big boxes improved
       Minor corrections, small improvements
<1.15> Jun 2024:
       \qcasesof improved: more alternative patterns can be declared using |.
       \loadtrick is expandable now.
       More OpTeX tricks added.
       Minor improvements and minor bug fixes.
<1.14> Feb 2024:
       More links in doc: TeX primitives linked to TeX in a Nutshell.
       \trykv returns unexpanded value of the key=value pair.
       \bracedparam reimplemented, improved.
       \optdef can create an expandable macro.
<1.13> Nov 2023:
       \usebib completely reimplemented, libranian package not needed from now.
       Selected OpTeX tricks are automatically loaded when a relevant macro is used.
       Font file for variable font Fraunces added.
       Clara serif and more font files added.
       Hebrew data, font family and Hebrew example added.
       More robust key-value scanner.
       Minor improvements and minor bug fixes.
<1.12> May 2023:
       Support for right-to-left (Hebrew) typesseting introduced.
       More features in math.opm style.
       \_createbibmark in bib-styles introduced.
       Heuristica and more font-files added.
       Minor more improvements and bug fixes.
<1.11> Mar 2023:
       \fontfamsub: the substitution of missing families introduced.
       New font family files created.
       Minor bugs fixed.
<1.10> Feb 2023:
       key-values improved: \iskv, \kvx, \nokvx introduced.
       unimath-codes: control sequences are macros, no \chardef.
       \bp, \expr: optional syntax for setting the number of digits after decimal point.
       \isnextchar is expandable.
       math.opm: various improvements.
<1.09> Dec 2022:
       New math.opm package: doing math more comfortable.
       The math.opm package can be a package template for macro writers.
       \docgen for printing doucumantation of packages introduced.
       unimath control sequences are almost all declared by \chardef, no \mathchardef.
       \casesof, \currfile, \nospaceafter (tools for macro programmers) introduced.
       \setpos, \posx, \posy moved from OpTeX trick to the format.
       \sfont, \ufont introduced.
       More robust \caption parameter.
       Lato, Kurier, Iwona font families registered.
       Minor more improvements and bug fixing.
<1.08> Aug 2022:
       Sorting rules for German, French, Polish, Hungarian, ... added.
       Font files for Montserrat, STIX, XITS, STIXtwo, Overlock added.
       Minor improvements and bug fixing.
<1.07> May 2022:
       Tikz's \foreach works only in its environment.
       \lipsum syntax enlarged by dot after paragraph num, example: \lipsum[3.].
       f-baskervald.opm added.
       expandable \isinlist implemented.
       bibstyles \. replaced by \: }due to collision with \oldaccents).
       Fixed a few bugs.
<1.06> Mar. 2022:
       \transparency selector using attributes implemented.
       Interface to minim (minim-mp.opm, minim-pdf.opm) introduced.
       Interface to TikZ (tikz.opm) improved.
       PDF page resources: management by Lua code implemented.
       Possibility of preloading no fonts to the format by \let\fontspreload=\relax.
       hisyntax-lua.opm introduced.
       plain-at.opm macros included to the format.
       Language/hyphenations macros reimplemented, phrases file introduced.
       Font selection: low level macros reimplemented, \fontsel introduced.
<1.05> Jan. 2022:
       \_par used internally instead \par if \partokenname is available.
       Extended format \ref[label]{text} and \pgref[label]{text} introduced.
       Fixed a few bugs.
<1.04> Aug. 2021:
       Color handling reimplemented, LuaTeX's attributes are used now.
       Loading Unicode math fonts reimplemented, (s)script size given by font.
       Better compatibility with TikZ using tikz.opm package.
       .ref file: consistency checking added.
       Versions of .opm files printed only to .log.
       \tracingmacros=3 or 4 enabled.
       Bugs fixing.
<1.03> Jun. 2021:
       mte: Package for MicroTypographic Extensions released.
       Erewhon: font family support added.
       \rgbcmykmap for RGB-CMYK mapping introduced.
       \table: sum of \tsizes allowed different from one.
       doc: hyperlinks from Index created.
       \url and \link macros re-written.
       Bugs fixing.
<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.
       Up to date 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.
       two new callbacks from new LuaTeX 1.13 added to optex.lua
       active * (in lists) works as normal in math mode.
       f-heros(\slides): additional font XITSMath loaded (to the base FiraMath font).
       \_xhsize setting added to \margins.
<1.00> Feb. 2021
       The OMLS (OpTeX Markup Language Standard) was developed. It helps to create
       converters from/to OpTeX documents and similar applications.
       \pdfunidef re-imeplemted.
       \thisoutline introduced.
       \verbchar introduced instead \activettchar.
       Bugs fixing.
<0.19> Jan. 2021
       emoji support as pkg/emoji.opm.
       non-braakable places generated by luavlna, supported as pkg/vlna.opm.
       \begblock...\endblock introduced.
       comment character allowed after \begtt.
       more robust macros: \replstring, \table.
       complete revision of documentation, spelling corrections.
       Several bugs fixed.
<0.18> Dec. 2020
       Font support for next 9 families added.
       Font selection system improved.
       Documentation (especially about font selection system) corrected.
       Macros supporting key=value included to the format.
       \foreach macro improved.
       Concept of multilang in bib rewritten.
       \opwarning format changed (line numbers are printed too).
       Several bugs fixed.
<0.17> Nov. 2020
       optex.lua introduced (instead external ltluatex.lua)
       hyph.patterns are loaded directly by \patterns, not using lua code
       \commentchars introduced (comments which are able to interrupt verbatim mode)
<0.16> Oct. 2020
       callback.register_x introduced, namespaces for packages corrected
       kerkis and EBGaramond fontfiles added
       little corrections
       optex-math manual: Index added 
<0.15> Jun. 2020
       Release for Overleaf - TL2020.
       More vertical space above in \chap and \secc.
<0.14> Jun. 2020
       Typeseting Math with OpTeX: new document added.
       Math macros corrected.
       In-line verbatim in section titles allowed.
       \eqbox implemented.
       "\mnote up", "\displaylines to" (new features implemented)
<0.13> May 2020
       \table have more features: \tabskip, \table to, \table pxto, \vspan
       The \eqalign reimplemented to be more flexible.
       The boundary character ":" introduced in the \table.
       \| undefined in 8bit math: bug fixed.
       \isnextchar: \let\tmp=#1 -> \let\tmp= #1 
<0.12> May 2020
       The external macro qrcode.opm introduced
       New directory structure: base/, demo/, pkg/, doc/ introduced.
       \load macro introduced 
       \newif: bug fixed, other bug fixed.
<0.11> Apr. 2020
       \phi, \varpi in Unicode: bug fixed
       \mathstyles introduced.
<0.10> Apr. 2020
       Technical documentation added
       \_famdecl instedad \_fontdecl in font family files (incompatible change).
<0.09> Syntax highlighting implemented.
<0.08> \numberedpar implemented. \emergencystretch=20pt added as default. 
       \inoval, \incircle, \clipinoval, \clipincircle imlemented. 
       \puttext, \putpic x,y instead -y,x (incompatible change!) 
       footnotes have separated color stack now. 
       \fnotelinks implemented.
       Lists by \begitems...\enditems improved (\novspaces \_vspacehalf, \ilevel).
<0.07> demos: op-letter.tex and op-slides.tex added.
       \inkinspic, \transformbox, \slides added.
       documentation improved and updated.
<0.06> tables re-implemented, opmac-rest removed.
       footnotes, marginal notes reimplemented.
       sections.opm, graphics.opm, colors.opm, languages re-implemented
       Cite-bib re-implemented.
       Index, sorting re-implemented.
<0.05> \boldmath reimplemented
       \fontcolor, \letterspacing implemented
       font catalogue improved
<0.04> references.opl, hyperlinks.opl re-implemented.  
       \fontfam, f-* rewritten: no usage of boundary "..." in \_fontnamegen
       \fnote{...} corrected: (parameter is not really parameter)
       verbatim.opl re-implemented + doc added
       file-ref.opl implemented (new \_Xrefversion{3})
       bugfixing
<0.03> optex-doc optex.1 included,
       verbatim.opm re-implemented,
       math-unicode implemented,
       usebib.opm + bib-style.opm included
       \catcodetable stack implemented
       bugfixing of macros.
       catcodes.opl: removed, one can use \catcodetable, ... primitives,
       pdfuni-string: lua code for lua5.3 fixed.
<0.02> Released.
