diff options
Diffstat (limited to 'macros/luatex')
105 files changed, 0 insertions, 44529 deletions
diff --git a/macros/luatex/optex/README b/macros/luatex/optex/README deleted file mode 100644 index b8f925e47c..0000000000 --- a/macros/luatex/optex/README +++ /dev/null @@ -1,120 +0,0 @@ -OpTeX: the LuaTeX format based on Plain TeX and OPmac - -Author: Petr Olsak, <petr@olsak.net> - -This software is in public domain. - -See http://petr.olsak.net/optex - -Files: - -base/ ... basic set of macro files used when optex.fmt is generated - and more basic macros loaded on demand during document processing. -demo/ ... examples: short document: op-demo.tex, short letter: op-letter.tex, - presentation slides: op-slides.tex. -pkg/ ... external macros. Maybe, they can be created by other authors if - the macro file conforms to the rules given in the section 2.2.5 - in the OpTeX documentation. -doc/ ... PDF version of the OpTeX documentation and sources. - -History: - -<1.01> Mar. 2021 - Minor code fixes (thanks to reports from users). - LibreCaslon font file added. - two new callbacks from new LuaTeX 1.13 added to optex.lua - active * (in lists) works as normal in math mode. - f-heros(\slides): additional font XITSMath loaded (to the base FiraMath font). - \_xhsize seting added to \margins. -<1.00> Feb. 2021 - The OMLS (OpTeX Markup Language Standard) was developed. It helps to create - convertors from/to OpTeX documents and similar applications. - \pdfunidef re-imeplemted. - \thisoutline introduced. - \verbchar introduced instead \activettchar. - Bugs fixing. -<0.19> Jan. 2021 - emoji support as pkg/emoji.opm. - non-braakable places generated by luavlna, suported as pkg/vlna.opm. - \begblock...\endblock introduced. - comment character allowed after \begtt. - more robust macros: \replstring, \table. - complete revision of documentation, spelling corrections. - Several bugs fixed. -<0.18> Dec. 2020 - Font support for next 9 families added. - Font selection system improved. - Documentation (especially about font selection system) corrected. - Macros supporting key=value included to the format. - \foreach macro improved. - Concept of multilang in bib rewritten. - \opwarning format changed (line numbers are printed too). - Several bugs fixed. -<0.17> Nov. 2020 - optex.lua introduced (instead external ltluatex.lua) - hyph.patterns are loaded directly by \patterns, not using lua code - \commentchars introduced (comments which are able to interrupt verbatim mode) -<0.16> Oct. 2020 - callback.register_x introduced, namespaces for packages corrected - kerkis and EBGaramond fontfiles added - little corrections - optex-math manual: Index added -<0.15> Jun. 2020 - Release for Overleaf - TL2020. - More vertical space above in \chap and \secc. -<0.14> Jun. 2020 - Typeseting Math with OpTeX: new document added. - Math macros corrected. - In-line verbatim in section titles allowed. - \eqbox implemented. - "\mnote up", "\displaylines to" (new features implemented) -<0.13> May 2020 - \table have more features: \tabskip, \table to, \table pxto, \vspan - The \eqalign reimplemented to be more flexible. - The boundary character ":" introduced in the \table. - \| undefined in 8bit math: bug fixed. - \isnextchar: \let\tmp=#1 -> \let\tmp= #1 -<0.12> May 2020 - The external macro qrcode.opm introduced - New directory structure: base/, demo/, pkg/, doc/ introduced. - \load macro introduced - \newif: bug fixed, other bug fixed. -<0.11> Apr. 2020 - \phi, \varpi in Unicode: bug fixed - \mathstyles introduced. -<0.10> Apr. 2020 - Technical documentation added - \_famdecl instedad \_fontdecl in font family files (incompatible change). -<0.09> Syntax highlighting implemented. -<0.08> \numberedpar implmented. \emergencystretch=20pt added as default. - \inoval, \incircle, \clipinoval, \clipincircle imlemented. - \puttext, \putpic x,y instead -y,x (incompatible change!) - footnotes have separated color stack now. - \fnotelinks implemented. - Lists by \begitems...\enditems improved (\novspaces \_vspacehalf, \ilevel). -<0.07> demos: op-letter.tex and op-slides.tex added. - \inkinspic, \transformbox, \slides added. - documentation improved and updated. -<0.06> tables re-implemented, opmac-rest removed. - footnotes, marginal notes reimplemented. - sections.opm, graphics.opm, colors.opm, languages re-implemented - Cite-bib re-implemented. - Index, sorting re-implemented. -<0.05> \boldmath reimplemented - \fontcolor, \letterspacing implemented - font catalogue improved -<0.04> references.opl, hyperlinks.opl re-implemented. - \fontfam, f-* rewritten: no usage of boundary "..." in \_fontnamegen - \fnote{...} corrected: (parameter is not really parameter) - verbatim.opl re-implemented + doc added - file-ref.opl implemented (new \_Xrefversion{3}) - bugfixing -<0.03> optex-doc optex.1 included, - verbatim.opm re-implmented, - math-unicode implemented, - usebib.opm + bib-style.opm included - \catcodetable stack implemented - bugfixing of macros. - catcodes.opl: removed, one can use \catcodetable, ... primitives, - pdfuni-string: lua code for lua5.3 fixed. -<0.02> Released. diff --git a/macros/luatex/optex/base/alloc.opm b/macros/luatex/optex/base/alloc.opm deleted file mode 100644 index 5d874134d4..0000000000 --- a/macros/luatex/optex/base/alloc.opm +++ /dev/null @@ -1,173 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \newdimen {Allocators for registers <2021-02-15>} % loaded in format - - \_doc ----------------------------- - The limits are set first. - \_cod ----------------------------- - -\_chardef\_maicount = 65535 % Max Allocation Index for counts registers in LuaTeX -\_let\_maidimen = \_maicount -\_let\_maiskip = \_maicount -\_let\_maimuskip = \_maicount -\_let\_maibox = \_maicount -\_let\_maitoks = \_maicount -\_chardef\_mairead = 15 -\_chardef\_maiwrite = 15 -\_chardef\_maifam = 255 - - \_doc ----------------------------- - Each allocation macro needs its own counter. - \_cod ----------------------------- - -\_countdef\_countalloc=10 \_countalloc=255 -\_countdef\_dimenalloc=11 \_dimenalloc=255 -\_countdef\_skipalloc=12 \_skipalloc=255 -\_countdef\_muskipalloc=13 \_muskipalloc=255 -\_countdef\_boxalloc=14 \_boxalloc=255 -\_countdef\_toksalloc=15 \_toksalloc=255 -\_countdef\_readalloc=16 \_readalloc=-1 -\_countdef\_writealloc=17 \_writealloc=-1 -\_countdef\_famalloc=18 \_famalloc=3 - - \_doc ----------------------------- - The common allocation macro - \`\_allocator` `\<sequence> {<type>} \<primitive declarator>` - is defined. This idea was used in classical plain \TeX/ by - Donald Knuth too but the macro from plain \TeX/ seems to be - more complicated:). - \_cod ----------------------------- - -\_def\_allocator #1#2#3{% - \_incr{\_cs{_#2alloc}}% - \_ifnum\_cs{_#2alloc}>\_cs{_mai#2}% - \_errmessage{No room for a new \_ea\_string\_csname #2\_endcsname}% - \_else - \_global#3#1=\_cs{_#2alloc}% - \_wlog{\_string#1=\_ea\_string\_csname #2\_endcsname\_the\_cs{_#2alloc}}% - \_fi -} - - \_doc ----------------------------- - The allocation macros - \`\newcount`, \`\newdimen`, \`\newskip`, \`\newmuskip`, \`\newbox`, - \`\newtoks`, \`\newread`, \`\newwrite` and \`\newfam` - are defined here. - \_cod ----------------------------- - -\_def\_newcount #1{\_allocator #1{count}\_countdef} -\_def\_newdimen #1{\_allocator #1{dimen}\_dimendef} -\_def\_newskip #1{\_allocator #1{skip}\_skipdef} -\_def\_newmuskip #1{\_allocator #1{muskip}\_muskipdef} -\_def\_newbox #1{\_allocator #1{box}\_chardef} -\_def\_newtoks #1{\_allocator #1{toks}\_toksdef} -\_def\_newread #1{\_allocator #1{read}\_chardef} -\_def\_newwrite #1{\_allocator #1{write}\_chardef} -\_def\_newfam #1{\_allocator #1{fam}\_chardef} - -\_public \newcount \newdimen \newskip \newmuskip \newbox \newtoks \newread \newwrite \newfam ; - - \_doc ----------------------------- - The \`\newinsert` macro is defined differently than others. - \_cod ----------------------------- - -\_newcount\_insertalloc \_insertalloc=255 -\_chardef\_insertmin = 201 - -\_def\_newinsert #1{% - \_decr\_insertalloc - \_ifnum\_insertalloc <\_insertmin - \_errmessage {No room for a new \_string\insert}% - \_else - \_global\_chardef#1=\_insertalloc - \_wlog {\_string#1=\_string\_insert\_the\_insertalloc}% - \_fi -} -\_public \newinsert ; - - \_doc ----------------------------- - Other allocation macros \`\newattribute` and \`\newcatcodetable` - have their counter allocated by the `\newcount` macro. - \_cod ----------------------------- - -\_newcount \_attributealloc \_attributealloc=0 -\_chardef\_maiattribute=\_maicount -\_def\_newattribute #1{\_allocator #1{attribute}\_attributedef} - -\_newcount \_catcodetablealloc \_catcodetablealloc=10 -\_chardef\_maicatcodetable=32767 -\_def\_newcatcodetable #1{\_allocator #1{catcodetable}\_chardef} - -\_public \newattribute \newcatcodetable ; - - \_doc ----------------------------- - We declare public and private versions of `\tmpnum` and `\tmpdim` - registers separately. They are independent registers. - \_cod ----------------------------- - -\_newcount \tmpnum \_newcount \_tmpnum -\_newdimen \tmpdim \_newdimen \_tmpdim - - \_doc ----------------------------- - A few registers are initialized like in plain\TeX/. We absolutely - don't support the `@`category dance, so `\z@skip` - `\z@`, `\p@` etc. are not defined in \OpTeX/. If you need such - control sequences then you can initialize them by `\load[plain-at]`. - - Only the \`\_zo` and \`\_zoskip` (equivalents to `\z@` and `\z@skip`) - are declared here and used in some internal macros of \OpTeX/ - for improving speed. - \_cod ----------------------------- - -\_newdimen\_maxdimen \_maxdimen=16383.99999pt % the largest legal <dimen> -\_newdimen\_zo \_zo=0pt -\_newskip\_hideskip \_hideskip=-1000pt plus 1fill % negative but can grow -\_newskip\_centering \_centering=0pt plus 1000pt minus 1000pt -\_newskip\_zoskip \_zoskip=0pt plus0pt minus0pt -\_newbox\_voidbox % permanently void box register - -\_public \maxdimen \hideskip \centering \voidbox ; - -\_endcode %--------------------------------------------------- - -Like plain\TeX, the allocators `\newcount`, `\newwrite`, etc. are defined. -The registers are allocated from 256 to the `\_mai<type>` which is 65535 in -\LuaTeX/. - -Unlike in Plain\TeX/, the mentioned allocators are not `\outer`. - -User can use `\dimen0` to `\dimen200` and similarly for `\skip`, -`\muskip`, `\box`, and `\toks` directly. User can use -`\count20` to `\count200` directly too. This is the same -philosophy as in old plain\TeX/, but the range of directly used registers -is wider. - -Inserts are allocated from 254 to 201 using `\newinsert`. - -You can define your own allocation concept (for example for allocation of -arrays) from the top of the registers array. The example shows a definition of -the array-like declarator of counters. - -\nobreak -\begtt -\newcount \_maicount % redefine maximal allocation index as variable -\_maicount = \maicount % first value is top of the array - -\def\newcountarray #1[#2]{% \newcountarray \foo[100] - \global\advance\_maicount by -#2\relax - \ifnum \_countalloc > \_maicount - \errmessage{No room for a new array of \string\count}% - \else - \global\chardef#1=\_maicount - \fi -} -\def\usecount #1[#2]{% \usecount \foo[2] - \count\numexpr#1+#2\relax -} -\endtt - -\_endinput - -2021-02-15 \_advance -> \_incr, \_decr -2020-05-12 \newmath -> \newfam bug fixing -2020-01-23 released diff --git a/macros/luatex/optex/base/basic-macros.opm b/macros/luatex/optex/base/basic-macros.opm deleted file mode 100644 index 4d465c3010..0000000000 --- a/macros/luatex/optex/base/basic-macros.opm +++ /dev/null @@ -1,130 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \sdef {Basic macros for OpTeX <2021-02-03>} % loaded in format - - \_doc ------------------------------ - \`\bgroup`, \`\egroup`, \`\empty`, \`\space`, \`\null` and \`\wlog` - are classical macros from plain \TeX/. - \_cod ------------------------------ - -\_let\_bgroup={ \_let\_egroup=} -\_def \_empty {} -\_def \_space { } -\_def \_null {\_hbox{}} -\_def \_wlog {\_immediate\_write-1 } % write on log file (only) -\_public \bgroup \egroup \empty \space \null \wlog ; - - \_doc ------------------------------ - \`\ignoreit` ignores next token or `{<text>}`, - \`\useit``{<text>}` expands to `<text>` (removes outer braces), - \`\ignoresecond` uses first, ignores second parameter and - \`\usesecond` ignores first, uses second parameter. - \_cod ------------------------------ - -\_long\_def \_ignoreit #1{} -\_long\_def \_useit #1{#1} -\_long\_def \_ignoresecond #1#2{#1} -\_long\_def \_usesecond #1#2{#2} -\_public \ignoreit \useit \ignoresecond \usesecond ; - - \_doc ------------------------------ - \`\bslash` is \"normal backslash" with category code 12. - \`\nbb` is double backslash - and \`\pcent` is normal~`%`. - They can be used in Lua codes, for example. - \_cod ------------------------------ - -\_edef \_bslash {\_csstring\\} -\_edef \_nbb {\_bslash\_bslash} -\_edef \_pcent{\_csstring\%} -\_public \bslash \nbb \pcent ; - - \_doc ------------------------------ - \`\sdef` `{<text>}` is equivalent to `\def\<text>`, where `\<text>` is a control - sequence. You can use arbitrary parameter mask after `\sdef{<text>}`, don't - put the (unwanted) space immediately after closing brace \code{\}}. - \nl - \`\sxdef` `{<text>}` is equivalent to `\xdef\<text>`. - \nl - \`\slet` `{<textA>}{<textB>}` is equivalent to `\let \<textA> = \<textB>`. - \_cod ------------------------------ - -\_def \_sdef #1{\_ea\_def \_csname#1\_endcsname} -\_def \_sxdef #1{\_ea\_xdef \_csname#1\_endcsname} -\_def \_slet #1#2{\_ea\_let \_csname#1\_ea\_endcsname \_csname#2\_endcsname} -\_public \sdef \sxdef \slet ; - - \_doc ------------------------------ - \`\adef` `{<char>}{<body>}` puts the <char> as active character and defines it - as `{<body>}`. You can declare a macro with parameters too. For example - `\adef @#1{...#1...}`. - \_cod ------------------------------ - -\_def \_adef #1{\_catcode`#1=13 \_begingroup \_lccode`\~=`#1\_lowercase{\_endgroup\_def~}} -\_public \adef ; - - \_doc ------------------------------ - \`\cs` `{<text>}` is only a shortcut to `\csname <text>\endcsname`, but you need - one more `\_ea` if you need to get the real control sequence `\<text>`. - \nl - \`\trycs` `{<csname>}{<text>}` expands to `\<csname>` - if it is defined else to the `<text>`. - \_cod ------------------------------ - -\_def \_cs #1{\_csname#1\_endcsname} -\_def \_trycs#1#2{\_ifcsname #1\_endcsname \_csname #1\_ea\_endcsname \_else #2\_fi} -\_public \cs \trycs ; - - \_doc ------------------------------ - \`\addto` `\macro{<text>}` adds `<text>` to your `\macro`, which must be defined. - \_cod ------------------------------ - -\_long\_def \_addto #1#2{\_ea\_def\_ea#1\_ea{#1#2}} -\_public \addto ; - - \_doc ----------------------------- - \`\incr``<counter>` increases `<counter>` by one globally. - \`\decr``<counter>` decreases `<counter>` by one globally. - \_cod ----------------------------- - -\_def\_incr #1{\_global\_advance#1by1 } -\_def\_decr #1{\_global\_advance#1by-1 } -\_public \incr \decr ; - - \_doc ------------------------------ - \`\opwarning` `{<text>}` prints warning on the terminal and to the log file. - \_cod ------------------------------ - -\_def \_opwarning #1{\_wterm{WARNING l.\_the\_inputlineno: #1.}} -\_public \opwarning ; - - \_doc ------------------------------ - \`\loggingall` and \`\tracingall` are defined similarly as in - plain \TeX/, but they print - more logging information to the log file and the terminal. - \_cod ------------------------------ - -\_def\_loggingall{\_tracingcommands=3 \_tracingstats=2 \_tracingpages=1 - \_tracingoutput=1 \_tracinglostchars=1 \_tracingmacros=2 - \_tracingparagraphs=1 \_tracingrestores=1 \_tracingscantokens=1 - \_tracingifs=1 \_tracinggroups=1 \_tracingassigns=1 } -\_def\_tracingall{\_tracingonline=1 \_loggingall} -\_public \loggingall \tracingall ; - - \_doc ------------------------------ - Write a warning if the user did not load a Unicode Font {\em or} - if there were unresolved references. \`\_byehook` is used in the \^`\bye` macro. - \_cod ------------------------------ - -\_def\_byehook{% - \_ifx\_initunifonts\_relax \_relax\_else \_opwarning{Unicode font was not loaded}\_fi - \_ifnum\_unresolvedrefs>0 \_opwarning{Try to rerun to get references right}\_fi -} - -\_endcode % ------------------------------------- - -2021-02-03: \useit defined. -2021-01-22: \trycs: \ea added in order to be able to use cs with parameters -2021-01-08: \opwarning format changed (secondly, hope that conclusively) -2020-10-12: \opwarning: line numbers added -2020-02-14: introduced diff --git a/macros/luatex/optex/base/bib-iso690.opm b/macros/luatex/optex/base/bib-iso690.opm deleted file mode 100644 index c58709ce83..0000000000 --- a/macros/luatex/optex/base/bib-iso690.opm +++ /dev/null @@ -1,906 +0,0 @@ -% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% bibliography style (iso690), version <2020-03-10>, loaded on demand by \usebib - -\_ifx\_optexbibstyle\_undefined \_errmessage - {This file can be read by: \_string\usebib/? (iso690) bibfiles command only} - \_endinput \_fi - - \_doc ----------------------------- - \`\_maybetod` (alias `\.` in the style file group) does not put the second dot. - \_cod ----------------------------- - -\_def\_maybedot{\_ifnum\_spacefactor=\_sfcode`\.\_relax\_else.\_fi} -\_tmpnum=\_sfcode`\. \_advance\_tmpnum by-2 \_sfcode`\.=\_tmpnum -\_sfcode`\?=\_tmpnum \_sfcode`\!=\_tmpnum -\_let\.=\_maybedot % prevents from double periods - - \_doc ----------------------------- - Option field. - \_cod ----------------------------- - -\_CreateField {option} -\_def\_isbiboption#1#2{\_edef\_tmp{\_noexpand\_isbiboptionA{#1}}\_tmp} -\_def\_isbiboptionA#1{\_def\_tmp##1 #1 ##2\_relax{% - \_if^##2^\_csname iffalse\_ea\_endcsname \_else\_csname iftrue\_ea\_endcsname \_fi}% - \_ea\_tmp\_biboptionsi #1 \_relax} -\_def\_bibopt[#1]#2#3{\_isbiboption{#1}\_iftrue\_def\_tmp{#2}\_else\_def\_tmp{#3}\_fi\_tmp} -\_def\_biboptionvalue#1#2{\_def\_tmp##1 #1:##2 ##3\_relax{\_def#2{##2}}% - \_ea\_tmp\_biboptionsi #1: \_relax} - -\_def\_readbiboptions{% - \_RetrieveFieldIn{option}\_biboptionsi - \_toks1=\_ea{\_biboptionsi}% - \_edef\_biboptionsi{\_space \_the\_toks1 \_space \_the\_biboptions \_space}% -} -\_newtoks\_biboptions -\_public \biboptions ; - - \_doc ----------------------------- - Formating of Author/Editor lists. - \_cod ----------------------------- - -\_def\_firstauthorformat{% - \_upper{\_Lastname}\_bprintc\_Firstname{, *}\_bprintc\_Von{ *}\_bprintc\_Junior{, *}% -} -\_def\_otherauthorformat{% - \_bprintc\_Firstname{* }\_bprintc\_Von{* }\_upper{\_Lastname}\_bprintc\_Junior{, *}% -} -\_def\_commonname{% - \_ifnum\_NameCount=1 - \_firstauthorformat - \_ifx\_dobibmark\_undefined \_edef\_dobibmark{\_Lastname}\_fi - \_else - \_ifnum0\_namecount=\_NameCount - \_ifx\_maybeetal\_empty \_bibconjunctionand\_else , \_fi - \_else , \_fi - \_otherauthorformat - \_fi -} -\_def\_authorname{% - \_ifnum\_NameCount>0\_namecount\_relax\_else \_commonname \_fi - \_ifnum\_NameCount=0\_namecount\_relax \_maybeetal \_fi -} -\_let\_editorname=\_authorname - -\_def\_prepareauedoptions#1{% - \_def\_mabyetal{}\_csname lb@abbreviatefalse\_endcsname - \_biboptionvalue{#1max}\_authormax - \_biboptionvalue{#1min}\_authormin - \_biboptionvalue{#1pre}\_authorpre - \_biboptionvalue{#1print}\_authorprint - \_isbiboption{#1etal}\_iftrue \_def\_maybeetal{\_Mtext{bib.etal}}\_fi - \_biboptionvalue{#1trim}\_autrim - \_let\_namecountraw=\_namecount - \_ifx\_authormax\_empty \_else - \_ifnum 0\_authormax<0\_namecount - \_edef\_namecount{\_ifx\_authormin\_empty\_authormax\_else\_authormin\_fi}% - \_def\_maybeetal{\_Mtext{bib.etal}}% - \_fi\_fi - \_ifx\_autrim\_empty \_def\_autrim{10000}\_fi - \_ifnum\_autrim=0 \_def\_autrim{10000}\_fi - \_ifnum 0\_namecount<\_autrim\_relax \_else \_AbbreviateFirstname \_fi -} -\_def\_maybeetal{} - -\_ifx\upper\_undefined - \_ifx\caps \_undefined \_def\upper{\_uppercase\_ea}\_else - \_def\upper#1{{\caps\_rm #1}}\_fi -\_fi -\_let\_upper=\upper - - \_doc ----------------------------- - Preparing bib-mark (used when `\nonumcitations` is set). - \_cod ----------------------------- - -\_def\_setbibmark{% - \_ifx\_dobibmark\_undefined \_def\_dobibmark{}\_fi - \_RetrieveFieldIn{bibmark}\_tmp - \_ifx\_tmp\_empty \_RetrieveFieldIn{year}\_tmp \_edef\_tmp{\_dobibmark, \_tmp}\_fi - \_bibmark=\_ea{\_tmp}% -} - - \_doc ----------------------------- - Setting phrases. - \_cod ----------------------------- - -\_def\_bibconjunctionand{\_Mtext{bib.and}} -\_def\_preurl{\_Mtext{bib.available}} -\_let\_predoi=\_preurl -\_def\_postedition{\_mtext{bib.edition}} -\_def\_Inclause{In:~} -\_def\_prevolume{\_mtext{bib.volume}} -\_def\_prenumber{\_mtext{bib.number}} -\_def\_prepages{\_mtext{bib.prepages}} -\_def\_posteditor{\_ifnum0\_namecountraw>1 \_Mtext{bib.editors}\_else\_Mtext{bib.editor}\_fi} - - \_doc ---------------------------- - \`\_Mtext``{<identifier>}` expands to a - phrase by outer document language (no entry language). - \_cod ----------------------------- - -\_chardef\_documentlanguage=\_language -\_def\_Mtext#1{\_csname _mt:#1:\_csname _lan:\_the\_documentlanguage\_endcsname\_endcsname} - -\_CreateField {lang} -\_def\_setlang#1{\_ifx#1\_empty \_else - \_ifcsname _mt:bib.and:#1\_endcsname \_language=\_csname _#1Patt\_endcsname \_relax - \_else \_opwarning{No phrases for "#1" used by [\EntryKey] in .bib}% - \_fi\_fi -} - - \_doc ----------------------------- - Non-standard field names. - \_cod ----------------------------- - -\_CreateField {ednote} -\_CreateField {citedate} -\_CreateField {numbering} -\_CreateField {isbn} -\_CreateField {issn} -\_CreateField {doi} -\_CreateField {url} -\_CreateField {bibmark} - - \_doc ----------------------------- - Sorting. - \_cod ----------------------------- - -\_SortingOrder{name,year}{lfvj} -\_SpecialSort {key} - - \_doc ----------------------------- - Supporting macros. - \_cod ----------------------------- - -\_def\_bibwarninga{\_bibwarning} -\_def\_bibwarningb{\_bibwarning} - -\_def\_docitedate #1/#2/#3/#4\_relax{[\_Mtext{bib.citedate}% - \_if^#2^#1\_else - \_if^#3^#1/#2\_else - \_cs{_\_cs{_lan:\_the\_documentlanguage}dateformat}#1/#2/#3\relax - \_fi\_fi ]% -} -\_def\_doyear#1{ - \_biboptionvalue{yearprint}\_yearprint - \_ifx\_yearprint\_empty#1\_else\_def\YEAR{#1}\_yearprint\_fi -} -\_def\_preparenumbering{% - \_def\VOL{\_RetrieveField{volume}}% - \_def\NO{\_RetrieveField{number}}% - \_def\PP{\_RetrieveField{pages}}% -} -\_def\_prepareednote{% - \_def\EDN{\_RetrieveField{edition}}% - \_def\ADDR{\_RetrieveField{address}}% - \_def\PUBL{\_RetrieveField{publisher}}% - \_def\YEAR{\_RetrieveField{year}}% - \_def\AU{\_bprintb[!author]{\_doauthor0{####1}}{}}% - \_def\ED{\_bprintb[!editor]{\_doeditor0{####1}}{}}% - \_preparenumbering -} -\_def\_doedition#1{% - \_biboptionvalue{editionprint}\_editionprint - \_ifx\_editionprint\_empty#1\_postedition\_else\_def\ED{#1}\_editionprint\_fi -} -\_def\_doauthor#1#2{\_prepareauedoptions{au}\_let\_iseditorlist=\_undefined - \_if1#1\_def\AU{#2}\_else\_let\_authorprint=\_empty\_fi - \_ifx\_authorprint\_empty #2\_else \_authorprint\_fi -} -\_def\_doeditor#1#2{\_prepareauedoptions{ed}\_let\_firstauthorformat=\_otherauthorformat - \_if1#1\_def\ED{#2}\_else\_let\_authorprint=\_empty\_fi - \_ifx\_authorprint\_empty #2\_posteditor\_else \_authorprint\_fi -} - - \_doc ----------------------------- - Entry types. - \_cod ----------------------------- - -\_sdef{_print:BEGIN}{% - \_readbiboptions - \_biboptionvalue{titlepost}\_titlepost - \_isbiboption{unpublished}\_iftrue \_let\_bibwarninga=\_relax \_let\_bibwarningb=\_relax \_fi - \_isbiboption{nowarn}\_iftrue \_let\_bibwarning=\_relax \_fi - \_isbiboption{urlalso}\_iftrue \_def\_preurl{\_Mtext{bib.availablealso}}\_fi - \_RetrieveFieldIn{lang}\_langentry \_setlang\_langentry -} -\_sdef{_print:END}{% - \_bprinta [note] {*.}{}% - \_setbibmark -} -\_def\_bookgeneric#1{% - \_bprinta [howpublished] {[*].\ }{}% - \_bprintb [edition] {\_doedition{##1}\.\ }{}% - \_bprinta [ednote] {*.\ }{}% - \_bprinta [address] {*\_bprintv[publisher]{:}{\_bprintv[year]{,}{.}}\ }{\_bibwarninga}% - \_bprinta [publisher] {*\_bprintv[year]{,}{.}\ }{\_bibwarninga}% - \_bprintb [year] {\_doyear{##1}\_bprintv[citedate]{\_bprintv[numbering]{.}{}}{.}\ }% - {\_bibwarning}% - \_bprinta [numbering] {\_preparenumbering*\_bprintv[citedate]{}{\.}\ }{}% - \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}% - #1% - \_bprinta [series] {*.\ }{}% - \_bprinta [isbn] {ISBN~*.\ }{\_bibwarningb}% - \_bprinta [issn] {ISSN~*.\ }{}% - \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_sdef{_print:book}{% - \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }% - {\_bibwarning}% - \_bookgeneric{}% -} -\_sdef{_print:article}{% - \_biboptionvalue{journalpost}\_journalpost - \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}% - \_bprinta [title] {*.\ \_bprintc\_titlepost{*.\ }}{\_bibwarning}% - \_bprintb [journal] {{\_em##1}\_bprintc\_journalpost{\.\ *}\_bprintv[howpublished]{}{\.}\ }% - {\_bibwarninga}% - \_bprinta [howpublished] {[*].\ }{}% - \_bprinta [address] {*\_bprintb[publisher]{:}{,}\ }{}% - \_bprinta [publisher] {*, }{}% - \_bprinta [month] {*, }{}% - \_bprintb [year] {\_doyear{##1}\_bprintv[volume,number,pages]{,}{\.}\ }{}% - \_bprinta [numbering] {\_preparenumbering*\_bprintv[citedate]{}{\.}\ } - {\_bprinta [volume] {\_prevolume*\_bprintv[number,pages]{,}{\.}\ }{}% - \_bprinta [number] {\_prenumber*\_bprintv[pages]{,}{\.}\ }{}% - \_bprintb [pages] {\_prepages\_hbox{##1}\_bprintv[citedate]{}{\.}\ }% - {\_bibwarninga}}% - \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}% - \_bprinta [issn] {ISSN~*.\ }{}% - \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_sdef{_print:inbook}{% - \_let\_bibwarningb=\_relax - \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}% - \_bprinta [title] {*.\ }{\_bibwarning}% - \_Inclause - \_bprintb [!editor] {\_doeditor1{##1}\.\ }{}% - \_bprintb [booktitle] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }% - {\_bibwarning}% - \_bookgeneric{\_bprintb [pages] {\_prepages\_hbox{##1}. }{}}% -} -\_slet{_print:inproceedings}{_print:inbook} -\_slet{_print:conference}{_print:inbook} - -\_sdef{_print:thesis}{% - \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }% - {\_bibwarning}% - \_bprinta [howpublished] {[*].\ }{}% - \_bprinta [address] {*\_bprintv[school]{:}{\_bprintv[year]{,}{.}}\ }{\_bibwarning}% - \_bprinta [school] {*\_bprintv[year]{,}{.}\ }{\_bibwarning}% - \_bprinta [month] {*, }{}% - \_bprintb [year] {\_doyear{##1}\_bprintv[citedate]{}{.}\ }{\_bibwarninga}% - \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}% - \_bprinta [type] {*\_bprintv[ednote]{,}{.}\ }% - {\_ifx\_thesistype\_undefined\_bibwarning - \_else\_thesistype\_bprintv[ednote]{,}{.}\ \_fi}% - \_bprinta [ednote] {*.\ }{}% - \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_sdef{_print:phdthesis}{\_def\_thesistype{\_Mtext{bib.phdthesis}}\_cs{_print:thesis}} -\_sdef{_print:mastershesis}{\_def\_thesistype{\_Mtext{bib.masthesis}}\_cs{_print:thesis}} -\_sdef{_print:bachelorsthesis}{\_def\_thesistype{\_Mtext{bib.bachthesis}}\_cs{_print:thesis}} - -\_sdef{_print:generic}{% - \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }% - {\_bibwarning}% - \_bprinta [howpublished] {[*].\ }{}% - \_bprinta [ednote] {\_prepareednote*\_bprintv[citedate]{}{.}\ }{\_bibwarning}% - \_bprinta [year] {}{\_bibwarning}% - \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}% - \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_slet{_print:booklet}{_print:generic} -\_slet{_print:incolleciton}{_print:generic} -\_slet{_print:manual}{_print:generic} -\_slet{_print:proceedings}{_print:generic} -\_slet{_print:techreport}{_print:generic} -\_slet{_print:unpublished}{_print:generic} - -\_sdef{_print:misc}{\_let\_bibwarning=\_relax \_cs{_print:generic}} - -\_endcode - - -This is the iso690 bibliographic style used by \OpTeX/. - -See `op-biblist.bib` for an example of the `.bib` input. You can try it by: - -\begtt -\fontfam[LMfonts] -\nocite[*] -\usebib/s (iso690) op-biblist -\end -\endtt - -\seccc Common rules in \code{.bib} files - -There are entries of type `@FOO{...}` in the `.bib` file. Each entry consists of -fields in the form `name = "value"`, or `name = {value}`. No matter which form is -used. If the value is pure numeric then you can say simply `name = value`. -Warning: the comma after each field value is mandatory! If it is missing then the -next field is ignored or badly interpreted. - -The entry names and field names are case insensitive. If there exists a data -field no mentioned here then it is simply ignored. You can use it to store -more information (abstract, for example). - -There are \"standard fields" used in ancient bib\TeX/ (author, title, editor, edition, -etc., see \url{http://en.wikipedia.org/wiki/BibTeX}). The `iso690` style introduces -several \"non-standard" fields: ednote, numbering, isbn, issn, doi, url, -citedate, key, bibmark. They are documented here. - -Moreover, there are two optional special fields: - -\begitems -* lang = language of the entry. The hyphenation plus autogenerated phrases and - abbreviations will be typeset by this language. -* option = options by which you can control a special printing of various fields. -\enditems - -There can be only one option field per each entry with (maybe) more options -separated by spaces. You can declare the global option(s) in your document -applied for each entry by `\biboptions={...}`. - - -\seccc The author field - -All names in the author list have to be separated by \"\code{ and }". -Each author can be written in various formats (the `von` part is typically missing): - -\begtt -Firstname(s) von Lastname -or -von Lastname, Firstname(s) -or -von Lastname, After, Firstname(s) -\endtt -Only the Lastname part is mandatory. Examples: -\begtt -Petr Olšák -or -Olšák, Petr - -Leonardo Piero da Vinci -or -da Vinci, Leonardo Piero -or -da Vinci, painter, Leonardo Piero -\endtt -The separator \"\code{ and }" between authors -will be converted to comma during -printing, but between the semifinal and final author the word \"and" (or something -different depending on the current language) is printed. - -The first author is printed in reverse order: \"LASTNAME, Firstname(s) von, -After" and the other authors are printed in normal order: \"Firstname(s) -von LASTNAME, After". This feature follows the ISO 690 norm. The Lastname -is capitalized using uppercase letters. But if the `\caps` font modifier is defined, -then it is used and printed `{\caps\_rm Lastname}`. - -You can specify the option `aumax:<number>`. The `<number>` denotes the -maximum authors to be printed. The rest of the authors are ignored and the -`et~al.` is appended to the list of printed authors. This text is -printed only if the `aumax` value is less than the real number of authors. -If you have the same number of authors in the .bib file as you need to print -but you want to append `et~al.` then you can use `auetal` option. - -There is an `aumin:<number>` option which denotes the definitive number of -printed authors if the author list is not fully printed due to `aumax`. -If `aumin` is unused then `aumax` authors are printed in this case. - -All authors are printed if `aumax:<number>` option isn't given. -There is no internal limit. But you can set the global options in -your document by setting the `\biboptions` tokens list. For example: - -\begtt -\biboptions={aumax:7 aumin:1} -% if there are 8 or more authors then only the first author is printed. -\entdd - -Examples: -\begtt -author = "John Green and Bob Brown and Alice Black", -\endtt -output: GREEN, John, Bob BROWN, and Alice BLACK. - -\begtt -author = "John Green and Bob Brown and Alice Black", -option = "aumax:1", -\endtt -output: GREEN, John~et~al. - -\begtt -author = "John Green and Bob Brown and Alice Black", -option = "aumax:2", -\endtt -output: GREEN, John, Bob BROWN~et~al. - -\begtt -author = "John Green and Bob Brown and Alice Black", -option = "aumax:3", -\endtt -output: GREEN, John, Bob BROWN, and Alice BLACK. - -\begtt -author = "John Green and Bob Brown and Alice Black", -option = "auetal", -\endtt -output: GREEN, John, Bob BROWN, Alice BLACK~et~al. - -If you need to add a text before or after the author's list, you can use -the `auprint:{<value>}` option. The <value> will be printed instead of the -authors list. The <value> can include `\AU` macro which expands to the authors -list. Example: - -\begtt -author = "Robert Calbraith", -option = "auprint:{\AU\space [pseudonym of J. K. Rowling]}", -\endtt -output: CALBRAITH Robert [pseudonym of J. K. Rowling]. - -You can use the `autrim:<number>` option. All Firstnames of all authors -are trimmed (i. e. reduced to initials) iff the number of authors in the -author field is greater than or equal to `<number>`. There is an exception: -`autrim:0` means that no Firstnames are trimmed. This is the default behavior. -Another example: `autrim:1` means that all Firstnames are trimmed. - -\begtt -author = "John Green and Bob Brown and Alice Black", -option = "auetal autrim:1", -\endtt -output: GREEN, J., B. BROWN, A. BLACK~et~al. - -If you need to write a team name or institution instead of authors, replace all -spaces by `\ ` in this name. Such text is interpreted as Lastname. You -can add the secondary name (interpreted as Firstname) after the comma. Example: - -\begtt - author = "Czech\ Technical\ University\ in\ Prague, - Faculty\ of\ Electrical\ Engeneering", -\endtt -output: CZECH TECHNICAL UNIVERSITY IN PRAGUE, Faculty of Electrical Engeneering. - - -\seccc The editor field - -The editor field is used for the list of the authors of the collection. The -analogous rules as in author field are used here. It means that the -authors are separated by \"\code{ and }", the Firstnames, Lastnames, etc. are -interpreted and you can use the options `edmax:<number>`, `edmin:<number>`, -`edetal`, `edtrim:<number>` and `edprint:{<value>}` (with `\ED` macro). -Example: -\begtt -editor = "Jan Tomek and Petr Karas", -option = "edprint:{\ED, editors.} edtrim:1", -\endtt -Output: J. TOMEK and P. KARAS, editors. - -If `edprint` option is not set then `{\ED, eds.}` or `{\ED, ed.}` is used -depending on the entry language and on the singular or plural of -the editor(s). - - -\seccc The ednote field - -The ednote field is used as the secondary authors and more editional info. The -value is read as raw data without any interpretation of Lastname, Firstname -etc. -\begtt -ednote = "Illustrations by Robert \upper{Agarwal}, edited by Tom \upper{Nowak}", -\endtt -output: Illustrations by Robert AGARWAL, edited by Tom NOWAK. - -The `\upper` command has to be used for Lastnames in the ednote field. - - -\seccc The title field - -This is the title of the work. It will be printed (in common entry types) by -italics. The ISO 690 norm declares, that the title plus optional subtitle -are in italics and they are separated by a colon. Next, the optional secondary -title has to be printed in an upright font. This can be added by -`titlepost:{<value>}`. Example: - -\begtt -title = "The Simple Title of The Work", -or -title = "Main Title: Subtitle", -or -title = "Main Title: Subtitle", -option = "titlepost:{Secondary title}", -\endtt -The output of the last example: -{\it Main Title: Subtitle}. Secondary title. - - -\seccc The edition field - -This field is used only for second or more edition of cited work. Write -only the number without the word "edition". The shortcut "ed." (or something -else depending on the current language) is added automatically. Examples: - -\begtt -edition = "Second", -edition = "2nd", -edition = "2$^{\rm nd}$", -edition = "2.", -\endtt -Output of the last example: 2. ed. - -\begtt -edition = "2." -lang = "cs", -\endtt -Output: 2. vyd. - -Note, that the example `edition = "Second"` may cause problems. If you are -using language "cs" then the output is bad: Second vyd. -But you can use `editionprint:{<value>}` option. The the <value> is printed -instead of edition field and shortcut. The edition field must be set. Example: - -\begtt -edition = "whatever", -option = "editionprint:{Second full revised edition}", -\endtt -Output: Second full revised edition. - -You can use `\EDN` macro in `editionprint` value. This macro is expanded -to the edition value. Example: - -\begtt -edition = "Second", -option = "editionprint:{\EDN\space full revised edition}", -or -edition = "Second full revised edition", -option = "editionprint:{\EDN}", -\endtt - - -\seccc The address, publisher, year fields - -This is an anachronism from ancient Bib\TeX/ (unfortunately no exclusive) that -the address field includes only the city of the publisher's residence. No more -data are here. The publisher field includes the name of the publisher. - -\begtt -address = "Berlin", -publisher = "Springer Verlag", -year = 2012, -\endtt -Output: Berlin: Springer Verlag, 2012. - -Note, that the year needn't to be inserted into quotes because it is pure -numeric. - -The letter a, b, etc. are appended to the year automatically if two or more -subsequent entries in the bibliography list are not distinct by the first -author and year fields. If you needn't this feature, you can use the -`noautoletters` option. - -You can use "yearprint:{<value>}" option. If it is set then the <value> -is used for printing year instead the real field value. The reason: year is -sort sensitive, maybe you need to print something else than only sorting key. -Example: - -\begtt -year = 2000, -option = "yearpint:{© 2000}", -\endtt -Output: © 2000, sorted by: 2000. - -\begtt -year = "2012a", -option = "yearprint:{2012}", -\endtt -Output: 2012, sorted by: 2012a. - -The address, publisher, and year are typically mandatory fields. If they are -missing then the warning occurs. But you can set `unpublished` -option. Then this warning is suppressed. There is no difference in the -printed output. - - -\seccc The url field - -Use it without `\url` macro, but with `http://` prefix. Example: - -\begtt -url = "http://petr.olsak.net/opmac.html", -\endtt - -The ISO 690 norm recommends to add the text \"Available from" (or -something else if a different current language is used) before URL. -It means, that the output of the previous example is: - -Available from \url{http://petr.olsak.net/opmac.html}. - -If the `cs` language is the current one than the output is: - -Dostupné z: \url{http://petr.olsak.net/opmac.html}. - -If the `urlalso` option is used, then the added text has the form -\"Available also from" or \"Dostupné také z:" (if `cs` language is -current). - - -\seccc The citedate field - -This is the citation date. The field must be in the form year/month/day. It -means, that the two slashes must be written here. The output depends on the -current language. Example: - -\begtt -citedate = "2004/05/21", -\endtt -Output when `en` is current: [cit. 2004-05-21].\nl -Output when `cs` is current: [vid. 21.~5.~2004]. - - -\seccc The howpublished field - -This declares the available medium for the cited document if it is not in printed -form. Alternatives: online, CD, DVD, etc. Example: - -\begtt -howpublished = "online", -\endtt -Output: [online]. - - -\seccc The volume, number, pages and numbering fields - -The volume is the \"big mark" of the journal issue and the number is the -\"small mark" of the journal issue and pages includes the page range of -the cited article in the journal. The volume is prefixed by Vol.~, -the number by No.~, and the pages by pp.~. But these prefixes depends on the -language of the entry. - -Example: - -\begtt -volume = 31, -number = 3, -pages = "37--42", -\endtt -Output: Vol.~31, No.~3, pp.~37--42. - -\begtt -volume = 31, -number = 3, -pages = "37--42", -lang = "cs", -\endtt -Output: ročník~31, č.~3, s.~37--42. - -If you disagree with the default prefixes, you can use the numbering field. -When it is set then it is used instead of volume, number, pages fields -and instead of any mentioned prefixes. The numbering can include macros -`\VOL`, `\NO`, `\PP`, which are expanded to the respective values of fields. Example: - -\begtt -volume = 31, -number = 3, -pages = "37--42" -numbering = "Issue~\VOL/\NO, pages~\PP", -\endtt -Output: Issue~31/3, pages~37--42 - -Note: The volume, numbers, and pages fields are printed without numbering -filed only in the `@ARTICLE` entry. It means, that if you need to visible them -in the `@INBOOK`, `@INPROCEEDINGS` etc. entries, then you must use the numbering field. - - -\seccc Common notes about entries - -The order of the fields in the entry is irrelevant. We use the printed order -in this manual. The exclamation mark (!) denotes the mandatory field. If -the field is missing then a warning occurs during processing. - -If the `unpublished` option is set then the fields address, publisher, year, -isbn, and pages are not mandatory. If the `nowarn` option is set then no -warnings about missing mandatory fields occur. - -If the field is used but not mentioned in the entry documentation below then -it is silently ignored. - -\secccc The `@BOOK` entry - -This is used for book-like entries. - -Fields: author(!), title(!), howpublished, edition, ednote, address(!), -publisher(!), year(!), citedate, series, isbn(!), doi, url, note. - -The ednote field here means the secondary authors (illustrator, cover design -etc.). - -\secccc The `@ARTICLE` entry - -This is used for articles published in a journal. - -Fields: author(!), title(!), journal(!), howpublished, address, publisher, -month, year, [numbering or volume, number, pages(!)], citedate, issn, -doi, url, note. - -If the numbering is used then it is used instead volume, number, pages. - - -\secccc The `@INBOOK` entry - -This is used for the part of a book. - -Fields: author(!), title(!), booktitle(!), howpublished, edition, ednote, -address(!), publisher(!), year(!), numbering, citedate, series, isbn or -issn, doi, url, note. - -The author field is used for author(s) of the part, the editor field -includes author(s) or editor(s) of the whole document. The pages field specifies -the page range of the part. The series field can include more information -about the part (chapter numbers etc.). - -The `@INPROCEEDINGS` and `@CONFERENCE` entries are equivalent to `@INBOOK` entry. - -\secccc The `@THESIS` entry - -This is used for the student's thesis. - -Fields: author(!), title(!), howpublished, address(!), school(!), -month, year(!), citedate, type(!), ednote, doi, url, note. - -The type field must include the text \"Master's Thesis" or something -similar (depending on the language of the outer document). - -There are nearly equivalent entries: `@BACHELORSTHESIS`, `@MASTERSTHESIS` and -`@PHDTHESIS`. These entries set the type field to an appropriate value -automatically. The type field is optional in this case. If it is used then -it has precedence before the default setting. - -\secccc The @MISC entry - -It is intended for various usage. - -Fields: author, title, howpublished, ednote, citedate, doi, url, note. - -You can use `\AU`, `\ED`, `\EDN`, `\VOL`, `\NO`, `\PP`, `\ADDR`, `\PUBL`, -`\YEAR` macros in ednote field. These macros print authors list, editors list, -edition, volume, number, pages, address, publisher, and year field values -respectively. - -The reason for this entry is to give to you the possibility to set the format of -entry by your own decision. The most of data are concentrated in the ednote field. - -\secccc The `@BOOKLET`, `@INCOLLECION`, `@MANUAL`, `@PROCEEDINGS`, `@TECHREPORT`, `@UNPUBLISHED` entries - -These entries are equivalent to `@MICS` entry because we need to save the -simplicity. They are implemented only for (almost) backward compatibility -with the ancient Bib\TeX/. But the ednote is mandatory field here, so you -cannot use these entries from the old databases without warnings and without -some additional work with the `.bib` file. - -\seccc The cite-marks (bibmark) used when \code{\\nonumcitations} is set - -When `\nonumcitations` is set then `\cite` prints text-oriented -bib-marks instead of numbers. This style file auto-generates these marks in the -form \"Lastname of the first author, comma, space, the year" if the bibmark field -isn't declared. If you need to set an exception from this common format, -then you can use bibmark field. - -The OPmac trick \url{http://petr.olsak.net/opmac-tricks-e.html\#bibmark} -describes how to redefine the algorithm for bibmark auto-generating when you -need the short form of the type [Au13]. - - -\seccc Sorting - -If `\usebib/c` is used then entries are sorted by citation order in the text. -If `\usebib/s` is used then entries are sorted by \"Lastname, Firstname(s)" of -the first author and if more entries have this value equal, then the year is -used (from older to newer). This feature follows the recommendation of the -ISO 690 norm. - -If you have the same authors and the same year, you can control the sorting -by setting years like 2013, 2013a, 2013b, etc. You can print something -different to the list using `yearprint{<value>}` option, see the section about -address, publisher, and year above. The real value of year field (i.e.\ not -yearprint value) is also used in the text-oriented bib-marks when -`\nonumcitations` is set. - -If you have some problems with name sorting, you can use the hidden field -`key`, which is used for sorting instead of the \"Lastname Firstname(s)" -of authors. If the `key` field is unset then the \"Lastname Firstname(s)" -is used for sorting normally. Example: - -\begtt -author = "Světla Čmejrková", -key = "Czzmejrkova Svetla", -\endtt - -This entry is now sorted between C and D. - -The norm recommends placing the auto-citations at the top of the list of -references. You can do this by setting `key = "@"`, to each entry with your -name because the `@` character is sorted before `A`. - - -\seccc Languages - -There is the language of the outer document and the languages of each entry. -The ISO 690 norm recommends that the technical notes (the prefix before URL, -the media type, the \"and" conjunction between the semifinal and final author) -maybe printed in the language of the outer document. The data of the entry -have to be printed in the entry language (edition ed./vyd., Vol./ročník, -No./č. etc.). Finally, there are the phrases independent of the language -(for example In:). Unfortunately, the bib\TeX/ supposes that the entry data -are not fully included in the fields so the automaton has to add some -text during processing (\"ed.", \"Vol.", \"see also", etc.). -But what language has to be chosen? - -The current value of the `\language` register at the start of the `.bib` -processing is described as the language of the outer document. This language -is used for technical notes regardless of the entry language. Moreover, -each entry can have the `lang` field (short name of the language). This -language is used for ed./vyd., vol./ročník, etc. and it is used for -hyphenation too. If the `lang` is not set then the outer document -language is used. - -You can use \^`\_Mtext{bib.<identifier>}` if you want to use a phrase -dependent on outer document language (no on entry language). -Example: - -\begtt -howpublished = "\_Mtext{bib.blue-ray}" -\endtt - -Now, you can set the variants of `bib.blue-ray` phrase for various -languages: - -\begtt -\_sdef{_mt:bib.blue-ray:en} {Blue-ray disc} -\_sdef{_mt:bib.blue-ray:cs} {Blue-ray disk} -\endtt - - -\seccc Summary of non-standard fields - -This style uses the following fields unknown by bib\TeX/: - -\begtt -option ... options separated by spaces -lang ... the language two-letter code of one entry -ednote ... edition info (secondary authors etc.) or - global data in @MISC-like entries -citedate ... the date of the citation in year/month/day format -numbering ... format for volume, number, pages -isbn ... ISBN -issn ... ISSN -doi ... DOI -url ... URL -\endtt - - -\seccc Summary of options - -\begtt \catcode`\<=13 -aumax:<number> ... maximum number of printed authors -aumin:<number> ... number of printed authors if aumax exceeds -autrim:<number> ... full Firstnames iff number of authors are less than this -auprint:{<value>} ... text instead authors list (\AU macro may be used) -edmax, edmin, edtrim ... similar as above for editors list -edprint:{<value>} ... text instead editors list (\ED macro may be used) -titlepost:{<value>} ... text after title -yearprint:{<value>} ... text instead real year (\YEAR macro may be used) -editionprint:{<value>} .. text instead of real edition (\EDN macro may be used) -urlalso ... the ``available also from'' is used instead ``available from'' -unpublished ... the publisher etc. fields are not mandatory -nowarn ... no mandatory fields -\endtt - -Other options in the option field are silently ignored. diff --git a/macros/luatex/optex/base/bib-simple.opm b/macros/luatex/optex/base/bib-simple.opm deleted file mode 100644 index dff747bd57..0000000000 --- a/macros/luatex/optex/base/bib-simple.opm +++ /dev/null @@ -1,164 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% bibliography style (simple), version <2020-03-10>, loaded on demand by \usebib - -\_ifx\_optexbibstyle\_undefined \_errmessage - {This file can be read by: \_string\usebib/? (simple) bibfiles command only} - \_endinput \_fi - -% misc: - -\_def\_maybedot{\_ifnum\_spacefactor=\_sfcode`\.\_relax\_else.\_fi} -\_tmpnum=\_sfcode`\. \_advance\_tmpnum by-2 \_sfcode`\.=\_tmpnum -\_sfcode`\?=\_tmpnum \_sfcode`\!=\_tmpnum -\_let\.=\_maybedot % prevents from double periods - -% Formatting of Author/Editor lists: - -\_def\_authorname{% - \_ifnum\_NameCount>1 - \_ifnum0\_namecount=\_NameCount \_mtext{bib.and}\_else , \_fi - \_else - \_ifx\_dobibmark\_undefined \_edef\_dobibmark{\_Lastname}\_fi - \_fi - \_bprintc\_Firstname{* }\_bprintc\_Von{* }\_Lastname\_bprintc\_Junior{, *}% -} -\_let\_editorname=\_authorname - -% Preparing bib-mark (used when \nonumcitations is set): - -\_def\_setbibmark{% - \_ifx\_dobibmark\_undefined \_def\_dobibmark{}\_fi - \_RetrieveFieldIn{bibmark}\_tmp - \_ifx\_tmp\_empty \_RetrieveFieldIn{year}\_tmp \_edef\_tmp{\_dobibmark, \_tmp}\_fi - \_bibmark=\_ea{\_tmp}% -} - -\_def\_preurl{\_hfil\_break} - -% Non-standard fieldnames: - -\_CreateField {isbn} -\_CreateField {doi} -\_CreateField {url} -\_CreateField {bibmark} - -% Sorting: - -\_SortingOrder{name,year}{lfvj} -\_SpecialSort {key} - -% Entry types: - -\_sdef{_print:END}{% - \_bprinta [note] {*.}{}% - \_setbibmark -} -\_sdef{_print:book}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}.\ }{\_bibwarning}% - \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{}% - \_bprinta [address] {*: }{\_bibwarning}% - \_bprinta [publisher] {*, }{\_bibwarning}% - \_bprinta [year] {*.\ }{\_bibwarning}% - \_bprinta [isbn] {ISBN~*.\ }{\_bibwarning}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_sdef{_print:article}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprinta [title] {*.\ }{\_bibwarning}% - \_bprintb [journal] {{\_em##1}.\ }{\_bibwarning}% - \_bprinta [year] {*, }{}% - \_bprinta [volume] {* }{}% - \_bprinta [number] {(*), }{}% - \_bprinta [pages] {*.\ }{}% - \_bprintb [doi] {DOI~\_ulink[http://dx.doi.org/##1]{##1}.\ }{}% -} -\_sdef{_print:inbook}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1.}\ }{\_bibwarning}% - In:~% - \_bprinta [!editor] {*,~eds.\ }{}% - \_bprintb [booktitle] {{\_em##1}.\ }{\_bibwarning}% - \_bprinta [address] {*: }{\_bibwarning}% - \_bprinta [publisher] {*, }{\_bibwarning}% - \_bprinta [year] {*.\ }{\_bibwarning}% - \_bprinta [chapter] {*.\ }{% - \_bprinta [pages] {*.\ }{}}% - \_bprinta [isbn] {ISBN~*.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_slet{_print:inproceedings}{_print:inbook} - -\_sdef{_print:incolection}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}.\ }{\_bibwarning}% - \_bprinta [crossreff] {In~\_cite[*]. }{% - \_bprinta [booktitle] {*. }{\_bibwarning}% - \_bprinta [!editor] {*,~eds.\ }{\_bibwarning}% - \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{\_bibwarning}% - \_bprinta [address] {*: }{\_bibwarning}% - \_bprinta [publisher] {*, }{\_bibwarning}% - \_bprinta [year] {*.\ }{\_bibwarning}% - \_bprinta [pages] {*.\ }{}% - \_bprintb [url] {\_preurl\_url{####1}. }{}}% -} -\_sdef{_print:conference}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% - \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{}% - \_bprinta [address] {*: }{\_bibwarning}% - \_bprinta [publisher] {*, }{\_bibwarning}% - \_bprinta [year] {*.\ }{\_bibwarning}% - \_bprinta [isbn] {ISBN~*.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_sdef{_print:thesis}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% - \_bprinta [type] {*,\ }{\_bibwarning}% - \_bprinta [school] {*.\ }{}% - \_bprinta [address] {*, }{}% - \_bprinta [year] {*.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_sdef{_print:proceedings}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% - \_bprinta [publisher] {*.\ }{% - \_bprinta [organization] {*.\ }{\_bibwarning}}% -} -\_sdef{_print:techreport}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% - \_mtext{bib.techreport}. - \_bprinta [institution] {*.\ }{}% -} -\_sdef{_print:booklet}{% - \_bprinta [!author] {*\.\ }{\_bibwarning}% - \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% - \_bprinta [howpublished] {*.\ }{\_bibwarning}% -} -\_sdef{_print:manual}{% - \_bprinta [!author] {*\.\ }{}% - \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% - \_bprinta [year] {*.\ }{}% - \_bprinta [institution] {*.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} -\_sdef{_print:misc}{% - \_bprinta [!author] {*\.\ }{}% - \_bprintb [title] {{\_em##1}\.\ }{}% - \_bprinta [howpublished] {*.\ }{}% - \_bprinta [institution] {*.\ }{}% - \_bprinta [series] {*.\ }{}% - \_bprinta [year] {*.\ }{}% - \_bprintb [url] {\_preurl\_url{##1}. }{}% -} - -%%% end of the style file - -\_endcode - -You can copy this file to bib-yourname.opm and modify it by your -needs... diff --git a/macros/luatex/optex/base/cite-bib.opm b/macros/luatex/optex/base/cite-bib.opm deleted file mode 100644 index 26a5b17bd4..0000000000 --- a/macros/luatex/optex/base/cite-bib.opm +++ /dev/null @@ -1,271 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \cite {Cite, Biblioraphy <2020-03-09>} % loaded in format - - \_doc ----------------------------- - Registers used by `\cite`, `\bib` macros are declared here. - The \`\bibnum` counts the bibliography items from one. - The \`\bibmark` is used when `\nonumcitations` is set. - \_cod ----------------------------- - -\_newcount\_bibnum % the bibitem counter -\_newtoks\_bibmark % the bibmark used if \nonumcitations -\_newcount\_lastcitenum \_lastcitenum=0 % for \shortcitations -\_public \bibnum \bibmark ; - - \_doc ----------------------------- - \`\cite` `[<label>,<label>,...,<label>]` manages <labes> using `\_citeA` - and prints `[<bib-marks>]` using `\_printsavedcites`. - \nl - \`\nocite` `[<label>,<label>,...,<label>]` only manages <labels> but prints nothing. - \nl - \`\rcite` `[<label>,<label>,...,<label>]` behaves like `\cite` but prints - <bib-marks> without brackets. - \nl - \`\ecite` `[<label>]{<text>}` behaves like `\rcite [<label>]` but prints - <text> instead <bib-mark>. The <text> is hyperlinked like <bib-marks> - when `\cite` or `\rcite` is used. - The empty internal macro \`\_savedcites` will include the `<bib-marks>` list to - be printed. This list is set by `\_citeA` inside a group and it is used by - `\_printsavedcites` in the same group. Each `\cite`/`\rcite`/`\ecite` macro - starts from empty list of <bib-marks> because new group is opened. - \_cod ----------------------------- - -\_def\_cite[#1]{{\_citeA#1,,,[\_printsavedcites]}} -\_def\_nocite[#1]{{\_citeA#1,,,}} -\_def\_rcite[#1]{{\_citeA#1,,,\_printsavedcites}} -\_def\_ecite[#1]{\_bgroup\_citeA#1,,,\_ea\_eciteB\_savedcites;} -\_def\_eciteB#1,#2;#3{\_if?#1\_relax #3\_else \_ilink[cite:#1]{#3}\_fi\_egroup} -\_def\_savedcites{} - -\_public \cite \nocite \rcite \ecite ; - - \_doc ----------------------------- - `<bib-marks>` may be numbers or a special text related to cited bib-entry. - It depends on \`\nonumcitations` and on used bib-style. The mapping from - <label> to <bib-mark> is done when `\bib` or `\usebib` is processed. - These macros store the information to - \`\_Xbib``{<label>}{<number>}{<nonumber>}` where <number> and <nonumber> are - two variants of <bib-mark> (numbered or text-like). This information is - read from `.ref` file and it is saved to macros - `\_bib:<label>` and `\_bibm:<number>`. First one includes number and second - one includes <nonumber>. The `\_lastbibnum` macro includes last number of - bib-entry used in the document. A designer can use it to set appropriate - indentation when printing the list of all bib-entries. - \_cod ----------------------------- - -\_def\_Xbib#1#2#3{\_sdef{_bib:#1}{\_bibnn{#2}&}% - \_if^#3^\_else\_sdef{_bim:#2}{#3}\_fi\_def\_lastbibnum{#2}} - - \_doc ----------------------------- - \`\_citeA` `<label>,` processes one label from the list of labels given in the - parameter of `\cite`, `\nocite`, `\rcite` or `\ecite` macros. It adds the - <label> to global list `\_citelist` which will be used by `\usebib` (it - must know what <labels> are used in the document to pick-up - only relevant bib-entries from the database. Because we want to save - space and not to save the same <label> to `\_citelist` twice, we - distinguish four cases: - \begitems - * `<label>` was not declared by \^`\_Xbib` and it is first such <label> in the - document: Then `\_bib:<label>` is undefined and we save label using - `\_addcitlist`, write warning on the terminal and define - `\_bib:<label>` as empty. - * `<label>` was not declared by \^`\_Xbib` but it was used previously in the - document: Then `\_bib:<label>` is empty and we do nothing (only data to - `\_savedcites` are saved). - * `<label>` was declared by \^`\_Xbib` and it is first such <label> in the - document: Then `\_bin:<label>` includes `\_bibnn{<number>}&` and we - test this case by `\if &\_bibnn{<number>}&`. This is true when `\_bibnn{<number>}` - expands to empty. The <label> is saved by `\_addcitelist` and - `\_bib:<label>` is re-defined directly as <number>. - * `<label>` was declared by \^`\_Xbib` and it was used previously in the - document. Then we do nothing (only data to `\_savedcites` are saved. - \enditems - The `\_citeA` macro runs repeatedly over the whole list of <labels>. - \_cod ----------------------------- - -\_def\_citeA #1#2,{\_if#1,\_else - \_if *#1\_addcitelist{*}\_ea\_skiptorelax \_fi - \_ifcsname _bib:#1#2\_endcsname \_else - \_addcitelist{#1#2}% - \_opwarning{\_noexpand\cite [#1#2] unknown. Try to TeX me again}\_openref - \_incr\_unresolvedrefs - \_addto\_savedcites{?,}\_def\_sortcitesA{}\_lastcitenum=0 - \_ea\_gdef \_csname _bib:#1#2\_endcsname {}% - \_ea\_skiptorelax \_fi - \_ea\_ifx \_csname _bib:#1#2\_endcsname \_empty - \_addto\_savedcites{?,}\_def\_sortcitesA{}\_lastcitenum=0 - \_ea\_skiptorelax \_fi - \_def\_bibnn##1{}% - \_if &\_csname _bib:#1#2\_endcsname - \_def\_bibnn##1##2{##1}% - \_addcitelist{#1#2}% - \_sxdef{_bib:#1#2}{\_csname _bib:#1#2\_endcsname}% - \_fi - \_edef\_savedcites{\_savedcites \_csname _bib:#1#2\_endcsname,}% - \_relax - \_ea\_citeA\_fi -} -\_def\_addcitelist#1{\_global\_addto\_citelist{\_citeI[#1]}} -\_def\_citelist{} - - \_doc ----------------------------- - The `<bib-marks>` (in numeric or text form) are saved in \^`\_savedcites` - macro separated by commas. - The \`\_printsavedcites` prints them by normal order or sorted if - \`\sortcitations` is specified or condensed if \`\shordcitations` is - specified.\nl - The `\sortcitations` appends the dummy number 300000 and we suppose that normal - numbers of bib-entries are less than this constant. - This constant is removed after the sorting algorithm. - The \`\shortcitations` sets simply `\_lastcitenum=1`. - The macros for <bib-marks> printing follows (sorry, without detail - documentation). They are documented in `opmac-d.pdf` (but only in Czech). - \_cod ----------------------------- - -\_def\_printsavedcites{\_sortcitesA - \_chardef\_tmpb=0 \_ea\_citeB\_savedcites,% - \_ifnum\_tmpb>0 \_printdashcite{\_the\_tmpb}\_fi -} -\_def\_sortcitesA{} -\_def\_sortcitations{% - \_def\_sortcitesA{\_edef\_savedcites{300000,\_ea}\_ea\_sortcitesB\_savedcites,% - \_def\_tmpa####1300000,{\_def\_savedcites{####1}}\_ea\_tmpa\_savedcites}% -} -\_def\_sortcitesB #1,{\_if $#1$% - \_else - \_mathchardef\_tmpa=#1 - \_edef\_savedcites{\_ea}\_ea\_sortcitesC \_savedcites\_end - \_ea\_sortcitesB - \_fi -} -\_def\_sortcitesC#1,{\_ifnum\_tmpa<#1\_edef\_tmpa{\_the\_tmpa,#1}\_ea\_sortcitesD - \_else\_edef\_savedcites{\_savedcites#1,}\_ea\_sortcitesC\_fi} -\_def\_sortcitesD#1\_end{\_edef\_savedcites{\_savedcites\_tmpa,#1}} - -\_def\_citeB#1,{\_if$#1$\_else - \_if?#1\_relax??% - \_else - \_ifnum\_lastcitenum=0 % only comma separated list - \_printcite{#1}% - \_else - \_ifx\_citesep\_empty % first cite item - \_lastcitenum=#1\_relax - \_printcite{#1}% - \_else % next cite item - \_advance\_lastcitenum by1 - \_ifnum\_lastcitenum=#1\_relax % cosecutive cite item - \_mathchardef\_tmpb=\_lastcitenum - \_else % there is a gap between cite items - \_lastcitenum=#1\_relax - \_ifnum\_tmpb=0 % previous items were printed - \_printcite{#1}% - \_else - \_printdashcite{\_the\_tmpb}\_printcite{#1}\_chardef\_tmpb=0 - \_fi\_fi\_fi\_fi\_fi - \_ea\_citeB\_fi -} -\_def\_shortcitations{\_lastcitenum=1 } - -\_def\_printcite#1{\_citesep\_ilink[cite:#1]{\_citelinkA{#1}}\_def\_citesep{,\_hskip.2em\_relax}} -\_def\_printdashcite#1{\_ifmmode-\_else\_hbox{--}\_fi\_ilink[cite:#1]{\_citelinkA{#1}}} -\_def\_citesep{} - -\_def\_nonumcitations{\_lastcitenum=0\_def\_sortcitesA{}\_def\_etalchar##1{$^{##1}$}% - \_def\_citelinkA##1{\_isdefined{_bim:##1}\_iftrue \_csname _bim:##1\_endcsname - \_else ##1\_opwarning{\_noexpand\nonumcitations + empty bibmark. Maybe bad bib-style}\_fi}% -} -\_def\_citelinkA{} - -\_public \nonumcitations \sortcitations \shortcitations ; - - \_doc ----------------------------- - The \`\bib` `[<label>] {<optional bib-mark>}` prints one bib-entry - without reading any database. The bib-enty follows after this command. - This command counts the used `\bib`s from one by `\bibnum` counter and - saves \^`\_Xbib``{<label>}{\_the\_bibnum}{\_the\_bibmark}` into `.ref` file - immediately using `\_wbib`. This is the core of creation of mapping from - `<labels>` to `<bib-marks>`. - \_cod ----------------------------- - -\_def\_bib[#1]{\_def\_tmp{\_isnextchar={\_bibA[#1]}{\_bibmark={}\_bibB[#1]}}% - \_ea\_tmp\_romannumeral-`\.} % ignore optional space -\_def\_bibA[#1]=#2{\_bibmark={#2}\_bibB[#1]} -\_def\_bibB[#1]{\_par \_bibskip - \_advance\_bibnum by1 - \_noindent \_def\_tmpb{#1}\_wbib{#1}{\_the\_bibnum}{\_the\_bibmark}% - \_printlabel{#1}% - \_printbib \_ignorespaces -} -\_def\_wbib#1#2#3{\_dest[cite:\_the\_bibnum]% - \_ifx\_wref\_wrefrelax\_else \_immediate\_wref\_Xbib{{#1}{#2}{#3}}\_fi} - -\_public \bib ; - - \_doc ----------------------------- - The \`\_printbib` prints the bib-entry itself. You can re-define it if you - want a different design. The `\_pritbib` starts in horizontal mode after - `\noindent` and after the eventual hyperlink destination is inserted. - By default, the `\_printbib` sets the indentation - by `\hangindent` and prints numeric <bib-marks> by - `\llap{[\the\bibnum]}` If `\nonumcitations` then the `\_citelinkA` is not - empty and <bib-marks> (`\the\bibnum` nor `\the\bibmark`) are not printed. - The text of bib-entry follows. User can create this text manually - using `\bib` command or it is generated automatically from a `.bib` database - by `\usebib` command. - - The vertical space between bib-entries is controlled by \`\_bibskip` macro. - \_cod ----------------------------- - -\_def \_printbib {\_hangindent=\_iindent - \_ifx\_citelinkA\_empty \_hskip\_iindent \_llap{[\_the\_bibnum] }\_fi -} -\_def \_bibskip {\_ifnum\_bibnum>0 \_smallskip \_fi} - - \_doc ----------------------------- - The \`\usebib` command is implemented in `usebib.opm` file which is loaded - when the `\usebib` command is used first. - The `usebib.opm` file loads the `librarian.tex` for scanning the `.bib` - files. See the section~\ref[usebib], where the file `usebib.opm` is - documented. - \_cod ----------------------------- - -\_def\_usebib{\_par \_opinput {usebib.opm} \_usebib} -\_def\usebib{\_usebib} - - \_doc ------------------------------ - \_forwardlink\`\nobibwarning` `[<list of bib-labels>]` - declares a list of bib labels - which are not fully declared in `.bib` file but we want to suppress the - warning about it. List of bib labels are comma-separated case sensitive - list without spaces. - \_cod ------------------------------ - -\_def\_nobibwarnlist{,} -\_def\_nobibwarning[#1]{\_global\_addto\_nobibwarnlist{#1,}} -\_public \nobibwarning ; - - \_doc ----------------------------- - The macros above works if all `\cite` (or similar) commands are used - before the `\usebib` command is used because `\usebib` prints only such - bib-entries their <labels> are saved in the `\_citelist`. But if some - `\cite` is used after `\usebib`, then `\usebib` sets `\_addcitelist` to - \`\_writeXcite`, so such `\cite` saves the information to the - `.ref`file in the format \`\_Xcite``{<label>}`. Such information are copied - to `\_citelistB` during reading `.ref` file and `\usebib` concats two - lists of <labels> from `\_citelist` and `\_citelistB` and - uses this concatenated list. - \_cod ----------------------------- - -\_def\_Xcite#1{\_addto\_citelistB{\_citeI[#1]}} -\_def\_writeXcite#1{\_openref\_immediate\_wref\_Xcite{{#1}}} -\_def\_citelistB{} - -\_endcode % ------------------------------------- - -See end of the `usebib.opm` file for documentation about creating style -files `bib-<style>.opm`. - -See end of the `bib-iso690.opm` file for large documentation about `.bib` files -structure and about the usage of `iso690` bib-style. - diff --git a/macros/luatex/optex/base/colors.opm b/macros/luatex/optex/base/colors.opm deleted file mode 100644 index bbda496761..0000000000 --- a/macros/luatex/optex/base/colors.opm +++ /dev/null @@ -1,394 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \colordef {Colors <2020-03-18>} % loaded in format - - \_doc ----------------------------- - We declare internal boolean value \`\_iflocalcolor` ad do - \`\localcolor` as default. - \_cod ----------------------------- - -\_newifi \_iflocalcolor \_localcolortrue -\_protected\_def \_localcolor {\_localcolortrue} -\_protected\_def \_nolocalcolor {\_localcolorfalse} -\_public \localcolor \nolocalcolor ; - - \_doc ----------------------------- - The basic colors in CMYK - \`\Blue` \`\Red` \`\Brown` \`\Green` \`\Yellow` \`\Cyan` \`\Magenta` - \`\Grey` \`\LightGrey` \`\White` and \`\Black` - are declared here. - \_cod ----------------------------- - -\_def\Blue {\_setcmykcolor{1 1 0 0}} -\_def\Red {\_setcmykcolor{0 1 1 0}} -\_def\Brown {\_setcmykcolor{0 0.67 0.67 0.5}} -\_def\Green {\_setcmykcolor{1 0 1 0}} -\_def\Yellow {\_setcmykcolor{0 0 1 0}} -\_def\Cyan {\_setcmykcolor{1 0 0 0}} -\_def\Magenta {\_setcmykcolor{0 1 0 0}} -\_def\Grey {\_setcmykcolor{0 0 0 0.5}} -\_def\LightGrey {\_setcmykcolor{0 0 0 0.2}} -\_def\White {\_setgreycolor{1}} -\_def\Black {\_setgreycolor{0}} - - \_doc ----------------------------- - By default, the \`\setcmykcolor` \`\setrgbcolor` and \`\setgreycolor` - macros with `{<componetns>}` parameter - expand to `\_setcolor{<pdf-primitive>}` using \`\_formatcmyk` - or \`\_formatrgb` or \`\_formatgrey` expandable macros. - For example `\setrgbcolor{1 0 0}` expands to `\_setcolor{1 0 0 rg 1 0 0 RG}`.\nl - We set both types of colors (for lines (`K` or `RG` or `G`) and for fills - (`r` or `rg` or `g`) together in the <pdf-primitive> command. - This is the reason why the \`\_fillstroke` uses both its parameters. - If only fills are needed you can do `\def\_fillstroke#1#2{#1}`. - If only strokes are needed you can do `\def\_fillstroke#1#2{#2}`. - \_cod ----------------------------- - -\_def\_setcmykcolor#1{\_setcolor{\_formatcmyk{#1}}} -\_def\_setrgbcolor#1{\_setcolor{\_formatrgb{#1}}} -\_def\_setgreycolor#1{\_setcolor{\_formatgrey{#1}}} -\_def\_formatcmyk#1{\_fillstroke{#1 k}{#1 K}} -\_def\_formatrgb#1{\_fillstroke{#1 rg}{#1 RG}} -\_def\_formatgrey#1{\_fillstroke{#1 g}{#1 G}} -\_def\_fillstroke#1#2{#1 #2} -\_public \setcmykcolor \setrgbcolor \setgreycolor ; - - \_doc ----------------------------- - The \`\onlyrgb` declaration redefines \^`\_formatcmyk` in order it expands - to its conversion to RGB <pdf-primitive>. This conversion is done by - the \^`\_cmyktorgb` macro. Moreover, `\onlyrgb` re-defines three basic RGB - colors for RGB color space and re-declares \^`\colordef` as \^`\rgbcolordef`. - The \hbox{\`\onlycmyk`} macro does similar work, it re-defines \^`\_formatrgb` - macro. The Grey color space is unchanged and works in both main - settings (RGB or CMYK) without collisions. - \_cod ----------------------------- - -\_def\_onlyrgb{\_def\Red{\_setrgbcolor{1 0 0}}% - \_def\Green{\_setrgbcolor{0 1 0}}\_def\Blue{\_setrgbcolor{0 0 1}}% - \_let\_colordef=\_rgbcolordef - \_def\_formatrgb##1{\_fillstroke{##1 rg}{##1 RG}}% - \_def\_formatcmyk##1{\_fillstroke{\_cmyktorgb ##1 ; rg}{\_cmyktorgb ##1 ; RG}}} -\_def\_onlycmyk{\_def\_formatcmyk##1{\_fillstroke{##1 k}{##1 K}}% - \_def\_formatrgb##1{\_fillstroke{\_rgbtocmyk ##1 ; k}{\_rgbtocmyk ##1 ; K}}} -\_public \onlyrgb \onlycmyk ; - - \_doc ----------------------------- - The \`\_setcolor` macro redefines empty `\_ensureblack` macro (used in - output routine for headers and footers) to `\_ensureblackA` which sets - Black at the start of its parameter and returns to the current color at the - end of its parameter. - - The current color is saved into `\_currentcolor` macro and colorstack is pushed. - Finally, the `\_colorstackpop` is initialized by `\aftergroup` if - `\localcolor` is declared. - - You can save the current color to your macro by `\let\yourmacro=\_currentcolor` - and you can return to this color by the command `\_setcolor\yourmacro`. - \_cod ----------------------------- - -\_protected\_def \_setcolor #1{\_global\_let\_ensureblack=\_ensureblackA - \_iflocalcolor \_edef\_currentcolor{#1}\_colorstackpush\_currentcolor - \_aftergroup\_colorstackpop - \_else \_xdef\_currentcolor{#1}\_colorstackset\_currentcolor \_fi -} -\_def\_pdfblackcolor{0 g 0 G} -\_edef\_currentcolor{\_pdfblackcolor} -\_def\_ensureblackA#1{\_global\_let\_openfnotestack=\_openfnotestackA - \_colorstackpush\_pdfblackcolor #1\_colorstackpop} - - \_doc ----------------------------- - The colorstack is initialized here and the basic macros - \`\_colorstackpush`, \`\_colorstackpop` and \`\_colorstackset` - are defined here. - \_cod ----------------------------- - -\_mathchardef\_colorstackcnt=0 % Implicit stack usage -\_def\_colorstackpush#1{\_pdfcolorstack\_colorstackcnt push{#1}} -\_def\_colorstackpop{\_pdfcolorstack\_colorstackcnt pop} -\_def\_colorstackset#1{\_pdfcolorstack\_colorstackcnt set{#1}} - - \_doc ----------------------------- - We need to open a special color stack for footnotes because footnotes - can follow on the next pages and their colors are independent of colors - used in the main page-body. The \`\_openfnotestack` is defined as - \`\_openfnotestackA` when the \^`\_setcolor` is used first. - The \`\_fnotestack` is initialized in in `\everyjob` because the - initialization is not saved to the format. - \_cod ----------------------------- - -%\_mathchardef\_fnotestack=\_pdfcolorstackinit page {0 g 0 G} % must be in \everyjob -\_def \_openfnotestackA {\_pdfcolorstack\_fnotestack current} - - \_doc ----------------------------- - We use Lua codes for RGB to CMYK or CMYK to RGB conversions and for - addition color components in the \^`\colordef` macro. - The \`\_rgbtocmyk` `<R> <G> <B> ;` expands to `<C> <M> <Y> <K>` and - the \`\_cmyktorgb` `<C> <M> <Y> <K> ;` expands to `<R> <G> <B>`. - The \`\_colorcrop`, \`\_colordefFin` and \`\_douseK` are auxiliary macros - used in the \^`\colordef`. The `\_colorcrop` rescales color components in order - to they are in $[0,1]$ interval. The `\colordefFin` expands to the values - accumulated in Lua code `color_C`, `color_M`, `color_Y` and `color_K`. - The `\_douseK` applies \^`\useK` to CMYK components. - \_cod ----------------------------- - -\_def\_rgbtocmyk #1 #2 #3 ;{% - \_ea \_stripzeros \_detokenize \_ea{\_directlua{ - local kr = math.max(#1,#2,#3) - if (kr==0) then - tex.print('0. 0. 0. 1 ;') - else - tex.print(string.format('\_pcent.3f \_pcent.3f \_pcent.3f \_pcent.3f ;', - (kr-#1)/kr, (kr-#2)/kr, (kr-#3)/kr, 1-kr)) - end -}}} -\_def\_cmyktorgb #1 #2 #3 #4 ;{% - \_ea \_stripzeros \_detokenize \_ea{\_directlua{ - local kr = 1-#4 - tex.print(string.format('\_pcent.3f \_pcent.3f \_pcent.3f ;', - (1-#1)*kr, (1-#2)*kr, (1-#3)*kr)) -}}} -\_def\_colorcrop{\_directlua{ - local m=math.max(color_C, color_M, color_Y, color_K) - if (m>1) then - color_C=color_C/m color_M=color_M/m color_Y=color_Y/m color_K=color_K/m - end -}} -\_def\_colordefFin{\_colorcrop \_ea \_stripzeros \_detokenize \_ea{\_directlua{ - tex.print(string.format('\_pcent.3f \_pcent.3f \_pcent.3f \_pcent.3f ;', - color_C, color_M, color_Y, color_K)) -}}} -\_def\_douseK{\_colorcrop \_directlua{ - kr=math.min(color_C, color_M, color_Y) - if (kr>=1) then - color_C=0 color_M=0 color_Y=0 color_K=1 - else - color_C=(color_C-kr)/(1-kr) color_M=(color_M-kr)/(1-kr) - color_Y=(color_Y-kr)/(1-kr) color_K=math.min(color_K+kr,1) - end -}} - - \_doc ----------------------------- - We have a problem with the `%.3f` directive in Lua code. It prints trailed - zeros: (0.300 instead desired 0.3) but we want to save PDF file space. The macro - \`\_stripzeros` removes these trailing zeros at the expand processor - level. So `\_stripzeros 0.300 0.400 0.560 ;` expands to `.3 .4 .56`. - \_cod ----------------------------- - -\_def\_stripzeros #1.#2 #3{\_ifx0#1\_else#1\_fi.\_stripzeroA #2 0 :% - \_ifx;#3\_else \_space \_ea\_stripzeros\_ea#3\_fi} -\_def\_stripzeroA #10 #2:{\_ifx^#2^\_stripzeroC#1:\_else \_stripzeroB#1 0 :\_fi} -\_def\_stripzeroB #10 #2:{\_ifx^#2^\_stripzeroC#1:\_else #1\_fi} -\_def\_stripzeroC #1 #2:{#1} - - \_doc ----------------------------- - The \`\rgbcolordef` and \`\cmykcolordef` use common macro - \`\_commoncolordef` with different first four parameters. - The `\_commoncolordef <selector><K><R><G><what-define>{<data>}` does the - real work. It initializes the Lua variables for summation. - It expands <data> in the group where color selectors have - special meaning, then it adjusts the resulting string by \^`\replstring` - and runs it. Example shows how the <data> are processed: - \begtt \catcode`\<=13 - input <data>: ".3\Blue + .6^\KhakiC \useK -\Black" - expanded to: ".3 !=K 1 1 0 0 +.6^!=R .804 .776 .45 \_useK -!=G 0" - adjusted to: "\_addcolor .3!=K 1 1 0 0 \_addcolor .6!^R .804 .776 .45 - \_useK \_addcolor -1!=G 0" - and this is processed. - \endtt - \`\_addcolor` `<coef.>!<mod><type>` expands to `\_addcolor:<mod><type> <coef>` - for example it expands to `\_addcolor:=K <coef>` followed by one or three or four - numbers (depending on <type>). <mod> is `=` (use as is) or `^` (use - complementary color). <type> is `K` for CMYK, `R` for RGB and `G` for - GREY color space. Uppercase <type> informs that `\cmykcolordef` is - processed and lowercase <type> informs that `\rgbcolordef` is processed. - All variants of commands `\_addcolor:<mod><type>` are defined. All of - them expand to `\_addcolorA <v1> <v2> <v3> <v4>` which adds the values of Lua - variables. The `\rgbcolordef` uses `\_addcolorA <R> <G> <B> 0` and - `\cmkykcolordef` uses `\_addcolorA <C> <M> <Y> <K>`. So the Lua variable - names are a little confusing when `\rgbcolordef` is processed. - - Next, `\_commoncolordef` saves resulting values from Lua to `\_tmpb` - using `\_colordefFin`. If `\rgbcolordef` is processed, then we must to - remove the last <K> component which is in the format `.0` in such case. - The `\_stripK` macro does it. - Finally, the `<what-define>` is defined as `<selector>{<expanded _tmpb>}`, - for example `\_setcmykclor{1 0 .5 .3}`. - \_cod ----------------------------- - -\_def\_rgbcolordef {\_commoncolordef \_setrgbcolor krg} -\_def\_cmykcolordef {\_commoncolordef \_setcmykcolor KRG} -\_def\_commoncolordef#1#2#3#4#5#6{% - \_begingroup - \_directlua{color_C=0 color_M=0 color_Y=0 color_K=0}% - \_def\_setcmykcolor##1{!=#2 ##1 }% - \_def\_setrgbcolor ##1{!=#3 ##1 }% - \_def\_setgreycolor##1{!=#4 ##1 }% - \_let\_useK=\_relax - \_edef\_tmpb{+#6}% - \_replstring\_tmpb{+ }{+}\_replstring\_tmpb{- }{-}% - \_replstring\_tmpb{+}{\_addcolor}\_replstring\_tmpb{-}{\_addcolor-}% - \_replstring\_tmpb{^!=}{!^}\_replstring\_tmpb{-!}{-1!}% - \_ifx K#2\_let\_useK=\_douseK \_fi - \_tmpb - \_edef\_tmpb{\_colordefFin}% - \_ifx k#2\_edef\_tmpb{\_ea\_stripK \_tmpb;}\_fi - \_ea\_endgroup - \_ea\_def\_ea#5\_ea{\_ea#1\_ea{\_tmpb}}% -} -\_def\_addcolor#1!#2#3{\_cs{addcolor:#2#3}#1} -\_def\_addcolorA #1 #2 #3 #4 #5 {% - \_def\_tmpa{#1}\_ifx\_tmpa\_empty \_else \_edef\_tmpa{\_tmpa*}\_fi - \_directlua{color_C=math.max(color_C+\_tmpa#2,0) - color_M=math.max(color_M+\_tmpa#3,0) - color_Y=math.max(color_Y+\_tmpa#4,0) - color_K=math.max(color_K+\_tmpa#5,0) -}} -\_sdef{addcolor:=K}#1 #2 #3 #4 #5 {\_addcolorA #1 #2 #3 #4 #5 } -\_sdef{addcolor:^K}#1 #2 #3 #4 #5 {\_addcolorA #1 (1-#2) (1-#3) (1-#4) #5 } -\_sdef{addcolor:^G}#1 #2 {\_addcolorA #1 0 0 0 #2 } -\_sdef{addcolor:=G}#1 #2 {\_addcolorA #1 0 0 0 (1-#2) } -\_sdef{addcolor:=R}#1 #2 #3 #4 {% - \_edef\_tmpa{\_noexpand\_addcolorA #1 \_rgbtocmyk #2 #3 #4 ; }\_tmpa -} -\_sdef{addcolor:^R}#1 #2 #3 #4 {\_cs{addcolor:=R}#1 (1-#2) (1-#3) (1-#4) } - -\_sdef{addcolor:=k}#1 #2 #3 #4 #5 {% - \_edef\_tmpa{\_noexpand\_addcolorA #1 \_cmyktorgb #2 #3 #4 #5 ; 0 }\_tmpa -} -\_sdef{addcolor:^k}#1 #2 #3 #4 #5 {\_cs{addcolor:=k}#1 (1-#2) (1-#3) (1-#4) #5 } -\_sdef{addcolor:^g}#1 #2 {\_addcolorA #1 (1-#2) (1-#2) (1-#2) 0 } -\_sdef{addcolor:=g}#1 #2 {\_addcolorA #1 #2 #2 #2 0 } -\_sdef{addcolor:=r}#1 #2 #3 #4 {\_addcolorA #1 #2 #3 #4 0 } -\_sdef{addcolor:^r}#1 #2 #3 #4 {\_addcolorA #1 (1-#2) (1-#3) (1-#4) 0 } -\_def\_stripK#1 .0;{#1} -\_let\_colordef=\_cmykcolordef % default \_colordef is \_cmykcolordef - - \_doc ----------------------------- - Public versions of \`\colordef` and \`\useK` macros are declared using - `\_def`, because the internal versions `\_colordef` and `\_useK` are - changed during processing. - \_cod ----------------------------- - -\_def \useK{\_useK} -\_def \colordef {\_colordef} -\_public \cmykcolordef \rgbcolordef ; - - \_doc ----------------------------- - The \LaTeX/ file `x11nam.def` is read by \`\morecolors`. The numbers - 0,1,2,3,4 are transformed to letters O, <none>, B, C, D in the name of the - color. Colors defined already are not re-defined. The empty \`\_showcolor` - macro should be re-defined for color catalog printing. For example: - \begtt - \def\vr{\vrule height10pt depth2pt width20pt} - \def\_showcolor{\hbox{\tt\_bslash\_tmpb: \csname\_tmpb\endcsname \vr}\space\space} - \begmulti 4 \typosize[11/14] - \morecolors - \endmulti - \endtt - \_cod ----------------------------- - -\_def\_morecolors{% - \_long\_def\_tmp##1\preparecolorset##2##3##4##5{\_tmpa ##5;,,,;} - \_def\_tmpa##1,##2,##3,##4;{\_ifx,##1,\_else - \_def\_tmpb{##1}\_replstring\_tmpb{1}{}\_replstring\_tmpb{2}{B}% - \_replstring\_tmpb{3}{C}\_replstring\_tmpb{4}{D}\_replstring\_tmpb{0}{O}% - \_ifcsname \_tmpb\_endcsname \_else - \_sdef{\_tmpb}{\_setrgbcolor{##2 ##3 ##4}}\_showcolor\_fi - \_ea\_tmpa\_fi - } - \_ea\_tmp\_input x11nam.def -} -\_let\_showcolor=\_relax % re-define it if you want to print a color catalog -\_public \morecolors ; - -\_endcode % ------------------------------------- - -The colors have different behavior than fonts. Marks (whatsits) with color -information are stored into PDF output and \TeX/ doesn't interpret them. -The PDF viewer (or PDF interpreter in a printer) reads these marks -and switches colors according to them. This -is independent of \TeX/ group mechanism. You can declare -`\nolocalcolor` at the beginning of the document, if you want this behavior. -In this case, if you set a color then you must return to the black color -using `\Black` manually. - -By default, \OpTeX/ sets `\localcolor`. It means that the typesetting -returns to a previous color at the end of the current group, so you cannot -write `\Black` explicitly. This is implemented using the `\aftergroup` feature. -There is a limitation of this feature: when a color selector is used in a -group of a box, which is saved by `\setbox`, then the activity or -reconstruction of the previous color is processed at `\setbox` time, no in the -box itself. You must correct it by double group: -\begtt -\setbox0=\hbox{\Red text} % bad: \Black is done after \setbox -\setbox0=\hbox{{\Red text}} % good: \Black is done after group inside the box -\endtt - -The implementation of colors is based on colorstack, so the current color -can follow across more pages. It is not so obvious because PDF viewer (or PDF -interpreter) manipulates with colors locally at each PDF page and it -initializes each PDF page with black on white color. - -Macros \^`\setcmykcolor``{<C> <M> <Y> <K>}` or \^`\setrgbcolor``{<R> <G> <B>}` -or\nl \^`\setgreycolor``{<Grey>}` should be used in color selectors or user can -specify these macros explicitly. - -The color mixing processed by the \^`\colordef` is done in the subtractive color -model CMYK. If the result has a component greater than 1 then all -components are multiplied by a coefficient in order to the maximal component is -equal to 1. - -You can move a shared amount of CMY components (i.e. their minimum) to the -$K$ component. This saves the color tonners and the result is more true. -This should be done by \^`\useK` command at the end of a linear combination -used in `\colordef`. For example -\begtt -\colordef \myColor {.3\Green + .4\Blue \useK} -\endtt -The `\useK` command exactly does: -$$ - \displaylines{ - k' =\min(C,M,Y), \cr \ C=(C-k')/(1-k'), \ M=(M-k')/(1-k'), \ Y=(Y-k')/(1-k'), \cr - K = \min(1,K+k'). -} -$$ - -You can use minus instead of plus in the linear combination in `\colordef`. The -given color is substracted in such case and the negative components are -rounded to zero immediately. For example -\begtt -\colordef \Color {\Brown-\Black} -\endtt -can be used for removing the black component from the color. You can use -the `-\Black` trick after `\useK` command to remove grey components -occurred during color mixing. - -Finally, you can use `^` immediately preceded before the macro name of the -color. Then the complementary color is used here. -\begtt -\colordef\mycolor{\Grey+.6^\Blue} % the same as \colordef\mycolor{\Grey+.6\Yellow} -\endtt - -The \^`\rgbcolordef` can be used to mix colors in additive color model RGB. -If \^`\onlyrgb` is declared, then \^`\colordef` works as \^`\rgbcolordef`. - -If a CMYK to RGB or RGB to CMYK conversion is needed then -the following simple formulae are used -(ICC profiles are not supported): -$$ -\displaylines{ - \hbox{CMYK to RGB:}\cr - R = (1-C)(1-K), \ G = (1-M)(1-K), \ B = (1-Y)(1-K). \cr - \hbox{RGB to CMYK:}\cr - K'=\max(R,G,B), \ C=(K'-R)/K', \ M=(K'-G)/K', \ Y=(K'-B)/K', \ K=1-K'. -} -$$ -The RGB to CMYK conversion is invoked when a color is declared using `\setrgbcolor` -and it is used in \^`\colordef` or if it is printed when \^`\onlycmyk` is declared. -The CMYK to RGB conversion is invoked when a color is declared using \^`\setcmykcolor` -and it is used in \^`\rgbcolordef` or if it is printed when \^`\onlyrgb` is declared. - -\_endinput - -2020-04-22 \replstring\tmpb{+ }{+}, {- }{-} added in \colordef, bug fixed -2020-03-18 introduced diff --git a/macros/luatex/optex/base/doc.opm b/macros/luatex/optex/base/doc.opm deleted file mode 100644 index ce571a9e81..0000000000 --- a/macros/luatex/optex/base/doc.opm +++ /dev/null @@ -1,276 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \printdoc {Macros for documentation printing <2020-04-28>} - - \_doc ----------------------------- - General decalarations. - \_cod ----------------------------- - -\_fontfam[lmfonts] -\_hyperlinks \Green \Green -\_enlang -\_enquotes - - \_doc ----------------------------- - Maybe, somebody needs `\seccc` or `\secccc`? - \_cod ----------------------------- - -\_eoldef\seccc#1{\_medskip \_noindent{\_bf#1}\_par\_nobreak\_firstnoindent} -\_def\secccc{\_medskip\_noindent $\_bullet$ } - - \_doc ----------------------------- - `\enddocument` can be redefined. - \_cod ----------------------------- - -\_let\enddocument=\_bye - - \_doc ----------------------------- - A full page of listing causes underfull `\vbox` in output routine. - We need to add a small tolerance. - \_cod ----------------------------- - -\_pgbottomskip=0pt plus10pt minus2pt - - \_doc ----------------------------- - The listing mode is implemented here. The \`\maxlines` - is maximal lines of code printed in the listing mode. - \_cod ----------------------------- - -\_newcount \_maxlines \_maxlines=100000 -\_public \maxlines ; - -\_eoldef\_cod#1{\_par \_wipeepar - \_vskip\_parskip \_medskip \_ttskip - \_begingroup - \_typosize[8/10] - \_let\_printverbline=\_printcodeline - \_ttline=\_inputlineno - \_setverb - \_ifnum\_ttline<0 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi - \_adef{ }{\ }\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt - \_relax \_ttfont - \_endlinechar=`^^J - \_def\_tmpb{\_start}% - \_readverbline -} -\_def\_readverbline #1^^J{% - \_def\_tmpa{\_empty#1}% - \_let\_next=\_readverbline - \_ea\_isinlist\_ea\_tmpa\_ea{\_Doc}\_iftrue \_let\_next=\_processinput \_fi - \_ea\_isinlist\_ea\_tmpa\_ea{\_Endcode}\_iftrue \_endinput \_let\_next=\_processinput \_fi - \_ifx\_next\_readverbline \_addto\_tmpb{#1^^J}\_fi - \_next -} -{\_catcode`\ =13 \_gdef\_aspace{ }}\_def\_asp{\_ea\_noexpand\_aspace} -\_edef\_Doc{\_asp\_asp\_bslash _doc} -\_edef\_Endcode{\_noexpand\_empty\_bslash _endcode} - - \_doc ----------------------------- - The scanner of the control sequences in the listing mode. - \_cod ----------------------------- - -\_def\_makecs{\_def\_tmp{}\_futurelet\_next\_makecsA} -\_def\_makecsA{\_ifcat a\_noexpand\_next \_ea\_makecsB \_else \_ea\_makecsF \_fi} -\_def\_makecsB#1{\_addto\_tmp{#1}\_futurelet\_next\_makecsA} -\_def\_makecsF{\_ifx\_tmp\_empty \_csstring\\% - \_else \_ifcsname ,\_tmp\_endcsname \_link[cs:\_tmp]{\Blue}{\_csstring\\\_tmp}% - \_else \_let\_next=\_tmp \_remfirstunderscore\_next - \_ifx\_next\_empty \_let\_next=\_tmp \_fi - \_ifcsname ,\_next\_endcsname \_link[cs:\_next]{\Blue}{\_csstring\\\_tmp}% - \_else \_csstring\\\_tmp \_fi\_fi\_fi -} -\_def\_processinput{% - \_let\_start=\_relax - \_ea\_replstring\_ea\_tmpb\_ea{\_aspace^^J}{^^J} - \_addto\_tmpb{\_end}% - \_isinlist\_tmpb{\_start^^J}\_iftrue \_advance\_ttline by1\_fi - \_replstring\_tmpb{\_start^^J}{\_start}% - \_replstring\_tmpb{\_start}{}% - \_replstring\_tmpb{^^J\_end}{\_end}% - \_replstring\_tmpb{^^J\_end}{}% - \_replstring\_tmpb{\_end}{}% - \_ea\_prepareverbdata\_ea\_tmpb\_ea{\_tmpb^^J}% - \_replthis{\_csstring\\}{\_noexpand\_makecs}% - \_ea\_printverb \_tmpb\_end - \_par - \_endgroup \_ttskip - \_isnextchar\_par{}{\_noindent}% -} -\_def\_remfirstunderscore#1{\_ea\_remfirstunderscoreA#1\_relax#1} -\_def\_remfirstunderscoreA#1#2\_relax#3{\_if _#1\_def#3{#2}\_fi} - - \_doc ----------------------------- - The lines in the listing mode have a yellow background. - \_cod ----------------------------- - -\_def\Yellow{\_setcmykcolor{0.0 0.0 0.3 0.03}} - -\_def\_printcodeline#1{\_advance \_maxlines by-1 - \_ifnum \_maxlines<0 \_ea \_endverbprinting \_fi - \_ifx\_printfilename\_relax \_penalty \_ttpenalty \_fi \_vskip-4pt - \_noindent\_rlap{\Yellow \_vrule height8pt depth5pt width\_hsize}% - \_printfilename - \_indent \_printverblinenum #1\par} - -\_def\_printfilename{\_hbox to0pt{% - \_hskip\_hsize\vbox to0pt{\_vss\_llap{\Brown\docfile}\_kern7.5pt}\_hss}% - \_let\_printfilename=\_relax -} -\_everytt={\_let\_printverblinenum=\_relax} - -\_long\_def\_endverbprinting#1\_end#2\_end{\_fi\_fi \_global\_maxlines=100000 - \_noindent\_typosize[8/]\_dots etc. (see {\_tt\Brown\docfile})} - - \_doc ----------------------------- - `\docfile` is currently documented file.\nl - \`\printdoc` and \`\printdoctail` macros are defined here. - \_cod ----------------------------- - -\_def\docfile{} -\_def\_printdoc #1 {\_par \_def\docfile{#1}% - \_everytt={\_ttshift=-15pt \_let\_printverblinenum=\_relax}% - \_ea\_cod \input #1 - \_everytt={\_let\_printverblinenum=\_relax}% - \_def\docfile{}% -} -\_def\_printdoctail #1 {\_bgroup - \_everytt={}\_ttline=-1 \_ea\_printdoctailA \_input #1 \_egroup} -{\_long\_gdef\_printdoctailA#1\_endcode{}} - -\_public \printdoc \printdoctail ; - - \_doc ----------------------------- - You can do `\verbinuput \vitt{<filename>} (<from>-<to>) <filename>` - if you need analogical design like in listing mode. - \_cod ----------------------------- - -\_def\_vitt#1{\_def\docfile{#1}\_ttline=-1 - \_everytt={\_typosize[8/10]\_let\_printverbline=\_printcodeline \_medskip}} - -\_public \vitt ; - - \_doc ----------------------------- - The Index entries are without the trailing backslash. We must add it - when printing Index. - \_cod ----------------------------- - -\_addto \_ignoredcharsen {_} % \foo, \_foo is the same in the fist pass of sorting -\_def\_printii #1#2&{% - \_ismacro\_lastii{#1}\_iffalse \_newiiletter{#1}{#2}\_def\_lastii{#1}\_fi - \_gdef\_currii{#1#2}\_the\_everyii\_noindent - \_hskip-\_iindent \_ignorespaces\_printiiA\bslash#1#2//} - -\_def\_printiipages#1&{\_let\_pgtype=\_undefined \_tmpnum=0 - {\_rm\_printpages #1,:,\_par}} - -\_sdef{_tocl:1}#1#2#3{\_nofirst\_bigskip - \_bf\_llaptoclink{#1}{#2}\_hfill \_pgn{#3}\_tocpar\_medskip} - - \_doc ----------------------------- - The \code{<something>} will be print as <something>. - \_cod ----------------------------- - -\_let\lt=< -\_catcode`\<=13 - -\_def<#1>{$\langle\hbox{\it#1\/}\rangle$} -\_everyintt{\_catcode`\<=13 } - - \_doc ----------------------------- - If this macro is loaded by \^`\load` then we need to initialize - catcodes using the `\_afteroad` macro. - \_cod ----------------------------- - -\_def\_afterload{\_catcode`\<=13 \_catcode`\`=13 } - - \_doc ----------------------------- - Main documentation points and hyperlinks to/from it. - Main documentation point: \code{\\`\\foo`}. - User-level documentation point: \code{\\^`\\foo}, first occurence only. - The next occurrences are only links to the main documentation point. - Link to user-level documentation point: \code{\\~`\\foo}. - If user-level documentation point follows the main documentation point - then use \code{\\_forwardlink\\`\\foo`}. - \_cod ----------------------------- - -\_verbchar` - -\_def\`#1`{\_leavevmode\_edef\_tmp{\_csstring#1}\_iindex{\_tmp}% - \_ifcsname cs:\_tmp\_endcsname\_else \_dest[cs:\_tmp]\_fi - \_sxdef{cs:\_tmp}{}% - \_hbox{\_ifcsname cs:^\_tmp\_endcsname - \_link[cs:^\_tmp]{\Red}{\_tt\_csstring\\\_tmp}\_else - {\_tt\Red\_csstring\\\_tmp}\_fi}% -} -\_def\_forwardlink\`#1`{{\_slet{cs:^\_csstring#1}{relax}\`#1`}} - -\_def\^`#1{\_leavevmode\_edef\_tmp{\_csstring#1}\_iindex{\_tmp}% - \_hbox{\_ifcsname cs:^\_tmp\_endcsname \_else \_dest[cs:^\_tmp]\_sxdef{cs:^\_tmp}{}\_fi - \_link[cs:\_tmp]{\Blue}{\_tt\_string#1}}% - \_futurelet\_next\_cslinkA -} -\_def\_cslinkA{\_ifx\_next`\_ea\_ignoreit \_else \_ea\_ea\_ea`\_ea\_string\_fi} - -\_def\~`#1{\_leavevmode\_edef\_tmp{\_csstring#1}\_iindex{\_tmp}% - \_hbox{\_link[cs:^\_tmp]{\Blue}{\_tt\_string#1}}% - \_futurelet\_next\_cslinkA -} - -\_endcode %------------------------------------------- - -\noindent -The \^`\printdoc` `<filename><space>` and \^`\printdoctail` `<filename><space>` -commands are defined after the file `doc.opm` is load by \^`\load`~`[doc]`. - -The `\printcoc` starts reading of given `<filename>` from the second line. -The file is read in {\em the listing mode}. -The `\prindoctail` starts reading given `<filename>` from the -first occurrence of the `\_encode`. The file is read -in normal mode (like `\input <filename>`). - -The {\em listing mode} prints the lines as a listing of a code. This mode is -finished when first {\visiblesp` \_doc`} occurs or first `\_endcode` -occurs. At least two spaces must precede before such `\_doc`. On the other -hand, the `\_encode` must be at the left edge of the line without spaces. -If this rule is not met then the listing mode continues. - -If the first line or the last line of the listing mode is empty then such -lines are not printed. The maximal number of printed lines in the listing -mode is \^`\maxlines`. It is set to almost infinity (100000). You can set it -to a more sensible value. Such a setting is valid only for the first following -listing mode. - -When the listing mode is finished by `\_doc` then the next lines are read in the -normal way, but the material between `\begtt` ... `\endtt` pair -is shifted by three letters left. The reason is that the three spaces of -indentation is recommended in the `\_doc` ... `\_cod` pair and this shifting -is compensation for this indentation. - -The `\_cod` macro ignores the rest of the current line and starts the listing -mode again. - -When the listing mode is finished by the `\_endcode` then the `\endinput` is -applied, the reading of the file opened by `\printdoc` is finished. - -You cannot reach the end of the file (without `\_endcode`) in the listing -mode. - -The listing mode creates all control sequences which are listed in the -index as an active link to the main documentation point of such control sequence -and prints them in blue. Another text is printed in black. - -The main documentation point is denoted by \code{\\`\\}`<sequence>`\code{`} -in red, for example \code{\\`\\foo`}. -The user documentation point is the first occurrence of -\code{\\^`\\}`<sequence>`\code{`}, for example \code{\\^`\\foo`}. -There can be more such markups, all of them are hyperlinks to the main -documentation point. -And main documentation point is a hyperlink to the user documentation point -if this point exists. Finally, the -\code{\\~`\\}`<sequence>`\code{`} (for example \code{\\~`\\foo`}) are -hyperlinks to the user documentation point. - -\endinput - -2020-04-28 \levevmode in \^ macros added (bug fixed) -2020-04-22 released
\ No newline at end of file diff --git a/macros/luatex/optex/base/f-adventor.opm b/macros/luatex/optex/base/f-adventor.opm deleted file mode 100644 index df22be1130..0000000000 --- a/macros/luatex/optex/base/f-adventor.opm +++ /dev/null @@ -1,22 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Adventor] \Adventor {TeX Gyre Adventor based on Avantgarde Book} - {\caps} {\rm \bf \it \bi} {} - {[texgyreadventor-regular]} - {\_def\_fontnamegen {[texgyreadventor-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/macros/luatex/optex/base/f-antt.opm b/macros/luatex/optex/base/f-antt.opm deleted file mode 100644 index 39d3d011ea..0000000000 --- a/macros/luatex/optex/base/f-antt.opm +++ /dev/null @@ -1,32 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Antykwa Torunska] \Antt {Traditional Polish font family} - {\cond \medium \light \caps} {\rm \bf \it \bi} {Pagella} - {[AntykwaTorunska-Regular]} - {\_def\_fontnamegen {[AntykwaTorunska\_sfamxV\_sfamyV-\_currV]:script=latn;\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \caps ...... caps & small caps^^J - \cond ...... condensed^^J - \medium .... medium weight^^J - \light ..... light weight^^J - \cond ...... condensed^^J -}} - -\_moddef \resetmod {\_fsetV sfamx={},sfamy={},caps={} \_fvars Regular Bold Italic BoldItalic } -\_moddef \cond {\_fsetV sfamx=Cond \_fvars Regular . Italic . - \_onlyif sfamy={}: {\_fvars Regular Bold Italic BoldItalic }} -\_moddef \medium {\_fsetV sfamy=Med \_fvars Regular . Italic . } -\_moddef \light {\_fsetV sfamy=Light \_fvars Regular . Italic . } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_loadmath{[texgyrepagella-math]} - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/macros/luatex/optex/base/f-baskerville.opm b/macros/luatex/optex/base/f-baskerville.opm deleted file mode 100644 index 4e6027d703..0000000000 --- a/macros/luatex/optex/base/f-baskerville.opm +++ /dev/null @@ -1,22 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Baskerville] \Baskerville {Free vaiants of classical Baskerville} - {\caps} {\rm \bf \it \bi} {} - {[BaskervilleF-Regular]} - {\_def \_fontnamegen {[BaskervilleF-\_currV]:script=latn;\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars Regular Bold Italic BoldItalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/macros/luatex/optex/base/f-bonum.opm b/macros/luatex/optex/base/f-bonum.opm deleted file mode 100644 index a285021b2e..0000000000 --- a/macros/luatex/optex/base/f-bonum.opm +++ /dev/null @@ -1,24 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Bonum] \Bonum {TeX Gyre Bonum fonts based on Bookman} - {\caps} {\rm \bf \it \bi} {Bonum} - {[texgyrebonum-regular]} - {\_def\_fontnamegen {[texgyrebonum-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyrebonum-math]} - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/macros/luatex/optex/base/f-comicneue.opm b/macros/luatex/optex/base/f-comicneue.opm deleted file mode 100644 index a7b9f8e002..0000000000 --- a/macros/luatex/optex/base/f-comicneue.opm +++ /dev/null @@ -1,23 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [ComicNeue] \Comicneue {Comic Neue sans serif} - {\angular} {\lf \li \rm \it \bf \bi} {} - {[ComicNeue-Regular]} - {\_def\_fontnamegen {[ComicNeue\_anguV-\_currV]:\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \angular ...... Angular ends of curves^^J -Variants:^^J - \lf (Light) \rm \bf \li (LightItalic) \it \bi^^J -}} - -\_moddef \resetmod {\_fsetV angu={} \_fvars Regular Bold RegularItalic Bolditalic } -\_moddef \angular {\_fsetV angu=Angular } -\_famvardef \lf {\_fsetV curr=Light \_rm} -\_famvardef \li {\_fsetV curr=LightItalic \_rm} - -\_initfontfamily % new font family must be initialized - -\_endcode - diff --git a/macros/luatex/optex/base/f-cursor.opm b/macros/luatex/optex/base/f-cursor.opm deleted file mode 100644 index 80b2a29457..0000000000 --- a/macros/luatex/optex/base/f-cursor.opm +++ /dev/null @@ -1,22 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Cursor] \Cursor {TeX Gyre Cursor fonts based on Courier} - {\caps} {\rm \bf \it \bi} {} - {[texgyrecursor-regular]} - {\_def \_fontnamegen {[texgyrecursor-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/macros/luatex/optex/base/f-dejavu.opm b/macros/luatex/optex/base/f-dejavu.opm deleted file mode 100644 index 76fd90c0db..0000000000 --- a/macros/luatex/optex/base/f-dejavu.opm +++ /dev/null @@ -1,31 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [DejaVu] \Dejavu {Derived from the Vera fonts} - {\sans \mono \cond \light \caps} {\rm \bf \it \bi} {TG-DejavuMath} - {[DejaVuSerif]} - {\_def\_fontnamegen {[DejaVu\_subfamV\_typfamV\_currV]:\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \sans ...... sans serif^^J - \serif ..... serif (default)^^J - \mono ...... non-proportional, only \sans^^J - \light ..... extra-light, only \sans, only \rm, others (\bf\it\bi) unchanged^^J - \cond ...... condensed (\sans or \serif, not \mono) -}} - -\_def\_BIfvars{\_fvars {} -Bold -Italic -BoldItalic } -\_def\_BOfvars{\_fvars {} -Bold -Oblique -BoldOblique } -\_moddef \resetmod {\_fsetV subfam=Serif,typfam={} \_BIfvars } -\_moddef \sans {\_fsetV subfam=Sans \_BOfvars } -\_moddef \serif {\_fsetV subfam=Serif,typfam={} \_BOfvars } -\_moddef \mono {\_fsetV subfam=Sans,typfam=Mono \_BOfvars } -\_moddef \light {\_fsetV subfam=Sans,typfam={} \_fvars -ExtraLight -Bold -Oblique -BoldOblique } -\_moddef \cond {\_fsetV typfam=Condensed } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyredejavu-math]} - -\_endcode - diff --git a/macros/luatex/optex/base/f-ebgaramond.opm b/macros/luatex/optex/base/f-ebgaramond.opm deleted file mode 100644 index 63502c9b08..0000000000 --- a/macros/luatex/optex/base/f-ebgaramond.opm +++ /dev/null @@ -1,37 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [EB Garamond] \EBGaramond {Based on Garamond} - {\medium \semibold \caps \swash} {\rm \bf \it \bi \initials} {Garamond-Math} - {[EBGaramond-Regular]} - {\_def\_fontnamegen {[EBGaramond-\_currV]:\_capsV\_swaV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \caps ...... caps & small caps^^J - \swash ..... alternative capitals for \it, \bi, only non-accented letters^^J - \medium .... medium weight^^J - \semibold .. semibold weight (only \bf, \bi are changed)^^J -Variant:^^J - \initials .. Initials, only letters ADFGLNOQT^^J -}} - -\_moddef \resetmod {\_fsetV caps={},swa={} \_fvars Regular Bold Italic BoldItalic } -\_moddef \medium {\_fvars Medium ExtraBold MediumItalic ExtraBoldItalic } -\_moddef \semibold {\_fvars Regular SemiBold Italic SemiBoldItalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } -\_moddef \swash {\_fsetV swa=+swsh; } -\_moddef \noswash {\_fsetV swa={} } - -\_famvardef \initials {\_fvars Initials . . . \rm} - - -\_initfontfamily % new font family must be initialized - -\_loadmath {[Garamond-Math]} - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/macros/luatex/optex/base/f-garamondl.opm b/macros/luatex/optex/base/f-garamondl.opm deleted file mode 100644 index d642aac98c..0000000000 --- a/macros/luatex/optex/base/f-garamondl.opm +++ /dev/null @@ -1,26 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Garamond Libre] \Garamondl {Free, derived from old style font family} - {\caps \swash} {\rm \bf \it \bi} {Garamond-Math} - {[GaramondLibre-Regular]} - {\_def\_fontnamegen - {[GaramondLibre-\_currV]:script=latn;\_capsV\_swaV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \caps ...... caps & small caps, only non-accented letters^^J - \swash ..... alternative capitals for \it, \bi, only non-accented letters^^J -}} - -\_moddef \resetmod {\_fsetV caps={},swa={} \_fvars Regular Bold Italic Bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum;-liga; } -\_moddef \nocaps {\_fsetV caps={} } -\_moddef \swash {\_fsetV swa=+swsh; } -\_moddef \noswash {\_fsetV swa={} } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[Garamond-Math]} - -\_endcode - diff --git a/macros/luatex/optex/base/f-gfsbodoni.opm b/macros/luatex/optex/base/f-gfsbodoni.opm deleted file mode 100644 index d7d3494a9d..0000000000 --- a/macros/luatex/optex/base/f-gfsbodoni.opm +++ /dev/null @@ -1,22 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [GFS Bodoni] \GFSBodoni {Based on Bodoni with greek letters} - {} {\rm \bf \it \bi} {} - {[GFSBodoni]} - {\_def\_fontnamegen{[GFSBodoni\_currV]:script=latn;\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... Caps & Small caps (only \rm)^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars {} Bold It BoldIt } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/macros/luatex/optex/base/f-heros.opm b/macros/luatex/optex/base/f-heros.opm deleted file mode 100644 index 767052cc45..0000000000 --- a/macros/luatex/optex/base/f-heros.opm +++ /dev/null @@ -1,244 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Heros] \Heros {TeX Gyre Heros fonts based on Helvetica} - {\caps \cond} {\rm \bf \it \bi} {FiraMath} - {[texgyreheros-regular]} - {\_def\_fontnamegen{[texgyreheros\_condV-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \caps ...... caps & small caps^^J - \cond ...... condensed variants^^J -}} - -\_moddef \resetmod {\_fsetV caps={},cond={} \_fvars regular bold italic bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } -\_moddef \cond {\_fsetV cond=cn } -\_moddef \nocond {\_fsetV cond={} } - -\_initfontfamily % new font family must be initialized - -\_ifmathloading - \_loadmath {[FiraMath-Regular]} - \_addto\_normalmath{\_loadumathfamily 5 {xitsmath-regular}{} } - \_addto\_boldmath {\_loadumathfamily 5 {xitsmath-bold}{} } - \_addto\frak{\_fam5 }\_addto\cal{\_fam5 } - \_normalmath - \_wterm{MATH-FONT(5): "[XITSMath-Regular/Bold]" -- used for \_string\cal, \_string\frak} - % \bf, \bi from FiraMath: - \_let\_bsansvariables=\_bfvariables - \_let\_bsansGreek=\_bfGreek - \_let\_bsansgreek=\_bfgreek - \_let\_bsansdigits=\_bfdigits - \_let\_bisansvariables=\_bivariables - \_let\_bisansgreek=\_bigreek -\_fi - -\_endcode - -The font family file declares the font family for selecting fonts from this -family at the arbitrary size and with various shapes. Unicode fonts (OTF) -are preferred. The following example declares the Heros family: - -\printdoc f-heros.opm - -If you want to write such a font family file, you need to keep the following rules. - -\begitems -* Use the \^`\_famdecl` command first. It has the following syntax: -\begtt \catcode`\<=13 -\_famdecl [<Name of family>] \<Familyselector> {<comments>} - {<modifiers>} {<variant selectors>} {<comments about math fonts>} - {<font-for-testing>} - {\_def\_fontnamegen{<font name or font file name generated>}} -\endtt - This writes information about font family at the - terminal and prevents loading such file twice. Moreover, it probes - existence of `<font-for-testing>` in your system. If it doesn't exist, the - file loading is skipped with a warning on the terminal. - The \^`\_ifexistfam` macro returns false in this case. - The \^`\_fontnamegen` macro must be defined in the last parameter of the - \^`\_famdecl`. More about it is documented below. -* You can use `\_wlog{\_detokenize{...` to write additional information into a log file. -* You can declare optical sizes using \~`\_regoptsizes` if there are more font files - with different optical sizes (like in Latin Modern). See `f-lmfonts.opm` - file for more information about this special feature. -* Declare font modifiers using \~`\moddef` if they are present. The \`\resetmod` - must be declared in each font family. -* Check if all your declared modifiers do not produce any space in - horizontal mode. For example check: `X\caps Y`, the letters `XY` must - be printed without any space. -* Optionally, declare new variants by the \^`\famvardef` macro. -* Run `\_initfontfamily` to start the family (it is mandatory). -* If math font should be loaded, use `\_loadmath{<math font>}`. -\enditems - -{\noindent \bf The \`\_fontnamegen` macro} -(declared in the last parameter of the \^`\_famdecl`) -must expand (at the expand processor level only) to a file name of the loaded font (or to its font -name) and to optional font features appended. The Font Selection -System uses this macro at the primitive level in the following sense: - -\begtt \catcode`\<=13 -\font \<selector> {\_fontnamegen} \_sizespec -\endtt -% -Note that the extended `\font` syntax -`\font\<selector> {<font name>:<font features>} <size spec.>` or -`\font\<selector> {[<font file name>]:<font features>} <size spec.>` -is expected here. - -\seccc Example 1 - -Assume an abstract font family with fonts `xx-Regular.otf`, -`xx-Bold.otf`, `xx-Italic.otf` and `xx-BoldItalic.otf`. Then you can declare -the \^`\resetmod` (for initializing the family) by: -\begtt -\_moddef\resetmod{\_fvars Regular Bold Italic BoldItalic } -\endtt -and define the \^`\_fontnamegen` in the last parameter of the \^`\_famdecl` by: -\begtt -\_famdecl ... - {\def\_fontnamegen{[xx-\_currV]}} -\endtt -The following auxiliary macros are used here: -\begitems -* \^`\moddef` declares the family dependent modifier. The \^`\resetmod` saves - initial values for the family. -* \^`\_fvars` saves four names to the memory, they are used by the \^`\_currV` macro. -* \^`\_currV` expands to one of the four names dependent on `\rm` or `\bf` or - `\it` or `\bi` variant is required. -\enditems -Assume that the user needs `\it` variant in this family. Then the -`\_fontnamegen` macro expands to `[xx-\_currV]` and it expands to -`[xx-Italic]`. The Font Selection System uses `\font {[xx-Italic]}`. -This command loads the `xx-Italic.otf` font file. - -See more advanced examples are in `f-<family>.opm` files. - -\seccc Example 2 - -The `f-heros.opm` is listed here. Look at it. -When Heros family is selected and `\bf` is asked then -`\font {[texgyreheros-bold]:+tlig;} at10pt` -is processed. - -You can use any expandable macros or expandable primitives in the `\_fontnamegen` -macro. The simple macros in our example with names `\_<word>V` are preferred. They -expand typically to their content. The macro \^`\_fsetV` `<word>=<content>` -(terminated by a space) is equivalent to `\def\_<word>V{<content>}` and you -can use it in font modifiers. You can use the \^`\_fsetV` macro in more -general form: - -\begtt \catcode`\<=13 - \_fsetV <word-a>=<value-a>,<word-b>=<value-b> ...etc. terminated by a space -\endtt -% -with obvious result `\def\_<word-a>V {<value-a>}\def\_<word-b>V {<value-b>}` etc. - -\seccc Example 3 - -If both font modifiers `\caps`, `\cond` were applied in Heros -family, then `\def\_capsV{+smcp;+onum}` and `\def\_condV{cn}` were processed -by these font modifiers. If a user needs the `\bf` variant at 11\,pt now then -the - -\begtt - \font {[texgyreheroscn-bold]:+smcp;+onum;+tlig;} at11pt -\endtt -% -is processed. We assume that a font file `texgyreheroscn-bold.otf` is present -in your \TeX/ system. - -\seccc The \code{\\_onlyif} macro - -has the syntax \^`\_onlyif` `<word>=<value-a>,<value-b>,...<value-n>: {<what>}`. It can -be used inside `\moddef` as simple IF statement: the `<what>` is processed only -if `<word>` has `<value-a>` or `<value-b>` \dots or `<value-n>`. See -`f-roboto.opm` for examples of usage of many `\_onlyif`'s. - -Recommendation: use the \^`\_fontfeatures` macro at the end of the `\_fontnamegen` -macro in order to the \^`\setff`, \^`\setfontcolor`, \^`\setletterspace` -macros can work. - -\seccc The \code{\\moddef} macro - -has the syntax \^`\moddef\<modifier>{<what to do>}`. It does more things than simple `\_def`: - -\begitems -* The modifier macros are defined as `\_protected`. -* The modifier macros are defined as family-dependent. -* If the declared control sequence is defined already (and it is not a font - modifier) then it is re-defined with a warning. -\enditems -\noindent -The \^`\famvardef` macro has the same features. - -\bigskip -{\noindent\bf The `\<Familyselector>`} -is defined by the \^`\_famdecl` macro as: -\begtt \catcode`<=13 -\protected\def\<Familyselector> {% - \_def\_currfamily {<Familyselector>}% - \_def\_fontnamegen {...}% this is copied from 7-th parameter of \_famdecl - \resetmod - <run all family-dependent font modifiers used before Familyselector without warnings> -\endtt - -{\noindent\bf The \^`\_initfontfamily`}\nl -must be run after modifier's decaration. -It runs the `\<Familyselector>` and it runs `\_rm`, -so the first font from the new family is loaded and it is ready to use it. - -\seccc Name conventions - -Create font modifiers, new variants, and the `\<Familyselector>` only as public, i.e. -in user namespace without `_` prefix. We assume that if a user re-defines them then he/she needs -not them, so we have no problems. If the user's definition was done before loading -the font family file then it is re-defined and \OpTeX/ warns about it. See the end of -section~\ref[fontcommands]. - -The name of `\<Familyselector>` should begin with an uppercase letter. - -Please, look at -\ulink[http://petr.olsak.net/ftp/olsak/optex/op-catalog.pdf]{\OpTeX/ font catalogue} -before you will create your font family file and use the same names for -analogical font modifiers (like `\cond`, `\caps`, `\sans`, `\mono` etc.)\ -and for extra variant selectors (like `\lf`, `\li`, `\kf`, `\ki` etc.\ used in -Roboto font family). - -If you are using the same font modifier names to analogical font shapes then -such modifiers are kept when the family is changed. For example: - -\begtt -\fontfam [Termes] \fontfam[Heros] -\caps\cond\it Caps+Cond italic in Heros \Termes\currvar Caps italic in Termes. -\endtt -% -The family selector first resets all modifiers data by -\^`\resetmod` and then it tries to run all currently used family-dependent modifiers -before the family switching (without warnings if such modifier is -unavailable in the new family). -In this example, `\Termes` does `\resetmod` followed by `\caps\cond`. -The `\caps` is applied and `\cond` is silently ignored in Termes family. - -If you need to declare your private modifier (because it is used in other -modifiers or macros, for example), use the name `\_wordM`. You can be -sure that such a name does not influence the private namespace used by \OpTeX/. - -\seccc Additional notes - -See the font family file `f-libertine-s.opm` which is another example where no -font files but font names are used. - -See the font family file `f-lmfonts.opm` or `f-poltawski.opm` where you can find the -the example of the optical sizes declaration including documentation about -it. - -If you need to create a font family file with a non-Unicode font, you can do it. -The `\_fontnamegen` must expand to the name of TFM file in this case. But we -don't prefer such font family files, because they are usable only with -languages with alphabet subset to ISO-8859-1 (Unicodes are equal to letter's -codes of such alphabets), but middle or east Europe use languages where -such a condition is not true. diff --git a/macros/luatex/optex/base/f-kerkis.opm b/macros/luatex/optex/base/f-kerkis.opm deleted file mode 100644 index 4bc31ead65..0000000000 --- a/macros/luatex/optex/base/f-kerkis.opm +++ /dev/null @@ -1,32 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Kerkis] \Kerkis {Free Bookman alternative with Greek letters} - {\semibold \sans \sanssemi \caps} {\rm \bf \it \bi \calli} {} - {[Kerkis]} - {\_def\_fontnamegen {[Kerkis\_currV]:script=latn;\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \semibold .. semibold weight (changed only \bf, \bi)^^J - \caps ...... caps & small caps (only \rm \bf, bad accents in \bf)^^J - \sans ...... sans serif^^J - \sanssemi .. semibold sans serif (only \rm, accented letters not available)^^J -Variant:^^J - \calli ..... Calligraphic (only upercase, lowercase letters equal to Italic)^^J -}} - -\_moddef \resetmod {\_fvars {} -Bold -Italic -BoldItalic } -\_moddef \semibold {\_fvars {} -SemiBold -Italic -SemiBold-Italic } -\_moddef \caps {\_fvars -SmallCaps.otf -BoldSmallCaps . . } -\_moddef \sans {\_fvars Sans Sans-Bold Sans-Italic Sans-BoldItalic } -\_moddef \sanssemi {\_fvars Sans-SmallCaps . . . } - -\_famvardef \calli {\_fvars -Calligraphic . . . \rm} - - -\_initfontfamily % new font family must be initialized - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. diff --git a/macros/luatex/optex/base/f-kpfonts.opm b/macros/luatex/optex/base/f-kpfonts.opm deleted file mode 100644 index c030bea8e8..0000000000 --- a/macros/luatex/optex/base/f-kpfonts.opm +++ /dev/null @@ -1,45 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [KP Fonts] \Kpfonts {KP fonts -- Johannes Kepler project} - {\sans \mono \light \caps \swash} {\rm \bf \it \bi} {KpMath} - {[KpRoman-Regular]} - {\_def\_fontnamegen {[Kp\_subfamV-\_currV]:\_capsV\_swaV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \sans ...... sans serif^^J - \mono ...... non-proportional^^J - \light ..... light (\rm, \it) + semibold (\bf, \bi) variants^^J - \caps ...... caps & small caps^^J - \swash ..... alternative Q letter^^J -}} - -\_def\_RBIfvars{\_fvars Regular Bold Italic BoldItalic } -\_moddef \resetmod {\_fsetV subfam=Roman,caps={},swa={} \_RBIfvars } -\_moddef \sans {\_fsetV subfam=Sans \_RBIfvars } -\_moddef \mono {\_fsetV subfam=Mono \_RBIfvars } -\_moddef \light {\_fsetV subfam=Roman \_fvars Light Semibold LightItalic SemiboldItalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } -\_moddef \swash {\_fsetV swa=+swsh; } -\_moddef \noswash {\_fsetV swa={} } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[KpMath-Regular]} -\_loadboldmath {[KpMath-Bold]} \to {[KpMath-Regular]} - -\_endcode - -The KP fonts family includes more variants of Math fonts. -Only Regular / Bold pair is loaded as default. - -There are alternatives: - -\doloadmath \loadmath {KpMath-Light} -\loadboldmath {[KpMath-Semibold]} \to {[KpMath-Light]} - -or - -\doloadmath \loadmath {KpMath-Sans} - diff --git a/macros/luatex/optex/base/f-libertine-s.opm b/macros/luatex/optex/base/f-libertine-s.opm deleted file mode 100644 index 3cdc089312..0000000000 --- a/macros/luatex/optex/base/f-libertine-s.opm +++ /dev/null @@ -1,50 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Linux Libertine] \Libertine {Free Linux Libertine fonts} - {\sans \mono \caps} {\rm \bf \it \bi \initials \displ \keybr} {} - {Linux Libertine O} - {\_def\_fontnamegen {Linux \_mainfamV\_V\_subfamV O/\_currV:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers^^J - \sans ...... smaller serifs^^J - \caps ...... caps & small caps^^J -Special variants:^^J - \initials .. special initials (only uppercase letters)^^J - \displ ..... display variant, suitable at big sizes^^J - \mono ...... non-proportional^^J - \keybr ..... keyboard, emulates keyboard buttons^^J -}} - -\_moddef \resetmod {\_fsetV mainfam=Libertine,subfam={},caps={} \_fvars {} B I BI } -\_moddef \sans {\_fsetV mainfam=Biolinum,subfam={} } -\_moddef \mono {\_fsetV mainfam=Libertine,subfam={Mono } \_fvars {} . . . } -\_moddef \caps {\_fsetV caps=+smcp; } -\_moddef \nocaps {\_fsetV caps={} } - -\_famvardef \initials {\_fsetV mainfam=Libertine,subfam={Initials } \_fvars {} . . . \rm} -\_famvardef \displ {\_fsetV mainfam=Libertine,subfam={Display } \_fvars {} . . . \rm} -\_famvardef \keybr {\_fsetV mainfam=Biolinum,subfam={Keyboard } \_fvars {} . . . \rm} - -\_initfontfamily % new font family must be initialized - -\_endcode - -This is another example where the font names (no font files) are declared. -Linux Libertine font is typically installed on Linux systems. -The \_V macro generates a space. We provide following fonts: - -normal: "Linux Libertine O:\_fontfeatures" - "Linux Libertine O/B:\_fontfeatures" - "Linux Libertine O/I:\_fontfeatures" - "Linux Libertine O/BI:\_fontfeatures" -mono : "Linux Libertine Mono O:\_fontfeatures" -sans: "Linux Biolinum O:\_fontfeatures" - "Linux Biolinum O/B:\_fontfeatures" - "Linux Biolinum O/I:\_fontfeatures" - "Linux Biolinum O/BI:\_fontfeatures" -special: "Linux Libertine Initials O:\_fontfeatures" - "Linux Libertine Display O:\_fontfeatures" - "Linux Biolinum Keyboard O:\_fontfeatures" - -Another file f-libertine.opm declares Linux Libertine family from font files.
\ No newline at end of file diff --git a/macros/luatex/optex/base/f-libertine.opm b/macros/luatex/optex/base/f-libertine.opm deleted file mode 100644 index b25c2fc4f9..0000000000 --- a/macros/luatex/optex/base/f-libertine.opm +++ /dev/null @@ -1,60 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Linux Libertine] \Libertine {Free Linux Libertine fonts} - {\sans \mono \caps \semibold} {\rm \bf \it \bi \initials \displ \keybr} {Libertinus} - {[LinLibertine_R]} - {\_def\_fontnamegen {[Lin\_subfamV _\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \sans ...... smaller serifs^^J - \mono ...... non-proportional^^J - \semibold .. semi-bold variants (changed only \bf, \bi)^^J - \caps ...... caps & small caps^^J% -Special variants:^^J - \initials .. special initials (only uppercase letters)^^J - \displ ..... display variant, suitable at big sizes^^J - \keybr ..... keyboard, emulates keyboard buttons^^J -}} - -\_moddef \resetmod {\_fsetV subfam=Libertine,caps={} \_fvars R RB RI RBI } -\_moddef \sans {\_fsetV subfam=Biolinum \_fvars R RB RI RBO } -\_moddef \mono {\_fsetV subfam=Libertine \_fvars M MB MO MBO } -\_moddef \semibold {\_fsetV subfam=Libertine \_fvars R RZ RI RZI } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } - -\_famvardef \initials {\_fsetV subfam=Libertine \_fvars I . . . \rm} -\_famvardef \displ {\_fsetV subfam=Libertine \_fvars DR . . . \rm} -\_famvardef \keybr {\_fsetV subfam=Biolinum \_fvars K . . . \rm} - -\_initfontfamily % new font family must be initialized - -\_loadmath {[LibertinusMath-Regular]} - -\_endcode - -This file declares Linux Libertine font family from font files. The -following fonts are provided: - -normal: "[LinLibertine_R]:\_fontfeatures" - "[LinLibertine_RB]:\_fontfeatures" - "[LinLibertine_RI]:\_fontfeatures" - "[LinLibertine_RBI ]:\_fontfeatures" - "[LinLibertine_RZI]:\_fontfeatures" - "[LinLibertine_RZ]:\_fontfeatures" -mono: "[LinLibertine_M]:\_fontfeatures" - "[LinLibertine_MB]:\_fontfeatures" - "[LinLibertine_MO]:\_fontfeatures" - "[LinLibertine_MBO]:\_fontfeatures" -sans: "[LinBiolinum_RB]:\_fontfeatures" - "[LinBiolinum_RBO]:\_fontfeatures" - "[LinBiolinum_R]:\_fontfeatures" - "[LinBiolinum_RI]:\_fontfeatures" -special: "[LinLibertine_I]:\_fontfeatures" - "[LinLibertine_DR]:\_fontfeatures" - "[LinBiolinum_K]:\_fontfeatures" - -See an alternative `f-libertine-s.opm` where the same font family is -declared using font names used in operating system. - diff --git a/macros/luatex/optex/base/f-libertinus.opm b/macros/luatex/optex/base/f-libertinus.opm deleted file mode 100644 index 5f1329d286..0000000000 --- a/macros/luatex/optex/base/f-libertinus.opm +++ /dev/null @@ -1,36 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Libertinus] \Libertinus {Free fonts derived from Linux Libertine} - {\semibold \sans \caps} {\rm \bf \it \bi \mono \initials \displ \keybr} {Libertinus} - {[LibertinusSerif-Regular]} - {\_def\_fontnamegen {[Libertinus\_subfamV-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \semibold .. semi-bold variants, changed only \bf, \bi^^J - \sans ...... smaller serifs, only \rm, \bf \it^^J - \caps ...... caps & small caps^^J% -Special variants:^^J - \mono ..... non-proportional - \initials .. special initials (only uppercase letters)^^J - \displ ..... display variant, suitable at big sizes^^J - \keybr ..... keyboard, emulates keyboard buttons^^J -}} - -\_moddef \resetmod {\_fsetV subfam=Serif,caps={} \_fvars Regular Bold Italic BoldItalic } -\_moddef \semibold {\_fsetV subfam=Serif \_fvars Regular Semibold Italic SemiboldItalic } -\_moddef \sans {\_fsetV subfam=Sans \_fvars Regular Bold Italic . } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } - -\_famvardef \mono {\_fsetV subfam=Mono \_fvars Regular . . . \_rm} -\_famvardef \initials {\_fsetV subfam=SerifInitials \_fvars Regular . . . \_rm} -\_famvardef \displ {\_fsetV subfam=SerifDisplay \_fvars Regular . . . \_rm} -\_famvardef \keybr {\_fsetV subfam=Keyboard \_fvars Regular . . . \_rm} - -\_initfontfamily % new font family must be initialized - -\_loadmath {[LibertinusMath-Regular]} - -\_endcode - diff --git a/macros/luatex/optex/base/f-librecaslon.opm b/macros/luatex/optex/base/f-librecaslon.opm deleted file mode 100644 index 53f61834f1..0000000000 --- a/macros/luatex/optex/base/f-librecaslon.opm +++ /dev/null @@ -1,22 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [LibreCaslon] \Librecaslon {Libre Caslon Text, inspired by Caslon} - {\onum} {\rm \bf \it \bi} {Termes} - {[LibreCaslonText-Regular]} - {\_def\_fontnamegen {[Libre\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \onum ...... oldstyle figures^^J -}} - -\_moddef \resetmod {\_fsetV caps={},csl={CaslonText} - \_fvars \_cslV-Regular \_cslV-Bold \_cslV-Italic Csln-Bolditalic } -\_moddef \onum {\_fsetV caps=+onum; } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyretermes-math]} - -\_endcode - diff --git a/macros/luatex/optex/base/f-lido.opm b/macros/luatex/optex/base/f-lido.opm deleted file mode 100644 index 13b4cb7628..0000000000 --- a/macros/luatex/optex/base/f-lido.opm +++ /dev/null @@ -1,48 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Lido] \Lido {by StormType Foundry designed for "lidove noviny"} - {\cond} {\rm \bf \mf \mi \it \bi} {Termes} - {[LidoSTF]} - {\_def\_fontnamegen {[LidoSTF\_condV\_currV]:script=latn;\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Variants:^^J - \rm \bf \it \bi ... classical variants^^J - \mf \mi .... medium regular and medium italics (between normal and bold)^^J -Modifiers:^^J - \cond ...... condensed (italic is not avalable for \cond variants)^^J - \medium .... sets \mf \bf \mi \bi family -}} - -\_moddef \resetmod {\_fsetV caps={},cond={},ital=Italic \_fvars {} Bold {\_italV} {Bold\_italV} } -\_moddef \medium {\_fvars Medium Bold {Medium\_italV} {Bold\_italV} } -\_moddef \cond {\_fsetV cond=Condensed,ital={} } - -\_famvardef \mf {\_fvars Medium . . . \_rm} -\_famvardef \mi {\_fvars . . {Medium\_italV} . \_it} - - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyretermes-math]} - -\_endcode - -This font family Lido by Storm Type Foundry was designed for Lidove noviny -newspaper. It is similar to Times but it is not Times. - -The Lido font family supports 6 standard selectors - -\rm Regular \it Italics -\mf Medium-Regular \mi Medium-Italics -\bf Bold-Regular \bi Bold-Italics - -and three Condensed variants: - -\cond \rm Condensed - \mf Condensed-Medium - \bf Condensed-Bold - -The italic variants are missing when \cond is selected. This means that -\cond\it does the same as \cond\rm etc. - diff --git a/macros/luatex/optex/base/f-lmfonts.opm b/macros/luatex/optex/base/f-lmfonts.opm deleted file mode 100644 index 13865890e2..0000000000 --- a/macros/luatex/optex/base/f-lmfonts.opm +++ /dev/null @@ -1,186 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Latin Modern] \LMfonts {TeX Gyre fonts based on Coputer Modern} - {\roman \sans \quotset \ttset \ttprop \ttlight \ttcond \upital - \dunhill submods:\caps \slant \nbold \bolder} {\rm \bf \it \bi \tt} {LM} - {[lmroman10-regular]} - {\_def\_fontnamegen {[\_optname{lm\_subfamV.\_currV}]:\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers (selects subfamily):^^J - \modreset .. implicit values (serif, bold extended, nocaps)^^J - \sans ...... sans serif subfamily^^J - \quotset ... quotation subfamily^^J - \ttset ..... typewriter subfamily^^J - \ttprop .... proportional typewriter-like subfamily^^J - \ttlight ... light typewriter subfamily^^J - \ttcond .... condensed typewriter subfamily^^J - \upital .... upright italic (only \rm)^^J - \dunhill ... dunhill roman subfamily (only \rm, \it)^^J% -Sub-modifiers (selects special variants of given subfamily):^^J - \caps ...... caps & small caps (available only at limited shapes)^^J - \slant ..... slanted (default in some subfamilies)^^J - \nbold ..... normal bold (extended bold is default)^^J - \bolder .... extended bold^^J -}} - -\_def\_LMregfont #1 #2 #3{% - \_edef\_tmp {\_noexpand\_regoptsizes #1 #2 \_ea\_detokenize\_ea{#3}}% - \_lowercase\_ea{\_tmp}% OTF file names are lowercase -} -\_def \_regoptFS {5 <5.5 6 <6.5 7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <15 17 <*} -\_def \_regoptFT {5 <5.5 6 <6.5 7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <*} -\_def \_regoptST {7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <*} -\_def \_regoptES {8 <8.5 9 <9.5 10 <11.1 12 <15 17 <*} -\_def \_regoptET {8 <8.5 9 <9.5 10 <11.1 12 <*} -\_def \_regoptT {10 <*} -\_def \_regoptE {8 <*} - -\_LMregfont lmrm.r LMRoman?-Regular \_regoptFS % 5-17 -\_LMregfont lmrm.bx LMRoman?-Bold \_regoptFT % 5-12 -\_LMregfont lmrm.i LMRoman?-Italic \_regoptST % 7-12 -\_LMregfont lmrm.bxi LMRoman?-BoldItalic \_regoptT % 10 -\_LMregfont lmrm.isl LMRomanSlant?-Regular \_regoptES % 8-17 -\_LMregfont lmrm.bxisl LMRomanSlant?-Bold \_regoptT % 10 -\_LMregfont lmrm.b LMRomanDemi?-Regular \_regoptT % 10 -\_LMregfont lmrm.bi LMRomanDemi?-Oblique \_regoptT % 10 - -\_LMregfont lmss.r LMSans?-Regular \_regoptES % 8-17 -\_LMregfont lmss.bx LMSans?-Bold \_regoptT % 10 -\_LMregfont lmss.i LMSans?-Oblique \_regoptES % 8-17 -\_LMregfont lmss.bxi LMSans?-BoldOblique \_regoptT % 10 -\_LMregfont lmss.b LMSansDemiCond?-Regular \_regoptT % 10 -\_LMregfont lmss.bi LMSansDemiCond?-Oblique \_regoptT % 10 - -\_LMregfont lmsq.r LMSansQuot?-Regular \_regoptE % 8 -\_LMregfont lmsq.b LMSansQuot?-Bold \_regoptE % 8 -\_LMregfont lmsq.i LMSansQuot?-Oblique \_regoptE % 8 -\_LMregfont lmsq.bi LMSansQuot?-BoldOblique \_regoptE % 8 - -\_LMregfont lmtt.r LMMono?-Regular \_regoptET % 8-12 -\_LMregfont lmtt.b LMMonoLt?-Bold \_regoptT % 10 -\_LMregfont lmtt.i LMMono?-Italic \_regoptT % 10 -\_LMregfont lmtt.bi LMMonoLt?-BoldOblique \_regoptT % 10 -\_LMregfont lmtt.isl LMMonoSlant?-Regular \_regoptT % 10 -\_optfontalias {lmtt.bisl} {lmtt.bi} - -\_LMregfont lmtp.r LMMonoPropLt?-Regular \_regoptT % 10 -\_LMregfont lmtp.bx LMMonoPropLt?-Bold \_regoptT % 10 -\_LMregfont lmtp.i LMMonoPropLt?-Oblique \_regoptT % 10 -\_LMregfont lmtp.bxi LMMonoPropLt?-BoldOblique \_regoptT % 10 -\_LMregfont lmtp.b LMMonoProp?-Regular \_regoptT % 10 -\_LMregfont lmtp.bi LMMonoProp?-Oblique \_regoptT % 10 - -\_LMregfont lmtl.r LMMonoLt?-Regular \_regoptT % 10 -\_LMregfont lmtl.i LMMonoLt?-Oblique \_regoptT % 10 - -\_LMregfont lmtc.r LMMonoLtCond?-Regular \_regoptT % 10 -\_LMregfont lmtc.i LMMonoLtCond?-Oblique \_regoptT % 10 - -\_LMregfont lmrm.rc LMRomanCaps?-Regular \_regoptT % 10 -\_LMregfont lmrm.ic LMRomanCaps?-Oblique \_regoptT % 10 -\_LMregfont lmtt.rc LMMonoCaps?-Regular \_regoptT % 10 -\_LMregfont lmtt.ic LMMonoCaps?-Oblique \_regoptT % 10 - -\_LMregfont lmmu.r LMRomanUnsl?-Regular \_regoptT % 10 -\_LMregfont lmdu.r LMRomanDunh?-Regular \_regoptT % 10 -\_LMregfont lmdu.sl LMRomanDunh?-Oblique \_regoptT % 10 - -% main modifiers (they select a subfamily) -\_moddef \resetmod {\_fsetV subfam=rm \_fvars r bx i bxi } -\_moddef \sans {\_fsetV subfam=ss \_fvars r bx i bxi } -\_moddef \quotset {\_fsetV subfam=sq \_fvars r b i bi } -\_moddef \ttset {\_fsetV subfam=tt \_fvars r b i bi } -\_moddef \ttprop {\_fsetV subfam=tp \_fvars r b i bi } -\_moddef \ttlight {\_fsetV subfam=tl \_fvars r . i . } -\_moddef \ttcond {\_fsetV subfam=tc \_fvars r . i . } -\_moddef \upital {\_fsetV subfam=mu \_fvars r . . . } -\_moddef \dunhill {\_fsetV subfam=du \_fvars r . sl . } - -% submodifiers (they select special vaiants in a subfamily) -\_moddef \nbold {\_onlyif subfam=rm,ss,tp: {\_fvars r b i bi }} -\_moddef \bolder {\_onlyif subfam=rm,ss,tp: {\_fvars r bx i bxi }} -\_moddef \slant {\_onlyif subfam=rm: {\_fvars r bx isl bxisl }% - \_onlyif subfam=tt: {\_fvars r b isl bisl }} -\_moddef \caps {\_onlyif subfam=rm,tt: {\_fvars rc . ic . }} - -\_def \_tryloadtt {\_fontdef\_tentt{\_LMfonts \_addto\_fontfeatures{-tlig;}\_ttset \_rm}} -\_private \LMfonts \ttset ; % used in \_tryloadtt - -\_initfontfamily % new font family must be initialized - -\_loadmath {[latinmodern-math]} - -\_endcode - -\secc How to write the font family file with optical sizes - -You can use \^`\_optname` macro when `\_fontnamegen` in expanded. This macro is fully -expandable and its input is `<internal-template>` and its output is a -part of the font file name `<size-dependent-template>` with respect to given -optical size. - -You can declare a collection of `<size-dependent-template>`s for one -given `<internal-template>` by the \^`\_regoptsizes` macro. -The syntax is shown for one real case: - -\begtt -\_regoptsizes lmr.r lmroman?-regular - 5 <5.5 6 <6.5 7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <15 17 <* -\endtt - -In general: - -\begtt \catcode`\<=13 -\_regoptsizes <internal-template> <general-ouput-template> <resizing-data> -\endtt - -Suppose our example above. Then `\_optname{lmr.r}` expands to -lmroman?-regular where the question mark is substituted by a number -depending on current `\_optsize`. If the `\_optsize` lies between two boundary -values (they are prefixed by \code{<} character) then the number written between -them is used. For example if $11.1 \lt `\_optsize` \le 15$ then 12 is -substituted instead question mark. The <resizing-data> virtually begins -with zero \code{<0}, but it is not explicitly written. The right part of -<resizing-data> must be terminated by \code{<*} which means "less than infinity". - -If `\_optname` gets an argument which is not registered <internal-template> -then it expands to `\_failedoptname` which typically ends with an error message -about missing font. You can redefine `\_failedoptname` macro to some -existing font if you find it useful. - -We are using a special macro `\_LMregfont` in `f-lmfonts.opm`. -It sets the file names to -lowercase and enables us to use shortcuts instead of real <resizing-data>. -There are shortcuts `\_regoptFS`, `\_regoptT`, etc. here. The collection of -`<internal-templates>` are declared, each of them covers a collection of real -file names. - -The \^`\_optfontalias` `{<new-template>} {<internal-template>}` declares -`<new-template>` with the same meaning as previously declared -`<internal-template>`. - -The `\_optname` macro can be used even if no otical sizes are provided by -a font family. Suppose that font file names are much more chaotic (because -artists are very creative people), so you need to declare more systematic -`<internal-templates>` and do an alias from each `<internal-template>` to -`<real-font-name>`. For example, you can do it as follows: - -\begtt -\def\fontalias #1 #2 {\_regoptsizes #1 ?#2 {} <*} -% alias name real font name -\fontalias crea-a-regular {Creative Font} -\fontalias crea-a-bold {Creative FontBold} -\fontalias crea-a-italic {Creative olique} -\fontalias crea-a-bolditalic {Creative Bold plus italic} -\fontalias crea-b-regular {Creative Regular subfam} -\fontalias crea-b-bold {Creative subfam bold} -\fontalias crea-b-italic {Creative-subfam Oblique} -\fontalias crea-b-bolditalic {Creative Bold subfam Oblique} -\endtt - -Another example of a font family with optical sizes is Antykwa Półtawskiego. -The optical sizes feature is deactivated by default and it is switched on by -`\osize` font modifier: - -\printdoc f-poltawski.opm diff --git a/macros/luatex/optex/base/f-merriweather.opm b/macros/luatex/optex/base/f-merriweather.opm deleted file mode 100644 index f2972aaafd..0000000000 --- a/macros/luatex/optex/base/f-merriweather.opm +++ /dev/null @@ -1,33 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Merriweather] \Merriweather {Modern shapes, sharp serifs} - {\caps \sans \serif} {\lf \li \rm \bf \it \bi \kr \ki} {} - {[Merriweather-Regular]} - {\_def\_fontnamegen {[Merriweather\_sansV-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \sans ...... sans serif^^J - \serif ..... variants with serifs (default)^^J - \caps ...... caps & small caps^^J - \nocaps .... no \caps^^J% -Extended variants:^^J - \lf \li .... Light, LightItalic^^J - \kf \ki .... Black, BlackItalic^^J -}} - -\_moddef \resetmod {\_fsetV caps={},sans={} \_fvars Regular Bold Italic BoldItalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } -\_moddef \sans {\_fsetV sans=Sans } -\_moddef \serif {\_fsetV sans={} } - -\_famvardef \lf {\_fsetV curr=Light \_rm} -\_famvardef \li {\_fsetV curr=LightItalic \_rm} -\_famvardef \kf {\_fsetV curr=ExtraBold \_onlyif sans={}: {\_fsetV curr=Black }\_rm} -\_famvardef \ki {\_fsetV curr=ExtraBoldItalic \_onlyif sans={}: {\_fsetV curr=BlackItalic }\_rm} - -\_initfontfamily % new font family must be initialized - -\_endcode - diff --git a/macros/luatex/optex/base/f-pagella.opm b/macros/luatex/optex/base/f-pagella.opm deleted file mode 100644 index a0e4eb8e30..0000000000 --- a/macros/luatex/optex/base/f-pagella.opm +++ /dev/null @@ -1,24 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Pagella] \Pagella {TeX Gyre Pagella fonts based on Palatino} - {\caps} {\rm \bf \it \bi} {Pagella} - {[texgyrepagella-regular]} - {\_def\_fontnamegen {[texgyrepagella-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyrepagella-math]} - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/macros/luatex/optex/base/f-poltawski.opm b/macros/luatex/optex/base/f-poltawski.opm deleted file mode 100644 index ffc7e8474d..0000000000 --- a/macros/luatex/optex/base/f-poltawski.opm +++ /dev/null @@ -1,34 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Poltawski] \Poltawski {Antykwa Poltawskiego, Polish traditional font family} - {\light \noexpd \expd \eexpd \cond \ccond \osize \caps} {\rm \bf \it \bi} {} - {[antpolt-regular]} - {\_def\_fontnamegen {[antpolt\_liV\_condV-\_currV]\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \light ..... light weight, \bf,\bi=semibold^^J - \noexpd .... no expanded, no condensed, designed for 10pt size (default)^^J - \eexpd ..... expanded, designed for 6pt size^^J - \expd ...... semi expanded, designed for 8pt size^^J - \cond ...... semi condensed, designed for 12pt size^^J - \ccond ..... condensed, designed for 17pt size^^J - \osize ..... auto-sitches between \ccond \cond \noexpd \expd \eexpd by size^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV li={},cond={},caps={} \_fvars regular bold italic bolditalic } -\_moddef \light {\_fsetV li=lt } -\_moddef \noexpd {\_fsetV cond={} } -\_moddef \eexpd {\_fsetV cond=expd } -\_moddef \expd {\_fsetV cond=semiexpd } -\_moddef \cond {\_fsetV cond=semicond } -\_moddef \ccond {\_fsetV cond=cond } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } -\_moddef \osize {\_def\_fontnamegen{[antpolt\_liV\_optname{x}-\_currV]:\_capsV\_fontfeatures}% - \_regoptsizes x ? expd <7 semiexpd <9 {} <11.1 semicond <15 cond <*} - -\_initfontfamily % new font family must be initialized - -\_endcode diff --git a/macros/luatex/optex/base/f-roboto.opm b/macros/luatex/optex/base/f-roboto.opm deleted file mode 100644 index 51dfffff25..0000000000 --- a/macros/luatex/optex/base/f-roboto.opm +++ /dev/null @@ -1,59 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Roboto] \Roboto {Geometric grotesk, thin variants included} - {\cond \mono \ttset \thin \light \normal \bolder \caps} - {\tf \ti \lf \li \rm \it \mf \mi \bf \bi \kf \ki} {} - {[Roboto-Regular]} - {\_def\_fontnamegen {[Roboto\_subV-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers (subfamilies):^^J - \cond ...... Condensed variants (no Thin, Medium, Black)^^J - \mono ...... Monospaced variants [Mono] (no Black)^^J - \ttset ..... Typewriter-like variants [Slab] (no Italic, no Medium, Black)^^J% -Modifiers (face weight):^^J - \thin ...... \rm, \it = Thin, \bf, \bi = Normal^^J - \light ..... \rm, \it = Light, \bf, \bi = Medium^^J - \normal .... \rm, \it = Normal, \bf, \bi = Bold^^J - \bolder .... \rm, \it = Medium, \bf, \bi = Black^^J% -Modifiers (Caps):^^J - \caps ...... Caps & small Caps^^J - \nocaps .... no \caps^^J% -Extended variants:^^J - \tf \ti .... Thin, ThinItalic^^J - \lf \li .... Light, LightItalic^^J - \mf \mi .... Medium, MediumItalic^^J - \kf \ki .... Black, BlackItalic^^J -}} - -\_moddef \resetmod {\_fsetV caps={},sub={},w=n \_fvars Regular Bold Italic BoldItalic } -\_moddef \mono {\_fsetV sub=Mono \_onlyif w=b: {\normal}} -\_moddef \cond {\_fsetV sub=Condensed \_onlyif w=b: {\normal}\_onlyif w=t: {\light}} -\_moddef \ttset {\_fsetV sub=Slab \_fvars Regular Bold . . } - -\_moddef \thin {\_onlyif sub={},Mono: {\_fsetV w=t \_fvars Thin Regular ThinItalic Italic }% - \_onlyif sub=Slab: {\_fsetV w=t \_fvars Thin Regular . . }} -\_moddef \light {\_onlyif sub={},Mono: {\_fsetV w=l \_fvars Light Medium LightItalic MediumItalic }% - \_onlyif sub=Condensed: {\_fsetV w=l \_fvars Light Regular LightItalic Italic }% - \_onlyif sub=Slab: {\_fsetV w=l \_fvars Light Bold . . }} -\_moddef \normal {\_fsetV w=n \_fvars Regular Bold Italic BoldItalic - \_onlyif sub=Slab: {\_fvars Regular Bold . . }} -\_moddef \bolder {\_onlyif sub={}: {\_fsetV w=b \_fvars Medium Black MediumItalic BlackItalic }} - -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } - -\_famvardef \tf {\_thinM \_rm} -\_famvardef \ti {\_thinM \_it} -\_famvardef \lf {\_lightM \_rm} -\_famvardef \li {\_lightM \_it} -\_famvardef \mf {\_bolderM \_rm} -\_famvardef \mi {\_bolderM \_it} -\_famvardef \kf {\_bolderM \_bf} -\_famvardef \ki {\_bolderM \_bi} -\_let\_thinM=\thin \_let\_lightM=\light \_let\_bolderM=\bolder - -\_initfontfamily % new font family must be initialized - -\_endcode - diff --git a/macros/luatex/optex/base/f-schola.opm b/macros/luatex/optex/base/f-schola.opm deleted file mode 100644 index 067a6d0ce2..0000000000 --- a/macros/luatex/optex/base/f-schola.opm +++ /dev/null @@ -1,24 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Schola] \Schola {TeX Gyre Schola fonts based on New Century} - {\caps} {\rm \bf \it \bi} {Schola} - {[texgyreschola-regular]} - {\_def\_fontnamegen {[texgyreschola-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyreschola-math]} - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/macros/luatex/optex/base/f-sourcepro.opm b/macros/luatex/optex/base/f-sourcepro.opm deleted file mode 100644 index a8e847104e..0000000000 --- a/macros/luatex/optex/base/f-sourcepro.opm +++ /dev/null @@ -1,39 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Source Pro] \Sourcepro {SourceSerifPro,SourceSansPro,SourceCodePro} - {\serif \sans \mono \light \elight \bolder \medium \caps} {\rm \bf \it \bi} {Termes} - {[SourceSerifPro-Regular]} - {\_def\_fontnamegen {[Source\_typfV Pro-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \serif ..... Serif family (default)^^J - \sans ...... Sans family^^J - \mono ...... Code family^^J - \light ..... \rm=Light, \bf=Semibold^^J - \elight .... \rm=Extra light, \bf=Regular^^J - \bolder .... \rm=Semibold, \bf=Black^^J - \medium .... \rm=Medium, \bf=Bold (only for \mono family)^^J - \caps ...... caps & small caps, only for \sans (\serif: only \rm,\bf)^^J -}} - -\_moddef \resetmod {\_fsetV typf=Serif,caps={} \_fvars Regular Bold RegularIt BoldIt } -\_moddef \serif {\_fsetV typf=Serif } -\_moddef \sans {\_fsetV typf=Sans } -\_moddef \mono {\_fsetV typf=Code } -\_moddef \light {\_fvars Light Semibold LightIt SemiboldIt } -\_moddef \elight {\_fvars ExtraLight Regular ExtraLightIt RegularIt } -\_moddef \bolder {\_fvars Semibold Black SemiboldIt BlackIt } -\_moddef \medium {\_fsetV typf=Code \_fvars Medium Bold MediumIt BoldIt } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } -\_moddef \nocaps {\_fsetV caps={} } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyretermes-math]} - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/macros/luatex/optex/base/f-technika.opm b/macros/luatex/optex/base/f-technika.opm deleted file mode 100644 index 77b894e53b..0000000000 --- a/macros/luatex/optex/base/f-technika.opm +++ /dev/null @@ -1,31 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Technika] \Technika {Fonts from visual style of CTU in Prague} - {\caps \light} {\rm \bf \it \bi \stencil} {} - {[Technika-Regular]} - {\_def\_fontnamegen {[Technika\_stencilV-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \light ..... ligher variants: \rm\bf=light \bf\bi=normal^^J - \book ...... semi-ligher variants: \rm\bf=book \bf\bi=bold^^J - \caps ...... caps & small caps^^J% -Special variant:^^J - \stencil ... dashed leters (only uppercase)^^J -}} - -\_moddef \resetmod {\_fsetV stencil={},caps={} \_fvars Regular Bold Italic BoldItalic } -\_moddef \light {\_fsetV stencil={} \_fvars Light Regular LightItalic Italic } -\_moddef \book {\_fsetV stencil={} \_fvars Book Bold BookItalic BoldItalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_famvardef \stencil {\_fsetV stencil=Stencil \_fvars Bold . Bold . \rm} - - -\_initfontfamily % new font family must be initialized - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/macros/luatex/optex/base/f-termes.opm b/macros/luatex/optex/base/f-termes.opm deleted file mode 100644 index 8cd6ee6d8a..0000000000 --- a/macros/luatex/optex/base/f-termes.opm +++ /dev/null @@ -1,24 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [Termes] \Termes {TeX Gyre Termes fonts based on Times} - {\caps} {\rm \bf \it \bi} {Termes} - {[texgyretermes-regular]} - {\_def\_fontnamegen {[texgyretermes-\_currV]:\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifier:^^J - \caps ...... caps & small caps^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_loadmath {[texgyretermes-math]} - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/macros/luatex/optex/base/f-xcharter.opm b/macros/luatex/optex/base/f-xcharter.opm deleted file mode 100644 index 9ad886d47f..0000000000 --- a/macros/luatex/optex/base/f-xcharter.opm +++ /dev/null @@ -1,24 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_famdecl [XCharter] \XCharter {An extension of Bitstream Charter} - {\caps \slant} {\rm \bf \it \bi} {} - {[XCharter-Roman]} - {\_def\_fontnamegen {[XCharter-\_currV]:script=latn;\_capsV\_fontfeatures}} - -\_wlog{\_detokenize{% -Modifiers:^^J - \caps ...... caps & small caps^^J - \slant ..... slanted variants used in \it, \bi^^J -}} - -\_moddef \resetmod {\_fsetV caps={} \_fvars Roman Bold Italic BoldItalic } -\_moddef \slant {\_fvars Roman Bold Slanted BoldSlanted } -\_moddef \caps {\_fsetV caps=+smcp;+onum; } - -\_initfontfamily % new font family must be initialized - -\_endcode - -See the file `f-heros.opm` for information about principles of such -font-macro-files. - diff --git a/macros/luatex/optex/base/fams-ini.opm b/macros/luatex/optex/base/fams-ini.opm deleted file mode 100644 index 3c8ded975e..0000000000 --- a/macros/luatex/optex/base/fams-ini.opm +++ /dev/null @@ -1,214 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% Version <2020-02-28>. Loaded in format and secondly on demand by \fontfam[catalog] - -\_famtext {Special name for printing a catalog :} - -\_faminfo [Catalogue] {Catalogue of all registered font families} {fonts-catalog} {} -\_famalias [Catalog] - -\_famtext {Computer Modern like family:} - -\_famfrom {GUST} -\_faminfo [Latin Modern] {TeX Gyre fonts based on Coputer Modern} {f-lmfonts} - { -,\nbold,\sans,\sans\nbold,\slant,\ttset,\ttset\slant,\ttset\caps,% - \ttprop,\ttprop\bolder,\quotset: {\rm\bf\it\bi} - \caps: {\rm\it} - \ttlight,\ttcond,\dunhill: {\rm\it} \upital: {\rm} } -\_famalias [LMfonts] \_famalias [Latin Modern Fonts] \_famalias [lm] - -\_famtext {TeX Gyre fonts based on Adobe 35:} - -\_faminfo [Termes] {TeX Gyre Termes fonts based on Times} {f-termes} - { -,\caps: {\rm\bf\it\bi} } -\_famalias [Times] - -\_faminfo [Heros] {TeX Gyre Heros fonts based on Helvetica} {f-heros} - { -,\caps,\cond,\caps\cond: {\rm\bf\it\bi} } -\_famalias [Helvetica] - -\_faminfo [Adventor] {TeX Gyre Adventor based on Avantgarde Book} {f-adventor} - { -,\caps: {\rm\bf\it\bi} } -\_famalias [Avantgarde Book] - -\_faminfo [Bonum] {TeX Gyre Bonum fonts based on Bookman} {f-bonum} - { -,\caps: {\rm\bf\it\bi} } -\_famalias [Bookman] - -\_faminfo [Pagella] {TeX Gyre Pagella fonts based on Palatino} {f-pagella} - { -,\caps: {\rm\bf\it\bi} } -\_famalias [Palatino] - -\_faminfo [Schola] {TeX Gyre Schola fonts based on New Century} {f-schola} - { -,\caps: {\rm\bf\it\bi} } -\_famalias [New Century] - -\_faminfo [Cursor] {TeX Gyre Cursor fonts based on Courier} {f-cursor} - { -,\caps: {\rm\bf\it\bi} } -\_famalias [Courier] - -\_famtext {Other fonts:} - -\_famfrom {Philipp H. Poll} -\_faminfo [Linux Libertine] {Free fonts typically installed on systems} {f-libertine} - { -: {\rm\bf\it\bi} \semibold: {\bf\bi} - \caps,\sans,\mono,\caps\sans: {\rm\bf\it\bi} -: {\initials\displ\keybr} } -\_famalias [Libertine] \_famalias [LinLibertine] - -\_famfrom {Philipp H. Poll, Khaled Hosny} -\_faminfo [Libertinus] {Free fonts derived from Linux Libertine} {f-libertinus} - { -: {\rm\bf\it\bi} \semibold: {\bf\bi} \sans: {\rm\bf\it} - \caps: {\rm\bf\it\bi} \caps\semibold: {\bf\bi} \caps\sans: {\rm\bf\it} - -: {\mono\initials\displ\keybr} } - -\_famfrom {Daniel Flipo} -\_faminfo [KP fonts] {KP fonts -- Johannes Kepler project} {f-kpfonts} - { -,\light,\sans,\mono, \caps, \caps\light, \caps\sans,\caps\mono,\swash: {\rm\bf\it\bi} } -\_famalias [KP] - -\_famfrom {DejaVu fonts team} -\_faminfo [DejaVu] {Derived from the Vera fonts} {f-dejavu} - { -,\cond,\sans,\sans\cond,\mono: {\rm\bf\it\bi} \light: {\rm} } - -\_famfrom {Zygfryd Gardzielewski, Janusz M. Nowacki} -\_faminfo [Antykwa Torunska] {Traditional Polish font family} {f-antt} - { -,\cond,\caps, \caps\cond: {\rm\bf\it\bi} - \medium,\cond\medium, \light, \cond\light:{\rm\it} } -\_famalias [Antt] - -\_famfrom {Adam Półtawski, Janusz M. Nowacki, Bogusław Jackowski and Piotr Strzelczyk} -\_faminfo [Poltawski] {Antykwa Poltawskiego, Polish traditional font family} {f-poltawski} - { \ccond,\cond,-,\expd,\eexpd, - \light\ccond,\light\cond,\light,\light\expd,\light\eexpd, - \caps: {\rm\bf\it\bi} } -\_famalias [Antykwa Poltawskiego] \_famalias [Poltawskiego] \_famalias [APoltawskiego] - -\_famfrom {Michael Sharpe} -\_faminfo [Baskerville] {Free variants of classical Baskerville} {f-baskerville} - { -,\caps: {\rm\bf\it\bi} } -\_famalias [BaskervilleF] - -\_famfrom {Georg Duffner, Octavio Pardo} -\_faminfo [EB Garamond] {Free variants of classical Garamond} {f-ebgaramond} - { -,\caps,\medium,\medium\caps,\semibold,\semibold\caps: {\rm\bf\it\bi} - \swash: {\it\bi} -: {\initials} } -\_famalias [Garamond] - -\_famfrom {George Douros, Benjamin Miller} -\_faminfo [Garamond Libre] {Free, derived from old style font family} {f-garamondl} - { -,\caps: {\rm\bf\it\bi} \swash: {\it\bi} } -\_famalias [GaramondL] - -\_famfrom {Pablo Impallari, Rodrigo Fuenzalida} -\_faminfo [LibreCaslon] {Libre Caslon Text, inspired by Caslon} {f-librecaslon} - { -,\onum: {\rm\bf\it\bi} } -\_famalias [Caslon] - -\_famfrom {Adobe, Paul D. Hunt} -\_faminfo [Source Pro] {Adobe SourceSerifPro, SourceSansPro, SourceCodePro} {f-sourcepro} - { \elight,\light,-,\bolder: {\rm\it} -,\bolder: {\bf\bi} - \sans\elight,\sans\light,\sans,\sans\bolder: {\rm\it} \sans,\sans\bolder: {\bf\bi} - \elight\caps,\light\caps,\caps,\bolder\caps: {\rm} \caps,\bolder\caps: {\bf} - \sans\elight\caps,\sans\light\caps,\sans\caps,\sans\bolder\caps: {\rm\it} - \sans\caps,\sans\bolder\caps: {\bf\bi} - \mono\elight,\mono\light,\mono,\mono\medium,\mono\bolder: {\rm\it} \mono,\mono\bolder: {\bf\bi} - } -\_famalias [AdobeSource] \_famalias [AdobeSourcePro] - -\_famfrom {Uni. of the Aegean} -\_faminfo [Kerkis] {Free Bookman alternative with Greek letters} {f-kerkis} - { -,\sans: {\rm\bf\it\bi} \caps: {\rm\bf} \semibold: {\bf\bi} - \sanssemi: {\rm} -:{\calli} } - -\_famfrom {Craig Rozynski} -\_faminfo [ComicNeue] {Comic Neue sans serif} {f-comicneue} - { -,\angular: {\lf\li\rm\it\bf\bi} } - -\_famfrom {Eben Sorkin} -\_faminfo [Merriweather] {Modern shapes, sharp serifs} {f-merriweather} - { -,\sans: {\lf\li\rm\it\bf\bi\kf\ki} \caps,\sans\caps: {\rm\it} } - -\_famfrom {Google, Christian Robertson} -\_faminfo [Roboto] {Geometric grotesk, thin variants included} {f-roboto} - { -: {\tf\ti\lf\li\rm\it\mf\mi\bf\bi\kf\ki} - \cond: {\lf\li\rm\it\bf\bi} - \mono: {\tf\ti\lf\li\rm\it\mf\mi\bf\bi} - \ttset: {\tf\lf\rm\bf} - \caps, \caps\cond: {\rm\bf\it\bi} \caps\ttset: {\rm\bf} - } - -\_famfrom {CTU in Prague, Roman Cernohous} -\_faminfo [Technika] {Fonts from visual style of CTU in Prague} {f-technika} - { -,\light,\book, \caps, \caps\book: {\rm\bf\it\bi} -:{\stencil} } -\_famalias [CTU Technika] - -\_famfrom {Bitstream, Andrey V. Panov, Michael Sharpe} -\_faminfo [XCharter] {An extension of Bitstream Charter} {f-xcharter} - { -,\slant,\caps,\caps\slant: {\rm\bf\it\bi} } - -\_famfrom {George Matthiopoulos, Greek Font Society} -\_faminfo [GFSBodoni] {Based on Bodoni with greek letters} {f-gfsbodoni} - { -: {\rm\bf\it\bi} \caps: {\rm} } - -\_endcode - -Once you have prepared a font family file with the name `f-<famname>.opm` and -\TeX/can see it in your filesystem then you can type \^`\fontfam``[<famname>]` and -the file is read, so the information about the font family is loaded. The name -`<famname>` must be lowercase and without spaces in the file name -`f-<famname>.opm`. On the other hand, the `\fontfam` command is more tolerant: -you can write uppercase letters and spaces here. The spaces are ignored and -uppercase letters are converted to lowercase. -For example `\fontfam [LM Fonts]` is equivalent to `\fontfam [LMfonts]` and both -commands load the file `f-lmfonts.opm`. - -You can use your font file in sense of the previous paragraph without -registering it. But problem is that such families are not listed when -`\fontfam[?]` is used and it is not included in the font catalog when -`\fontfam[catalog]` is printed. The list of families taken in the catalog and -listed on the terminal is declared in two files: `fams-ini.opm` and -`fams-local.opm`. The second file is optional. Users can create it and write to -it the information about user-defined families using the same syntax as in -existed file `fams-ini.opm`. - -The information from the user's `fams-local.opm` file has precedence. -For example `fams-ini.opm` declares aliases Times$\to$Termes etc. If you -have the original Times purchased from Adobe then you can register your -declaration of Adobe's Times family in `fams-local.opm`. When a user writes -`\fontfam[Times]` then the original Times (not Termes) is used. - -The `fams-ini.opm` and `fams-local.opm` files use the macros -`\_famifo`, `\_famalias` and `\_famtext`. See the example from -`fams-ini.tex`: - -{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip} - \def\docfile{fams-ini.opm} -\verbinput (3-28) fams-ini.opm -... etc. -} -\medskip - -The \^`\_faminfo` commad has the syntax: -\begtt \catcode`\<=13 -\_faminfo [<Family Name>] {<comments>} {<file-name>} - { <mod-plus-vars> } -\endtt -% -The `<mod-plus-vars>` data is used only when printing the catalog. It consists of -one or more pairs `<mods>: {<vars>}`. -For each pair: each modifier (separated by comma) is applied to each -variant selector in <vars> -and prepared samples are printed. The `-` character means no modifiers -should be applied. - -The \^`\_famalias` declares an alias to the last -declared family. - -The \^`\_famtext` writes a line to the terminal and the log file when all -families are listed. - -The \^`\_famfrom` saves the information about font type foundry or -manufacturer or designer or license owner. You can use it before `\_faminfo` -to print `\_famfrom` info into the catalog. -The `\_famfrom` data is applied to each following declared families until new -`\_famfrom` is given. Use `\_famfrom {}` if the information is not known. diff --git a/macros/luatex/optex/base/fnotes.opm b/macros/luatex/optex/base/fnotes.opm deleted file mode 100644 index 612b32a17d..0000000000 --- a/macros/luatex/optex/base/fnotes.opm +++ /dev/null @@ -1,191 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \fnote {Footnotes, marginal notes OpTeX <2020-05-26>} % loaded in format - - \_doc ----------------------------- - \`\_gfnotenum` is a counter which counts footnotes globally in the whole document.\nl - \`\_lfnotenum` is a counter which counts footnotes at each chapter from one. - It is used for local page footnote counters too.\nl - \`\_ifpgfnote` says that footnote numbers are counted on each page from - one. We need to run `\openref` in this case.\nl - \`\fnotenum` is a macro that expands to footnote number counted in declared part.\nl - \`\fnotenumchapters` declares footnotes numbered in each chapter from one - (default), \`\fnotenumglobal` declares footnotes numbered in whole - document from one and \`\fnotenumpages` declares footnotes numbered - at each page from one. - \_cod ----------------------------- - -\_newcount\_gfnotenum \_gfnotenum=0 -\_newcount\_lfnotenum - -\_newifi \_ifpgfnote -\_def \_fnotenumglobal {\_def\_fnotenum{\_the\_gfnotenum}\_pgfnotefalse} -\_def \_fnotenumchapters {\_def\_fnotenum{\_the\_lfnotenum}\_pgfnotefalse} -\_def \_fnotenumpages {\_def\_fnotenum{\_trycs{_fn:\_the\_gfnotenum}{?}}\_pgfnotetrue} -\_fnotenumchapters % default are footnotes counted from one in each chapter -\_def \fnotenum{\_fnotenum} -\_public \fnotenumglobal \fnotenumchapters \fnotenumpages ; -\_let \runningfnotes = \fnotenumglobal % for backward compatibility - - \_doc ----------------------------- - The \`\_printfnotemark` prints the footnote mark. You can re-define this - macro if you want another design of footnotes. For example - \begtt - \fnotenumpages - \def \_printfnotemark {\ifcase 0\fnotenum\or - *\or**\or***\or$^\mathbox{†}$\or$^\mathbox{‡}$\or$^\mathbox{††}$\fi} - \endtt - This code gives footnotes* and ** and*** and$^\mathbox{†}$ etc.\ - and it supposes that there are no more than 6 footnotes at one page. - - If you want to distinguish between footnote marks in the text and in the front of - the footnote itself, then you can define `\_printfnotemarkA` and `\_printfnotemarkB`. - - The \`\fnotelinks``<colorA><colorB>` implements the hyperlinked footnotes - (from text to footnote and backward). - \_cod ----------------------------- - -\_def \_printfnotemark {$^{\_fnotenum}$} % default footnote mark -\_def \_printfnotemarkA {\_printfnotemark} % footnote marks used in text -\_def \_printfnotemarkB {\_printfnotemark} % footnote marks used in front of footnotes - -\_def \_fnotelinks#1#2{% <inText color> <inFootnote color> - \_def\_printfnotemarkA{\_link[fnt:\_the\_gfnotenum]{\_localcolor#1}{\_printfnotemark}% - \_dest[fnf:\_the\_gfnotenum]}% - \_def\_printfnotemarkB{\_link[fnf:\_the\_gfnotenum]{\_localcolor#2}{\_printfnotemark}% - \_dest[fnt:\_the\_gfnotenum]}% -} -\public \fnotelinks ; - - \_doc ---------------------------- - Each footnote saves the \`\_Xfnote` (without parameter) to the `.ref` - file (if `\openref`). We can create the mapping from `<gfnotenum>` to`<pgfnotenum>` - in the macro `\_fn:<fnotenum>`. Each \^`\_Xpage` macro sets the - `\_lfnotenum` to zero. - \_cod ---------------------------- - -\_def \_Xfnote {\_incr\_lfnotenum \_incr\_gfnotenum - \_sxdef{_fn:\_the\_gfnotenum}{\_the\_lfnotenum}} - - \_doc ---------------------------- - The \`\fnote` `{<text>}` macro is simple, \`\fnotemark` and \^`\fnotetext` - does the real work. - \_cod ---------------------------- - -\_def\_fnote{\_fnotemark1\_fnotetext} -\_def\_fnotemark#1{{\_advance\_gfnotenum by#1\_advance\_lfnotenum by#1\_relax \_printfnotemarkA}} - - \_doc ---------------------------- - The \`\fnotetext` calls \^`\_opfootnote` which is equivalent to plain \TeX/ - \^`\vfootnote`. It creates new data to Insert \^`\footins`. The only - difference is that we can propagate a macro parameter into the Insert group - before the text is printed (see section \ref[output]). - This propagated macro is \`\_fnset` which sets smaller fonts. - - Note that \^`\vfootnote` and \^`\_opfootnote` don't read the text as a - parameter but during the normal horizontal mode. This is the reason why catcode - changes (for example in-line verbatim) can be used here. - \_cod ---------------------------- - -\_def\_fnotetext{\_incr\_gfnotenum \_incr\_lfnotenum % global increment - \_ifpgfnote \_openref \_fi - \_wref \_Xfnote{}% - \_ifpgfnote \_ifcsname _fn:\_the\_gfnotenum \_endcsname \_else - \_opwarning{unknown \_noexpand\fnote mark. TeX me again}% - \_incr\_unresolvedrefs - \_fi\_fi - \_opfootnote\_fnset\_printfnotemarkB -} -\_def\_fnset{\_everypar={}\_scalemain \_typoscale[800/800]} - -\_public \fnote \fnotemark \fnotetext ; - - \_doc ----------------------------- - By default \`\mnote``{<text>}` are in right margin at odd pages and they are in left - margin at even pages. The `\mnote` macro saves its position to `.ref` - file as \`\_Xmnote` without parameter. We define `\_mn:<mnotenum>` as - `\right` or `\left` when the `.ref` file is read. - The `\ifnum 0`$\le$`0#2` trick returns true if `<pageno>` has a numeric type and false - if it is a non-numeric type (Roman numeral, for example). We prefer to use - `<pageno>`, but only if it has the numeric type. We use `<gpageno>` in other cases. - \_cod ----------------------------- - -\_newcount\_mnotenum \_mnotenum=0 % global counter of mnotes -\_def \_Xmnote {\_incr\_mnotenum \_ea \_XmnoteA \_currpage} -\_def \_XmnoteA #1#2{% #1=<gpageno> #2=<pageno> - \_sxdef{_mn:\_the\_mnotenum}{\_ifodd\_numtype{#2}{#1} \_right \_else \_left \_fi}} -\_def \_numtype #1#2{\_ifnum 0<0#1 #1\_else #2\_fi} - - \_doc ----------------------------- - User can declare \`\fixmnotes``\left` or \^`\fixmnotes``\right`. It defines - \`\_mnotesfixed` as `\_left` or `\_right` which declares the placement - of all marginal notes and such declaration has a precedence. - \_cod ----------------------------- - -\_def \_fixmnotes #1{\_edef\_mnotesfixed{\_cs{_\_csstring #1}}} -\_public \fixmnotes ; - - \_doc ----------------------------- - The \`\_mnoteD``{<text>}` macro sets the position of the marginal note. - The outer box of marginal note has zero width and zero depth and it is appended - after current line using `\vadjust` primitive or it is inverted to vertical mode - as a box with `\vskip-\baselineskip` followed. - \_cod ----------------------------- - -\_def\_mnote #1#{\_ifx^#1^\_else \_mnoteC#1\_end \_fi \_mnoteD} -\_def\_mnoteC up#1\_end{\_mnoteskip=#1\_relax} % \mnote up<dimen> {<text>} syntax -\_long\_def\_mnoteD#1{\_ifvmode {\_mnoteA{#1}}\_nobreak\_vskip-\_baselineskip \_else - \_lower\_dp\_strutbox\_hbox{}\_vadjust{\_kern-\_dp\_strutbox \_mnoteA{#1}\_kern\_dp\_strutbox}% - \_fi -} -\_public \mnote ; - - \_doc ----------------------------- - The \`\mnoteskip` is a dimen value that denotes the vertical shift of marginal - note from its normal position. A positive value means shift up, negative - down. The `\mnoteskip` register is set to zero - after the marginal note is printed. The new syntax `\mnote up<dimen>{<text>}` - is possible too, but public `\mnoteskip` is kept for backward compatibility. - \_cod ----------------------------- - -\_newdimen\_mnoteskip -\_public \mnoteskip ; - - \_doc ----------------------------- - The \`\_mnoteA` macro does the real work. The \`\_lrmnote``{<left>}{<right>}` - uses only first or only second parameter depending on the left or right - marginal note. - \_cod ----------------------------- - -\_long\_def\_mnoteA #1{\_incr\_mnotenum - \_ifx\_mnotesfixed\_undefined - \_ifcsname _mn:\_the\_mnotenum \_endcsname - \_edef\_mnotesfixed{\_cs{_mn:\_the\_mnotenum}}% - \_else - \_opwarning{unknown \_noexpand\mnote side. TeX me again}\_openref - \_incr\_unresolvedrefs - \_def\_mnotesfixed{\_right}% - \_fi\_fi - \_hbox to0pt{\_wref\_Xmnote{}\_everypar={}% - \_lrmnote{\_kern-\_mnotesize \_kern-\_mnoteindent}{\_kern\_hsize \_kern\_mnoteindent}% - \_vbox to0pt{\_vss \_setbox0=\_vtop{\_hsize=\_mnotesize - \_lrmnote{\_leftskip=0pt plus 1fill \_rightskip=0pt} - {\_rightskip=0pt plus 1fil \_leftskip=0pt}% - {\_the\_everymnote\_noindent#1\_endgraf}}% - \_dp0=0pt \_box0 \_kern\_mnoteskip \_global\_mnoteskip=0pt}\_hss}% -} -\_def \_lrmnote#1#2{\_ea\_ifx\_mnotesfixed\_left #1\_else #2\_fi} - - \_doc ----------------------------- - We don't want to process `\fnote`, `\fnotemark`, `\mnote` in TOC, headlines - nor outlines. - \_cod ----------------------------- - -\_regmacro {\_def\fnote#1{}} {\_def\fnote#1{}} {\_def\fnote#1{}} -\_regmacro {\_def\fnotemark#1{}} {\_def\fnotemark#1{}} {\_def\fnotemark#1{}} -\_regmacro {\_def\mnote#1{}} {\_def\mnote#1{}} {\_def\mnote#1{}} - -\_endcode % ------------------------------------- - -2020-05-26 \mnote up<dimen> implemented -2020-03-20 released diff --git a/macros/luatex/optex/base/fonts-catalog.opm b/macros/luatex/optex/base/fonts-catalog.opm deleted file mode 100644 index 3cd02e7b27..0000000000 --- a/macros/luatex/optex/base/fonts-catalog.opm +++ /dev/null @@ -1,136 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \_undefined {Font catalogue <2020-02-26>} % loaded on demand by \fontfam[catalog] - -\_tracinglostchars=1 % only to log file -\_initunifonts -\_begingroup - -\_istoksempty\_catalogmathsample \_iftrue \_noloadmath \_fi -\_font\_ttfixed=[LMMono10-Regular]\_relax -\_fontlet\_smalltt=\_ttfixed at7pt -\_suppressfontnotfounderror=1 - -\_lowercase\_ea{\_ea\_def\_ea\_cataloglist\_ea{\_the\_catalogonly}} -\_lowercase\_ea{\_ea\_def\_ea\_catalognolist\_ea{\_the\_catalogexclude}} - -\_ifx\_cataloglist\_empty \_else - \_addto\_cataloglist{ } - \_edef\_cataloglist{\_ea\_removespaces\_cataloglist{} } -\_fi -\_ifx\_catalognolist\_empty \_else - \_addto\_catalognolist{ } - \_edef\_catalognolist{\_ea\_removespaces\_catalognolist{} } -\_fi - -\_def\_faminfo [#1]#2#3#4{% - \_bgroup - \_lowercase{\_edef\_famname{\_ea\_removespaces #1 {} }}% - \_edef\_act{\_noexpand\_isinlist{,\_cataloglist,}{,\_famname,}}\_act - \_iftrue \def\_cataloglist{}\_fi - \_edef\_act{\_noexpand\_isinlist{,\_catalognolist,}{,\_famname,}}\_act - \_iftrue \def\_cataloglist{.}\_fi - \_ifx\_cataloglist\_empty - \_ifx^#4^\_else - \_bigskip {\_ttfixed\_string\fontfam [#1] -- (#2)\_par} - \_input #3.opm - \_ifexistfam \_nobreak\_medskip \_dosamples #4:{} - \_ifx\_mathfaminfo\_empty - \_else \_istoksempty\_catalogmathsample - \_iftrue {\_ttfixed \$Default math font\$: \_mathfaminfo \_par} - \_else Default math font (\_mathfaminfo): \_the\_catalogmathsample \_par - \_fi\_fi - \_else {\_qquad\_ttfixed ... family skipped, fonts not found in your system.} - \_fi\_fi\_fi - \_egroup -} -\_def\_dosamples #1:#2{\_ifx^#2^\_else - \_def\_printvars{#2}% - \_ea\_dosamplesA\_romannumeral-`\.#1,,% - \_ea\_dosamples\_fi -} -\_def\_dosamplesA#1,{% - \_ifx^#1^\_else - \_ifx-#1\_def\_usemodifiers{}\_else \_def\_usemodifiers{#1}\_fi - \_ea \_dosamplesB \_printvars \_relax - \_ea \_dosamplesA \_fi -} -\_def\_dosamplesB#1{% - \_ifx\_relax#1 \_else - {\_ttfixed \_detokenize\_ea{\_usemodifiers}\_detokenize{#1}\_unskip:} - {\_usemodifiers #1\_ea\_ifx\_the\_font \_nullfont - \_ttfixed ... This font isn't available in your system.% - \_else \_the\_catalogsample \_fi }\_par - \_ea \_dosamplesB \_fi -} - -\_def\_wlog#1{\_nobreak\_smallskip - \_hbox to\_hsize{\_hskip25pt - \_edef\_tmp{#1}\_replstring\_tmp{^^J}{\_par}% - \_smalltt \_noindent \_ea \string \_csname \_currfamily\_endcsname - \_vtop{\leftskip=1em \_baselineskip=9pt \_tmp \_par}\_hss - \_if\_relax\_the\_famfrom\_relax \_else from: \_the\_famfrom \_fi - } -} - -\_def\0#1{\_ifnum#1<10 0\_fi\_the#1} -\_footline={\_hfil\_ttfixed\_the\_pageno\_hfil} -\_headline={\_ttfixed Font Catalogue generated by \_OpTeX/ \_hfill \_the\_year-\0\_month-\0\_day} -\_parindent=0pt -\_ttfixed - -\_input fams-ini.opm - -\_isfile {fams-local.opm}\_iftrue \_famfrom{}\_input fams-local.opm \_fi - -\_endgroup - -\parindent=0pt - -\nonum\sec Customization of the catalog - - -You can redeclare the printed sample of each font by: - -\begtt -\catalogsample={Hello world!} -\endtt - -before \code{\\fontfam[catalog]} command is used. You can specify -\code{\\catalogmathsample} if you want to show default math fonts too, for example - -\begtt -\catalogmathsample={Gamma function is defined as - $$ - \Gamma(z) = \int_0^\infty x^{z-1} e^{-x}{\rm d}x, \quad \Re(z)>0. - $$} -\endtt -% -The \code{\\catalogmathsample} is empty by default, so math fonts are not loaded, -only the family of default math font is listed. - -\bigskip -You can restrict the families to be printed in the catalog by: - -\begtt -\catalogonly={Termes, Latin Modern, Heros} -\endtt - -If the \code{\\catalogonly} is empty (this is default value) then all families are -printed but families listed in the \code{\\catalogexclude} are excluded. For example - -\begtt -\catalogexclude={Latin Modern, XCharter} -\endtt - -The \code{\\cataogexclude} is empty by default. - -\bigskip The font families printed in the catalogue must be declared by the -\code{\\_faminfo} command in the file \code{fams-ini.opm} (declarations used -as default for \OpTeX/) or in the file \code{fams-local.opm}. The second file -does not exist by default but users can create it. The syntax rules are -described in the \code{fams-ini.opm} file. - - -\_endcode % ------------------------------------- - diff --git a/macros/luatex/optex/base/fonts-opmac.opm b/macros/luatex/optex/base/fonts-opmac.opm deleted file mode 100644 index 3ae2f0c5e1..0000000000 --- a/macros/luatex/optex/base/fonts-opmac.opm +++ /dev/null @@ -1,226 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \typosize {Font managing macros from OPmac <2021-03-10>} % loaded in format - - \_doc ----------------------------- - \`\typosize` `[<font-size>/<baselineskip>]` sets given parameters. - It sets text font size by the \^`\setfontsize` macro and math font sizes - by setting internal macros \^`\_sizemtext`, \^`\_sizemscript` and - \^`\_sizemsscript`. It uses common concept font sizes: 100\,\%, - 70\,\% and 50\,\%. - The \^`\_setmainvalues` sets the parameters as main values when - the `\_typosize` is called first. - \_cod ----------------------------- - -\_protected\_def \_typosize [#1/#2]{% - \_textfontsize{#1}\_mathfontsize{#1}\_setbaselineskip{#2}% - \_setmainvalues \_ignorespaces -} -\_protected\_def \_textfontsize #1{\_if$#1$\_else \_setfontsize{at#1\_ptunit}\_fi} - -\_def \_mathfontsize #1{\_if$#1$\_else - \_tmpdim=#1\_ptunit - \_edef\_sizemtext{\_ea\_ignorept \_the\_tmpdim \_ptmunit}% - \_tmpdim=0.7\_tmpdim - \_edef\_sizemscript{\_ea\_ignorept \_the\_tmpdim \_ptmunit}% - \_tmpdim=#1\_ptunit \_tmpdim=0.5\_tmpdim - \_edef\_sizemsscript{\_ea\_ignorept \_the\_tmpdim \_ptmunit}% - \_fi -} -\_public \typosize ; - - \_doc ----------------------------- - \`\typoscale` `[<font-factor>/<baseline-factor>]` scales - font size and baselineskip by given factors in respect to current values. - It calculates the \^`\typosize` parameters and runs the \^`\typosize`. - \_cod ----------------------------- - -\_protected\_def \_typoscale [#1/#2]{% - \_ifx$#1$\_def\_tmp{[/}\_else - \_settmpdim{#1}\_optsize - \_edef\_tmp{[\_ea\_ignorept\_the\_tmpdim/}\_fi - \_ifx$#2$\_edef\_tmp{\_tmp]}\_else - \_settmpdim{#2}\_baselineskip - \_edef\_tmp{\_tmp \_ea\_ignorept\_the\_tmpdim]}\_fi - \_ea\_typosize\_tmp -} -\_def\_settmpdim#1#2{% - \_tmpdim=#1pt \_divide\_tmpdim by1000 - \_tmpdim=\_ea\_ignorept \_the#2\_tmpdim -} -\_public \typoscale ; - - \_doc ----------------------------- - \`\_setbaselineskip` `{<baselineskip>}` sets new `\baselineskip` and - more values of registers which are dependent on the `<baselineskip>` - including the \^`\strutbox`. - \_cod ----------------------------- - -\_def \_setbaselineskip #1{\_if$#1$\_else - \_tmpdim=#1\_ptunit - \_baselineskip=\_tmpdim \_relax - \_bigskipamount=\_tmpdim plus.33333\_tmpdim minus.33333\_tmpdim - \_medskipamount=.5\_tmpdim plus.16666\_tmpdim minus.16666\_tmpdim - \_smallskipamount=.25\_tmpdim plus.08333\_tmpdim minus.08333\_tmpdim - \_normalbaselineskip=\_tmpdim - \_jot=.25\_tmpdim - \_maxdepth=.33333\_tmpdim - \_setbox\_strutbox=\_hbox{\_vrule height.709\_tmpdim depth.291\_tmpdim width0pt}% - \_fi -} - - \_doc ----------------------------- - \`\_setmainvalues` sets the current font size and `\baselineskip` - values to the \`\mainfosize` and \hbox{\`\mainbaselineskip`} registers - and loads fonts at given sizes. - It redefines itself as \`\_setmainvaluesL` - to set the main values only first. The \^`\_setmainvaluesL` does only - fonts loading. - \nl - \`\scalemain` returns to these values if they were set. Else they are set - to 10/12\,pt. - \nl - \`\mfontsrule` gives the rule how math fonts are loaded when \^`\typosize` - or \^`\typoscale` are used. The value of \^`\mfontsrule` can be: - \begitems - * 0: no math fonts are loaded. User must use \^`\normalmath` or \^`\boldmath` explicitly. - * 1: `\_normalmath` is run if \^`\typosize`/\^`\typoscale` are used - first or they are run at outer group level. No - `\everymath`/`\everydisplay` are set in this case. If - \^`\typosize`/\^`\typoscale` are run repeatedly in a group then `\_normalmath` is - run only when math formula occurs. This is done using - `\everymath`/`\everydisplay` and \^`\_setmathfonts`. - \^`\mfontsrule=1` is default. - * 2: `\_normalmath` is run whenever \^`\typosize`/\^`\typoscale` are used. - `\everymath`/`\everydisplay` registers are untouched. - \enditems - \_cod ----------------------------- - -\_newskip \_mainbaselineskip \_mainbaselineskip=0pt \_relax -\_newdimen \_mainfosize \_mainfosize=0pt -\_newcount \_mfontsrule \_mfontsrule=1 - -\_def\_setmainvalues {% - \_mainbaselineskip=\_baselineskip - \_mainfosize=\_optsize - \_topskip=\_mainfosize \_splittopskip=\_topskip - \_ifmmode \_else \_bf \_it \_bi \_rm \_fi % load all basic variants of the family - \_ifnum \_mfontsrule>0 \_normalmath \_fi % load math fonts first - \_let \_setmainvalues =\_setmainvaluesL -} -\_def\_setmainvaluesL {\_relax \_ifmmode \_else \_rm \_fi % load text font - \_ifcase \_mfontsrule % load math fonts - \_or \_ifnum\_currentgrouplevel=0 \_normalmath - \_else \_everymath={\_setmathfonts}\_everydisplay={\_normalmath}% - \_let\_runboldmath=\_relax \_fi - \_or \_normalmath \_fi} -\_def\_scalemain {% - \_ifdim \_mainfosize=\_zo - \_mainfosize=10pt \_mainbaselineskip=12pt - \_let \_setmainvalues=\_setmainvaluesL - \_fi - \_optsize=\_mainfosize \_baselineskip=\_mainbaselineskip -} -\_public \scalemain \mainfosize \mainbaselineskip \mfontsrule ; - - \_doc ----------------------------- - Suppose following example: - `{\typosize[13/15] Let $M$ be a subset of $R$ and $x\in M$...}` - If \^`\mfontsrule=1` then \^`\typosize` does not load math fonts - immediatelly but at the first math formula. It is done by `\everymath` - register, but the contents of this register is processed inside the math - group. If we do `\everymath={\_normalmath}` then this complicated macro - will be processed three times in your example above. We want only one - pocessing, so we do `\everymath={`\`\_setmathfonts``}` and - this macro closes math mode first, loads fonts and opens math mode again. - \_cod ----------------------------- - -\_def\_setmathfonts{$\_normalmath\_everymath{}\_everydisplay{}$} - - \_doc ----------------------------- - \`\thefontsize` `[<size>]` and \`\thefontscale` `[<factor>]` - do modification of the size of the current font. They are implemented by the - \^`\newcurrfontsize` macro. - \_cod ----------------------------- - -\_protected\_def\_thefontsize[#1]{\_if$#1$\_else - \_tmpdim=#1\_ptunit - \_newcurrfontsize{at\_tmpdim}% - \_fi - \_ignorespaces -} -\_protected\_def\_thefontscale[#1]{\_ifx$#1$\_else - \_tmpdim=#1pt \_divide\_tmpdim by1000 - \_tmpdim=\_ea\_ea\_ea\_ignorept \_pdffontsize\_font \_tmpdim - \_newcurrfontsize{at\_tmpdim}% - \_fi - \_ignorespaces -} -\_public \thefontsize \thefontscale ; - - \_doc ----------------------------- - \`\em` keeps the weight of the current variant and switches - roman $\leftrightarrow$ italic. It adds the italic correction by - the \`\_additcorr` and \`\_afteritcorr` macros. The second does not - add italic correction if the next character is dot or comma. - \_cod ----------------------------- - -\_protected\_def\_em {% - \_ea\_ifx \_the\_font \_tenit \_additcorr \_rm \_else - \_ea\_ifx \_the\_font \_tenbf \_bi\_aftergroup\_afteritcorr\_else - \_ea\_ifx \_the\_font \_tenbi \_additcorr \_bf \_else - \_it \_aftergroup\_afteritcorr\_fi\_fi\_fi -} -\_def\_additcorr{\_ifdim\_lastskip>\_zo - \_skip0=\_lastskip \_unskip\_italcorr \_hskip\_skip0 \_else\_italcorr \_fi} -\_def\_afteritcorr{\_futurelet\_next\_afteritcorrA} -\_def\_afteritcorrA{\_ifx\_next.\_else\_ifx\_next,\_else \_italcorr \_fi\_fi} -\_let\_italcorr=\/ - - \_doc ----------------------------- - The \`\boldify` macro does `\let\rm\bf`, `\let\it\bi` and - `\let\normalmath=\boldmath`. All following text will be in bold. - If should be used after \^`\typosize` or \^`\typoscale` macros.\nl - The internal \`\_runboldmath` macro runs `\_boldmath` immediatelly - if no delay of the math font loading is set by \^`\_setmainvaluesL`.\nl - The `\rm`, `\it` in math mode must keep its original meaning. - \_cod ----------------------------- - -\_protected\_def \_boldify {% - \_let \_setmainvalues=\_setmainvaluesL - \_let\it =\_bi \_let\rm =\_bf \_let\_normalmath=\_boldmath \_bf - \_runboldmath - \_ifx\_ncharrmA\_undefined \_protected\_addto\rm{\_fam0 }\_protected\_addto\it{\_fam1 }% - \_else \_protected\_def\rm {\_tryloadbf \_tenbf \_inmath{\_rmvariables \_rmdigits}}% - \_protected\_def\it {\_tryloadbi \_tenbi \_inmath{\_itvariables}}% - \_fi -} -\_def\_runboldmath{\_boldmath} - -\_public \em \boldify ; - - \_doc ----------------------------- - We need to use a font selector for default pagination. Because we don't - know what default font size will be selected by the user, we use this - \`\_rmfixed` macro. It sets the `\rm` font from the default font size - (declared by first \^`\typosize` command and redefines itself be only - the font switch for the next pages. - \_cod ----------------------------- - -\_def \_rmfixed {% used in default \footline - {\_ifdim\_mainfosize=0pt \_mainfosize=10pt \_fi - \_fontdef\_tenrm{\_setfontsize{at\mainfosize}\_resetmod\_rm}% - \_global\_let\_rmfixed=\_tenrm}% next use will be font switch only - \_rmfixed -} -\_let \rmfixed = \_tenrm % user can redefine it - -\_endcode % ------------------------------------- - -History: -2021-03-10 \boldify corrected -2021-03-09 \mfontsrule and \_setmathfonts introduced -2020-12-12 \_rmfixed fixed -2020-04-28 \boldify: removed \let\_rm=\_bf -2020-04-14 \_setmainvaluesL: \_ifmmode test added -2020-03-27 \_setmainvalues: \_splittopskip=\_topskip added diff --git a/macros/luatex/optex/base/fonts-preload.opm b/macros/luatex/optex/base/fonts-preload.opm deleted file mode 100644 index 712730436c..0000000000 --- a/macros/luatex/optex/base/fonts-preload.opm +++ /dev/null @@ -1,36 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \tenrm {Latin Modern fonts (EC) preloaded <2020-01-23>} % loaded in format - -% Only few text fonts are preloaded: - -\_font\_tenrm=ec-lmr10 % roman text -\_font\_tenbf=ec-lmbx10 % boldface extended -\_font\_tenit=ec-lmri10 % text italic -\_font\_tenbi=ec-lmbxi10 % bold italic -\_font\_tentt=ec-lmtt10 % typewriter -\_tenrm - -\_public \tenrm \tenbf \tenit \tenbi \tentt ; - -\_endcode %--------------------------------------------------- - -The format in lua\TeX/ can download only non-Unicode fonts. Latin Modern EC is -loaded here. These fonts are totally unusable in LuaTeX when languages with out -of ASCII or ISO-8859-1 alphabets are used (for example Czech). We load only -a few 8bit fonts here especially for simple testing the format. -But, if the user needs to do more serious work, he/she can -use `\fontfam` macro to load a selected font family of Unicode fonts. - -We have a dilemma: when the Unicode fonts cannot be preloaded in the format then the basic -font set can be loaded by `\everyjob`. But why to load a set of fonts at the -beginning of every job when it is highly likely that the user will -load something completely different. Our decision is: there is a basic 8bit -font set in the format (for testing purposes only) and the user should load -a Unicode font family at beginning of the document. - -The fonts selectors \`\tenrm`, \`\tenbf`, \`\tenit`, \`\tenbi`, \`\tentt` -are declared as `\public` here but only for backward compatibility. We don't -use them in the Font Selection System. But the protected versions of these -control sequences are used in the Font Selection System. - diff --git a/macros/luatex/optex/base/fonts-resize.opm b/macros/luatex/optex/base/fonts-resize.opm deleted file mode 100644 index ac0064df10..0000000000 --- a/macros/luatex/optex/base/fonts-resize.opm +++ /dev/null @@ -1,354 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \setfontsize {Font resizing macros <2020-04-17>} % preloaded in format - - \_doc ----------------------------- - The \`\setfontsize` `{<sizespec>}` saves the `<sizespec>` to the \`\_sizespec` macro. - The \`\_optsize` value is calculated from the `<sizespec>`. - If the `<sizepec>` is in the `mag<number>` format then the contents of - the `\_sizespec` macro is re-calculated to the `at<dimen>` format using - previous `\_optsize` value. - \par \goodbreak - \_cod ----------------------------- - -\_newdimen \_optsize \_optsize=10pt -\_newdimen \_defaultoptsize \_defaultoptsize=10pt -\_newdimen\_lastmagsize - -\_def\_setfontsize #1{% - \_edef\_sizespec{#1}% - \_ea \_setoptsize \_sizespec\_relax - \_reloading -} -\_def\_setoptsize {\_isnextchar a{\_setoptsizeA} - {\_isnextchar m{\_setoptsizeC}{\_setoptsizeB}}} -\_def\_setoptsizeA at#1\_relax{\_optsize=#1\_relax\_lastmagsize=\_optsize} % at<dimen> -\_def\_setoptsizeB scaled#1\_relax{\_optsize=\_defaultoptsize\_relax} % scaled<scalenum> -\_def\_setoptsizeC mag#1\_relax{% - \_ifdim\_lastmagsize>\_zo \_optsize=\_lastmagsize \_else \_optsize=\_pdffontsize\_font \_fi - \_optsize=#1\_optsize - \_lastmagsize=\_optsize - \_edef\_sizespec{at\_the\_optsize}% -} -\_public \setfontsize \defaultoptsize ; - - \_doc ----------------------------- - \`\_resizefont` `{<variant-name>}\<font switch>`, - for example `\resizefont{bf}\_tenbf` resizes the font given by the - variant. The variant `XX` have its font switch `\_tenXX`. - The \`\_doresizefont``\fontswitch` is used. It works in - TFM mode (\`\_doresizetfmfont`) or OTF mode (\^`\_doresizeunifont`). - In both modes, it does - \begtt \catcode`\<=13 - \_font \_tenXX = <fontname> \_sizespec - \endtt - The `<fontname>` is generated by the `\fontname` \TeX/ primitive where - \`\_rfontskipat` removes the `at<dimen>` part of the `\_fontname` output. - The `<fontname>` is generated differently in OTF mode, see - \^`\_doresizeunifont` macro.\nl - The \`\_whatresize` is defined as `<variant-name>`. - \_cod ----------------------------- - -\_def\_resizefont#1#2{% - \_edef\_whatresize{#1}% - \_ifx \_fontselector \_undefined \_doresizefont#2% - \_else \_ea \_doresizefont \_fontselector \_fi - \_lastmagsize=\_zo - \_slet{_tryload#1}{_relax}% -} -\_def\_doresizetfmfont#1{\_logfont{#1}% - \_ea\_font\_ea#1\_ea\_rfontskipat - \_fontname \_cs{_ten\_whatresize} \_relax\_space \_sizespec \_relax -} -\_let\_doresizefont=\_doresizetfmfont -\_def\_logfont#1{} % default is no logging of used fonts - -\_def\_rfontskipat#1{\_ifx#1"\_ea\_rfskipatX \_else\_ea\_rfskipatN\_ea#1\_fi} -\_def\_rfskipatX #1" #2\_relax{"\_whichtfm{#1}"} -\_def\_rfskipatN #1 #2\_relax{\_whichtfm{#1}} - - \_doc ----------------------------- - \`\fontdef` `<font switch>{<modifiers><variant selector>}` - opens group, runs `<modifiers><variant selector>` (i.e.\ it runs `#2` parameter). - The font switch `#1` saved in the \`\_fontselector` macro is re-declared - because the variant selector runs the \^`\_resizefont`. Now, we need to - keep the current meaning of the font switch `#1` but we must leave the - opened group. This is done by the \`\_keepmeaning` macro. - \nl - \`\fontlet` `<font switch A> <font switch B> <size spec>` does - \begtt \catcode`\<=13 - \font <font switch A> = <fontname> <sizespec> - \endtt - The `<fontname>` is extracted using the primitive command `\_fontname <font switch B>`. - \_cod ----------------------------- - -\_def \_fontdef #1#2{\_begingroup - \_ifx\_fontselector\_undefined \_def\_fontselector{#1}\_fi - \_reloading #2% - \_ea \_keepmeaning \_fontselector \_endgroup -} -\_def\_fontlet#1#2{\_ifx #2=\_ea\_fontlet \_ea#1\_else - \_ea\_font\_ea#1\_ea\_rfontskipat\_fontname#2 \_relax\_space \_fi -} -\_def \_keepmeaning #1#2{\_global\_let\_keepmeaningdata=#1% - #2\_let#1=\_keepmeaningdata \_global\_let\_keepmeaningdata=\_undefined -} -\_public \fontdef \fontlet ; - - \_doc ----------------------------- - \`\newcurrfontsize` `<size spec>` sets current font size to the `<size spec>` - It is implemented by \^`\fontlet`. - The font switch of the current font is extracted by `\_the\_font`. - We must re-create the control sequence `\_the\_font` because - its original meaning is set to \"inaccessible" by \TeX/ when `\font` - primitive is started. - \nl - \`\resizethefont` is implemented by `\newcurrfontsize` using data from - the \^`\_sizespec` macro. - \_cod ----------------------------- - -\_def \_newcurrfontsize #1{% \newcurrfontsize{at25pt} - \_edef\_tmp{\_ea\_csstring \_the\_font}% - \_ea \_fontlet \_csname \_tmp\_ea\_endcsname \_the\_font \_space #1\_relax - \_csname \_tmp\_endcsname -} -\_protected\_def \_resizethefont{\_newcurrfontsize\_sizespec} - - \_public \newcurrfontsize \resizethefont ; - - \_doc ----------------------------- - The variant selector is defined by `\protected\def\XX{\_tryloadXX \_tenXX}` - The `\_tryloadXX` can be in `\_relax` state if no font modifiers were - declared. But normally it does \^`\_resizefont``{XX}\tenXX`. This meaning - is activated by the \`\_reloading` macro. - \_cod ----------------------------- - -\_def\_reloading{\_loadf{rm}\_tenrm \_loadf{bf}\_tenbf - \_loadf{it}\_tenit \_loadf{bi}\_tenbi -} -\_def\_loadf#1#2{\_sdef{_tryload#1}{\_ifmmode \_else \_resizefont{#1}#2\_fi}} -\_def\_tryloadtt{\_resizefont{tt}\_tentt} - -\_let\_tryloadrm=\_relax -\_let\_tryloadbf=\_relax -\_let\_tryloadit=\_relax -\_let\_tryloadbi=\_relax - - \_doc ---------------------------- - The font selection system allows to use \`\currvar` - instead explicitly specified variant selector. The current variant - is extracted from `\the\font` output which could be `\_tenXX` control - sequence. Then `\currvar` expands to `\_rm` or `\_it` etc. - \_cod ---------------------------- - -\_protected \_def \_currvar{\_cs{_currvar:\_ea \_csstring \_the\_font}} -\_sdef{_currvar:_tenrm}{\_rm} -\_sdef{_currvar:_tenbf}{\_bf} -\_sdef{_currvar:_tenit}{\_it} -\_sdef{_currvar:_tenbi}{\_bi} -\_sdef{_currvar:_tentt}{\_tt} -\_public \currvar ; - - \_doc ----------------------------- - The \`\_regtfm` `<font id> <optical size data>` - saves the <optical size data> concerned to `<font id>`. - The `<optical size data>` is in the form as shown below in the code where - `\_regtfm` is used. - \nl - The \`\_wichtfm` `<fontname>` expands to the `<fontname>` or to the corrected - `<fontname>` read from the `<optical size data>`. It is used in the - \^`\_rfontskipat` macro and it is used in \^`\fontlet` macro. - It means that each `<fontname>` generated by the `\fontname` primitive in the - `\fontlet` macro is processed by the `\_whichtfm`. The real `<fontname>` or - corrected `<fontname>` (depending on the optical data does not exist or exist) - is the output of the expansion before `\font` primitive takes this output - as its parameter. - - The implementation detail: The `\_<font id>:reg` is defined as the - `<optical size data>` and all control sequences `\_<fontname>:reg` - from this data line have the same meaning because of the - \`\_reversetfm` macro. The `\_whichtfm` expands this data line and apply - \`\_dowhichtfm`. This macro selects the right result from the data line - by testing with the current `\_optsize` value. - \_cod ----------------------------- - -\_def\_regtfm #1 0 #2 *{\_ea\_def \_csname _#1:reg\_endcsname{#2 16380 \_relax}% - \_def\_tmpa{#1}\_reversetfm #2 * % -} -\_def\_reversetfm #1 #2 {% we need this data for \_setmathfamily - \_ea\_let\_csname _#1:reg\_ea\_endcsname - \_csname _\_tmpa:reg\_endcsname - \_if*#2\_else \_ea\_reversetfm \_fi -} -\_def\_whichtfm #1{% - \_ifcsname _#1:reg\_endcsname - \_ea\_ea\_ea \_dowhichtfm - \_csname _#1:reg\_ea\_endcsname - \_else - #1% - \_fi -} -\_def\_dowhichtfm #1 #2 {% - \_ifdim\_optsize<#2pt #1\_ea\_ignoretfm\_else \_ea\_dowhichtfm -\_fi -} -\_def\_ignoretfm #1\_relax{} - - \_doc ----------------------------- - Optical sizes data for preloaded 8bit Latin Modern fonts: - \_cod ----------------------------- - -\_regtfm lmr 0 ec-lmr5 5.5 ec-lmr6 6.5 ec-lmr7 7.5 ec-lmr8 8.5 ec-lmr9 9.5 - ec-lmr10 11.1 ec-lmr12 15 ec-lmr17 * -\_regtfm lmbx 0 ec-lmbx5 5.5 ec-lmbx6 6.5 ec-lmbx7 7.5 ec-lmbx8 8.5 ec-lmbx9 9.5 - ec-lmbx10 11.1 ec-lmbx12 * -\_regtfm lmri 0 ec-lmri7 7.5 ec-lmri8 8.5 ec-lmri9 9.5 ec-lmri10 11.1 ec-lmri12 * -\_regtfm lmtt 0 ec-lmtt8 8.5 ec-lmtt9 9.5 ec-lmtt10 11.1 ec-lmtt12 * - -\_setfontsize {at10pt} % default font size - -\_endcode %--------------------------------------------------- - - -\sec[setfontsize] Scaling fonts in text mode (low-level macros) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\secc The `\setfontsize` macro - -The \^`\setfontsize` `{<size spec>}` -saves the information about `<size spec>`. This information is taken into -account when a variant selector (for example `\rm`, `\bf`, `\it`, `\bi`) -or `\resizethefont` is used. The `<size spec>` can be: -\begitems -* `at<dimen>`, for example `\setfontsize{at12pt}`. It gives the desired font size directly. -* `scaled<scale factor>`, for example `\setfontsize{scaled1200}`. The font is - scaled in respect to its native size (which is typically 10\,pt). It - behaves like `\font\... scaled<number>`. -* `mag<decimal number>`, for example `\setfontsize{mag1.2}`. The font is - scaled in respect to the current size of the fonts given by the previous - \^`\setfontsize` command. -\enditems -The initialization value in \OpTeX/ is given by `\setfontsize{at10pt}`. - -The \^`\resizethefont` resizes the currently selected font to the size given by previous -\^`\setfontsize`. For example - -\begtt - The 10 pt text is here, -\setfontsize{at12pt} the 10 pt text is here unchanged... -\resizethefont and the 12 pt text is here. -\endtt -% -The \^`\setfontsize` command acts like {\em font modifier}. It means that it -saves information about fonts but does not change the font actually until -variant selector or \^`\resizethefont` is used. - -The following example demonstrates the `mag` format of \^`\setfontsize` -parameter. It is only a curious example probably not used in practical -typography. - -\begtt -\def\smaller{\setfontsize{mag.9}\resizethefont} -Text \smaller text \smaller text \smaller text. -\endtt - -\secc[fontprimitive] The `\font` primitive - -If you load a font directly by `\font` primitive and you want to -create a size-dependent selector for such font then you can use -\~`\resizethefont`: - -\begtt -\font\tencomfortaa=Comfortaa-Regular-T1 at10pt -\def\comfortaa{\tencomfortaa\resizethefont} - -\comfortaa The 10 pt text is here -\setfontsize{at12pt} -\comfortaa The 12 pt text is here -\endtt -% -The example above uses the 8\,bit `tfm` font. You can use Unicode font too, of -course. The \^`\fontfam` macro initializes the extended `\font` primitive -features for \LuaTeX/ (see section \ref[exfont]). -If you didn't use this command, you must initialize -these features by the \^`\initunifonts` command explicitly, for example: - -\begtt -\initunifonts -\font\tencyklop=[cyklop-regular] at10pt % the font cyklop-regular.otf is loaded -\def\cyklop{\tencyklop\resizethefont} - -\cyklop The 10 pt text is here -\setfontsize{at12pt} -\cyklop The 12 pt text is here -\endtt - -\secc[fontdef] The \code{\\fontdef} declarator - -You can declare `\<newfont>` by the \~`\fontdef` command. - -\begtt \catcode`\<=13 - \fontdef \<newfont> {<font modifiers> \<variant-selector>} - example: - \fontdef \bigfont {\setfontsize{at15pt}\bf} -\endtt -% -This command runs `<font modifiers> \<variant-selector>` in an internal group and sets the -resulting selected font as `\<newfont>`. - -The resulting `\<newfont>` declared by \~`\fontdef` is \"fixed font switch" -independent of \^`\setfontsize` and other font modifiers. More exactly, it is -a fixed font switch when it is used but it can depend on the current font -modifiers and font family and given font modifiers when it is declared. - -The parameter of the \~`\fontdef` macro must be exactly finished by the -variant selector. More information about font modifiers -and variant selectors are in the section~\ref[fontsystem]. - -\secc[fontlet] The \code{\\fontlet} declarator - -We have another command for scaling: \^`\fontlet` which can resize -arbitrary font given by its font switch. -This font switch was declared by the -`\font` primitive or the \~`\fontdef` macro. - -\begtt \catcode`\<=13 - \fontlet \<newfont> = \<fontswitch> <sizespec> - example: - \fontlet \bigfont = \_tenbf at15pt -\endtt - -The resulted `\bigfont` is the same as in the previous example where \~`\fontdef` -was used. The advantage of \~`\fontdef` macro will be more clear when you load -font families by `\fontfam` and you are using more font modifiers declared -in such families. - -Summary: you can declare font switches: -\begitems -* by the `\font` primitive if you know the font file, -* by the \^`\fontlet` command if you know the font switch and the size, or -* by the \~`\fontdef` command if you know the variant and modifiers. -\enditems - -\secc Optical sizes - -There are font families with more font files where almost the same font is -implemented in various design sizes: `cmr5`, `cmr6`, `cmr7`, `cmr8`, `cmr9`, -`cmr10`, `cmr12`, `cmr17` for example. This feature is called \"optical -sizes". \OpTeX/ chooses a font with an optical size closest to desired size -specified by the \^`\setfontsize`, when `at<dimen>` or `mag<coefficient>` is used. -When `scaled<scale factor>` is used then optical size is chosen using the value -of the `\defaultoptsize` register and such font is scaled by the specified -`<scale factor>`. There is `\defaultoptsize=10pt` by default. - -Font collections with optical sizes must be registered by the -\^`\_regtfm` for `tfm` files or \^`\_regoptsizes` for Unicode fonts. -\OpTeX/ registers 8bit Latin Moder fonts in the format (`fonts-resize.opm` file) -and OTF Latin Modern fonts in the `f-lmfonts.opm` file. - -\secc Implementation notes - -\_endinput - -2020-04-17 \resizethefont introduced -2020-03-17 released diff --git a/macros/luatex/optex/base/fonts-select.opm b/macros/luatex/optex/base/fonts-select.opm deleted file mode 100644 index 740b311a67..0000000000 --- a/macros/luatex/optex/base/fonts-select.opm +++ /dev/null @@ -1,846 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \fontfam {Fonts selection system <2021-02-25>} % preloaded in format - - \_doc ----------------------------- - \`\initunifonts` macro extends \LuaTeX's font capabalities, - in order to be able to load Unicode fonts. Unfortunately, this part of - \OpTeX/ depends on `luaotfload` package, which adapts Con\TeX/t's generic - font loader for plain \TeX/ and \LaTeX. `luaotfload` uses Lua functions - from \LaTeX's `luatexbase` namespace, we provide our own replacements. - Moreover, `\initunifont` switches with - the \^`\_doresizefont` macro to OTF mode which is represented by the - macro \`\_doresizeunifont`. This mode includes - a fallback to TFM mode if \^`\_fontnamegen` is not defined. - Finally, `\initunifonts` sets itself to relax because we don't want to do - this work twice.\nl - \`\_ttunifont` is default font for `\tt` variant if - `f-lmfonts.opm` (or another font file where `\tt` is declared) is not loaded. - \_cod ----------------------------- - -\_def\_initunifonts {% - \directlua{% - require('luaotfload-main') - luaotfload.main() - }% - \_gdef\_rfskipatX ##1" ##2\_relax{"##1"}% - \_global\_let \_doresizefont=\_doresizeunifont - \_gdef\_tryloadtt {\_fontdef\_tentt{\_let\_fontnamegen=\_ttunifont\_rm}}% - \_global\_let \_initunifonts=\_relax % we need not to do this work twice - \_global\_let \initunifonts=\_relax -} -\_gdef\_doresizeunifont #1{\_logfont{#1}% - \_ifx\_fontnamegen\_undefined \_doresizetfmfont#1\_else - \_font#1={\_fontnamegen} \_sizespec \_relax \_setwsp#1\_relax - \_fi -} -\_def\_ttunifont{[lmmono10-regular]:\_fontfeatures-tlig;} - -\_public \initunifonts ; - - \_doc ----------------------------- - The \`\_famdecl` `[<Family Name>] \<Famselector> {<comment>} {<modifiers>} {<variants>} {<math>}`\nl - `{<font for testing>} {\def`\^`\_fontnamegen``{<data>}}` runs \^`\initunifonts`, then - checks if `\<Famselector>` is defined. If it is true, then closes the file by - `\endinput`. Else it defines `\<Famselector>` and saves it to the - internal `\_f:<currfamily>:main.fam` command. - The macro \`\_initfontfamily` needs it. The \`\_currfamily` is set - to the `<Famselector>` because the following \^`\moddef` commands need to - be in the right font family context. The `\_currfamily` is set to the - `<Famselector>` by the `\<Famselector>` too, because `\<Famselector>` - must set the right font family context. The font family context is given by the current - `\_currfamily` value and by the actual meaning of the \^`\_fontnamegen` macro. - The \`\_mathfaminfo` is saved for usage in the catalog. - \_cod ----------------------------- - -\_def\_famdecl [#1]#2#3#4#5#6#7#8{% - \_initunifonts \_uniaccents - \_unless\_ifcsname _f:\_csstring#2:main.fam\_endcsname - \_isfont{#7}\_iffalse - \_opwarning{Family [#1] skipped, font "#7" not found}\_ea\_ea\_ea\_endinput \_else - \_edef\_currfamily {\_csstring #2}\_def\_mathfaminfo{#6}% - \_wterm {FONT: [#1] -- \_string#2 \_detokenize{(#3)^^J mods:{#4} vars:{#5} math:{#6}}}% - \_unless \_ifx #2\_undefined - \_opwarning{\_string#2 is redefined by \_string\_famdecl\_space[#1]}\_fi - \_protected\_edef#2{\_def\_noexpand\_currfamily{\_csstring #2}\_unexpanded{#8\_resetfam}}% - \_ea \_let \_csname _f:\_currfamily:main.fam\_endcsname =#2% - \_fi - \_else \_csname _f:\_csstring#2:main.fam\_endcsname \_reloading \_rm \_ea \_endinput \_fi -} -\_def\_initfontfamily{% - \_csname _f:\_currfamily:main.fam\_endcsname \_reloading \_rm -} - - \_doc ----------------------------- - \`\_regoptsizes` `<internal-template> <left-output>?<right-output> <resizing-data>` - prepares data for using by the \`\_optname` `<internal-template>` macro. - The data are saved to the `\_oz:<internal-template>` macro. - When the `\_optname` is expanded then the data are scanned by the macro - \`\_optnameA` `<left-output>?<right-output> <mid-output> `\code{<}`<size>` - in the loop.\nl - \`\_optfontalias` `{<template A>}{<template B>}` is defined as - `\let\_oz:<templateA>=\_oz:<templateB>`. - \_cod ----------------------------- - -\_def\_regoptsizes #1 #2?#3 #4*{\_sdef{_oz:#1}{#2?#3 #4* }} -\_def\_optname #1{\_ifcsname _oz:#1\_endcsname - \_ea\_ea\_ea \_optnameA \_csname _oz:#1\_ea\_endcsname - \_else \_failedoptname{#1}\_fi -} -\_def\_failedoptname #1{optname-fails:(#1)} -\_def\_optnameA #1?#2 #3 <#4 {\_ifx*#4#1#3#2\_else - \_ifdim\_optsize<#4pt #1#3#2\_optnameC - \_else \_afterfifi \_optnameA #1?#2 \_fi\_fi -} -\_def\_optnameC #1* {\_fi\_fi} -\_def\_afterfifi #1\_fi\_fi{\_fi\_fi #1} -\_def\_optfontalias #1#2{\_slet{_oz:#1}{_oz:#2}} - - \_doc ----------------------------- - \`\_fvars` `<rm-template> <bf-template> <it-template> <bi-template>` - saves data for usage by the `\_currV` macro. If a template is only dot - then previous template is used (it can be used if the font family doesn't - dispose with all standard variants). - \nl - \`\_currV` expands to a template declared by `\_fvars` depending on the - `<variant name>`. Usable only of standard four variants. Next variants - can be declared by the \^`\famvardef` macro. - \nl - \`\_fsetV` `<key>=<value>,...,<key>=<value>` expands to - `\def\_<key>V{<value>}` in the loop. - \nl - \`\_onlyif` `<key>=<value-a>,<value-b>...,<value-z>: {<what>}` - runs <what> only if the `\_<key>V` is defined as `<value-a>` or - `<value-b>` or ... or `<value-z>`. - \nl - \`\_prepcommalist` `ab,{},cd,\_end,` expands to `ab,,cd,` (auxiliary macro - used in `\_onlyif`). - \_cod ----------------------------- - -\_def\_fvars #1 #2 #3 #4 {% - \_sdef{_fvar:rm}{#1}% - \_sdef{_fvar:bf}{#2}% - \_ifx.#2\_slet{_fvar:bf}{_fvar:rm}\_fi - \_sdef{_fvar:it}{#3}% - \_ifx.#3\_slet{_fvar:it}{_fvar:rm}\_fi - \_sdef{_fvar:bi}{#4}% - \_ifx.#4\_slet{_fvar:bi}{_fvar:it}\_fi -} -\_def\_currV{\_cs{_fvar:\_whatresize}} -\_def\_V{ } -\_def \_fsetV #1 {\_fsetVa #1,=,} -\_def \_fsetVa #1=#2,{\_isempty{#1}\_iffalse - \_ifx,#1\_else\_sdef{_#1V}{#2}\_ea\_ea\_ea\_fsetVa\_fi\_fi -} -\_def \_onlyif #1=#2:#3{% - \_edef\_act{\_noexpand\_isinlist{,\_prepcommalist #2,\_end,}{,\_cs{_#1V},}}\_act - \_iftrue #3\_fi -} -\_def\_prepcommalist#1,{\_ifx\_end#1\_empty\_else #1,\_ea\_prepcommalist\_fi} - - \_doc ----------------------------- - The \`\moddef` `\<modifier> {<data>}` simply speaking does - `\def\<modifier>{<data>}`, but we need to respect - the family context. In fact, `\protected\def\_f:<current family>:<modifier>{<data>}` is - performed and the `\<modifier>` is defined as - \`\_famdepend``\<modifier>{_f:\_currfamily:<modifier>}`. It expands to - `\_f:\_currfamily:<modifier>` value if it is defined or it prints - the warning. When the `\_currfamily` value is - changed then we can declare the same `\<modifier>` with a different meaning. - - When a user declares a prefixed variant of the `\<modifier>` then unprefixed - modifier name is used in internal macros, this is the reason why we are using - the \`\_remifirstunderscore``\_tmp` (where `\_tmp` expands to - `_<something>` or to `<something>`. The `\_remifirstunderscore` - redefines `\_tmp` in the way that it - expands only to `<something>` without the first `_`. - - \`\_setnewmeaning` `<cs-name>=\_tmpa <by-what>` does exactly `\_let <csname>=\_tmpa` - but warning is printed if <cs-name> is defined already and it is not a variant - selector or font modifier. - - \`\_addtomodlist` `<font modifier>` adds given modifier to \`\_modlist` - macro. This list is used after `\resetmod` when a new family is selected by - a family selector, see \`\_resetfam` macro. - This allows reinitializing the same current modifiers in the font context - after the family is changed. - \_cod ----------------------------- - -\_def \_moddef #1#2{\_edef\_tmp{\_csstring#1}% - \_sdef{_f:\_currfamily:\_tmp}{\_addtomodlist#1#2\_reloading}% - \_protected \_edef \_tmpa{\_noexpand\_famdepend\_noexpand#1{_f:\_noexpand\_currfamily:\_tmp}}% - \_setnewmeaning #1=\_tmpa \moddef -} -\_protected \_def\_resetmod {\_cs{_f:\_currfamily:resetmod}} % private variant of \resetmod -\_def \_resetfam{\_def\_addtomodlist##1{}\_resetmod - \_edef \_modlist{\_ea}\_modlist - \_let\_addtomodlist=\_addtomodlistb -} -\_def \_currfamily{} % default current family is empty -\_def \_modlist{} % list of currently used modifiers - -\_def \_addtomodlist#1{\_addto\_modlist#1} -\_let \_addtomodlistb=\_addtomodlist - -\_def\_famdepend#1#2{\_ifcsname#2\_endcsname \_csname#2\_ea\_endcsname \_else - \_ifx\_addtomodlist\_addtomodlistb - \_opwarning{\_string#1 is undeclared in family "\_currfamily", ignored}\_fi\_fi -} -\_def\_setnewmeaning #1=\_tmpa#2{% - \_ifx #1\_undefined \_else \_ifx #1\_tmpa \_else - \_opwarning{\_string#1 is redefined by \_string#2}% - \_fi\_fi - \_let#1=\_tmpa -} -\_public \moddef ; - - \_doc ----------------------------- - The \`\famvardef` `\<XX> {<data>}` - uses analogical trick like \^`\moddef` with - the \^`\_famdepend` macro. The auxiliary - \`\_famvardefA` `\<XX> \_ten<XX> \_tryload<XX> {<data>}` is used. - It does: - \begitems - * `\def \_tryload:<currfam>:<XX> {`\^`\fontdef`` \_ten<XX> {<data>}}` loads font `\_ten<XX>`, - * `\protected\def \<XX> {\_famdepend \<XX> {_f:<currfam>:<XX>}}`, - * `\def \_f:<currfam>:<XX> {\_tryload:<currfam>:<XX>\_ten<XX>}` keeps family dependent definition, - * `\def \_currvar:_ten<XX> {\<XX>}` in order to the \^`\currvar` macro work correctly. - \enditems - `\famvardef\tt` behaves somewhat differently: it doesn't re-define the - `\tt` macro which is defined as `\_tryloadtt \_tentt` in sections~\ref[math-preload] - and~\ref[unimath-codes]. It only re-defines the internal `\_tryloadtt` macro. - \_cod ----------------------------- - -\_def\_famvardef#1{\_edef\_tmp{\_csstring#1}% - \_ea\_famvardefA \_ea#1\_csname _ten\_tmp\_ea\_endcsname - \_csname _tryload:\_currfamily:\_tmp\_endcsname -} -\_def\_famvardefA #1#2#3#4{% #1=\XX #2=\_tenXX #3=\_tryload:currfam:XX #4=data - \_isinlist{.\_rm\_bf\_it\_bi\currvar\_currvar}#1\_iftrue - \_opwarning{\_string\famvardef: - You cannot re-declare standard variant selector \_string#1}% - \_else - \_def#3{\_fontdef#2{#4}}% - \_protected\_edef\_tmpa{\_noexpand\_famdepend\_noexpand#1{_f:\_noexpand\_currfamily:\_tmp}}% - \_ifx #1\_tt \_let\_tryloadtt=#3\_else \_setnewmeaning #1=\_tmpa \famvardef \_fi - \_sdef{_f:\_currfamily:\_tmp}{#3#2}% - \_sdef{_currvar:\_csstring#2}{#1}% - \_fi -} -\_public \famvardef ; - - \_doc ----------------------------- - The \`\fontfam` `[<Font Family>]` does: - \begitems - * Convert its parameter to lower case and without spaces, e.g.\ `<fontfamily>`. - * If the file `f-<fontfamily>.opm` exists read it and finish. - * Try to load user defined `fams-local.opm`. - * If the `<fontfamily>` is declared in `fams-local.opm` or `fams-ini.opm` - read relevant file and finish. - * Print the list of declared families. - \enditems - The `fams-local.opm` is read by the \`\_tryloadfamslocal` macro. It sets - itself to `\_relax` because we need not load this file twice. - The \`\_listfamnames` macro prints registered font families to the - terminal and to the log file. - \_cod ----------------------------- - -\_def\_fontfam[#1]{% - \_lowercase{\_edef\_famname{\_ea\_removespaces #1 {} }}% - \_isfile {f-\_famname.opm}\_iftrue \_opinput {f-\_famname.opm}% - \_else - \_tryloadfamslocal - \_edef\_famfile{\_trycs{_famf:\_famname}{}}% - \_ifx\_famfile\_empty \_listfamnames - \_else \_opinput {\_famfile.opm}% - \_fi\_fi -} -\_def\_tryloadfamslocal{% - \_isfile {fams-local.opm}\_iftrue - \_opinput {fams-local.opm}\_famfrom={}% - \_fi - \_let \_tryloadfamslocal=\_relax % need not to load fams-local.opm twice -} -\_def\_listfamnames {% - \_wterm{===== List of font families ======} - \_begingroup - \_let\_famtext=\_wterm - \_def\_faminfo [##1]##2##3##4{% - \_wterm{ \_space\_noexpand\fontfam [##1] -- ##2}% - \_let\_famalias=\_famaliasA}% - \_opinput {fams-ini.opm}% - \_isfile {fams-local.opm}\_iftrue \_opinput {fams-local.opm}\_fi - \_message{^^J}% - \_endgroup -} -\_def\_famaliasA{\_message{ \_space\_space\_space\_space -- alias:} - \_def\_famalias[##1]{\_message{[##1]}}\_famalias -} -\_public \fontfam ; - - \_doc ----------------------------- - When the `fams-ini.opm` or `fams-local.opm` files are read then we need - to save only a mapping from family names or alias names to the font family file - names. All other information is ignored in this case. But if these files - are read by the `\_listfamnames` macro or when printing a catalog then more - information is used and printed.\nl - \`\_famtext` does nothing or prints the text on the terminal. - \nl - \`\_faminfo` `[<Family Name>] {<comments>} {<file-name>} {<mod-plus-vars>}` - does\nl `\_def \_famf:<familyname> {<file-name>}` or prints information on - the terminal. - \nl - \`\_famalias` `[<Family Alias>]` does `\def \_famf:<familyalias> {<file-name>}` - where `<file-name>` is stored from the previous `\_faminfo` command. Or - prints information on the terminal. - \nl - \`\_famfrom` declares type foundry or owner or designer of the font family. - It can be used in `fams-ini.opm` or `fams-local.opm` and it is printed - in the font catalog. - \_cod ----------------------------- - -\_def\_famtext #1{} -\_def\_faminfo [#1]#2#3#4{% - \_lowercase{\_edef\_tmp{\_ea\_removespaces #1 {} }}% - \_sdef{_famf:\_tmp}{#3}% - \_def\_famfile{#3}% -} -\_def\_famalias [#1]{% - \_lowercase{\_edef\_tmpa{\_ea\_removespaces #1 {} }}% - \_sdef{_famf:\_tmpa\_ea}\_ea{\_famfile}% -} -\_newtoks\_famfrom -\_input fams-ini.opm -\_let\_famfile=\_undefined -\_famfrom={} - - \_doc ----------------------------- - When the \^`\fontfam``[catalog]` is used then the file - `fonts-catalog.opm` is read. The macro \^`\_faminfo` is redefined here - in order to print catalog samples of all declared modifiers/variant - pairs. The user can declare different samples and different behavior of - the catalog, see the end of catalog listing for more information. - The default parameters - \`\catalogsample`, \`\catalogmathsample`, \`\catalogonly` and - \`\catalogexclude` of the catalog are declared here. - \_cod ----------------------------- - -\_newtoks \_catalogsample -\_newtoks \_catalogmathsample -\_newtoks \_catalogonly -\_newtoks \_catalogexclude -\_catalogsample={ABCDabcd Qsty fi fl áéíóúüů řžč ÁÉÍÓÚ ŘŽČ 0123456789} - -\_public \catalogonly \catalogexclude \catalogsample \catalogmathsample ; - - \_doc ----------------------------- - The font features are managed in the \`\_fontfeatures` macro. - They have their implicit values saved in the \`\_defaultfontfeatures` - and the \`\setff` `{<features>}` - can add next font features. If there is the same font feature as the newly - added one then the old value is removed from the `\_fontfeatures` list. - \_cod ----------------------------- - -\_def \_defaultfontfeatures {+tlig;} -\_def \_setff #1{% - \_ifx^#1^\_let \_fontfeatures=\_defaultfontfeatures - \_else \_edef\_fontfeatures{\_fontfeatures #1;}\_fi - \_reloading -} -\_setff {} % default font features: +tlig; -\_def\_removefeature #1{% - \_isinlist\_fontfeatures{#1}\_iftrue - \_def\_tmp ##1#1##2;##3\_relax{\_def\_fontfeatures{##1##3}}% - \_ea \_tmp \_fontfeatures \_relax - \_fi -} -\_public \setff ; - - \_doc ----------------------------- - The \`\setfontcolor` and \`\setletterspace` are macros based on the - special font features provided by \LuaTeX/ (and by \XeTeX/ too but it is not - our business). The \`\setwordspace` recalulates the `\fontdimen2,3,4` - of the font using the \`\setwsp` macro which is used by the - \^`\_doresizeunifont` macro. It activates a dummy font feature `+Ws` too in - order the font is reloded by the `\font` primitive (with independent - `\fontdimen` registers). - \_cod ----------------------------- - -\_def\_savedfontcolor{} -\_def\_savedletterspace{} -\_def\_savedwsp{} - -\_def \_setfontcolor #1{\_removefeature{color=}% - \_edef\_tmp{\_calculatefontcolor{#1}}% - \_ifx\_tmp\_empty \_else \_edef\_fontfeatures{\_fontfeatures color=\_tmp;}\_fi - \_reloading -} -\_def \_setletterspace #1{\_removefeature{letterspace=}% - \_if^#1^\_else \_edef\_fontfeatures{\_fontfeatures letterspace=#1;}\_fi - \_reloading -} -\_def \_setwordspace #1{% - \_if^#1^\_def\_setwsp##1{}\_removefeature{+Ws}% - \_else \_def\_setwsp{\_setwspA{#1}}\_setff{+Ws}\_fi - \_reloading -} -\_def\_setwsp #1{} -\_def\_setwspA #1#2{\_fontdimen2#2=#1\_fontdimen2#2% - \_fontdimen3#2=#1\_fontdimen3#2\_fontdimen4#2=#1\_fontdimen4#2} - -\_def\_calculatefontcolor#1{\_trycs{_fc:#1}{#1}} % you can define more smart macro ... -\_sdef{_fc:red}{FF0000FF} \_sdef{_fc:green}{00FF00FF} \_sdef{_fc:blue}{0000FFFF} -\_sdef{_fc:yellow}{FFFF00FF} \_sdef{_fc:cyan}{00FFFFFF} \_sdef{_fc:magenta}{FF00FFFF} -\_sdef{_fc:white}{FFFFFFFF} \_sdef{_fc:grey}{00000080} \_sdef{_fc:lgrey}{00000025} -\_sdef{_fc:black}{} % ... you can declare more colors... - -\_public \setfontcolor \setletterspace \setwordspace ; - -\_endcode %--------------------------------------------------- - - -\sec[fontsystem] The Font Selection System -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -The basic principles of the Font Selection System used in \OpTeX/ -was documented in the section~\ref[fontfam]. - -\secc Terminology - -We distinguish between -\begitems -* {\em font switchers}, they are declared by the `\font` primitive or by - \^`\fontlet` or \~`\fontdef` macros, they select given font. -* {\em variant selectors}, there are four basic variant selectors - \^`\rm`, \^`\bf`, \^`\it`, \^`\bi`, there is a special selector \^`\currvar`. - More variant selectors can be declared by the \~`\famvardef` macro. - They select the font depending on the given variant and on the {\em font context} - (i.e.\ on current family and on more features given by font modifiers). - In addition, \OpTeX/ defines \~`\tt` as variant selector - independent of chosen font family. It selects typewriter-like font. -* {\em font modifiers} are declared in a family (`\cond`, `\caps`) or are - \"build in" (\^`\setfontsize``{<size spec>}`, \~`\setff{<features>}`). - They do appropriate change in the {\em font context} but do not select - the font. -* {\em family selectors} (for example `\Termes`, `\LMfonts`), - they are declared typically in the {\em font family files}. - They enable to switch between font families, they do appropriate - change in the {\em font context} but do not select - the font. -\enditems - -These commands set their values locally. When the \TeX/ group is -left then the selected font and the {\em font context} are returned back to the values -used when the group was opened. They have the following features: - -The {\em font context} is a set of macro values that will affect the -selection of real font when the variant selector is processed. It includes the -value of {\em current family}, current font size, and -more values stored by font modifiers. - -The {\em family context} is the current family value stored in the font -context. The variant selectors declared by \~`\famvardef` and -font modifiers declared by \~`\moddef` are dependent on the {\em family context}. -They can have the same names but different behavior in different families. - -The fonts registered in \OpTeX/ have their macros in the {\em font family files}, -each family is declared in one font family file with the name `f-famname.opm`. -All families are collected in `fams-ini.opm` and users can give more -declarations in the file `fams-local.opm`. - -\secc Font families, selecting fonts - -The \^`\fontfam` `[<Font Family>]` opens the relevant font family file where -the `<Font Family>` is declared. The family selector is defined here by rules -described in the section~\ref[fontfamfiles]. Font modifiers and variant -selectors may be declared here. -The loaded family is set as current and `\rm` variant selector is processed. - -The available declared font modifiers and declared variant selectors are -listed in the log file when the font family is load. Or you can print -`\fontfam[catalog]` to show available font modifiers and variant selectors. - -The font modifiers can be independent, like `\cond` and `\light`. They can -be arbitrarily combined (in arbitrary order) and if the font family disposes -of all such sub-variants then the desired font is selected (after variant -selector is used). On the other hand, there are font modifiers that negates -the previous font modifier, for example: `\cond`, `\extend`. You can reset -all modifiers to their initial value by the \^`\resetmod` command. - -You can open more font families by more \^`\fontfam` commands. Then the -general method to selecting the individual font is: - -\begtt \catcode`\<=13 -<family selector> <font modifiers> <variant selector> -\endtt -For example: -\begtt -\fontfam [Heros] % Heros family is active here, default \rm variant. -\fontfam [Termes] % Termes family is active here, default \rm variant. -{\Heros \caps \cond \it The caps+condensed italics in Heros family is here.} -The Termes roman is here. -\endtt - -There is one special command \^`\currvar` which acts as a variant selector. -It keeps the current variant and the font of such variant is -reloaded with respect to the current font context by the previously given family -selector and font modifiers. - -You can use the \^`\setfontsize` `{<sizespec>}` command in the same sense as -other font modifiers. It saves information about font size to the font -context. See section~\ref[setfontsize]. Example: - -\begtt -\rm default size \setfontsize{at14pt}\rm here is 14pt size \it italic is -in 14pt size too \bf bold too. -\endtt - -A much more comfortable way to resize fonts is using OPmac-like commands -\~`\typosize` and \~`\typoscale`. -These commands prepare the right sizes for math -fonts too and they re-calculate many internal parameters like `\baselineskip`. -See section~\ref[opmac-fonts] for more information. - - -\secc Math Fonts -%--------------- - -Most font families are connected with a preferred Unicode-math font. This -Unicode-math is activated when the font family is loaded. If you don't prefer -this and you are satisfied with 8bit math CM+AMS fonts preloaded in the -\OpTeX/ format then you can use command \^`\noloadmath` before you load a first -font family. - -If you want to use your specially selected Unicode-math font then use -\^`\loadmath` `{[<font_file>]}` or \^`\loadmath` `{<font_name>}` before first -`\fontfam` is used. - - -\secc[fontcommands] Declaring font commands -%---------------------------- - -Font commands can be font switches, variant selectors, font modifiers, -family selectors and defined font macros doing something with fonts. - -\begitems -* Font switches can be decared by `\font` primitive (see - section~\ref[fontprimitive]) or by \^`\fontlet` command (see - section~\ref[fontlet]) or by \~`\fontdef` command (see - sections~\ref[fontdef2] and~\ref[fontdef]). - When the font switches are used then they select the given font independently - of the current font context. They can be used - in `\output` routine (for example) because we need to set fixed fonts - in headers and footers. -* Variant selectors are \^`\rm`, \^`\bf`, \^`\it`, \^`\bi`, \~`\tt` and \^`\currvar`. More - variant selectors can be declared by \~`\famvardef` command. They select a - font dependent on the current font context, see section~\ref[famvardef]. - The `\tt` selector is documented in section~\ref[tt]. -* Font modifiers are \"build in" or declared by \~`\moddef` command. - They do modifications in the font context but don't select any font. - \begitems - * \"build-in" font modifiers are \^`\setfontsize` (see - section~\ref[setfontsize]), \~`\setff` (see section~\ref[setff]), - \~`\setfontcolor`, \~`\setletterspace` and \~`\setwordspace` - (see section~\ref[specff]). They are independent of font family. - * Font modifiers declared by \~`\moddef` depend on the font family and they - are typically declared in font family files, see - section~\ref[fontfamfiles]. - \enditems -* Family selectors set the given - font family as current and re-set data used by the family-dependent font - modifiers to initial values and to the currently used modifiers. - They are declared in font family files - by \~`\_famdecl` macro, see section~\ref[fontfamfiles]. -* Font macros can be defined arbitrarily by `\def` primitive by users. - See an example in section~\ref[fontmacros]. -\enditems - -All declaration commands mentioned here: `\font`, `\fontlet`, `\fontdef`, `\famvardef`, -`\moddef`, `\_famdecl` and `\def` make local assignment. - -\secc[fontdef2] The `\fontdef` declarator in detail - -The general format for \^`\fontdef` usage is -\begtt \catcode`\<=13 -\fontdef\<font switch> {\<family selector> <font modifiers> \<variant selector>} -\endtt -% -where `\<family selector>` and `<font modifiers>` are optional and -`\<variant selector>` is mandatory. - -The \^`\fontdef` does the following steps. -It pushes the current font context to a stack, it does modifications of the font -context by given `\<family selector>` and/or `<font modifiers>` and it -finds the real font by `\<variant selector>`. This font is not selected but -it is assigned to the declared `\<font switch>` (like `\font` primitive does -it). Finally, `\fontdef` pops the font context stack, so the current -font context is the same as it was before `\fontdef` is used. - -More about `\fontdef` command including examples is written in -section~\ref[fontdef]. - - -\secc[famvardef] The `\famvardef` declarator - -You can declare a new variant selector by the \^`\famvardef` macro. This -macro has similar syntax as \^`\fontdef`: -\begtt \catcode`\<=13 -\famvardef\<new variant selector> {\<family selector> <font modifiers> \<variant selector>} -\endtt -% -where `\<family selector>` and `<font modifiers>` are optional and -`\<variant selector>` is mandatory. -The `\<new variant selector>` should be used in the same sense as `\rm`, -`\bf` etc. It can be used as the final command in next -\^`\fontdef` or \^`\famvardef` declarators -too. When the `\<new variant selector>` is used in the normal text then it does -the following steps: pushes current font context to a stack, modifies font -context by declared `\<family selector>` and/or `<font modifiers>`, -runs following `\<variant selector>`. -This last one selects a real font. Then pops the font context stack. -The new font is selected but the font context has its original values. -This is main difference between `\famvardef\foo{...}` and `\def\foo{...}`. - -Moreover, the \^`\famvardef` creates the `\<new variant selector>` family dependent. -When the selector is used in another family context than it is defined then a warning is -printed on the terminal \"<var selector> is undeclared in the current family" -and nothing happens. But you can declare the same variant selector by -\^`\famvardef` macro in the context of a new family. Then the same command -may do different work depending on the current font family. - -Suppose that the selected font family provides the font modifier `\medium` for -mediate weight of fonts. Then you can declare: -\begtt -\famvardef \mf {\medium\rm} -\famvardef \mi {\medium\it} -\endtt -Now, you can use six independent variant selectors `\rm`, `\bf`, `\it`, -`\bi`, `\mf` and `\mi` in the selected font family. - -A `\<family selector>` can be written before `<font modifiers>` in the -`\famvardef` parameter. Then the `\<new variant selector>` is declared in -the current family but it can use fonts from another family represented by -the `\<family selector>`. - -When you are mixing fonts from more families then you probably run -into a problem with incompatible ex-heights. This problem can be solved using -\^`\setfontsize` and \^`\famvardef` macros: -\begtt -\fontfam[Heros] \fontfam[Termes] - -\def\exhcorr{\setfontsize{mag.88}} -\famvardef\rmsans{\Heros\exhcorr\rm} -\famvardef\itsans{\Heros\exhcorr\it} - -Compare ex-height of Termes \rmsans with Heros \rm and Termes. -\endtt - -The variant selectors (declared by \~`\famvardef`) or font -modifiers (declared by \~`\moddef`) are (typically) control sequences in user name -space (`\mf`, `\caps`). They are most often declared in font family files and -they are loaded by \^`\fontfam`. A conflict with such names in -user namespace can be here. For example: if `\mf` is defined by a user and then -`\fontfam[Roboto]` is used then `\famvardef\mf` is performed for Roboto -family and the original meaning of `\mf` is lost. But \OpTeX/ prints warning -about it. There are two cases: - -\begtt -\def\mf{Metafont} -\fontfam[Roboto] % warning: "The \mf is redefined by \famvardef" is printed - or -\fontfam[Roboto] -\def\mf{Metafont} % \mf variant selector redefined by user, we suppose that \mf - % is used only in the meaning of "Metafont" in the document. -\endtt - -\secc[tt] The `\tt` variant selector - -\^`\tt` is an additional special variant selector which is defined as \"select typewriter -font independently of the current font family". By default, the typewriter font-face -from LatinModern font family is used. - -The \^`\tt` variant selector is used in \OpTeX/ internal macros -\^`\_ttfont` (verbatim texts) and \^`\_urlfont` (printing URL's). - -You can redefine the behavior of `\tt` by \^`\famvardef`. For example: - -\begtt -\fontfam[Cursor] -\fontfam[Heros] -\fontfam[Termes] -\famvardef\tt{\Cursor\setff{-liga;-tlig}\rm} - -Test in Termes: {\tt text}. {\Heros\rm Test in Heros: {\tt text}}. -Test in URL \url{http://something.org}. -\endtt -% -You can see that `\tt` stay family independent. This is a special feature only -for `\tt` selector. New definition is used in \^`\_ttfont` and \^`\_urlfont` too. -It is recommended to use `\setff{-liga;-tlig}` to suppress the -ligatures in typewriter fonts. - -If Unicode math font is loaded then the `\tt` macro selects typewriter -font-face in math mode too. This face -is selected from used Unicode math font and it is independent of -`\famvardef\tt` declaration. - - -\secc[fontmacros] Font commands defined by `\def` - -Such font commands can be used as fonts selectors for titles, footnotes, -citations, etc. Users can define them. - -The following example shows how to define a \"title-font selector". -Titles are not only bigger but they are typically in the bold variant. When a user puts -`{\it...}` into the title text then he/she expects bold italic here, no normal -italic. You can remember the great song by John Lennon \"Let It Be" and -define: - -\begtt -\def\titlefont{\setfontsize{at14pt}\bf \let\it\bi} -... -{\titlefont Title in bold 14pt font and {\it bold 14pt italics} too} -\endtt - -\OpTeX/ defines similar internal commands \^`\_titfont`, \^`\_chapfont`, \^`\_secfont` and -\^`\_seccfont`, see section~\ref[sections]. The commands \^`\typosize` and -\^`\boldify` are used in these macros. They set the math fonts to given size too and they -are defined in section~\ref[opmac-fonts]. - - -\secc[setff] Modifying font features -%---------------------------- - -Each OTF font provides \"font features". You can list these font features -by `otfinfo -f font.otf`. For example, LinLibertine fonts provide `frac` font -feature. If it is active then fractions like 1/2 are printed in a special -form. - -The font features are part of the font context data. -The macro \^`\setff` `{<feature>}` acts like family independent font modifier and -prepares a new <feature>. You must use a variant selector in order to -reinitialize the font with the new font feature. For example -\^`\setff``{+frac}\rm` or \^`\setff``{+frac}`\^`\currvar`. You can declare a new variant -selector too: - -\begtt -\fontfam[LinLibertine] -\famvardef \fraclig {\setff{+frac}\currvar} -Compare 1/2 or 1/10 \fraclig to 1/2 or 1/10. -\endtt - -If the used font does not support the given font feature then the font is reloaded -without warning nor error, silently. The font feature is not activated. - -The `onum` font feature (old-style digits) is connected to `\caps` macro for -Caps+SmallCaps variant in \OpTeX/ font family files. So you need not -create a new modifier, just use `{\caps`\^`\currvar`` 012345}`. - - -\secc[specff] Special font modifiers -%--------------------------- - -Despite the font modifiers declared in the font family file (and dependent on -the font family), we have following font modifiers (independent of font -family): - -\begtt \catcode`\<=13 -\setfontsize{<sizespec>} % sets the font size -\setff{<font feature>} % adds the font feature -\setfontcolor{<color>} % sets font color -\setletterspace{<number>} % sets letter spacing -\setwordspace{<scaling>} % modifies word spacing -\endtt - -The \^`\setfontsize` command is described in the section \ref[setfontsize]. -The \^`\setff` command was described in previous subsection. - -\^`\setfontcolor` `{<color>}` specifies the color and the opacity of the text. -The <color> parameter should be in the hexadecimal format of four bytes -`<red><green><blue><opacity>`, for example `FF0080FF` means full red, zero -green, half blue and full opacity. You can use names `red`, `green`, `blue`, -`yellow`, `cyan`, `magenta`, `white`, `grey`, `lgrey` (without the backslash) -instead of the hexadecimal specification. -The empty parameter `<color>` means default black color. - -These colors of fonts are implemented using \LuaTeX/ internal font feature. This -is different approach than using colors in section \ref[colors]. - -\^`\setletterspace` `{<number>}` specifies the letter spacing of the font. The -`<number>` is a decimal number without unit. The unit is supposed as 1/100 of -the font size. I.e. `2.5` means 0.25 pt when the font is at 10 pt size. The -empty parameter `<number>` means no letter spacing which is the default. - -\^`\setwordspace` `{<scaling>}` scales the default interword space (defined in the -font) and its stretching and shrinking parameters by given `<scaling>` -factor. For example `\setwordspace{2.5}` multiplies interword space by 2.5. - -If you need another font transformations, you can use `\setff` -with following font features provided by Lua\TeX/: - -\begtt -\setff{embolden=1.5}\rm % font is bolder because outline has nonzero width -\setff{slant=0.2}\rm % font is slanted by a linear transformation -\setff{extend=1.2}\rm % font is extended by a linear transformation. -\setff{colr=yes}\rm % if the font includes colored characters, use colors -\setff{upper}\rm % to uppercase (lower=lowecase) conversion at font level -\endtt - -Use font transformations mentioned above and \^`\setletterspace`, -\^`\setwordspace` with care. The best setting of these values is the default -setting in every font, of course. If you really need to set a different -letter spacing then it is strongly recommended to add `\setff{-liga}` -to disable ligatures. And setting a positive letter spacing probably -needs to scale interword spacing too. - -All mentioned font modifiers (except for `\setfontsize`) work only -with Unicode fonts loaded by \^`\fontfam`. - -\secc[fontfamfiles] How to create the font family file -%------------------------------------------------------ - -\printdoctail f-heros.opm - -\printdoctail f-lmfonts.opm - -\secc How to register the font family in the Font Selection System -%--------------------------------------------------------------- - -\printdoctail fams-ini.opm - -\secc[exfont] Notices about extension of `\font` primitive -%--------------------------------------------------------- - -Unicode fonts are loaded by extended `\font` primitive. This extension is -not activated in \OpTeX/ by default, \^`\initunifonts` macro activates it. -You need not use \^`\initunifonts` explicitly if \^`\fontfam` macro is -used because \^`\fontfam` runs it internally. - -The \^`\initunifonts` loads the Lua code from the Luaotfload package which -implements the `\font` primitive extension. See its -documentation `luaotfload-latex.pdf` for information about -all possibilities of extended `\font` primitive. - -The \OpTeX/ format is initialized by `luatex` engine by default but -you can initialize it by `luahbtex` engine too. Then the harfbuzz library is -ready to use for font rendering as an alternative to build-in font renderer -from Luaotfload. The harfbuzz library gives more features for rendering -Indic and Arabic scripts. But it is not used as default, you need to specify -`mode=harf` in the fontfeatures field when `\font` is used. Moreover, when -`mode=harf` is used, then you must specify `script` too. For example - -\begtt -\font\devafont=[NotoSansDevanagari-Regular]:mode=harf;script=dev2 -\endtt -% -If the `luahbtex` engine is not used then `mode=harf` is ignored. See -Luaotfload documentation for more information. - -\endinput - -2021-02-25 \_ttunifont introduced -2021-01-27 lua hack (print function) removed because luaotfload 3.17 removes bug. -2020-12-12 \_modlist added, doc improved -2020-04-18 \_tryloadfamslocal introduced - \_fontdecl -> \_famdecl with different concept -2020-03-18 released diff --git a/macros/luatex/optex/base/graphics.opm b/macros/luatex/optex/base/graphics.opm deleted file mode 100644 index afff1c1284..0000000000 --- a/macros/luatex/optex/base/graphics.opm +++ /dev/null @@ -1,445 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \inspic {Graphics <2020-04-12>} % preloaded in format - - \_doc ----------------------------- - \`\inspic` accepts old syntax `\inspic <filename><space>` - or new syntax `\inspic{<filename>}`. So, we need to define - two auxiliary macros \`\_inspicA` and \`\_inspicB`. - - You can include more `\pdfximage` parameters (like `page<number>`) - in the \`\_picparams` macro. - - All `\inspic` macros are surrounded in `\hbox` in order user can - write `\moveright\inspic ...` or something similar. - \_cod ----------------------------- - -\_def\_inspic{\_hbox\_bgroup\_isnextchar\_bgroup\_inspicB\_inspicA} -\_def\_inspicA #1 {\_inspicB {#1}} -\_def\_inspicB #1{% - \_pdfximage \_ifdim\_picwidth=\_zo \_else width\_picwidth\_fi - \_ifdim\_picheight=\_zo \_else height\_picheight\_fi - \_picparams {\_the\_picdir#1}% - \_pdfrefximage\_pdflastximage\_egroup} - -\_def\_picparams{} - -\_public \inspic ; - - \_doc ----------------------------- - Inkscape can save a picture to `*.pdf` file and labels for the picture - to `*.pdf_tex` file. The second file is in \LaTeX/ format (unfortunately) - and it is intended to read immediately after `*.pdf` is included - in order to place labels of this picture in the same font as the document is printed. - We need to read this \LaTeX/ file by plain \TeX/ macros when \`\inkinspic` is used. - These macros are stored in the \`\_inkdefs` tokens list and it is used - locally in the group. The solution is borrowed from OPmac trick 0032. - \_cod ----------------------------- - -\_def\_inkinspic{\_hbox\_bgroup\_isnextchar\_bgroup\_inkinspicB\_inkinspicA} -\_def\_inkinspicA #1 {\_inkinspicB {#1}} -\_def\_inkinspicB #1{% - \_ifdim\_picwidth=0pt \_setbox0=\_hbox{\_inspic{#1}}\_picwidth=\_wd0 \_fi - \_the\_inkdefs - \_opinput {\_the\_picdir #1_tex}% file with labels - \_egroup} - -\_newtoks\_inkdefs \_inkdefs={% - \_def\makeatletter#1\makeatother{}% - \_def\includegraphics[#1]#2{\_inkscanpage#1,page=,\_end \_inspic{#2}\_hss}% - \_def\_inkscanpage#1page=#2,#3\_end{\_ifx,#2,\_else\_def\_picparams{page#2}\_fi}% - \_def\put(#1,#2)#3{\_nointerlineskip\_vbox to\_zo{\_vss\_hbox to\_zo{\_kern#1\_picwidth - \_pdfsave\_hbox to\_zo{#3}\_pdfrestore\_hss}\_kern#2\_picwidth}}% - \_def\begin#1{\_csname _begin#1\_endcsname}% - \_def\_beginpicture(#1,#2){\_vbox\_bgroup - \_hbox to\_picwidth{}\_kern#2\_picwidth \_def\end##1{\_egroup}}% - \_def\_begintabular[#1]#2#3\end#4{% - \_vtop{\_def\\{\_cr}\_tabiteml{}\_tabitemr{}\_table{#2}{#3}}}% - \_def\color[#1]#2{\_scancolor #2,}% - \_def\_scancolor#1,#2,#3,{\_pdfliteral{#1 #2 #3 rg}}% - \_def\makebox(#1)[#2]#3{\_hbox to\_zo{\_csname _mbx:#2\_endcsname{#3}}}% - \_sdef{_mbx:lb}#1{#1\_hss}\_sdef{_mbx:rb}#1{\_hss#1}\_sdef{_mbx:b}#1{\_hss#1\_hss}% - \_sdef{_mbx:lt}#1{#1\_hss}\_sdef{_mbx:rt}#1{\_hss#1}\_sdef{_mbx:t}#1{\_hss#1\_hss}% - \_def\rotatebox#1#2{\_pdfrotate{#1}#2}% - \_def\lineheight#1{}% - \_def\setlength#1#2{}% -} -\_public \inkinspic ; - - \_doc ---------------------------- - \`\pdfscale``{<x-scale>}{<y-scale>}` and \`\pdfrotate``{<degrees>}` - macros are implemented by `\pdfsetmatrix` - primitive. We need to know the values of sin, cos function in - the `\pdfrotate`. We use Lua code for this. - \_cod ---------------------------- - -\_def\_pdfscale#1#2{\_pdfsetmatrix{#1 0 0 #2}} - -\_def\_gonfunc#1#2{% - \_directlua{tex.print(string.format('\_pcent.4f',math.#1(3.14159265*(#2)/180)))}% -} -\_def\_sin{\_gonfunc{sin}} -\_def\_cos{\_gonfunc{cos}} - -\_def\_pdfrotate#1{\_pdfsetmatrix{\_cos{#1} \_sin{#1} \_sin{(#1)-180} \_cos{#1}}} - -\_public \pdfscale \pdfrotate ; - - \_doc ----------------------------- - The \`\transformbox``{<transformation>}{<text>}` - is copied from OPmac trick 0046.\nl - The \`\rotbox``{<degrees>}{<text>}` is a combination of - `\rotsimple` from OPmac trick 0101 and the `\transformbox`. - Note, that `\rotbox{-90}` puts the rotated text to the height of the outer - box (depth is zero) because code from `\rotsimple` is processed. - But `\rotbox{-90.0}` puts the rotated text to - the depth of the outer box (height is zero) because `\transformbox` is - processed. - \_cod ----------------------------- - -\_def\_multiplyMxV #1 #2 #3 #4 {% matrix * (vvalX, vvalY) - \_tmpdim = #1\_vvalX \_advance\_tmpdim by #3\_vvalY - \_vvalY = #4\_vvalY \_advance\_vvalY by #2\_vvalX - \_vvalX = \_tmpdim -} -\_def\_multiplyMxM #1 #2 #3 #4 {% currmatrix := currmatrix * matrix - \_vvalX=#1pt \_vvalY=#2pt \_ea\_multiplyMxV \_currmatrix - \_edef\_tmpb{\_ea\_ignorept\_the\_vvalX\_space \_ea\_ignorept\_the\_vvalY}% - \_vvalX=#3pt \_vvalY=#4pt \_ea\_multiplyMxV \_currmatrix - \_edef\_currmatrix{\_tmpb\_space - \_ea\_ignorept\_the\_vvalX\_space \_ea\_ignorept\_the\_vvalY\_space}% -} -\_def\_transformbox#1#2{\_hbox{\_setbox0=\_hbox{{#2}}% - \_dimendef\_vvalX 11 \_dimendef\_vvalY 12 % we use these variables - \_dimendef\_newHt 13 \_dimendef\_newDp 14 % only in this group - \_dimendef\_newLt 15 \_dimendef\_newRt 16 - \_preptransform{#1}% - \_kern-\_newLt \_vrule height\_newHt depth\_newDp width\_zo - \_setbox0=\_hbox{\_box0}\_ht0=\_zo \_dp0=\_zo - \_pdfsave#1\_rlap{\_box0}\_pdfrestore \_kern\_newRt}% -} -\_def\_preptransform #1{\_def\_currmatrix{1 0 0 1 }% - \_def\_pdfsetmatrix##1{\_edef\_tmpb{##1 }\_ea\_multiplyMxM \_tmpb\_unskip}% - \_let\pdfsetmatrix=\_pdfsetmatrix #1% - \_setnewHtDp 0pt \_ht0 \_setnewHtDp 0pt -\_dp0 - \_setnewHtDp \_wd0 \_ht0 \_setnewHtDp \_wd0 -\_dp0 - \_protected\_def \_pdfsetmatrix {\_pdfextension setmatrix}% - \_let\pdfsetmatrix=\_pdfsetmatrix -} -\_def\_setnewHtDp #1 #2 {% - \_vvalX=#1\_relax \_vvalY=#2\_relax \_ea\_multiplyMxV \_currmatrix - \_ifdim\_vvalX<\_newLt \_newLt=\_vvalX \_fi \_ifdim\_vvalX>\_newRt \_newRt=\_vvalX \_fi - \_ifdim\_vvalY>\_newHt \_newHt=\_vvalY \_fi \_ifdim-\_vvalY>\_newDp \_newDp=-\_vvalY \_fi -} - -\_def\_rotbox#1#2{% - \_isequal{90}{#1}\_iftrue \_rotboxA{#1}{\_kern\_ht0 \_tmpdim=\_dp0}{\_vfill}{#2}% - \_else \_isequal{-90}{#1}\_iftrue \_rotboxA{#1}{\_kern\_dp0 \_tmpdim=\_ht0}{}{#2}% - \_else \_transformbox{\_pdfrotate{#1}}{#2}% - \_fi \_fi -} -\_def\_rotboxA #1#2#3#4{\_hbox{\_setbox0=\_hbox{{#4}}#2% - \_vbox to\_wd0{#3\_wd0=\_zo \_dp0=\_zo \_ht0=\_zo - \_pdfsave\_pdfrotate{#1}\_box0\_pdfrestore\vfil}% - \_kern\_tmpdim -}} -\_public \transformbox \rotbox ; - - \_doc --------------------------- - \`\_scantwodimens` scans two objects with the syntactic rule `<dimen>` - and returns `{<number>}{<number>}` in `sp` unit. - \nl - \`\puttext` `<right> <up>{<text>}` puts the `<text>` to desired place: - From current point moves <down> and <right>, puts the <text> and returns - back. The current point is unchanged after this macro ends. - \nl - \`\putpic` `<right> <up> <width> <height> {<image-file>}` - does `\puttext` with the image scaled to desired <width> and <height>. - If <with> or <height> is zero, natural dimension is used. - The \`\nospec` is a shortcut to such a natural dimension. - \nl - \`\backgroundpic``{<image-file>}` puts the image to - the background of each page. It is used in the \~`\slides` style, for example. - \_cod --------------------------- - -\_def\_scantwodimens{% - \_directlua{tex.print(string.format('{\_pcent d}{\_pcent d}', - token.scan_dimen(),token.scan_dimen()))}% -} - -\_def\_puttext{\_ea\_ea\_ea\_puttextA\_scantwodimens} -\_def\_puttextA#1#2#3{{\_setbox0=\_hbox{{#3}}\_dimen1=#1sp \_dimen2=#2sp \_puttextB}} -\_def\_puttextB{% - \_ifvmode - \_ifdim\_prevdepth>\_zo \_vskip-\_prevdepth \_relax \_fi - \_nointerlineskip - \_fi - \_wd0=\_zo \_ht0=\_zo \_dp0=\_zo - \_vbox to\_zo{\_kern-\_dimen2 \_hbox to\_zo{\_kern\_dimen1 \_box0\_hss}\_vss}} - -\_def\_putpic{\_ea\_ea\_ea\_putpicA\_scantwodimens} -\_def\_putpicA#1#2{\_dimen1=#1sp \_dimen2=#2sp \_ea\_ea\_ea\_putpicB\_scantwodimens} -\_def\_putpicB#1#2#3{{\_setbox0=\_hbox{\_picwidth=#1sp \_picheight=#2sp \_inspic{#3}}\_puttextB}} - -\_newbox\_bgbox -\_def\_backgroundpic#1{% - \_setbox\_bgbox=\_hbox{\_picwidth=\_pdfpagewidth \_picheight=\_pdfpageheight \_inspic{#1}}% - \_pgbackground={\_copy\_bgbox} -} -\_def\nospec{0pt} -\_public \puttext \putpic \backgroundpic ; - - \_doc ----------------------------- - \`\_circle``{<x>}{<y>}` creates an ellipse with `<x>` axis and `<y>` axis. - The origin is in the center. - \nl - \`\_oval``{<x>}{<y>}{<roundness>}` creates an oval with `<x>`, `<y>` size and with - the given `<roundness>`. The real size is bigger by 2`<roundness>`. The - origin is at the left bottom corner. - \nl - \`\_mv``{<x>}{<y>}{<curve>}` moves current point to `<x>`, `<y>`, creates the - `<curve>` and returns the current point back. - All these macros are fully expandable and they can be used in the - `\pdfliteral` argument. - \_cod ----------------------------- - -\def\_circle#1#2{\_expr{.5*(#1)} 0 m - \_expr{.5*(#1)} \_expr{.276*(#2)} \_expr{.276*(#1)} \_expr{.5*(#2)} 0 \_expr{.5*(#2)} c - \_expr{-.276*(#1)} \_expr{.5*(#2)} \_expr{-.5*(#1)} \_expr{.276*(#2)} \_expr{-.5*(#1)} 0 c - \_expr{-.5*(#1)} \_expr{-.276*(#2)} \_expr{-.276*(#1)} \_expr{-.5*(#2)} 0 \_expr{-.5*(#2)} c - \_expr{.276*(#1)} \_expr{-.5*(#2)} \_expr{.5*(#1)} \_expr{-.276*(#2)} \_expr{.5*(#1)} 0 c h} - -\def\_oval#1#2#3{0 \_expr{-(#3)} m \_expr{#1} \_expr{-(#3)} l - \_expr{(#1)+.552*(#3)} \_expr{-(#3)} \_expr{(#1)+(#3)} \_expr{-.552*(#3)} - \_expr{(#1)+(#3)} 0 c - \_expr{(#1)+(#3)} \_expr{#2} l - \_expr{(#1)+(#3)} \_expr{(#2)+.552*(#3)} \_expr{(#1)+.552*(#3)} \_expr{(#2)+(#3)} - \_expr{#1} \_expr{(#2)+(#3)} c - 0 \_expr{(#2)+(#3)} l - \_expr{-.552*(#3)} \_expr{(#2)+(#3)} \_expr{-(#3)} \_expr{(#2)+.552*(#3)} - \_expr{-(#3)} \_expr{#2} c - \_expr{-(#3)} 0 l - \_expr{-(#3)} \_expr{-.552*(#3)} \_expr{-.552*(#3)} \_expr{-(#3)} 0 \_expr{-(#3)} c h} - -\def\_mv#1#2#3{1 0 0 1 \_expr{#1} \_expr{#2} cm #3 1 0 0 1 \_expr{-(#1)} \_expr{-(#2)} cm} - - \_doc ----------------------------- - The \`\inoval``{<text>}` is an example of \^`\_oval` usage.\nl - The \`\incircle``{<text>}` is an example of \^`\_circle` usage.\nl - The \`\ratio`, \`\lwidth`, \`\fcolor`, \`\lcolor`, \`\shadow` and \`\overlapmargins` - are parameters, they can be set by user in optional brackets `[...]`. - For example `\fcolor=\Red` does `\_let\_fcolorvalue=\Red` and it means - filling color.\nl - The \`\_setflcolor` uses the \^`\_fillstroke` macro to separate filling - color and drawing color. - \_cod ----------------------------- - -\_newdimen \_lwidth -\_def\_fcolor{\_let\_fcolorvalue} -\_def\_lcolor{\_let\_lcolorvalue} -\_def\_shadow{\_let\_shadowvalue} -\_def\_overlapmargins{\_let\_overlapmarginsvalue} -\_def\_ratio{\_isnextchar ={\_ratioA}{\_ratioA=}} -\_def\_ratioA =#1 {\_def\_ratiovalue{#1}} -\_def\_touppervalue#1{\_ifx#1n\_let#1=N\_fi} - -\_def\_setflcolors#1{% use only in a group - \_def\_setcolor##1{##1}% - \_def\_fillstroke##1##2{##1}% - \_edef#1{\_fcolorvalue}% - \_def\_fillstroke##1##2{##2}% - \_edef#1{#1\_space\_lcolorvalue\_space}% -} -\_optdef\_inoval[]{\_vbox\_bgroup - \_roundness=2pt \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp - \_shadow=N \_overlapmargins=N \_hhkern=0pt \_vvkern=0pt - \_the\_ovalparams \_relax \_the\_opt \_relax - \_touppervalue\_overlapmarginsvalue \_touppervalue\_shadowvalue - \_ifx\_overlapmarginsvalue N% - \_advance\_hsize by-2\_hhkern \_advance\_hsize by-2\_roundness \_fi - \_setbox0=\_hbox\_bgroup\_bgroup \_aftergroup\_inovalA \_kern\_hhkern \_let\_next=% -} -\_def\_inovalA{\_isnextchar\_colorstackpop\_inovalB\_inovalC} -\_def\_inovalB#1{#1\_isnextchar\_colorstackpop\_inovalB\_inovalC} -\_def\_inovalC{\_egroup % of \setbox0=\hbox\bgroup - \_ifdim\_vvkern=\_zo \_else \_ht0=\_dimexpr\_ht0+\_vvkern \_relax - \_dp0=\_dimexpr\_dp0+\_vvkern \_relax \_fi - \_ifdim\_hhkern=\_zo \_else \_wd0=\_dimexpr\_wd0+\_hhkern \_relax \_fi - \_ifx\_overlapmarginsvalue N\_dimen0=\_roundness \_dimen1=\_roundness - \_else \_dimen0=-\_hhkern \_dimen1=-\_vvkern \_fi - \_setflcolors\_tmp - \_hbox{\_kern\_dimen0 - \_vbox to\_zo{\_kern\_dp0 - \_ifx\_shadowvalue N\_else - \_edef\_tmpb{{\_bp{\_wd0+\_lwidth}}{\_bp{\_ht0+\_dp0+\_lwidth}}{\_bp{\_roundness}}}% - \_doshadow\_oval - \_fi - \_pdfliteral{q \_bp{\_lwidth} w \_tmp - \_oval{\_bp{\_wd0}}{\_bp{\_ht0+\_dp0}}{\_bp{\_roundness}} B Q}\_vss}% - \_ht0=\_dimexpr\_ht0+\_dimen1 \_relax \_dp0=\_dimexpr\_dp0+\_dimen1 \_relax - \_box0 - \_kern\_dimen0}% - \_egroup % of \vbox\bgroup -} -\_optdef\_incircle[]{\_vbox\_bgroup - \_ratio=1 \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp - \_shadow=N \_overlapmargins=N \_hhkern=3pt \_vvkern=3pt - \_ea\_the \_ea\_circleparams \_space \_relax - \_ea\_the \_ea\_opt \_space \_relax - \_touppervalue\_overlapmarginsvalue \_touppervalue\_shadowvalue - \_setbox0=\_hbox\_bgroup\_bgroup \_aftergroup\_incircleA \_kern\_hhkern \_let\_next=% -} -\_def\_incircleA {\_isnextchar\_colorstackpop\_incircleB\_incircleC} -\_def\_incircleB #1{#1\_isnextchar\_colorstackpop\_incircleB\_incircleC} -\_def\_incircleC {\_egroup % of \setbox0=\hbox\bgroup - \_wd0=\_dimexpr \_wd0+\_hhkern \_relax - \_ht0=\_dimexpr \_ht0+\_vvkern \_relax \_dp0=\_dimexpr \_dp0+\_vvkern \_relax - \_ifdim \_ratiovalue\_dimexpr \_ht0+\_dp0 > \_wd0 - \_dimen3=\_dimexpr \_ht0+\_dp0 \_relax \_dimen2=\_ratiovalue\_dimen3 - \_else \_dimen2=\_wd0 \_dimen3=\_expr{1/\_ratiovalue}\_dimen2 \_fi - \_setflcolors\_tmp - \_ifx\_overlapmarginsvalue N\_dimen0=\_zo \_dimen1=\_zo - \_else \_dimen0=-\_hhkern \_dimen1=-\_vvkern \_fi - \_hbox{\_kern\_dimen0 - \_ifx\_shadowvalue N\_else - \_edef\_tmpb{{\_bp{\_dimen2+\_lwidth}}{\_bp{\_dimen3+\_lwidth}}{}}% - \_doshadow\_circlet - \_fi - \_pdfliteral{q \_bp{\_lwidth} w \_tmp \_mv{\_bp{.5\_wd0}}{\_bp{(\_ht0-\_dp0)/2}} - {\_circle{\_bp{\_dimen2}}{\_bp{\_dimen3}} B} Q}% - \_ifdim\_dimen1=\_zo \_else - \_ht0=\_dimexpr \_ht0+\_dimen1 \_relax \_dp0=\_dimexpr \_dp0+\_dimen1 \_relax \_fi - \_box0 - \_kern\_dimen0} - \_egroup % of \vbox\bgroup -} -\_def\_circlet#1#2#3{\_circle{#1}{#2}} - -\_public \inoval \incircle \ratio \lwidth \fcolor \lcolor \shadow \overlapmargins ; - - \_doc ----------------------------- - A shadow effect is implemented here. The shadow is equal to the - silhouette of the given path in a gray-transparent color shifted by - \`\_shadowmoveto` vector and with blurred boundary. - A waistline with the width 2*\`\_shadowb` around the boundary is blurred. - The \`\shadowlevels` levels of transparent shapes is used for creating - this effect. The `\shadowlevels+1/2` level is equal to the shifted given path. - \_cod ----------------------------- - -\_def\_shadowlevels{9} % number of layers for blurr effect -\_def\_shadowdarknessA{0.025} % transparency of first shadowlevels/2 layers -\_def\_shadowdarknessB{0.07} % transparency of second half of layers -\_def\_shadowmoveto{1.8 -2.5} % vector defines shifting layer (in bp) -\_def\_shadowb{1} % 2*shadowb = blurring area thickness - - \_doc ----------------------------- - The `\_pdfpageresources` primitive is used to define transparency. - It does not work when used in a box. So, we use it at the beginning of - the output routine. The modification of the output routine is done - using \`\_insertshadowresources` only once when the shadow effect is used first. - \_cod ----------------------------- - -\_def\_insertshadowresources{% - \_global\_addto\_begoutput{\_setshadowresources}% - \_xdef\_setshadowresources{% - \_pdfpageresources{/ExtGState - << - /op1 <</Type /ExtGState /ca \_shadowdarknessA>> - /op2 <</Type /ExtGState /ca \_shadowdarknessB>> - \_morepgresources - >> - }% - }% - \_global\_let\_insertshadowresources=\_relax -} -\_def\_morepgresources{} - - \_doc ----------------------------- - The \`\_doshadow``{<curve>}` does the shadow effect. - \_cod ----------------------------- - -\_def\_doshadow#1{\_vbox{% - \_insertshadowresources - \_tmpnum=\_numexpr (\_shadowlevels-1)/2 \_relax - \_edef\_tmpfin{\_the\_tmpnum}% - \_ifnum\_tmpfin=0 \_def\_shadowb{0}\_def\_shadowstep{0}% - \_else \_edef\_shadowstep{\_expr{\_shadowb/\_tmpfin}}\_fi - \_def\_tmpa##1##2##3{\_def\_tmpb - {#1{##1+2*\_the\_tmpnum*\_shadowstep}{##2+2*\_the\_tmpnum*\_shadowstep}{##3}}}% - \_ea \_tmpa \_tmpb - \_def\_shadowlayer{% - \_ifnum\_tmpnum=0 /op2 gs \_fi - \_tmpb\_space f - \_immediateassignment\_advance\_tmpnum by-1 - \_ifnum-\_tmpfin<\_tmpnum - \_ifx#1\_oval 1 0 0 1 \_shadowstep\_space \_shadowstep\_space cm \_fi - \_ea \_shadowlayer \_fi - }% - \_pdfliteral{q /op1 gs 0 g 1 0 0 1 \_shadowmoveto\_space cm - \_ifx#1\_circlet 1 0 0 1 \_expr{\_bp{.5\_wd0}} \_expr{\_bp{(\_ht0-\_dp0)/2}} cm - \_else 1 0 0 1 -\_shadowb\_space -\_shadowb\_space cm \_fi - \_shadowlayer Q} -}} - - \_doc ----------------------------- - A generic macro \`\_clipinpath``<x> <y> <curve> <text>` declares - a clipping path by the `<curve>` shifted by the `<x>`, `<y>`. The `<text>` is typeset - when such clipping path is active. Dimensions are given by bp without the unit here. - The macros \`\clipinoval` `<x> <y> <width> <height> {<text>}` and - \`\clipincircle` `<x> <y> <width> <height> {<text>}` are defined here. - These macros read normal \TeX/ dimensions in their parameters. - \_cod ----------------------------- - -\_def\_clipinpath#1#2#3#4{% #1=x-pos[bp], #2=y-pos[bp], #3=curve, #4=text - \_hbox{\_setbox0=\_hbox{{#4}}% - \_tmpdim=\_wd0 \_wd0=\_zo - \_pdfliteral{q \_mv{#1}{#2}{#3 W n}}% - \_box0\_pdfliteral{Q}\_kern\_tmpdim - }% -} - -\_def\_clipinoval {\_ea\_ea\_ea\_clipinovalA\_scantwodimens} -\_def\_clipinovalA #1#2{% - \_def\_tmp{{#1/65781.76}{#2/65781.76}}% - \_ea\_ea\_ea\_clipinovalB\_scantwodimens -} -\_def\_clipinovalB{\_ea\_clipinovalC\_tmp} -\_def\_clipinovalC#1#2#3#4{% - \_ea\_clipinpath{#1-(#3/131563.52)+(\_bp{\_roundness})}{#2-(#4/131563.52)+(\_bp{\_roundness})}% - {\_oval{#3/65781.76-(\_bp{2\_roundness})}{#4/65781.76-(\_bp{2\_roundness})}{\_bp{\_roundness}}}% -} -\_def\_clipincircle {\_ea\_ea\_ea\_clipincircleA\_scantwodimens} -\_def\_clipincircleA #1#2{% - \_def\_tmp{{#1/65781.76}{#2/65781.76}}% - \_ea\_ea\_ea\_clipincircleB\_scantwodimens -} -\_def\_clipincircleB#1#2{% - \_ea\_clipinpath\_tmp{\_circle{#1/65781.76}{#2/65781.76}}% -} -\_public \clipinoval \clipincircle ; - - -\_endcode % ------------------------------------- - -The \^`\inspic` is defined by `\pdfximage` and `\pdfrefximage` primitives. -If you want to use one picture more than once in your document, then the -following code is recommended: -\begtt \catcode`\<=13 -\newbox\mypic -\setbox\mypic = \hbox{\picw=3cm \inspic{<picture>}} - -My picture: \copy\mypic, again my picture: \copy\mypic, etc. -\endtt -This code downloads the picture data to the PFD output only once (when -`\setbox` is processed). Each usage of `\copy\mypic` puts only a pointer to -the picture data in the PDF. - -If you want to copy the same picture in different sizes, then choose -a \"basic size" used in `\setbox` and all different sizes can be realized by -the \^`\transformbox{<transformation>}{\copy\mypic}`. - -\_endinput - -2020-12-21: \puttext: \box0 in goup, bugfix -2020-04-12: \_public \clipinoval \clipincircle ; added, bug fixed - diff --git a/macros/luatex/optex/base/hi-syntax.opm b/macros/luatex/optex/base/hi-syntax.opm deleted file mode 100644 index eb6d747914..0000000000 --- a/macros/luatex/optex/base/hi-syntax.opm +++ /dev/null @@ -1,223 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \hisyntax {Syntax highlithing of verbatim listings <2020-04-04>} % preloaded in format - - \_doc ----------------------------- - The following macros `\replfromto` and `\replthis` manipulate with the - verbatim text which has been read already and stored in the `\_tmpb` macro. - - The \`\replfromto` `{<from>}{<to>}{<what>}` finds first `<from>` then the - first `<to>` following by `<from>` pattern and the - `<text>` between them is packed to `#1`. - Then `<from><text><to>` is replaced by `<what>`. The `<what>` parameter - can use `#1` which is replaced by the `<text>`. - - The `\replfromto` continues by finding next `<from>`, then, next `<to>` - repeatedly over the whole verbatim text. If the verbatim text is ended by - opened `<from>` but not closing by `<to>` then `<to>` is appended to the - verbatim text automatically and the last part of the verbatim text is replaced too. - - First two parameters are expanded before usage of `\replfromto`. You can - use `\csstring\%` or something else here. - \_cod ----------------------------- - -\_def\_replfromto #1#2{\_edef\_tmpa{{#1}{#2}}\_ea\_replfromtoE\_tmpa} -\_def\_replfromtoE#1#2#3{% #1=from #2=to #3=what to replace - \_def\_replfrom##1#1##2{\_addto\_tmpb{##1}% - \_ifx\_end##2\_ea\_replstop \_else \_afterfi{\_replto##2}\_fi}% - \_def\_replto##1#2##2{% - \_ifx\_end##2\_afterfi{\_replfin##1}\_else - \_addto\_tmpb{#3}% - \_afterfi{\_replfrom##2}\_fi}% - \_def\_replfin##1#1\_end{\_addto\_tmpb{#3}\_replstop}% - \_edef\_tmpb{\_ea}\_ea\_replfrom\_tmpb#1\_end#2\_end\_end\_relax -} -\_def\_replstop#1\_end\_relax{} -\_def\_finrepl{} - - \_doc ----------------------------- - The \`\replthis` `{<pattern>}{<what>}` replaces each `<pattern>` by `<what>`. - Both parameters of `\replthis` are expanded first. - \_cod ----------------------------- - -\_def\_replthis#1#2{\_edef\_tmpa{{#1}{#2}}\_ea\_replstring\_ea\_tmpb \_tmpa} - -\_public \replfromto \replthis ; - - \_doc ----------------------------- - The patterns `<from>`, `<to>` and `<pattern>` are not found when they are - hidden in braces `{...}`. Example: - \begtt - \replfromto{/*}{*/}{\x C{/*#1/*}} - \endtt - replaces all C comments by `\x C{...}`. The patterns inside `{...}` are - not used by next usage of `\replfromto` or `\replthis` macros. - - The \`\_xscan` macro does replacing `\x` by `\z` in the post-processing - phase. The `\x <letter>{<text>}` expands to `\_xscan {<letter>}<text>^^J^`. - If `#3` is `\_end` then it signals that something wrong happens, the - `<from>` was not terminated by legal `<to>` when `\replfromto` did work. - We must to fix it by the \`\_xscanR` macro. - \_cod ----------------------------- - -\_def\_xscan#1#2^^J#3{\_ifx\_end#3 \_ea\_xscanR\_fi - \z{#1}{#2}% - \_ifx^#3\_else ^^J\_afterfi{\_xscan{#1}#3}\_fi} -\_def\_xscanR#1\_fi#2^{^^J} - - \_doc ----------------------------- - The \`\hicolor` `<letter> <color>` defines `\_z<letter>{<text>}` - as `{<color><text>}`. It should be used in the context of - `\x <letter>{<text>}` macros. - \_cod ----------------------------- - -\_def\_hicolor #1#2{\_sdef{_z:#1}##1{{#2##1}}} - - \_doc ----------------------------- - The \`\hisyntax``{<name>}` re-defines default \^`\_prepareverbdata``<macro><verbtext>` - in order to it does more things: - It saves `<verbtext>` to `\_tmpb`, appends `\n` around spaces and - `^^J` characters in pre-processing phase, it opens `hisyntax-<name>.opm` - file if `\_hisyntax<name>` is not defined. Then `\_the\_isyntax<name>` - is processed. Finally, the post-processing phase is realized by setting - appropriate values to `\x` and `\y` macros and doing - `\_edef\_tmpb{\_tmpb}`. - \_cod ----------------------------- - -\_def\_hisyntax#1{\_def\_prepareverbdata##1##2{% - \_let\n=\_relax \_let\b=\_relax \_def\t{\n\_noexpand\t\n}\_let\_start=\_relax - \_adef{ }{\n\_noexpand\ \n}\_edef\_tmpb{\_start^^J##2\_end}% - \_replthis{^^J}{\n^^J\b\n}\_replthis{\b\n\_end}{\_end}% - \_let\x=\_relax \_let\y=\_relax \_let\z=\_relax \_let\t=\_relax - \_hicomments % keeps comments declared by \commentchars - \_endlinechar=`\^^M - \_lowercase{\_def\_tmpa{#1}}% - \_ifcsname _hialias:\_tmpa\_endcsname \_edef\_tmpa{\_cs{_hialias:\_tmpa}}\_fi - \_ifx\_tmpa\_empty \_else - \_unless \_ifcsname _hisyntax\_tmpa\_endcsname - \_isfile{hisyntax-\_tmpa.opm}\_iftrue \_opinput {hisyntax-\_tmpa.opm} \_fi\_fi - \_ifcsname _hisyntax\_tmpa\_endcsname - \_ifcsname hicolors\_tmpa\_endcsname - \_cs{_hicolors\_tmpa}=\_cs{hicolors\_tmpa}% - \_else - \_if^\_the\_hicolors^\_else - \_ifcsname _hicolors\_tmpa\_endcsname - \_global\_cs{_hicolors\_tmpa}=\_hicolors \_global\_hicolors={}% - \_fi\_fi\_fi - \_ea\_the \_csname _hisyntax\_tmpa\_endcsname % \_the\_hisyntax<name> - \_else\_opwarning{Syntax "\_tmpa" undeclared (no file hisyntax-\_tmpa.opm)} - \_fi\_fi - \_replthis{\_start\n^^J}{}\_replthis{^^J\_end}{^^J}% - \_def\n{}\_def\b{}\_adef{ }{\_dsp}% - \_bgroup \_lccode`\~=`\ \_lowercase{\_egroup\_def\ {\_noexpand~}}% - \_def\w####1{####1}\_def\x####1####2{\_xscan{####1}####2^^J^}% - \_def\y####1{\_ea \_noexpand \_csname ####1\_endcsname}% - \_edef\_tmpb{\_tmpb}% - \_def\z####1{\_cs{_z:####1}}% - \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}% - \_localcolor -}} -\_public \hisyntax \hicolor ; - - \_doc ----------------------------- - Aliases for languages can be declared like this. - When `\hisyntax{xml}` is used then this is the same as `\hisyntax{html}`. - \_cod ----------------------------- - -\_sdef{_hialias:xml}{html} -\_sdef{_hialias:json}{c} - -\_endcode % ------------------------------------------- - -The user can write - -\begtt \adef/{\_csstring\\} -\begtt \hisytnax{C} -... -/endtt -\endtt -and the code is colorized by C syntax. -The user can write `\everytt={\hisyntax{C}}` and all verbatim listings are -colorized. - -The \^`\hisyntax``{<name>}` reads the file `hisyntax-<name>.opm` where the -colorization is declared. The parameter `<name>` is case insensitive and the -file name must include it in lowercase letters. For example, the file -`hisyntax-c.opm` looks like this: - -\printdoc hisyntax-c.opm - -\OpTeX/ provides `hisyntax-{c,python,tex,html}.opm` files. -You can take inspiration from these files and declare more languages. - -User can re-declare colors by `\hicolors={...}` This value has precedence -before `\_hicolors<name>` values declared in the `hicolors-<name>.opm` file. -What exactly to do: copy `\_hicolors<name>={...}` -from `hicolors-<name>.opm` to your document, -rename it as `\hicolors={...}` and do you own colors modifications. - -Another way to set non-default colors is to declare -`\newtoks\hicolors<name>` (without the `_` prefix) and set the colors palette here. -It has precedence before `\_hicolors<name>` (with the `_` prefix) declared in -the `hicolors-<name>.opm` file. -This is useful when there are more hi-syntax languages used in one document. - -\secl4 Notes for hi-syntax macro writers -The file `hisyntax-<name>.opm` is read only once in the \TeX/ group. -If there are definitions then they must be declared as global. - -The `hisyntax-<name>.opm` file must (globally) declare `\_hisyntax<name>` tokens string -where the action over verbatim text is declared typically by `\replfromto` or -`\replthis` macros. - -The verbatim text is prepared by {\em pre-processing phase}, then the -`\_hisyntax<name>` is applied and then {\em post-processing phase} does final -corrections. Finally, the verbatim text is printed line by line. - -The pre-processing phase does: - -\begitems -* Each space is replaced by {\visiblesp`\n\ \n`}, so `\n<word>\n` should be a pattern to - finding whole words (no subwords). The `\n` control sequence is removed in - the post-processing phase. -* Each end of line is represented by `\n^^J\n`. -* The `\_start` control sequence is added before the verbatim text and the `\_end` control - sequence is appended to the end of the verbatim text. These control - sequences are removed in the post-processing phase. -\enditems - -Special macros are working only in a group when processing the verbatim -text. - - -\begitems -* `\n` means noting but it should be used as a boundary of words as mentioned above. -* `\t` means a tabulator. It is prepared as `\n\t\n` because it can be at - the boundary of a word. -* `\x <letter>{<text>}` can be used as replacing text. Suppose the example - \begtt - \replfromto{/*}{*/}{\x C{/*#1*/}} - \endtt - This replaces all C comments `/*...*/` by `\x C{/*...*/}`. But the - C comments may span more lines, i.e. the `^^J` should be inside it. - - The macro `\x <letter>{<text>}` is replaced by one or more - `\z <letter>{<text>}` in post-processing phase where each parameter `<text>` of - `\z` keeps inside one line. Inside-line parameters are represented - by `\x C{<text>}` and they are replaced to `\z C{<text>}` without any change. - But: - \begtt \catcode`\<=13 - \x C{<text1>^^J<text3>^^J<text3>} - is replaced by - \z C{<text1>}^^J\z C{<text2>}^^J\z C{<text3>} - \endtt - The `\z <letter>{<text>}` is expanded to `\_z:<letter>{<text>}` and if - `\hicolor <letter> <color>` is declared then - `\_z:<letter>{<text>}` expands to `{<color><text>}`. So, required color is - activated at all lines (separately) where C comment spans. -* `\y {<text>}` is replaced by `\<text>` in the post processing phase. It should - be used for macros without a parameter. You cannot use unprotected macros - as replacement text before the post-processing phase, because the post-processing - phase is based on expansion whole verbatim text. -\enditems - diff --git a/macros/luatex/optex/base/hisyntax-c.opm b/macros/luatex/optex/base/hisyntax-c.opm deleted file mode 100644 index 3c1f228f88..0000000000 --- a/macros/luatex/optex/base/hisyntax-c.opm +++ /dev/null @@ -1,66 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \_hisyntaxc {Syntax highlighting for C sources <2020-04-03>} - -\_newtoks \_hisyntaxc \_newtoks \_hicolorsc - -\_global\_hicolorsc={% colors for C language - \_hicolor K \Red % Keywords - \_hicolor S \Magenta % Strings - \_hicolor C \Green % Comments - \_hicolor N \Cyan % Numbers - \_hicolor P \Blue % Preprocessor - \_hicolor O \Blue % Non-letters -} -\_global\_hisyntaxc={% - \_the\_hicolorsc - \_let\c=\_relax \_let\e=\_relax \_let\o=\_relax - \_replfromto {/*}{*/} {\x C{/*#1*/}}% /*...*/ - \_replfromto {//}{^^J} {\z C{//#1}^^J}% //... - \_replfromto {\_string#}{^^J} {\z P{\##1}^^J}% #include ... - \_replthis {\_string\"} {{\_string\"}}% \" protected inside strings - \_replfromto {"}{"} {\x S{"#1"}}% "..." - % - \_edef\_tmpa {()\_string{\_string}+-*/=[]<>,:;\_pcent\_string&\_string^|!?}% non-letters - \_ea \_foreach \_tmpa - \_do {\_replthis{#1}{\n\o#1\n}} - \_foreach % keywords - {auto}{break}{case}{char}{continue}{default}{do}{double}% - {else}{entry}{enum}{extern}{float}{for}{goto}{if}{int}{long}{register}% - {return}{short}{sizeof}{static}{struct}{switch}{typedef}{union}% - {unsigned}{void}{while} - \_do {\_replthis{\n#1\n}{\z K{#1}}} - \_replthis{.}{\n.\n} % numbers - \_foreach 0123456789 - \_do {\_replfromto{\n#1}{\n}{\c#1##1\e}} - \_replthis{\e.\c}{.} - \_replthis{\e.\n}{.\e} - \_replthis{\n.\c}{\c.} - \_replthis{e\e\o+\c}{e+}\_replthis{e\e\o-\c}{e-} - \_replthis{E\e\o+\c}{E+}\_replthis{E\e\o-\c}{E-} - \_def\o#1{\z O{#1}} - \_def\c#1\e{\z N{#1}} -} - -\_endcode %------------------------------------------------ - - -Each `hisyntax-<name>.opm` file must declare the token list -`\_hisyntax<name>` using `\newtoks` and must declare the syntax declaration -in it. The second token list `\_hicolors<name>` is optional but recommended. -User can re-declare his/her own colors by `\hicolors` which has precedence -before `\_hicolors<name>`. - -The public variants can be declared if you want to give these token lists to -the user namespace. But it is not explicitly needed. - -All settings must be global here because the file is typically read inside -a group and we need not read it repeatedly before each code chunk -again and again. - -Note that `\foreach` is used for each non-letters (expanded via \string -because we needn't treat with active or special TeX characters). The -keyword is applied in the `\foreach` loop too. - -See `hi-sytax.opm` for more information about `\hicolor`, `\replfromto` and -`\replthis` macros. diff --git a/macros/luatex/optex/base/hisyntax-html.opm b/macros/luatex/optex/base/hisyntax-html.opm deleted file mode 100644 index 3f0be6a23e..0000000000 --- a/macros/luatex/optex/base/hisyntax-html.opm +++ /dev/null @@ -1,31 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl\_hisyntaxhtml {Syntax highlighting for html or xml sources <2020-04-03>} - -\_newtoks\_hisyntaxhtml \_newtoks\_hicolorshtml - -\_global\_hicolorshtml={% colors in html codes - \_hicolor A \Cyan % <, > and parameters - \_hicolor T \Red % tag names - \_hicolor C \Green % comments - \_hicolor E \Blue % HTML entities - \_hicolor S \Magenta % strings in parameters -} -\_global\_hisyntaxhtml={ - \_the\_hicolorshtml - \_replfromto{<!--}{-->}{\x C{<!--#1-->}} - \_replthis{<}{\y{_hitaghtml}} - \_replthis{\_string&}{\y{_hientityhtml}} -} -\_gdef\_hitaghtml#1>{\_hitaghtmlA#1\ >} -\_gdef\_hitaghtmlA#1\ #2>{\z A{<}\z T{#1}\_def\_tmpb{#2^}% - \_if^\_tmpb - \_else \_space - \_replthis{\ ^}{}\_replfromto{"}{"}{\_histringhtml{"##1"}}\z A{\_tmpb}\_fi - \z A{>}% -} -\_gdef\_histringhtml#1{\_visiblesp \z S{#1}} -\_gdef\_hientityhtml#1;{\z E{\}} - -\_endcode %------------------------------------------------ - diff --git a/macros/luatex/optex/base/hisyntax-python.opm b/macros/luatex/optex/base/hisyntax-python.opm deleted file mode 100644 index 6250eed0e3..0000000000 --- a/macros/luatex/optex/base/hisyntax-python.opm +++ /dev/null @@ -1,82 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \_hisyntaxpython {Syntax highlighting for Python sources <2020-04-04>} - -\_newtoks \_hisyntaxpython \_newtoks \_hicolorspython - -\_global\_hicolorspython={% colors for Python language - \_hicolor M \Orange % Multi line strings - \_hicolor S {\_visiblesp \Grey} % Single line strings - \_hicolor C \Green % Comments - \_hicolor K \LightBlue % Keywords - \_hicolor O \Blue % Operators - \_hicolor N \Red % Numbers - \_hicolor D \Magenta % def names - \_hicolor L \Black % class names - \_hicolor R \Magenta % Decorators -} -\_global\_hisyntaxpython={% - \_the\_hicolorspython - \_let\s=\_relax \_let\c=\_relax \_let\e=\_relax \_let\o=\_relax - \_replthis{\_string\"}{{\_string\"}} % protect \", \' - \_replthis{\_string\'}{{\_string\'}} - % - \_replfromto{\_string#}{^^J}{\z C{\##1}^^J} % comments - % - \_replthis{'''}{\_noexpand\_hipystr0{'''}M} % search string marks - \_replthis{"""}{\_noexpand\_hipystr1{"""}M} - \_replthis{"}{\_noexpand\_hipystr2{"}S} - \_replthis{'}{\_noexpand\_hipystr3{'}S} - \_edef\_tmpb{\_tmpb} % realize string marks - % - \_foreach {br}{Br}{bR}{BR}{rb}{rB}{Rb}{RB}uUrRbB % string prefixes - \_do {\_replthis{#1\s}{\_noexpand\_hipystrpre#1}} - \_def\s{} - \_edef\_tmpb{\_tmpb} - % - \_edef \_tmpa {+-*./=<>()[]:,;!|\_pcent % operators - \_string{\_string}@\_string&\_string~\_string^} - \_ea\_foreach \_tmpa - \_do {\_replthis{#1}{\n\o#1\n}} - % - \_foreach % keywords - {and}{as}{assert}{async}{await}{break}{continue}{del}{elif}{else}{except}% - {exec}{False}{finally}{for}{from}{global}{if}{import}{in}{is}{lambda}{None}% - {nonlocal}{not}{or}{pass}{print}{raise}{return}{True}{try}{while}{with}{yield}% - \_do {\_replthis{\n#1\n}{\z K{#1}}} - \_replfromto{\n def\n}{\n\o(\n}{\z K{def}\x D{#1}\n\o(\n} - \_replfromto{\n class\n}{\n\o(\n}{\z K{class}\x L{#1}\n\o(\n} - % - \_foreach 0123456789 % numbers - \_do {\_replfromto{\n#1}{\n}{\c#1##1\e}} - % - \_replthis{\e\o.\c}{.} - \_replthis{\e\o.\n}{.\e} - \_replthis{\n\o.\c}{\c.} - \_replthis{e\e\o+\c}{e+}\_replthis{e\e\o-\c}{e-} - \_replthis{E\e\o+\c}{E+}\_replthis{E\e\o-\c}{E-} - \_replthis{\e j}{j\e} - % - \_replfromto{\n\o@\n}{^^J}{\z R{#1}^^J} % decorators - % - \_def\o#1{\z O{#1}} - \_def\c#1\e{\z N{#1}} -} - -\_gdef\_hipystr#1#2#3#4\_hipystr#5#6#7{% - \_ifx#1#5\s\x#3{#2#4#2}% - \_else \_afterfi{\_hipystr#1{#2}#3#4#6}\_fi -} -\_gdef\_hipystrpre#1\x#2{\x#2{#1}\x#2} - -\_ifx\LightBlue\_undefined \_gdef\LightBlue {\_setcmykcolor{1 0.43 0 0}}\_fi -\_ifx\Orange\_undefined \_gdef\Orange {\_setcmykcolor{0 0.64 1 0}}\_fi - -\_endcode %------------------------------------------------ - -This code was greatly inspired by the OPMac hisyntax macros for Python: - - https://gitlab.fit.cvut.cz/krajnpet/PySyntax - -created by Petr Krajnik. - diff --git a/macros/luatex/optex/base/hisyntax-tex.opm b/macros/luatex/optex/base/hisyntax-tex.opm deleted file mode 100644 index 583676a2ca..0000000000 --- a/macros/luatex/optex/base/hisyntax-tex.opm +++ /dev/null @@ -1,38 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl\_hisyntaxtex {Syntax highlighting for TeX sources <2020-04-03>} - -\_newtoks\_hisyntaxtex \_newtoks\_hicolorstex - -\_global\_hicolorstex={% colors in TeX codes - \_hicolor S \Blue % control sequences - \_hicolor B \Magenta % {, }, $ - \_hicolor C \Green % comments -} -\_global\_hisyntaxtex={ - \_the\_hicolorstex - \_replthis{\_string\%}{\y{_createcs}{\_csstring\%}} - \_replfromto{\_csstring\%}{^^J}{\x C{\_csstring\%#1}^^J} - \_replthis{\_string\\}{\y{_createcs}{\_csstring\\}} - \_replthis{\_string\{}{\y{_createcs}{\_csstring\{}} - \_replthis{\_string\}}{\y{_createcs}{\_csstring\}}} - \_replthis{\_string\$}{\y{_createcs}{\_csstring\$}} - \_replthis{\_csstring\\}{\y{_createcs}} - \_replthis{\_csstring\{}{\x B{\_csstring\{}} - \_replthis{\_csstring\}}{\x B{\_csstring\}}} - \_replthis{\_csstring\$}{\x B{\_csstring\$}} -} -\_gdef\_createcs#1{\_def\_csletters{#1}% - \_ifcat a\_noexpand#1\_afterfi{\_futurelet\_next\_createcsA}% - \_else \_ea\_createcsF \_fi -} -\_gdef\_createcsA{\_ifcat a\_noexpand\_next \_ea\_createcsB \_else \_ea\_createcsF \_fi} -\_gdef\_createcsB#1{\_addto\_csletters{#1}\_futurelet\_next\_createcsA} -\_gdef\_createcsF{\z S{\_csstring\\\_csletters}} -\_gdef\_createbb{\_ea\_createcs\_csstring\\} - -\_endcode %------------------------------------------------ - -The `\_createcs` reads next tokens as the tokenizer does it until the name -of a control sequence is read. It is saved to the `\_csletters` macro and -the macro \_createcsF prints it. diff --git a/macros/luatex/optex/base/hyperlinks.opm b/macros/luatex/optex/base/hyperlinks.opm deleted file mode 100644 index 5fc8a32233..0000000000 --- a/macros/luatex/optex/base/hyperlinks.opm +++ /dev/null @@ -1,157 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \ulink {Hyperlinks <2021-01-27>} % preloaded in format - - \_doc ---------------------------- - \`\dest``[<type>:<spec>]` creates a destination of internal links. The - destination is declared in the format `<type>:<spec>`. If the \^`\hyperlinks` - command in not used, then `\dest` does nothing else it is set to `\_destactive`. - The \`\_destactive` is implemented by `\_pdfdest` primitive. It creates a box - in which the destination is shifted by \`\_destheight`. The reason is that - the destination is exactly at the top border of the PDF viewer but we want to see - the line where the destination is. The destination box is positioned by a - different way dependent on the current vertical or horizontal mode. - \_cod ---------------------------- - -\_def\_destheight{1.4em} -\_def\_destactive[#1:#2]{\_if$#2$\_else\_ifvmode - \_tmpdim=\_prevdepth \_prevdepth=-1000pt - \_destbox[#1:#2]\_prevdepth=\_tmpdim - \_else \_destbox[#1:#2]% - \_fi\_fi -} -\_def\_destbox[#1]{\_vbox to\_zo{\_kern-\_destheight \_pdfdest name{#1} xyz\_vss}} -\_def\_dest[#1]{} -\_public \dest ; - - \_doc ---------------------------- - \`\link``[<type>:<spec>]{<color>}{<text>}` creates an internal link to \^`\dest` - with the same `<type>:<spec>`. You can have more links with the same - `<type>:<spec>` but only one `\dest` in the document. If \^`\hyperlinks` - command is not used, then `\link` only prints `<text>` else it is set to - `\_linkactive`. - The \`\_linkactive` is implemented by `\_pdfstartlink...\_pdfendlink` - primitives. - \nl - \`\ilink``[<type>:<spec>]{<text>}` is equivalent to `\_link` but - the `<color>` is used from \^`\hyperlinks` declaration. - \_cod ---------------------------- - -\_protected\_def\_linkactive[#1:#2]#3#4{\_leavevmode\_pdfstartlink height.9em depth.3em - \_pdfborder{#1} goto name{#1:#2}\_relax {#3#4}\_pdfendlink -} -\_protected\_def\_link[#1]#2#3{\_leavevmode{#3}} -\_protected\_def\_ilink[#1]#2{\_leavevmode{#2}} -\_public \ilink \link ; - - \_doc ---------------------------- - \`\ulink``[<url>]{<text>}` creates external link. It prints only the `<text>` by default but - the \^`\hyperlinks` declaration defines it as \`\_urlactive``[url:<url>]{<text>}`. - The external link is created by the `\_pdfstartlink...\pdfendlink` primitives. - The `<url>` is detokenized with `\escapechar=-1` before it is used, so - `\%`, `\#` etc. can be used in the `<url>`. - \_cod ---------------------------- - -\_protected\_def\_urlactive[#1:#2]#3#4{\_leavevmode{\_escapechar=-1 - \_pdfstartlink height.9em depth.3em \_pdfborder{#1}% - user{/Subtype/Link/A <</Type/Action/S/URI/URI(\_detokenize{#2})>>}\_relax - {#3#4}\_pdfendlink}% -} -\_def\_ulink[#1]#2{\_leavevmode{#2}} -\_def\_urlcolor{} -\_public \ulink ; - - \_doc ---------------------------- - The `\_pdfstartlink` primitive uses `\_pdfborder{<type>}` in its parameter - (see \^`\_linkactive` or \^`\_urlactive` macros). The \`\_pdfborder``{<type>}` - expands to `attr{/C[? ? ?] /Border[0 0 .6]}` if the - `\_<type>border` (i.e.\ \`\_refborder`, \`\_citeborder`, \`\_tocborder`, - \`\_pgborder`, \`\_urlborder`, \`\_fntborder` or \`\_fnfborder`) - is defined. Users can define it in - order to create colored frames around active links. For example - `\def\_tocborder{1 0 0}` causes red frames in TOC (not printed, only visible - in PDF viewers). - \_cod ---------------------------- - -\_def\_pdfborder#1{\_ifcsname _#1border\_endcsname - attr{/C[\_csname _#1border\_endcsname] /Border[0 0 .6]}% - \_else attr{/Border[0 0 0]}\_fi -} - - \_doc ---------------------------- - \`\hyperlinks``{<ilink_color>}{<ulink_color>}` activates `\dest`, `\link`, - `\ilink`, `\ulink` in order they create links. These macros are redefined - here to their \"active" version. - \_cod ---------------------------- - -\_def\_hyperlinks#1#2{% - \_let\_dest=\_destactive \_let\_link=\_linkactive - \_def\_ilink[##1]##2{\_link[##1]{\_localcolor#1}{##2}}% - \_def\_ulink[##1]##2{\_urlactive[url:##1]{\_localcolor#2}{##2}}% - \_public \dest \ilink \ulink \link ;% -} -\_public \hyperlinks ; - - \_doc ---------------------------- - \`\url``{<url>}` does approximately the same as \^`\ulink``[<url>]{<url>}`, but - more work is done before the `\ulink` is processed. The link-version of <url> - is saved to `\_tmpa` and the printed version in `\_tmpb`. The printed - version is modified in order to set breakpoints to special places of the - `<url>`. For example `//` is replaced by `\_urlskip/\_urlskip/\_urlbskip` - where `\urlskip` adds a small nonbreakable glue between these two slashes and - before them and `\_urlbskip` adds a breakable glue after them. - \nl - The text version of the `<url>` is printed in \`\_urlfont`. - \_cod ---------------------------- - -\_def\_url#1{{% - \_def\_tmpa{#1}\_replstring\_tmpa {\|}{}% - {\_escapechar=-1 \_ea}\_ea\_edef\_ea\_tmpa\_ea{\_detokenize\_ea{\_tmpa}}% - \_def\_tmpb{#1}\_replstring\_tmpb {\|}{\_urlbskip}% - \_replstring\_tmpb {//} {{\_urlskip\_urlslashslash\_urlbskip}}% - \_replstring\_tmpb {/} {{\_urlskip/\_urlbskip}}% - \_replstring\_tmpb {.} {{\_urlskip.\_urlbskip}}% - \_replstring\_tmpb {?} {{\_urlskip?\_urlbskip}}% - \_replstring\_tmpb {=} {{\_urlskip=\_urlbskip}}% - \_ea\_replstring\_ea\_tmpb \_ea{\_string &} {{\_urlbskip\_char`\& \_urlskip}}% - \_ea\_replstring\_ea\_tmpb \_ea{\_bslash|} {{\_penalty0}}% - \_ea\_ulink \_ea[\_tmpa] {\_urlfont\_tmpb\_null}% -}} -\_def\_urlfont{\_tt} -\_def\_urlskip{\_null\_nobreak\_hskip0pt plus0.05em\_relax} -\_def\_urlbskip{\_penalty100 \_hskip0pt plus0.05em\_relax} -\_def\_urlslashslash{/\_urlskip/} - -\_public \url ; - -\_endcode % ---------------------------------------- - - -There are four types of internal links and one type of external link: - -\begitems -* `ref:<label>` -- the destination is created when `\label[<label>]` is used, - see also the section \ref[references]. -* `toc:<tocrefnum>` -- the destination is created at chap/sec/secc titles, - see also the section \ref[maketoc]. -* `pg:<gpageno>` -- the destination is created at beginning of each page, - see also the section \ref[output]. -* `cite:<bibnum>` -- the destination is created in bibliography reference, - see also the section \ref[bib]. -* `url:<url>` -- used by `\url` or `\ulink`, - see also the end of this section. -\enditems - -The `<tocrefnum>`, `<gpageno>`, and `<bibnum>` are numbers starting from one and -globally incremented by one in the whole document. The registers \^`\tocrefnum`, -\^`\gpageno` and \^`\bibnum` are used for these numbers. - -When a chap/sec/secc title is prefixed by `\label[<label>]`, then both types -of internal links are created at the same destination place: -`toc:<tocrefnum>` and `ref:<label>`. - -\_endinput - -2021-01-27 \public \link added to \hyperlinks, bug fixed. -2020-04-22 \| in \url: bug fixed -2020-03-15 introduced
\ No newline at end of file diff --git a/macros/luatex/optex/base/hyphen-lan.opm b/macros/luatex/optex/base/hyphen-lan.opm deleted file mode 100644 index dad0b26657..0000000000 --- a/macros/luatex/optex/base/hyphen-lan.opm +++ /dev/null @@ -1,245 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \langlist {Initialization of hypenation patterns <2020-03-10>} % preloaded in format - - \_doc ----------------------------- - The <iso-code> means a shortcut of language name (mostly by ISO 639-1). - The following control sequences are used for language switching: - \begitems - * `\_lan:<number>` expands to `<iso-code>` of the language. - The <number> is an internal number of languages used as a value of - `\language` register. - * `\_ulan:<long-lang>` expands to `<iso-code>` too. This is transformation - from long name of language (lowercase letters) to <iso-code>. - * `\_<iso-code>Patt` (for example `\_csPatt`) is the language `<number>` declared by `\chardef`. - * `\<iso-code>lang` - (for example \`\enlang`, \`\cslang`, \`\sklang`, \`\delang`, \`\pllang`) - is language selector. It exists in two states - \begitems - * Initialization state: when `\<iso-code>lang` is used first then it - must load the patterns into memory using Lua code. If it is done then - the `\<iso-code>lang` re-defines itself to the processing state. - * Processing state: it only sets `\language=\_<iso-code>Patt`, i.e it - selects the hyphenation patterns. It does a little more - language-dependent work, as mentioned below. - \enditems - * `\_langspecific:<isocode>` is processed by `\<iso-code>lang` and it - should include language-specific macros declared by the user or macro designer. - \enditems - The USenglish patters are preloaded first: - \_cod ----------------------------- - -\_chardef\_enPatt=0 -\_def\_pattlist{\_enPatt=0} -\_def\_langlist{en(USenglish)} -\_sdef{_lan:0}{en} -\_sdef{_ulan:usenglish}{en} -\_def\_enlang{\_uselang{en}\_enPatt23} % \lefthyph=2 \righthyph=3 -\_def\enlang{\_enlang} -\_sdef{_langspecific:en}{\_nonfrenchspacing} - -\_lefthyphenmin=2 \_righthyphenmin=3 % disallow x- or -xx breaks -\_input hyphen % en(USenglish) patterns from TeX82 - - \_doc ----------------------------- - \`\_preplang` `<iso-code> <long-lang> <hyph-file-spec> <number> <pre-hyph><post-hyph>` - prepares the\nl `\<iso-code>lang` to its initialization state. Roughly - speaking, it does: - \begtt \catcode`\<=13 - \chardef\_<iso-code>Patt = <number> - \def\_lan:<number> {<iso-code>} - \def\_ulan:<long-lang> {<iso-code>} - \def\_<iso-code>lang {% - \_loadpattrs <hyph-file-spec> <number> <long-lang> % loads patterns using Lua code - \gdef\_<iso-code>lang {\_uselang{<iso-code>}\_<iso-code>Patt <pre-hyph><post-hyph>} - \_<iso-code>lang % runs itself in processing state - } - \def\<iso-code>lang {\_<iso-code>lang} % public version \<iso-code>lang - \endtt - You can see that `\<iso-code>lang` runs \^`\_loadpattrs` and - \^`\_uselang` first (in initialization state) and it runs - only \^`\_uselang` when it is called again (in processing state). - \_cod ----------------------------- - -\_def\_preplang #1 #2 #3 #4 #5 {% - \_ea\_chardef \_csname _#1Patt\_endcsname=#4 - \_sdef{_lan:#4}{#1}\_lowercase{\_sdef{_ulan:#2}}{#1}% - \_def\_next{\_ea\_noexpand\_csname _#1lang\_endcsname}% - \_ea\_edef \_csname _#1lang\_endcsname {% - \_noexpand\_loadpattrs #3 #4 #2 % loads patterns - \_gdef\_next{\_noexpand\_uselang{#1}\_csname _#1Patt\_endcsname #5}% re-defines itself - \_next % runs itself in processing state - } - \_addto\_langlist{ #1(#2)}% - \_sdef{#1lang\_ea}\_ea{\_csname _#1lang\_endcsname}% unprefixed \<isocode>lang -} - - \_doc ----------------------------- - \`\_loadpattrs` `<hyph-file-spec> <number> <long-lang>` - loads hyphenation patterns and hyphenation exceptions for given language - and registers them as `\language=<number>`. - - The <hyph-file-spec> is a part of full file name wich is read: - `hyph-<hyph-file-spec>.tex`. The patterns and hyphenation exceptions - are saved here in UTF-8 encoding. - The <hyph-file-spec> should be a list of individual <hyph-file-spec>'s - separated by commas, see the language Serbian below for an example. - \_cod ----------------------------- - -\_def\_loadpattrs#1 #2 #3 {% - \_wlog{Loading hyphenation #3: (#1) \_string\language=#2}% - \_begingroup\_setbox0=\_vbox{% we don't want spaces in horizontal mode - \_language=#2\_def\\{#3}% - \_let\patterns=\_patterns \_let\hyphenation=\_hyphenation \_def\message##1{}% - \_loadpattrsA #1,,% - }\_endgroup -} -\_def\_loadpattrsA #1,{\_ifx,#1,\_else - \_isfile {hyph-#1}\_iftrue \_opinput{hyph-#1}% - \_else \_opwarning{No hyph. patterns #1 for \\, missing package?}% - \_def\_opwarning##1{}\_fi - \_ea \_loadpattrsA \_fi -} - - \_doc ----------------------------- - \`\_uselang``{<iso-code>}\_<iso-code>Patt <pre-hyph><post-hyph>`\nl - sets `\language`, `\lefthyphenmin`, `\righthyphenmin` and runs - `\frenchspacing`. This default language-dependent settings - should be re-declared by `\_langspecific:<iso-code>` which is run - finally (it is `\relax` by default, only `\_langspecific:en` runs - \^`\nonfrenchspacing`). - \_cod ----------------------------- - -\_def\_uselang#1#2#3#4{\_language=#2\_lefthyphenmin=#3\_righthyphenmin=#4\_relax - \_frenchspacing % \nonfrenchspacing can be set in \cs{_langspecific:lan} - \_cs{_langspecific:#1}% -} - \_doc ----------------------------- - The \`\uselanguage` `{<long-lang>}` is defined here - (for compatibility with e-plain users). - \_cod ----------------------------- - -\_def\_uselanguage#1{\_lowercase{\_cs{_\_cs{_ulan:#1}lang}}} -\_public \uselanguage ; - - \_doc ----------------------------- - The numbers for languages are declared as fixed constants (no - auto-generated). This concept is inspired by CSplain. - There are typical numbers of languages in CSplain: 5=Czech in IL2, - 15=Czech in T1 and 115=Czech in Unicode. We keep these constants - but we load only Unicode patterns (greater than 100), of course. - \_cod ----------------------------- - -\_preplang enus USenglishmax en-us 100 23 -\_preplang engb UKenglish en-gb 101 23 -\_preplang it Italian it 102 22 -\_preplang ia Interlingua ia 103 22 -\_preplang id Indonesian id 104 22 - -\_preplang cs Czech cs 115 23 -\_preplang sk Slovak sk 116 23 -\_preplang de nGerman de-1996 121 22 -\_preplang fr French fr 122 22 -\_preplang pl Polish pl 123 22 -\_preplang cy Welsh cy 124 23 -\_preplang da Danish da 125 22 -\_preplang es Spanish es 126 22 -\_preplang sl Slovenian sl 128 22 -\_preplang fi Finnish fi 129 22 -\_preplang hu Hungarian hu 130 22 -\_preplang tr Turkish tr 131 22 -\_preplang et Estonian et 132 23 -\_preplang eu Basque eu 133 22 -\_preplang ga Irish ga 134 23 -\_preplang nb Bokmal nb 135 22 -\_preplang nn Nynorsk nn 136 22 -\_preplang nl Dutch nl 137 22 -\_preplang pt Portuguese pt 138 23 -\_preplang ro Romanian ro 139 22 -\_preplang hr Croatian hr 140 22 -\_preplang zh Pinyin zh-latn-pinyin 141 11 -\_preplang is Icelandic is 142 22 -\_preplang hsb Uppersorbian hsb 143 22 -\_preplang af Afrikaans af 144 12 -\_preplang gl Galician gl 145 22 -\_preplang kmr Kurmanji kmr 146 22 -\_preplang tk Turkmen tk 147 22 -\_preplang la Latin la 148 22 -\_preplang lac classicLatin la-x-classic 149 22 -\_preplang lal liturgicalLatin la-x-liturgic 150 22 -\_preplang elm monoGreek el-monoton 201 11 -\_preplang elp Greek el-polyton 202 11 -\_preplang grc ancientGreek grc 203 11 -\_preplang ca Catalan ca 204 22 -\_preplang cop Coptic cop 205 11 -\_preplang mn Mongolian mn-cyrl 206 22 -\_preplang sa Sanskrit sa 207 13 -\_preplang ru Russian ru 208 22 -\_preplang uk Ukrainian uk 209 22 -\_preplang hy Armenian hy 210 12 -\_preplang as Assamese as 211 11 -\_preplang hi Hindi hi 212 11 -\_preplang kn Kannada kn 213 11 -\_preplang lv Latvian lv 215 22 -\_preplang lt Lithuanian lt 216 22 -\_preplang ml Malayalam ml 217 11 -\_preplang mr Marathi mr 218 11 -\_preplang or Oriya or 219 11 -\_preplang pa Panjabi pa 220 11 -\_preplang ta Tamil ta 221 11 -\_preplang te Telugu te 222 11 - -\_preplang be Belarusian be 223 22 -\_preplang bg Bulgarian bg 224 22 -\_preplang bn Bengali bn 225 11 -\_preplang cu churchslavonic cu 226 12 -\_preplang deo oldGerman de-1901 227 22 -\_preplang gsw swissGerman de-ch-1901 228 22 -\_preplang eo Esperanto eo 229 22 -\_preplang fur Friulan fur 230 22 -\_preplang gu Gujarati gu 231 11 -\_preplang ka Georgian ka 232 12 -\_preplang mk Macedonian mk 233 22 -\_preplang oc Occitan oc 234 22 -\_preplang pi Pali pi 235 12 -\_preplang pms Piedmontese pms 236 22 -\_preplang rm Romansh rm 237 22 -\_preplang sr Serbian sh-cyrl,sh-latn 238 22 -\_preplang sv Swedish sv 239 22 -\_preplang th Thai th 240 23 -\_preplang ethi Ethiopic mul-ethi 241 11 - - \_doc ----------------------------- - The \`\langlist` includes names of all languages which are ready to load - and use their hyphenation patterns. This list is printed to the terminal and - to log at ini\TeX/ state here. It can be used when processing documents too. - \_cod ----------------------------- - -\_message{Language hyph.patterns ready to load: \_langlist. - Use \_string\<shortname>lang to initialize language, - \_string\cslang\_space for example} - -\_public \langlist ; - -\_endcode % --------------------------------------------- - - -Maybe, you need to do more language-specific actions than just switching -hyphenation patterns. For example, you need to load a specific font with a -specific script used in the selected language, you can define macros for -quotation marks depending on the language, etc. - -The example shows how to declare such language-specific things. - -\begtt -\def\langset #1 #2{\sdef{_langspecific:#1}{#2}} - -\langset fr {... declare French quotation marks} -\langset de {... declare German quotation marks} -\langset gr {... switch to Greek fonts family} -... etc. -\endtt - -Note that you need not set language-specific phrases (like `\today`) -by this code. Another concept is used for such tasks. See the -section~\ref[langphrases] for more details. diff --git a/macros/luatex/optex/base/if-macros.opm b/macros/luatex/optex/base/if-macros.opm deleted file mode 100644 index 462e496017..0000000000 --- a/macros/luatex/optex/base/if-macros.opm +++ /dev/null @@ -1,313 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \newif {Special if-macros, is-macros and loops <2021-02-03>} % preloaded in format - - \_doc ---------------------------- - \secc Classical \code{\\newif} - The \`\newif` macro implements boolean value. - It works as in plain \TeX. It means that - after `\newif\ifxxx` you can use `\xxxtrue` or - `\xxxfalse` to set the boolean value and use `\ifxxx true\else false\fi` - to test this value. The default value is false. - - The macro \`\_newifi` enables to declare `\_ifxxx` and to use `\_xxxtrue` and - `\_xxxfalse`. This means that it is usable for the internal namespace - (`_`prefixed macros). - \_cod ---------------------------- - -\_def\_newif #1{\_ea\_newifA \_string #1\_relax#1} -\_ea\_def \_ea\_newifA \_string\if #1\_relax#2{% - \_sdef{#1true}{\_let#2=\_iftrue}% - \_sdef{#1false}{\_let#2=\_iffalse}% - \_let#2=\_iffalse -} -\_def\_newifi #1{\_ea\_newifiA \string#1\_relax#1} -\_ea\_def \_ea\_newifiA \_string\_if #1\_relax#2{% - \_sdef{_#1true}{\_let#2=\_iftrue}% - \_sdef{_#1false}{\_let#2=\_iffalse}% - \_let#2=\_iffalse -} -\_public \newif ; - - \_doc ---------------------------- - \`\afterfi` `{<what to do>}<ignored>\fi` closes condition by `\fi` and processes - <what to do>. Usage: - \begtt - \if<something> \afterfi{<result is true>} \else \afterfi{<resut is false>} \fi - \endtt - \_cod ---------------------------- - -\_def\_afterfi#1#2\_fi{\_fi#1} -\_def\afterfi#1#2\fi{\_fi#1} - - \_doc ---------------------------- - \secc Loops - The \`\loop` `<codeA> \ifsomething <codeB>` \`\repeat` loops `<codeA><codeB>` - until `\ifsomething` is false. Then `<codeB>` is not executed and loop is - finished. This works like in plain \TeX, but implementation is somewhat - better (you can use `\else` clause after the `\ifsomething`). - - There are public version `\loop...\repeat` and private version - \`\_loop` ...\`\_repeat`. You cannot mix both versions in one loop. - - The `\loop` macro keeps its original plain TeX meaning. It is not - expandable and nested `\loop`s are possible only in a \TeX/ group. - \_cod ---------------------------- - -\_long\_def \_loop #1\_repeat{\_def\_body{#1}\_iterate} -\_long\_def \loop #1\repeat{\_def\_body{#1}\_iterate} -\_let \_repeat=\_fi % this makes \loop...\if...\repeat skippable -\_let \repeat=\_fi -\_def \_iterate {\_body \_ea \_iterate \_fi} - - \_doc ----------------------------- - \`\foreach` `<list>`\`\do` `{<what>}` - repeats `<what>` for each element of the - `<list>`. The `<what>` can include `#1` which is substituted by each - element of the `<list>`. The macro is expandable. - \nl - \`\foreach` `<list>`\`\do` `<parameter-mask>{<what>}` - reads parameters from <list> repeatedly and does <what> for each such reading. - The parameters are declared by <parameter-mask>. Examples: - \begtt - \foreach (a,1)(b,2)(c,3)\do (#1,#2){#1=#2 } - \foreach word1,word2,word3,\do #1,{Word is #1.} - \foreach A=word1 B=word2 \do #1=#2 {"#1 is set as #2".} - \endtt - Note that `\foreach <list>\do {<what>}` is equivalent to `\foreach <list>\do #1{<what>}`. - - Recommendation: it is better to use private variants of \`\_foreach`. - When the user writes `\input tikz` then `\foreach` macro is redefined! The - private variants use \`\_do` separator instead `\do` separator. - \_cod ----------------------------- - -\_newcount\_frnum % the numeric variable used in \fornum -\_def\_do{\_doundefined} % we need to ask \_ifx#1\_do ... - -\_long\_def\_foreach #1\_do #2#{\_isempty{#2}\_iftrue - \_afterfi{\_foreachA{#1}{##1}}\_else\_afterfi{\_foreachA{#1}{#2}}\_fi} -\_long\_def\_foreachA #1#2#3{\_putforstack - \_immediateassignment \_long\_gdef\_fbody#2{\_testparam##1..\_iftrue #3\_ea\_fbody\_fi}% - \_fbody #1#2\_finbody\_getforstack -} -\_def\_testparam#1#2#3\_iftrue{\_ifx###1\_empty\_ea\_finbody\_else} -\_def\_finbody#1\_finbody{} - -\_long\_def\foreach #1\do#2#{\_isempty{#2}\_iftrue - \_afterfi{\_foreachA{#1}{##1}}\_else\_afterfi{\_foreachA{#1}{#2}}\_fi} - - \_doc ----------------------------- - \`\fornum` `<from>..<to>` \`\do` `{<what>}` or - \`\fornumstep` `<num>: <from>..<to>` \`\do` `{<what>}` - repeats `<what>` for each number from `<from>` to `<to>` (with step `<num>` - or with step one). The `<what>` can include `#1` which is substituted by - current number. The <from>, <to>, <step> parameters can be numeric expressions. - The macro is expandable.\nl - The test in the \`\_fornumB` says: if (<to> $\string<$ <current number> - AND <step> is positive) or if (<to> $>$ <current number> AND <step> is - negative) then close loop by `\_getforstack`. Sorry, the condition is - writen by somewhat cryptoid \TeX/ language. - \_cod ----------------------------- - -\_def\_fornum#1..#2\_do{\_fornumstep 1:#1..#2\_do} -\_long\_def\_fornumstep#1:#2..#3\_do#4{\_putforstack - \_immediateassigned{% - \_gdef\_fbody##1{#4}% - \_global\_frnum=\_numexpr#2\_relax - }% - \_ea\_fornumB\_ea{\_the\_numexpr#3\_ea}\_ea{\_the\_numexpr#1}% -} -\_def\_fornumB #1#2{\_ifnum#1\_ifnum#2>0<\_else>\_fi \_frnum \_getforstack - \_else \_ea\_fbody\_ea{\_the\_frnum}% - \_immediateassignment\_global\_advance\_frnum by#2 - \_afterfi{\_fornumB{#1}{#2}}\_fi -} -\_def\fornum#1..#2\do{\_fornumstep 1:#1..#2\_do} -\_def\fornumstep#1:#2..#3\do{\_fornumstep #1:#2..#3\_do} - - \_doc ---------------------------- - The `\foreach` and `\fornum` macros can be nested and arbitrary combined. - When they are nested then use `##1` for the variable of nested level, - `####1` for the variable of second nested level etc. Example: - \begtt - \foreach ABC \do {\fornum 1..5 \do {letter:#1, number: ##1. }} - \endtt - Implementation note: - we cannot use \TeX/-groups for nesting levels because we want to do the - macros expandable. We must implement a special for-stack which saves the - data needed by `\foreach` and `\fornum`. The \`\_putforstack` is used - when `\for*` is initialized and \`\_getforstack` is used when the - `\for*` macro ends. The \`\_forlevel` variable keeps the current nesting - level. If it is zero, then we need not save nor restore any data. - \_cod ---------------------------- - -\_newcount\_forlevel -\_def\_putforstack{\_immediateassigned{% - \_ifnum\_forlevel>0 - \_sxdef{_frnum:\_the\_forlevel\_ea}{\_the\_frnum}% - \_global\_slet{_fbody:\_the\_forlevel}{_fbody}% - \_fi - \_incr\_forlevel -}} -\_def\_getforstack{\_immediateassigned{% - \_decr\_forlevel - \_ifnum\_forlevel>0 - \_global\_slet{_fbody}{_fbody:\_the\_forlevel}% - \_global\_frnum=\_cs{_frnum:\_the\_forlevel}\_space - \_fi -}} -\_ifx\_immediateassignment\_undefined % for compatibility with older LuaTeX - \_let\_immediateassigned=\_useit \_let\_immediateassignment=\_empty -\_fi - - \_doc ---------------------------- - User can define own expandable \"foreach" macro by - \`\foreachdef` `\macro <parameter-mask>{<what>}` - which can be used by `\macro {<list>}`. The macro reads repeatedly parameters from <list> - using <parameter-mask> and does <what> for each such reading. For example - \begtt - \foreachdef\mymacro #1,{[#1]} - \mymacro{a,b,cd,efg,} - \endtt - expands to [a][b][cd][efg]. Such user defined macros are more effecive during processing - than `\foreach` itself because they need not to operate with the for-stack. - \_cod ---------------------------- - -\_def\_foreachdef#1#2#{\_toks0{#2}% - \_long\_edef#1##1{\_ea\_noexpand\_csname _body:\_csstring#1\_endcsname - ##1\_the\_toks0 \_noexpand\_finbody}% - \_foreachdefA#1{#2}} -\_def\_foreachdefA#1#2#3{% - \_long\_sdef{_body:\_csstring#1}#2{\_testparam##1..\_iftrue #3\_cs{_body:\_csstring#1\_ea}\_fi}} - -\_public \foreachdef ; - - \_doc ---------------------------- - \secc Is-macros - There are a collection of macros - \^`\isempty`, \^`\istoksempty`, \^`\isequal`, \^`\ismacro`, - \^`\isdefined`, \^`\isinlist`, \^`\isfile` and \^`\isfont` - with common syntax: - \begtt \catcode`\<=13 - \issomething <params> \iftrue <codeA> \else <codeB> \fi - or - \issomething <params> \iffalse <codeB> \else <codeA> \fi - \endtt - The `\else` part is optional. The `<codeA>` is processed if - `\issomething<params>` generates true condition. The `<codeB>` - is processed if `\issomething<params>` generates false condition. - - The `\iftrue` or `\iffalse` is an integral part of this syntax - because we need to keep skippable nested `\if` conditions. - - Implementation note: - we read this `\iftrue` or `\iffalse` into unseparated parameter and repeat - it because we need to remove an optional space before this command. - - \medskip\noindent - \`\isempty` `{<text>}\iftrue` - is true if the `<text>` is empty. This macro is expandable.\nl - \`\istoksempty` `<tokens variable>\iftrue` - is true if the `<tokens variable>` is empty. It is expandable. - \_cod ---------------------------- - -\_long\_def \_isempty #1#2{\_if\_relax\_detokenize{#1}\_relax \_else \_ea\_unless \_fi#2} -\_def \_istoksempty #1#2{\_ea\_isempty\_ea{\_the#1}#2} -\_public \isempty \istoksempty ; - - \_doc ---------------------------- - \`\isequal` `{<textA>}{<textB>}\iftrue` - is true if the <textA> and <textB> are - equal, only from strings point of view, category codes are ignored. - The macro is expandable. - \_cod ---------------------------- - -\_def\_isequal#1#2#3{\_directlua{% - if "\_luaescapestring{\_detokenize{#1}}"=="\_luaescapestring{\_detokenize{#2}}" - then else tex.print("\_nbb unless") end}#3} -\_public \isequal ; - - \_doc ---------------------------- - \`\ismacro` `\macro{text}\iftrue` is true if macro is defined as {<text>}. - Category codes are ignored in this testing. The macro is expandable. - \_cod ---------------------------- - -\_def\_ismacro#1{\_ea\_isequal\_ea{#1}} -\_public \ismacro ; - - \_doc ---------------------------- - \`\isdefined` `{<csname>}\iftrue` is true if `\<csname>` is defined. - The macro is expandable. - \_cod ---------------------------- - -\_def\_isdefined #1#2{\_ifcsname #1\_endcsname \_else \_ea\_unless \_fi #2} -\_public \isdefined ; - - \_doc ---------------------------- - \`\isinlist` `\list{<text>}\iftrue` is true if the - `<text>` is included the macro body of the `\list`. - The category codes are relevant here. The macro is not expandable. - \_cod ---------------------------- - -\_long\_def\_isinlist#1#2{\_begingroup - \_long\_def\_tmp##1#2##2\_end/_% - {\_endgroup\_if\_relax\_detokenize{##2}\_relax \_ea\_unless\_fi}% - \_ea\_tmp#1\_endlistsep#2\_end/_% -} -\_public \isinlist ; - - \_doc ----------------------------- - \`\isfile` `{<filename>}\iftrue` is true if the file <filename> exists and are - readable by \TeX. - \_cod ----------------------------- - -\_newread \_testin -\_def\_isfile #1{% - \_openin\_testin ={#1}\_relax - \_ifeof\_testin \_ea\_unless - \_else \_closein\_testin - \_fi -} -\_public \isfile ; - - \_doc ----------------------------- - \`\isfont` `{<fontname or [fontfile]>}\iftrue` - is true if a given font exists. The result of this testing - is saved to the \`\_ifexistfam`. - \_cod ----------------------------- - -\_newifi \_ifexistfam -\_def\_isfont#1#2{% - \_begingroup - \_suppressfontnotfounderror=1 - \_font\_testfont={#1}\_relax - \_ifx\_testfont\_nullfont \_def\_tmp{\_existfamfalse \_unless} - \_else \_def\_tmp{\_existfamtrue}\_fi - \_ea \_endgroup \_tmp #2% -} -\_public \isfont ; - - \_doc ---------------------------- - The last macro \`\isnextchar` `<char>{<codeA>}{<codeB>}` - has a different syntax than all other is-macros. - It executes `<codeA>` if next character is equal to <char>. - Else the `<codeB>` is executed. The macro is not expandable. - \_cod ---------------------------- - -\_long\_def\_isnextchar#1#2#3{\_begingroup\_toks0={\_endgroup#2}\_toks1={\_endgroup#3}% - \_let\_tmp= #1\_futurelet\_next\_isnextcharA -} -\_def\_isnextcharA{\_the\_toks\_ifx\_tmp\_next0\_else1\_fi\_space} - -\_public \isnextchar ; - - -\_endcode - -2021-02-03 public version of \loop and \foreach are \long -2020-05-22 \foreach, \fornum: all settings are global, independent on TeX group -2020-05-06 \isnextchar: \let\tmp=#1 -> \let\tmp= #1 (bug fix, #1 should be space) -2020-05-02 \newif bug fix -2020-04-15 \fornumstep 3: 1..12 instead \fornum 1..12\step 3 -2020-04-15 \fornum, \foreach can be nested without groups -2020-04-01 implemented diff --git a/macros/luatex/optex/base/keyval.opm b/macros/luatex/optex/base/keyval.opm deleted file mode 100644 index b0462296b3..0000000000 --- a/macros/luatex/optex/base/keyval.opm +++ /dev/null @@ -1,82 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \readkv {Key-value dictionaries <2020-12-21>} % preloaded in format - - \_doc ---------------------------- - {\bf Implementation.} - The \`\readkv` expands its parameter and does replace-strings in order to - remove spaces around equal signs and after commas. Double commas are - removed. Then \`\_kvscan` reads the parameters list finished by the double - comma and saves values to `\_kv:<key>` macros.\nl - The \`\kv``{<key>}` expands the `\_kv:<key>` macro. If this macro isn't - defined then \`\_kvunknown` is processed. You can re-define it if you want. - \_cod ---------------------------- - -\_def\_readkv#1{\_ea\_def\_ea\_tmpb\_ea{#1}% - \_replstring\_tmpb{= }{=}\_replstring\_tmpb{ =}{=}% - \_replstring\_tmpb{, }{,}\_replstring\_tmpb{,,}{,}% - \_ea \_kvscan \_tmpb,,=,} -\_def\_kvscan #1#2=#3,{\_ifx#1,\_else \_sdef{_kv:#1#2}{#3}\_ea\_kvscan\_fi} -\_def\_kv#1{\_trycs{_kv:#1}{\_kvunknown}} -\_def\_kvunknown{???} - -\public \readkv \kv ; - -\_endcode - -Users or macro programmers can define macros with options in key=value format. -It means a comma-separated list of equations key=value. First, we give an -example. - -Suppose that you want to define a macro `\myframe` with options: color of -rules, color of text inside the frame, rule-width, space between text and -rules. You want to use this macro as: - -\begtt -\myframe [margins=5pt,rule-width=2pt,frame-color=\Red,text-color=\Blue] {text1} -or -\myframe [frame-color=\Blue] {text2} % other parameters are default -\endtt -% -You can define `\myframe` as follows: - -\begtt -\def\myframedefaults{% defaults: - frame-color=\Black, % color of frame rules - text-color=\Black, % color ot text nside the frame - rule-width=0.4pt, % width of rules used in the frame - margins=2pt, % space between text inside and rules. -} -\optdef\myframe [] #1{\bgroup - \ea\addto\ea\myframedefaults\ea{\ea,\the\opt}% - \readkv\myframedefaults - \rulewidth=\kv{rule-width} - \hhkern=\kv{margins}\vvkern=\kv{margins}\relax - \kv{frame-color}\frame{\kv{text-color}\strut #1}% - \egroup} -\endtt -% -We recommend using \^`\optdef` for defining macros with optional parameters -written in `[]`. Then the optional parameters are saved in the \^`\opt` tokens -register. First: we append the \^`\opt` (actual optional parameters) to -`\myframedefault` by \^`\addto` macro. -Second: we read the parameters by -\^`\readkv{<pramaters list>}` macro. -Third: the values can be used by expandable \^`\kv{<key>}` macro. -The \^`\kv{<key>}` returns `???` if such key is not declared. - -You can use keys without values in the parameters list too, but with -additional care. For example, suppose `draft` option without parameter. -If a user writes `\myframe [..., draft, ...]{text}` then `\myframe` should behave differently. -We have to add `DRAFTv=0,` in `\myframedefault` macro. -Moreover, `\myframe` macro must include preprocessing of `\myframedefault` using -\^`\replstring` which replaces the occurrence of `draft` by `DRAFTv=1`. -\begtt -\optdef\myframe [] #1{... - \ea\addto\ea\myframedefaults\ea{\the\opt}% - \replstring\myframedefaults{draft}{DRAFTv=1}% - \readkv\myframedefaults - ... - \ifnum\kv{DRAFTv}=1 draft mode\else normal mode\fi - ...} -\endtt diff --git a/macros/luatex/optex/base/languages.opm b/macros/luatex/optex/base/languages.opm deleted file mode 100644 index ff9373b720..0000000000 --- a/macros/luatex/optex/base/languages.opm +++ /dev/null @@ -1,188 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \_mtext {Languages <2021-01-21>} % preloaded in format - - \_doc ----------------------------- - Only four words are generated by \OpTeX/ macros: \"Chapter", - \"Table", \"Figure" and \"Subject". These phrases can be generated depending - on the current value of `\language` register, if you use \`\_mtext``{<phrase-id>}`, - specially `\_mtext{chap}`, `\_mtext{t}`, `\_mtext{f}` or `\_mtext{subj}`. - If your macros generate more words then - you can define such words by `\sdef{_mt:<phrase-id>:<lang>}` where - `<phrase-id>` is a label for the declared word and `<lang>` is a language shortcut - (iso code). - \_cod ----------------------------- - -\_def\_mtext#1{\_trycs{_mt:#1:\_trycs{_lan:\_the\_language}{en}} - {\_csname _mt:#1:en\_endcsname}} - -\_sdef{_mt:chap:en}{Chapter} \_sdef{_mt:chap:cs}{Kapitola} \_sdef{_mt:chap:sk}{Kapitola} -\_sdef{_mt:t:en}{Table} \_sdef{_mt:t:cs}{Tabulka} \_sdef{_mt:t:sk}{Tabuľka} -\_sdef{_mt:f:en}{Figure} \_sdef{_mt:f:cs}{Obrázek} \_sdef{_mt:f:sk}{Obrázok} -\_sdef{_mt:subj:en}{Subject} \_sdef{_mt:subj:cs}{Věc} \_sdef{_mt:subj:sk}{Vec} - - \_doc ----------------------------- - Using \`\_langw` `<lang> <chapter> <table> <figure> <subject>` you can - declare these words more effectively: - \maxlines=13 - \_cod ----------------------------- - -\_def \_langw #1 #2 #3 #4 #5 {% - \_sdef{_mt:chap:#1}{#2}\_sdef{_mt:t:#1}{#3}\_sdef{_mt:f:#1}{#4}% - \_sdef{_mt:subj:#1}{#5}% -} - -\_langw en Chapter Table Figure Subject -%-------------------------------------------------------------- -\_langw cs Kapitola Tabulka Obrázek Věc -\_langw de Kapitel Tabelle Abbildung Betreff -\_langw es Capítulo Tabla Figura Sujeto -\_langw fr Chaptire Tableau Figure Matière -\_langw it Capitolo Tabella Fig. Oggetto -\_langw pl Rozdział Tabela Ilustracja Temat -\_langw gr Κεφάλαιο Πίνακας Σχήμα θέμα -\_langw ru Глава Таблица Рисунок Предмет -\_langw sk Kapitola Tabuľka Obrázok Vec - - \_doc ----------------------------- - You can add more words as you wish. For example \`\today` macro: - \_cod ----------------------------- - -\_def \_monthw #1 #2 #3 #4 #5 #6 #7 {% - \_sdef{_mt:m1:#1}{#2}\_sdef{_mt:m2:#1}{#3}\_sdef{_mt:m3:#1}{#4}% - \_sdef{_mt:m4:#1}{#5}\_sdef{_mt:m5:#1}{#5}\_sdef{_mt:m6:#1}{#5}% - \_monthwB #1 -} -\_def \_monthwB #1 #2 #3 #4 #5 #6 #7 {% - \_sdef{_mt:m7:#1}{#2}\_sdef{_mt:m8:#1}{#3}\_sdef{_mt:m9:#1}{#4}% - \_sdef{_mt:m10:#1}{#5}\_sdef{_mt:m11:#1}{#5}\_sdef{_mt:m12:#1}{#5}% -} - -\_monthw en January February March April May June - July August September October November December -\_monthw cs ledna února března dubna května června - července srpna září října listopadu prosince -\_monthw sk januára februára marca apríla mája júna - júla augusta septembra októbra novembra decembra -\_monthw it gennaio febbraio marzo aprile maggio giugno - luglio agosto settembre ottobre novembre dicembre - - -\_sdef{_mt:today:en}{\_mtext{m\_the\_month} \_the\_day, \_the\_year} -\_sdef{_mt:today:cs}{\_the\_day.~\_mtext{m\_the\_month} \_the\_year} -\_slet{_mt:today:sk}{_mt:today:cs} - -\_def\_today{\_mtext{today}} -\_public \today ; - - \_doc ----------------------------- - Quotes should be tagged by `\"<text>"` and `\'<text>'` if `\<iso-code>quotes` - is declared at beginning of the document (for example `\enquotes`). - If not, then the control - sequences `\"` and `\'` are undefined. Remember, that they are used in - another meaning when the `\oldaccents` command is used. - The macros `\"` and `\'` are not defined as `\protected` because we need - their expansion when `\outlines` are created. - User can declare quotes by \^`\quoteschars``<clqq><crqq><clq><crq>`, where - `<clqq>...<crqq>` are normal quotes and `<clq>...<crq>` are alternative quotes. - or use \`\altquotes` to swap between the meaning of these two types of quotes. - \nl - \`\enquotes`, \`\csquotes`, \`\dequotes`, \`\frquotes` etc. are defined here. - \_cod ----------------------------- - -\_def \_enquotes {\_quoteschars “”‘’} -\_def \_csquotes {\_quoteschars „“‚‘} -\_def \_frquotes {\_quoteschars “”«»} -\_let \_plquotes = \_frquotes -\_let \_esquotes = \_frquotes -\_let \_grquotes = \_frquotes -\_let \_ruquotes = \_frquotes -\_let \_itquotes = \_frquotes -\_let \_skquotes = \_csquotes -\_let \_dequotes = \_csquotes - - \_doc ----------------------------- - The \`\quoteschars``<lqq><rqq><lq><rq>` defines `\"` and `\"` as `\_qqA` - in in normal mode and as expadable macros in outline mode. - We want to well process the common cases: \code{\\"`&`"} or \code{\\"`\{`"}. - This is the reason why the quotes parameter is read in verbatim mode and retokenized - again by `\scantextokens`. We want to allow to quote the quotes mark - itself by \code{\\"{`"`}"}. This is the reason why the sub-verbatim mode is - used when the first character is \code{\{} in the parameter.\nl - The `\"` is defined as `\_qqA\_qqB<lqq><rqq>` and `\'` as `\_qqA\_qqC<lq><rq>`. - The \`\_qqA``\_qqB<clqq><crqq>` runs \`\_qqB``<lqq><rqq><text>"`.\nl - The \`\_regquotes``\""<L><R>` does `\def\"#1"{<L>#1<R>}` for outlines but the `"` - separator is active (because `"` and `'` are active in \^`\pdfunidef`). - \_cod ----------------------------- - -\_def \_quoteschars #1#2#3#4{\_def\_altquotes{\_quoteschars#3#4#1#2}\_public\altquotes;% - \_protected\_def \"{\_qqA\_qqB#1#2}\_protected\_def \'{\_qqA\_qqC#3#4}% - \_regmacro{}{}{\_regquotes\""#1#2\_regquotes\''#3#4}} - -\_def\_qqA#1#2#3{\_bgroup\_setverb \_catcode`\ =10 - \_isnextchar\_bgroup{\_catcode`\{=1 \_catcode`\}=2 #1#2#3}{#1#2#3}} -\_long\_def\_qqB#1#2#3"{\_egroup#1\_scantextokens{#3}#2} -\_long\_def\_qqC#1#2#3'{\_egroup#1\_scantextokens{#3}#2} -\_def\_regquotes#1#2#3#4{\_bgroup \_lccode`~=`#2\_lowercase{\_egroup \_def#1##1~}{#3##1#4}} - - \_doc ----------------------------- - Sometimes should be usable to leave the markup `"such"` or `'such'` i.e.~without - the first backslash. Then you can make the characters `"` and `'` active - by the \`\activequotes` macro and leave quotes without the first backslash. - First, declare `\<iso-code>quotes`, then \^`\altquotes` (if needed) and finally - \^`\activequotes`. - \_cod ----------------------------- - -\_def\_activequotes{\_let\_actqq=\"\_adef"{\_actqq}\_let\_actq=\'\_adef'{\_actq}% - \_regmacro{}{}{\_adef"{\"}\_adef'{\'}}} - -\_public \quoteschars \activequotes \enquotes \csquotes \skquotes \frquotes \plquotes - \esquotes \grquotes \ruquotes \itquotes \dequotes ; - - \_doc ----------------------------- - Bibliography references generated by \^`\usebib` uses more - language-dependent phrases. They are declared here. We don't want to save - all these phrases into the format, so the trick with {`\_endinput`} - is used here. When \^`\usebib` is processed then the following part of the file - `languages.opm` is read again. - - Only phrases of few languages are declared here now. If you want to declare - phrases of your language, please create an \"issue" or a \"request" at - \url{https://github.com/olsak/OpTeX} or send me an email with new - phrases for your language (or language you know:). I am ready to put them here. - Temporarily, you can put your definitions into `\bibtexhook` token list. - \_cod ----------------------------- - -\_endinput % don't save these \def's to the format - -\_def\_langb#1 #2#3#4#5#6#7#8#9{\_def\_mbib##1##2{\_sdef{_mt:bib.##2:#1}{##1}}% - \_mbib{#2}{and}\_mbib{#3}{etal}\_mbib{#4}{edition}\_mbib{#5}{citedate}\_mbib{#6}{volume}% - \_mbib{#7}{number}\_mbib{#8}{prepages}\_mbib{#9}{postpages}\_langbA} -\_def\_langbA#1#2#3#4#5#6#7{\_mbib{#1}{editor}\_mbib{#2}{editors}\_mbib{#3}{available}% - \_mbib{#4}{availablealso}\_mbib{#5}{bachthesis}\_mbib{#6}{masthesis}\_mbib{#7}{phdthesis}} - -\_langb en {, and } { et al.} { ed.} {cit.~} {Vol.~} {No.~} {pp.~} {~p.} {,~ed.} {,~eds.} - {Available from } {Available also from } - {Bachelor's Thesis} {Master's Thesis} {Ph.D. Thesis} -%------------------------------------------------------------------------------------------ -\_langb cs { a } { a~kol.} { vyd.} {vid.~} {ročník~} {č.~} {s.~} {~s.} {,~editor} {,~editoři} - {Dostupné na } {Dostupné též na } - {Bakalářská práce} {Diplomová práce} {Disertační práce} -\_langb sk { a } { a~kol.} { vyd.} {vid.~} {ročník~} {č.~} {s.~} {~s.} {,~editor} {,~editoři} - {Dostupné na } {Dostupné tiež na } - {Bakalárska práca} {Diplomová práca} {Dizertačná práca} - -% \_<lang>dateformat year/month/day\relax, for example: \_csdateformat 2020/05/21\relax -% This is used in iso690 bib-style when the field "citedate" is used. - -\_def\_endateformat #1/#2/#3\relax{#1-#2-#3} -% \_csdateformat 2020/05/21\relax -> \hbox{21. 5. 2020} -\_def\_csdateformat #1/#2/#3\relax{\hbox{\_tmpnum=#3 \_the\_tmpnum. \_tmpnum=#2 \_the\_tmpnum. #1}} -\_let\_skdateformat =\_csdateformat - -\_endcode % ------------------------------------- - -2021-01-21 more robust quotes in outlines -2020-12-05 bib phrases moved here -2020-04-29 Obrazek -> Abbildung: bug fixed -2020-03-15 introduced diff --git a/macros/luatex/optex/base/lists.opm b/macros/luatex/optex/base/lists.opm deleted file mode 100644 index 189719302d..0000000000 --- a/macros/luatex/optex/base/lists.opm +++ /dev/null @@ -1,128 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \begitems {Lists: begitems, enditems <2021-03-10>} % preloaded in format - - \_doc ----------------------------- - \`\_aboveliskip` is used above the list of items,\nl - \`\_belowliskip` is used below the list of items and\nl - \`\_interliskip` is used between items.\nl - \`\_listskipA` is used as `\listskipamount` at level 1 of items.\nl - \`\_listskipB` is used as `\listskipamount` at other levels.\nl - \`\_setlistskip` sets the skip dependent on the current level of items - \_cod ----------------------------- - -\_def\_aboveliskip {\_removelastskip \_penalty-100 \_vskip\_listskipamount} -\_def\_belowliskip {\_penalty-200 \_vskip\_listskipamount} -\_def\_interliskip {} -\_def\_listskipA {\_medskipamount} -\_def\_listskipB {0pt plus.5\_smallskipamount} - -\_def\_setlistskip {% - \_ifnum \_ilevel = 1 \_listskipamount = \_listskipA \_relax - \_else \_listskipamount = \_listskipB \_relax - \_fi} - - \_doc ----------------------------- - The \`\itemnum` is locally reset to zero in each group declared by - `\begitems`. So nested lists are numbered independently. Users can set - initial value of `\itemnum` to another value after `\beitems` if they want. - \nl - Each level of nested lists is indented by the new `\iindent` from left. - The default item mark is `\_printitem`. - \nl - The \`\begitems` runs `\_aboveliskip` only if we are not near below a title, - where a vertical skip is placed already and where the `\penalty` 11333 is. - It activates `*` and defines it as \`\_startitem`. - \nl - The \`\enditems` runs `\_isnextchar\_par{}{\_noindent}` thus the next - paragraph is without indentation if there is no empty line between - the list and this paragraph (it is similar behavior as after display math). - \_cod ----------------------------- - -\_newcount\_itemnum \_itemnum=0 -\_newtoks\_printitem - -\_def\_begitems{\_par - \_bgroup - \_advance \_ilevel by1 - \_setlistskip - \_ifnum\_lastpenalty<10000 \_aboveliskip \_fi - \_itemnum=0 \_adef*{\_relax\_ifmmode*\_else\_ea\_startitem\_fi} - \_advance\_leftskip by\_iindent - \_printitem=\_defaultitem - \_the\_everylist \_relax -} -\_def\_enditems{\_par\_belowliskip\_egroup \_isnextchar\_par{}{\_noindent}} - -\_def\_startitem{\_par \_ifnum\_itemnum>0 \_interliskip \_fi - \_advance\_itemnum by1 - \_the\_everyitem \_noindent\_llap{\_the\_printitem}\_ignorespaces -} -\_public \begitems \enditems \itemnum ; - - \_doc ---------------------------- - \`\novspaces` sets \`\listskipamount` to 0pt. - \_cod ---------------------------- - -\_def\_novspaces {\_removelastskip \_listskipamount=0pt \_relax} -\_public \novspaces ; - - \_doc ----------------------------- - Various item marks are saved in `\_item:<letter>` macros. - You can re-define then or define more such macros. - The \`\style` `<letter>` does \`\_printitem``={\_item:<letter>}`. - More exactly: \^`\begitems` does `\_printitem=`\^`\defaultitem` first, - then \`\style` `<letter>` does \`\_printitem``={\_item:<letter>}` - when it is used and finally, `\_startitem` alias `*` uses `\_printitem`. - \_cod ----------------------------- - -\_def\_style#1{% - \_ifcsname _item:#1\_endcsname \_printitem=\ea{\_csname _item:#1\_endcsname}% - \_else \_printitem=\_defaultitem \_fi -} -\_sdef{_item:o}{\_raise.4ex\_hbox{$\_scriptscriptstyle\_bullet$} } -\_sdef{_item:-}{- } -\_sdef{_item:n}{\_the\_itemnum. } -\_sdef{_item:N}{\_the\_itemnum) } -\_sdef{_item:i}{(\_romannumeral\_itemnum) } -\_sdef{_item:I}{\_uppercase\_ea{\_romannumeral\_itemnum}\_kern.5em} -\_sdef{_item:a}{\_athe\_itemnum) } -\_sdef{_item:A}{\_uppercase\_ea{\_athe\_itemnum}) } -\_sdef{_item:x}{\_raise.3ex\_fullrectangle{.6ex}\_kern.4em} -\_sdef{_item:X}{\_raise.2ex\_fullrectangle{1ex}\_kern.5em} - - \_doc ----------------------------- - \`\_athe``{<num>}` returns the `<num>`s lowercase letter from the alphabet.\nl - \`\_fullrectangle``{<dimen>}` prints full rectangle with given `<dimen>`. - \_cod ----------------------------- - -\_def\_fullrectangle#1{\_hbox{\_vrule height#1 width#1}} - -\_def\_athe#1{\_ifcase#1?\_or a\_or b\_or c\_or d\_or e\_or f\_or g\_or h\_or - i\_or j\_or k\_or l\_or m\_or n\_or o\_or p\_or q\_or r\_or s\_or t\_or - u\_or v\_or w\_or x\_or y\_or z\_else ?\_fi -} -\_public \style ; - - \_doc ----------------------------- - The \`\begblock` macro selects fonts from footnotes \^`\_fnset` - and opens new indentation in a group. - \`\endblock` closes the group. - This is implemented as an counterpart - of Markdown's Blockquotes. Redefine these macros if you want to declare - different design. - The \ulink[http://petr.olsak.net/optex/optex-tricks.html\#greyblock]{\OpTeX/ trick 0031} - shows how to create blocks with grey background splittable to more pages. - \_cod ----------------------------- - -\_def\_begblock{\_bgroup\_fnset \_medskip \_advance\_leftskip by\_iindent \_firstnoindent} -\_def\_endblock{\_par\_medskip\_egroup\_isnextchar\_par{}{\_noindent}} - -\_public \begblock \endblock ; - - -\_endcode % ------------------------------------- - -2021-03-10 \_ifmmode*\_else\_ea\_startitem\_fi added to * defintition -2020-04-21 \isnextchar\par added to \enditems -2020-03-18 introduced diff --git a/macros/luatex/optex/base/logos.opm b/macros/luatex/optex/base/logos.opm deleted file mode 100644 index a510a74a30..0000000000 --- a/macros/luatex/optex/base/logos.opm +++ /dev/null @@ -1,61 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \TeX {Logos TeX, LuaTeX, etc. <2020-02-28>} % preloaded in format - - \_doc ---------------------------- - Despite plain \TeX/ each macro for logos ends by \`\ignoreslash`. - This macro ignores the next slash if it is present. - You can `use \TeX/ like this` for protecting the space following the logo. - This is visually more comfortable. - The macros \`\TeX`, \`\OpTeX`, \`\LuaTeX`, \`\XeTeX` are defined. - \_cod ---------------------------- - -\_protected\_def \_TeX {T\_kern-.1667em\_lower.5ex\_hbox{E}\_kern-.125emX\_ignoreslash} -\_protected\_def \_OpTeX {Op\_kern-.1em\_TeX} -\_protected\_def \_LuaTeX {Lua\_TeX} -\_protected\_def \_XeTeX {X\_kern-.125em\_phantom E% - \_pdfsave\_rlap{\_pdfscale{-1}{1}\_lower.5ex\_hbox{E}}\_pdfrestore \_kern-.1667em \_TeX} - -\_def\_ignoreslash {\_isnextchar/\_ignoreit{}} - -\_public \TeX \OpTeX \LuaTeX \XeTeX \ignoreslash ; - - \_doc ----------------------------- - The \`\_slantcorr` macro expands to the slant-correction of the current font. It is - used to shifting A if the \`\LaTeX` logo is in italic. - \_cod ----------------------------- - -\_protected\_def \_LaTeX{\_tmpdim=.42ex L\_kern-.36em \_kern \_slantcorr % slant correction - \_raise \_tmpdim \_hbox{\_thefontscale[710]A}% - \_kern-.15em \_kern-\_slantcorr \_TeX} -\_def\_slantcorr{\_ea\_ignorept \_the\_fontdimen1\_font\_tmpdim} - -\_public \LaTeX ; - - \_doc ----------------------------- - \`\OPmac`, \`\CS` and \`\csplain` logos. - \_cod ----------------------------- - -\_def\_OPmac{\_leavevmode - \_lower.2ex\_hbox{\_thefontscale[1400]O}\_kern-.86em P{\_em mac}\_ignoreslash} -\_def\_CS{$\_cal C$\_kern-.1667em\_lower.5ex\_hbox{$\_cal S$}\_ignoreslash} -\_def\_csplain{\_CS plain\_ignoreslash} - -\_public \OPmac \CS \csplain ; - - \_doc ---------------------------- - The expandable versions of logos used in Outlines need the expandable - \`\ingnslash` (instead of the \^`\ignoreslash`). - \_cod \_fin ---------------------- - -\_def\_ignslash#1{\_ifx/#1\_else #1\_fi} -\_regmacro {}{}{% conversion for PDF outlines - \_def\TeX{TeX\_ignslash}\_def\OpTeX{OpTeX\_ignslash}% - \_def\LuaTeX{LuaTeX\_ignslash}\_def\XeTeX{XeTeX\_ignslash}% - \_def\LaTeX{LaTeX\_ignslash}\_def\OPmac{OPmac\_ignslash}% - \_def\CS{CS}\_def\csplain{csplain\_ignslash}% -} -\_public \ignslash ; - -\_endcode - diff --git a/macros/luatex/optex/base/luatex-ini.opm b/macros/luatex/optex/base/luatex-ini.opm deleted file mode 100644 index e0526a48d6..0000000000 --- a/macros/luatex/optex/base/luatex-ini.opm +++ /dev/null @@ -1,136 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \pdfprimitive {LuaTeX initialization code <2020-02-21>} % preloaded in format - -\_let\_pdfpagewidth \pagewidth -\_let\_pdfpageheight \pageheight -\_let\_pdfadjustspacing \adjustspacing -\_let\_pdfprotrudechars \protrudechars -\_let\_pdfnoligatures \ignoreligaturesinfont -\_let\_pdffontexpand \expandglyphsinfont -\_let\_pdfcopyfont \copyfont -\_let\_pdfxform \saveboxresource -\_let\_pdflastxform \lastsavedboxresourceindex -\_let\_pdfrefxform \useboxresource -\_let\_pdfximage \saveimageresource -\_let\_pdflastximage \lastsavedimageresourceindex -\_let\_pdflastximagepages \lastsavedimageresourcepages -\_let\_pdfrefximage \useimageresource -\_let\_pdfsavepos \savepos -\_let\_pdflastxpos \lastxpos -\_let\_pdflastypos \lastypos -\_let\_pdfoutput \outputmode -\_let\_pdfdraftmode \draftmode -\_let\_pdfpxdimen \pxdimen -\_let\_pdfinsertht \insertht -\_let\_pdfnormaldeviate \normaldeviate -\_let\_pdfuniformdeviate \uniformdeviate -\_let\_pdfsetrandomseed \setrandomseed -\_let\_pdfrandomseed \randomseed -\_let\_pdfprimitive \primitive -\_let\_ifpdfprimitive \ifprimitive -\_let\_ifpdfabsnum \ifabsnum -\_let\_ifpdfabsdim \ifabsdim - -\_public - \pdfpagewidth \pdfpageheight \pdfadjustspacing \pdfprotrudechars - \pdfnoligatures \pdffontexpand \pdfcopyfont \pdfxform \pdflastxform - \pdfrefxform \pdfximage \pdflastximage \pdflastximagepages \pdfrefximage - \pdfsavepos \pdflastxpos \pdflastypos \pdfoutput \pdfdraftmode \pdfpxdimen - \pdfinsertht \pdfnormaldeviate \pdfuniformdeviate \pdfsetrandomseed - \pdfrandomseed \pdfprimitive \ifpdfprimitive \ifpdfabsnum \ifpdfabsdim ; - -\_directlua {tex.enableprimitives('pdf',{'tracingfonts'})} - -\_protected\_def \_pdftexversion {\_numexpr 140\_relax} - \_def \_pdftexrevision {7} -\_protected\_def \_pdflastlink {\_numexpr\_pdffeedback lastlink\_relax} -\_protected\_def \_pdfretval {\_numexpr\_pdffeedback retval\_relax} -\_protected\_def \_pdflastobj {\_numexpr\_pdffeedback lastobj\_relax} -\_protected\_def \_pdflastannot {\_numexpr\_pdffeedback lastannot\_relax} - \_def \_pdfxformname {\_pdffeedback xformname} -{\_outputmode=1 - \_xdef\_pdfcreationdate {\_pdffeedback creationdate} -} - \_def \_pdffontname {\_pdffeedback fontname} - \_def \_pdffontobjnum {\_pdffeedback fontobjnum} - \_def \_pdffontsize {\_pdffeedback fontsize} - \_def \_pdfpageref {\_pdffeedback pageref} - \_def \_pdfcolorstackinit {\_pdffeedback colorstackinit} -\_protected\_def \_pdfliteral {\_pdfextension literal} -\_protected\_def \_pdfcolorstack {\_pdfextension colorstack} -\_protected\_def \_pdfsetmatrix {\_pdfextension setmatrix} -\_protected\_def \_pdfsave {\_pdfextension save\_relax} -\_protected\_def \_pdfrestore {\_pdfextension restore\_relax} -\_protected\_def \_pdfobj {\_pdfextension obj } -\_protected\_def \_pdfrefobj {\_pdfextension refobj } -\_protected\_def \_pdfannot {\_pdfextension annot } -\_protected\_def \_pdfstartlink {\_pdfextension startlink } -\_protected\_def \_pdfendlink {\_pdfextension endlink\_relax} -\_protected\_def \_pdfoutline {\_pdfextension outline } -\_protected\_def \_pdfdest {\_pdfextension dest } -\_protected\_def \_pdfthread {\_pdfextension thread } -\_protected\_def \_pdfstartthread {\_pdfextension startthread } -\_protected\_def \_pdfendthread {\_pdfextension endthread\_relax} -\_protected\_def \_pdfinfo {\_pdfextension info } -\_protected\_def \_pdfcatalog {\_pdfextension catalog } -\_protected\_def \_pdfnames {\_pdfextension names } -\_protected\_def \_pdfincludechars {\_pdfextension includechars } -\_protected\_def \_pdffontattr {\_pdfextension fontattr } -\_protected\_def \_pdfmapfile {\_pdfextension mapfile } -\_protected\_def \_pdfmapline {\_pdfextension mapline } -\_protected\_def \_pdftrailer {\_pdfextension trailer } -\_protected\_def \_pdfglyphtounicode {\_pdfextension glyphtounicode } - -\_protected\_edef\_pdfcompresslevel {\_pdfvariable compresslevel} -\_protected\_edef\_pdfobjcompresslevel {\_pdfvariable objcompresslevel} -\_protected\_edef\_pdfdecimaldigits {\_pdfvariable decimaldigits} -\_protected\_edef\_pdfgamma {\_pdfvariable gamma} -\_protected\_edef\_pdfimageresolution {\_pdfvariable imageresolution} -\_protected\_edef\_pdfimageapplygamma {\_pdfvariable imageapplygamma} -\_protected\_edef\_pdfimagegamma {\_pdfvariable imagegamma} -\_protected\_edef\_pdfimagehicolor {\_pdfvariable imagehicolor} -\_protected\_edef\_pdfimageaddfilename {\_pdfvariable imageaddfilename} -\_protected\_edef\_pdfpkresolution {\_pdfvariable pkresolution} -\_protected\_edef\_pdfinclusioncopyfonts {\_pdfvariable inclusioncopyfonts} -\_protected\_edef\_pdfinclusionerrorlevel {\_pdfvariable inclusionerrorlevel} -\_protected\_edef\_pdfgentounicode {\_pdfvariable gentounicode} -\_protected\_edef\_pdfpagebox {\_pdfvariable pagebox} -\_protected\_edef\_pdfminorversion {\_pdfvariable minorversion} -\_protected\_edef\_pdfuniqueresname {\_pdfvariable uniqueresname} -\_protected\_edef\_pdfhorigin {\_pdfvariable horigin} -\_protected\_edef\_pdfvorigin {\_pdfvariable vorigin} -\_protected\_edef\_pdflinkmargin {\_pdfvariable linkmargin} -\_protected\_edef\_pdfdestmargin {\_pdfvariable destmargin} -\_protected\_edef\_pdfthreadmargin {\_pdfvariable threadmargin} -\_protected\_edef\_pdfpagesattr {\_pdfvariable pagesattr} -\_protected\_edef\_pdfpageattr {\_pdfvariable pageattr} -\_protected\_edef\_pdfpageresources {\_pdfvariable pageresources} -\_protected\_edef\_pdfxformattr {\_pdfvariable xformattr} -\_protected\_edef\_pdfxformresources {\_pdfvariable xformresources} -\_protected\_edef\_pdfpkmode {\_pdfvariable pkmode} - -\_public - \pdftexversion \pdftexrevision \pdflastlink \pdfretval \pdflastobj - \pdflastannot \pdfxformname \pdfcreationdate \pdffontname \pdffontobjnum - \pdffontsize \pdfpageref \pdfcolorstackinit \pdfliteral \pdfcolorstack - \pdfsetmatrix \pdfsave \pdfrestore \pdfobj \pdfrefobj \pdfannot - \pdfstartlink \pdfendlink \pdfoutline \pdfdest \pdfthread \pdfstartthread - \pdfendthread \pdfinfo \pdfcatalog \pdfnames \pdfincludechars \pdffontattr - \pdfmapfile \pdfmapline \pdftrailer \pdfglyphtounicode \pdfcompresslevel - \pdfobjcompresslevel \pdfdecimaldigits \pdfgamma \pdfimageresolution - \pdfimageapplygamma \pdfimagegamma \pdfimagehicolor \pdfimageaddfilename - \pdfpkresolution \pdfinclusioncopyfonts \pdfinclusionerrorlevel - \pdfgentounicode \pdfpagebox \pdfminorversion \pdfuniqueresname \pdfhorigin - \pdfvorigin \pdflinkmargin \pdfdestmargin \pdfthreadmargin \pdfpagesattr - \pdfpageattr \pdfpageresources \pdfxformattr \pdfxformresources \pdfpkmode ; - -\_pdfminorversion = 5 -\_pdfobjcompresslevel = 2 -\_pdfcompresslevel = 9 -\_pdfdecimaldigits = 3 -\_pdfpkresolution = 600 - -\_endcode - -Common pdf\TeX/ primitives equivalents are declared here. Initial values are set. diff --git a/macros/luatex/optex/base/makeindex.opm b/macros/luatex/optex/base/makeindex.opm deleted file mode 100644 index e5f7b4032e..0000000000 --- a/macros/luatex/optex/base/makeindex.opm +++ /dev/null @@ -1,463 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \makeindex {Makeindex and sorting <2021-02-15>} % loaded in format - - \_doc ----------------------------- - \^`\makeindex` implements sorting algorithm at \TeX/ macro-language level. - You need not any external program. - - There are two passes in the sorting algorithm. The primary pass does not - distinguish between a group of letters (typically non-accented and - accented). If the result of comparing two string is equal in primary pass - then the secondary pass is started. It distinguishes between variously accented - letters. Czech rules, for example, says: not accented before dieresis - before acute before circumflex before ring. At less priority: lowercase - letters must be before uppercase letters. - - The \`\_sortingdata``<iso-code>` implements these rules for the language - <iso-code>. The groups between commas are not distinguished in the first - pass. The second pass distinguishes all characters mentioned in the - `\_sortingdata<iso-code>` (commas are ignored). The order of letters - in the `\_sortingdata<iso-code>` macro is significant for the sorting algorithm. - The Czech rules (`cs`) are implemented here: - \_cod ----------------------------- - -\_def \_sortingdatacs {% - /,{ },-,&,@,% - aAäÄáÁ,% - bB,% - cC,% - čČ,% - dDďĎ,% - eEéÉěĚ,% - fF,% - gG,% - hH,% - ^^T^^U^^V,% ch Ch CH - iIíÍ,% - jJ,% - kK,% - lLĺĹľĽ,% - mM,% - nNňŇ,% - oOöÖóÓôÔ,% - pP,% - qQ,% - rRŕŔ,% - řŘ,% - sS,% - šŠ,% - tTťŤ,% - uUüÜúÚůŮ,% - vV,% - wW,% - xX,% - yYýÝ,% - zZ,% - žŽ,% - 0,1,2,3,4,5,6,7,8,9,'% -} - - \_doc ----------------------------- - Characters ignored by the sorting algorithm are declared in \`\_ignoredchars``<iso-code>`. - The compound characters (two or more characters interpreted as one - character in the sorting algorithm) are mapped to single invisible characters - in \`\_compoundchars``<iso-code>`. Czech rules declare ch or Ch or CH as - a single letter sorted between H and I. See \`\_sortingdatacs` above where - these declared characters are used. - - The characters declared in `\_ignoredchars` are ignored in the first pass - without additional condition. All characters are taken into account in - second pass: ASCII characters with code $\string<65$ are sorted first if they - are not mentioned in the `\_sortingdata<iso-code>` macro. - Others not mentioned characters have undefined behavior during sorting. - \_cod ----------------------------- - -\_def \_ignoredcharscs {.,;?!:'"|()[]<>=+} -\_def \_compoundcharscs {ch:^^T Ch:^^U CH:^^V} % DZ etc. are sorted normally - - \_doc ----------------------------- - Slovak sorting rules are the same as Czech. The macro `\_sortingdatacs` - includes Slovak letters too. Compound characters are the same. - English sorting rules can be defined by `\_sortingdatacs` too because - English alphabet is a subset of the Czech and Slovak alphabets. Only - difference: \`\_compoundcharsen` is empty in English rules. - - You can declare these macros for more languages if you wish to use - `\makeindex` with sorting rules with respect to your language. - Note: if you need to map compound characters to a character, don't use - `^^I` or `^^M` because these characters have very specific category codes. - And use space to separate more mappings, like in \`\_compoundcharscs` above. - \_cod ----------------------------- - -\_let \_sortingdatask = \_sortingdatacs -\_let \_compoundcharssk = \_compoundcharscs -\_let \_ignoredcharssk = \_ignoredcharscs -\_let \_sortingdataen = \_sortingdatacs -\_def \_compoundcharsen {} -\_let \_ignoredcharsen = \_ignoredcharscs - - \_doc ----------------------------- - Preparing to primary pass is implemented by the \`\_setprimarysorting` macro. - It is called from `\makeindex` macro and all processing of sorting is in a group. - \_cod ----------------------------- - -\_def\_setprimarysorting {% - \_ea\_let \_ea\_sortingdata \_csname _sortingdata\_sortinglang\_endcsname - \_ea\_let \_ea\_compoundchars \_csname _compoundchars\_sortinglang\_endcsname - \_ea\_let \_ea\_ignoredchars \_csname _ignoredchars\_sortinglang\_endcsname - \_ifx \_sortingdata\_relax \_addto\_nold{ sortingdata}% - \_let \_sortingdata = \_sortingdataen \_fi - \_ifx \_compoundchars\_relax \_addto\_nold{ compoundchars}% - \_let \_compoundchars = \_compoundcharsen \_fi - \_ifx \_ignoredchars\_relax \_addto\_nold{ ignoredchars}% - \_let \_ignoredchars = \_ignoredcharsen \_fi - \_ifx \_compoundchars\_empty \_else - \_edef \_compoundchars {\_detokenize\_ea{\_compoundchars} }\_fi % all must be catcode 12 - \_def \_act ##1{\_ifx##1\_relax \_else - \_ifx##1,\_advance\_tmpnum by1 - \_else \_lccode`##1=\_tmpnum \_fi - \_ea\_act \_fi}% - \_tmpnum=65 \_ea\_act \_sortingdata \_relax - \_def \_act ##1{\_ifx##1\_relax \_else - \_lccode`##1=`\^^I - \_ea\_act \_fi}% - \_ea\_act \_ignoredchars \_relax -} - - \_doc ----------------------------- - Preparing to secondary pass is implemented by the \`\_setsecondarysorting` macro. - \_cod ----------------------------- - -\_def\_setsecondarysorting {% - \_def \_act ##1{\_ifx##1\_relax \_else - \_ifx##1,\_else \_advance\_tmpnum by1 \_lccode`##1=\_tmpnum \_fi - \_ea\_act \_fi}% - \_tmpnum=64 \_ea\_act \_sortingdata \_relax -} - - \_doc ----------------------------- - Strings to be sorted are prepared in `\,<string>` control sequences - (to save `\TeX` memory). - The \`\_preparesorting` `\,<string>` converts `<string>` to `\_tmpb` - with respect to the data initialized in \^`\_setprimarysorting` or - \^`\_setsecondarysorting`.\nl - The compoud characters are converted to single characters by the - \`\_docompound` macro. - \_cod ----------------------------- - -\_def \_preparesorting #1{% - \_edef \_tmpb {\_ea\_ignorefirst\_csstring #1}% \,<string> -> <string> - \_ea \_docompound \_compoundchars \_relax:{} % replace compound characters - \_lowercase \_ea{\_ea\_def \_ea\_tmpb \_ea{\_tmpb}}% convert in respect to \_sortingdata - \_ea\_replstring \_ea\_tmpb \_ea{\_csstring\^^I}{}% remove ignored characters -} -\_def \_docompound #1:#2 {% - \_ifx\_relax#1\_else \_replstring\_tmpb {#1}{#2}\_ea\_docompound \_fi -} -\_def \_ignorefirst#1{} - - \_doc ----------------------------- - Macro \`\_isAleB` `\,<string1> \,<string2>` returns the result of comparison - of given two strings to \`\_ifAleB` control sequence. Usage: - `\isAleB \,<string1> \,<string2> \_ifAleB ... \_else ... \_fi` - The converted strings (in respect of the data prepared for first pass) - must be saved as values of `\,<string1>` and `\,<string2>` macros. - The reason is speed: we don't want to convert them repeatedly in each - comparison. - \nl - The macro - \`\_testAleB` `<converted string1>&\_relax<converted-string2>\_relax \,<string1>\,<string2>`\nl - does the real work. It reads the first character from both converted strings, compares them - and if it is equal then calls itself recursively else gives the result. - \_cod ----------------------------- - -\_newifi \_ifAleB - -\_def\_isAleB #1#2{% - \_edef\_tmpb {#1&\_relax#2&\_relax}% - \_ea \_testAleB \_tmpb #1#2% -} -\_def\_testAleB #1#2\_relax #3#4\_relax #5#6{% - \_if #1#3\_if #1&\_testAleBsecondary #5#6% goto to the second pass:: - \_else \_testAleB #2\_relax #4\_relax #5#6% - \_fi - \_else \_ifnum `#1<`#3 \_AleBtrue \_else \_AleBfalse \_fi - \_fi -} -\_def\_testAleBsecondary#1#2{% - \_bgroup - \_setsecondarysorting - \_preparesorting#1\_let\_tmpa=\_tmpb \_preparesorting#2% - \_edef\_tmpb{\_tmpa0\_relax\_tmpb1\_relax}% - \_ea\_testAleBsecondaryX \_tmpb - \_egroup -} -\_def\_testAleBsecondaryX #1#2\_relax #3#4\_relax {% - \_if #1#3\_testAleBsecondaryX #2\_relax #4\_relax - \_else \_ifnum `#1<`#3 \_global\_AleBtrue \_else \_global \_AleBfalse \_fi - \_fi -} - - \_doc ----------------------------- - Merge sort is very effectively implemented by \TeX/ macros. The following - code is created by my son Miroslav. - The \`\_mergesort` macro expects that all items in `\_iilist` are separated - by a comma when it starts. It ends with sorted items in `\_iilist` without commas. - So `\_dosorting` macro must prepare commas between items. - \_cod ----------------------------- - -\_def\_mergesort #1#2,#3{% by Miroslav Olsak - \_ifx,#1% % prazdna-skupina,neco, (#2=neco #3=pokracovani) - \_addto\_iilist{#2,}% % dvojice skupin vyresena - \_sortreturn{\_fif\_mergesort#3}% % \mergesort pokracovani - \_fi - \_ifx,#3% % neco,prazna-skupina, (#1#2=neco #3=,) - \_addto\_iilist{#1#2,}% % dvojice skupin vyresena - \_sortreturn{\_fif\_mergesort}% % \mergesort dalsi - \_fi - \_ifx\_end#3% % neco,konec (#1#2=neco) - \_ifx\_empty\_iilist % neco=kompletni setrideny seznam - \_def\_iilist{#1#2}% - \_sortreturn{\_fif\_fif\_gobbletoend}% % koncim - \_else % neco=posledni skupina nebo \end - \_sortreturn{\_fif\_fif % spojim \indexbuffer+necoa cele znova - \_edef\_iilist{\_ea}\_ea\_mergesort\_iilist#1#2,#3}% - \_fi\_fi % zatriduji: p1+neco1,p2+neco2, (#1#2=p1+neco1 #3=p2) - \_isAleB #1#3\_ifAleB % p1<p2 - \_addto\_iilist{#1}% % p1 do bufferu - \_sortreturn{\_fif\_mergesort#2,#3}% % \mergesort neco1,p2+neco2, - \_else % p1>p2 - \_addto\_iilist{#3}% % p2 do bufferu - \_sortreturn{\_fif\_mergesort#1#2,}% % \mergesort p1+neco1,neco2, - \_fi - \_relax % zarazka, na ktere se zastavi \sortreturn -} -\_def\_sortreturn#1#2\_fi\_relax{#1} \_def\_fif{\_fi} -\_def\_gobbletoend #1\_end{} - - \_doc ----------------------------- - The \`\_dosorting` `\list` macro redefines `\list` as sorted `\list`. - The `\list` have to include control sequences in the form `\<c><string>`. - These control sequences will be sorted with respect to <strings> without - change of meanings of these control sequences. Their meanings are - irrelevant when sorting. The first character <c> in `\<c><string>` should - be whatever. It does not influence the sorting. \OpTeX/ uses comma at - this place for sorting indexes: `\,<word1> \,<word2> \,<word3> ...`. - - The actual language (chosen for hyphenation patterns) is used for - sorting data. If the `\_sortinglang` macro - is defined as `<iso-code>`(for example `\def\sortinglang{de}`) - then this has precedence and actual language is not used. - Moreover, if you specify \`\_asciisortingtrue` then ASCII - sorting will be processed and all language sorting data will be ignored. - \_cod ----------------------------- - -\_newifi \_ifasciisorting \_asciisortingfalse -\_def\_dosorting #1{% - \_begingroup - \_def\_nold{}% - \_ifx\_sotringlang\_undefined \_edef\_sortinglang{\_cs{_lan:\_the\_language}}\_fi - \_ifasciisorting - \_edef\_sortinglang{ASCII}% - \_def \_preparesorting##1{\_edef\_tmpb{\_ea\_ignorefirst\_csstring##1}}% - \_let \_setsecondarysorting=\_relax - \_else - \_setprimarysorting - \_fi - \_message{OpTeX: Sorting \_string#1 (\_sortinglang) ...^^J}% - \_ifx\_nold\_empty\_else \_opwarning{Missing\_nold\_space for language (\_sortinglang)}\_fi - \_def \_act##1{\_preparesorting ##1\_edef##1{\_tmpb}}% - \_ea\_xargs \_ea\_act #1;% - \_def \_act##1{\_addto #1{##1,}}% - \_edef #1{\_ea}\_ea\_xargs \_ea\_act #1;% - \_edef \_iilist{\_ea}\_ea\_mergesort #1\_end,\_end - \_ea\_endgroup - \_ea\_def\_ea#1\_ea{\_iilist}% -} - - \_doc ----------------------------- - The \`\makeindex` prints the index. First, it sorts the `\_iilist` - second, it prints the sorted `\_iilist`, each item is printed - using \^`\_printindexitem`. - \_cod ----------------------------- - -\_def\_makeindex{\_par - \_ifx\_iilist\_empty \_opwarning{index data-buffer is empty. TeX me again}% - \_incr\_unresolvedrefs - \_else - \_dosorting \_iilist % sorting \_iilist - \_bgroup - \_rightskip=0pt plus1fil \_exhyphenpenalty=10000 \_leftskip=\_iindent - \_ea\_xargs \_ea\_printindexitem \_iilist ;\_par - \_egroup - \_fi -} -\_public \makeindex ; - - \_doc ----------------------------- - The \`\_printindexitem` `\,<word>` prints one item to the index. - If `\_,<word>` is defined then this is used instead real <word> - (this exception is declared by `\iis` macro). Else <word> is printed by - \^`\_printii`. Finally, \^`\_printiipages` prints the value of `\,<word>`, - i.e. the list of pages. - \_cod ----------------------------- - -\_def\_printindexitem #1{% - \_ifcsname _\_csstring #1\_endcsname - \_ea\_ea\_ea \_printii \_csname _\_csstring #1\_endcsname &% - \_else - \_ea\_ea\_ea\_printii \_ea\_ignorefirst \_csstring #1&% - \_fi - \_ea\_printiipages #1& -} - - \_doc ----------------------------- - \`\_printii` `<word>&` does more intelligent work because we are working with - words in the form `<main-word>/<sub-word>/<sub-sub-word>`. - The \^`\everyii` tokens register is applied before `\noindent`. User can - declare something special here. - - The \`\_newiiletter``{<letter>}` macro is empty by default. It is invoked if first - letter of index entries is changed. You can declare a design between - index entries here. You can try, for example: - \begtt - \def\_newiiletter#1#2{% - \bigskip \hbox{\setfontsize{at15pt}\bf\uppercase{#1}}\medskip} - \endtt - \_cod ----------------------------- - -\_def\_printii #1#2&{% - \_ismacro\_lastii{#1}\_iffalse \_newiiletter{#1}{#2}\_def\_lastii{#1}\_fi - \_gdef\_currii{#1#2}\_the\_everyii\_noindent - \_hskip-\_iindent \_ignorespaces\_printiiA#1#2//} -\_def\_printiiA #1/{\_if^#1^\_let\_previi=\_currii \_else - \_ea\_scanprevii\_previi/&\_edef\_tmpb{\_detokenize{#1}}% - \_ifx\_tmpa\_tmpb \_iiemdash \_else#1 \_gdef\_previi{}\_fi - \_ea\_printiiA\_fi -} -\_def\_iiemdash{\_kern.1em---\_space} -\_def\_lastii{} -\_def\_newiiletter#1#2{} - -\_def\_scanprevii#1/#2&{\_def\_previi{#2}\_edef\_tmpa{\_detokenize{#1}}} -\_def\_previi{} % previous index item - - \_doc ----------------------------- - \`\_printiipages` `<pglist>&` gets `<pglist>` in the form - `<pg>:<type>,<pg>:<type>,...<pg>:<type>` and it converts them to - `<pg>, <pg>, <from>--<to>, <pg>` etc. The same pages must be printed only once - and continuous consequences of pages must be compressed to the form <from>-<to>. - Moreover, the consequence is continuous only if all pages have the same <type>. - Empty <type> is most common, pages with `b` <type> must be printed as bold - and with `i` `<type>` as italics. - Moreover, the `<pg>` mentioned here are <gpageno>, but we have to print - <pageno>. The following macros solve these tasks. - \_cod ----------------------------- - -\_def\_printiipages#1&{\_let\_pgtype=\_undefined \_tmpnum=0 \_printpages #1,:,\_par} -\_def\_printpages#1:#2,{% state automaton for compriming pages - \_ifx,#1,\_uselastpgnum - \_else \_def\_tmpa{#2}% - \_ifx\_pgtype\_tmpa \_else - \_let\_pgtype=\_tmpa - \_uselastpgnum \_usepgcomma \_pgprint#1:{#2}% - \_tmpnum=#1 \_returnfi \_fi - \_ifnum\_tmpnum=#1 \_returnfi \_fi - \_advance\_tmpnum by1 - \_ifnum\_tmpnum=#1 \_ifx\_lastpgnum\_undefined \_usepgdash\_fi - \_edef\_lastpgnum{\_the\_tmpnum:{\_pgtype}}% - \_returnfi \_fi - \_uselastpgnum \_usepgcomma \_pgprint#1:{#2}% - \_tmpnum=#1 - \_relax - \_ea\_printpages \_fi -} -\_def\_returnfi #1\_relax{\_fi} -\_def\_uselastpgnum{\_ifx\_lastpgnum\_undefined - \_else \_ea\_pgprint\_lastpgnum \_let\_lastpgnum=\_undefined \_fi -} -\_def\_usepgcomma{\_ifnum\_tmpnum>0, \_fi} % comma+space between page numbers -\_def\_usepgdash{\_hbox{--}} % dash in the <from>--<to> form - - \_doc ----------------------------- - You can re-define \`\_pgprint` `<gpageno>:{<iitype>}` - if you need to implement more <iitypes>. - \_cod ----------------------------- - -\_def\_pgprint #1:#2{% - \_ifx ,#2,\_pgprintA{#1}\_returnfi \_fi - \_ifx b#2{\_bf \_pgprintA{#1}}\_returnfi \_fi - \_ifx i#2{\_it \_pgprintA{#1}}\_returnfi \_fi - \_ifx u#2\_pgu{\_pgprintA{#1}}\_returnfi \_fi - \_pgprintA{#1}\_relax -} -\_def\_pgprintA #1{\_ilink[pg:#1]{\_cs{_pgi:#1}}} % \ilink[pg:<gpageno>]{<pageno>} -\_def\_pgu#1{\_leavevmode\_vtop{\_hbox{#1}\kern.3ex\_hrule}} - - \_doc ----------------------------- - The \`\iindex``{<word>}` puts one <word> to the index. It writes - \^`\_Xindex``{<word>}{<iitype>}` to the `.ref` file. - All other variants of indexing macros expand internally to `\iindex`. - \_cod ----------------------------- - -\_def\_iindex#1{\_isempty{#1}\_iffalse - \_openref{\_def~{ }\_ewref\_Xindex{{#1}{\_iitypesaved}}}\_fi} -\_public \iindex ; - - \_doc ----------------------------- - The \`\_Xindex``{<word>}{<iitype>}` stores `\,<word>` to the `\_iilist` if - there is the first occurrence of the <word>. The list of pages where `<word>` - occurs, is the value of the macro `\,<word>`, so the `<gpageno>:<iitype>` - is appended to this list. - Moreover, we need a mapping from <gpageno> to `<pageno>`, because we print - `<pageno>` in the index, but hyperlinks are implemented by `<gpageno>`. - So, the macro `\_pgi:<gpageno>` is defined as `<pageno>`. - \_cod ----------------------------- - -\_def \_iilist {} -\_def \_Xindex #1#2{\_ea\_XindexA \_csname ,#1\_ea\_endcsname \_currpage {#2}} -\_def \_XindexA #1#2#3#4{% #1=\,<word> #2=<gpageno> #3=<pageno> #4=<iitype> - \_ifx#1\_relax \_global\_addto \_iilist {#1}% - \_gdef #1{#2:#4}% - \_else \_global\_addto #1{,#2:#4}% - \_fi - \_sxdef{_pgi:#2}{#3}% -} - - \_doc ----------------------------- - The implementation of macros \`\ii`, \`\iid`, \`\iis` follows. - Note that `\ii` works in the horizontal mode in order to the `\write` whatsit - is not broken from the following word. If you need to keep vertical mode, - use \^`\iindex``{<word>}` directly. - \nl - The \`\iitype` `{<type>}` saves the `<type>` to the \`\_iitypesaved` macro. It is - used in the \^`\iindex` macro. - \_cod ----------------------------- - -\_def\_ii #1 {\_leavevmode\_def\_tmp{#1}\_iiA #1,,\_def\_iitypesaved{}} - -\_def\_iiA #1,{\_if$#1$\_else\_def\_tmpa{#1}% - \_ifx\_tmpa\_iiatsign \_ea\_iiB\_tmp,,\_else\_iindex{#1}\_fi - \_ea\_iiA\_fi} -\_def\_iiatsign{@} - -\_def\_iiB #1,{\_if$#1$\_else \_iiC#1/\_relax \_ea\_iiB\_fi} -\_def\_iiC #1/#2\_relax{\_if$#2$\_else\_iindex{#2#1}\_fi} - -\_def\_iid #1 {\_leavevmode\_iindex{#1}#1\_futurelet\_tmp\_iiD\_def\_iitypesaved{}} -\_def\_iiD{\_ifx\_tmp,\_else\_ifx\_tmp.\_else\_space\_fi\_fi} - -\_def\_iis #1 #2{{\_def~{ }\_global\_sdef{_,#1}{#2}}\_ignorespaces} - -\_def\_iitypesaved{} -\_def\_iitype #1{\_def\_iitypesaved{#1}\_ignorespaces} - -\_public \ii \iid \iis \iitype ; - -\_endcode % ------------------------------------- - -2021-02-15 \_expandafter -> \_ea -2021-02-01 secodary sorting: start from code 65 -2020-04-21 \isempty \iffalse ... \fi added to \iindex -2020-03-26 introduced diff --git a/macros/luatex/optex/base/maketoc.opm b/macros/luatex/optex/base/maketoc.opm deleted file mode 100644 index 8dfd821640..0000000000 --- a/macros/luatex/optex/base/maketoc.opm +++ /dev/null @@ -1,154 +0,0 @@ -% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \maketoc {Macros for maketoc <2020-02-09>} % preloaded in format - - \_doc ------------------------------------ - \`\_Xtoc` `{<level>}{<type>}{<number>}{<o-title>}<title>` (in `.ref` file) reads - given data and appends them to the \`\_toclist` as - \^`\_tocline``{<level>}{<type>}{<number>}{<o-title>}{<title>}{<gpageno>}{<pageno>}` - where: - \begitems - * `<level>`: 0 reserved, 1: chapter, 2: section, 3: subsection - * `<type>`: the type of the level, i.e. chap, sec, secc - * `<number>`: the number of the chapter/section/subsection in the format 1.2.3 - * `<o-title>`: outlines title, if differs from `<title>`. - * `<title>`: the title text - * `<gpageno>`: the page number numbered from 1 independently of pagination - * `<pageno>`: the page number used in the pagination - \enditems - The last two parameters are restored from previous - \^`\_Xpage``{<pageno>}{<gpageno>}`, data were saved in the \^`\_currpage` macro. - - We read the <title> parameter by \^`\scantoeol` from `.ref` file - because the <title> can include something like \code{`\{`}. - \_cod ------------------------------------ - -\_def\_toclist{} -\_newifi \_ifischap \_ischapfalse - -\_def\_Xtoc#1#2#3#4{\_ifnum#1=0 \_ischaptrue\_fi - \_addto\_toclist{\_tocline{#1}{#2}{#3}{#4}}\_scantoeol\_XtocA} -\_def\_XtocA#1{\_addto\_toclist{{#1}}\_ea\_addto\_ea\_toclist\_ea{\_currpage}} - - \_doc ------------------------------------ - \`\_tocline``{<level>}{<type>}{<number>}{<o-title>}{<title>}{<gpageno>}{<pageno>}` - prints the record to the table of contents. It opens group, reduces `\_leftskip`, - `\_rightskip`, runs the \^`\everytocline` (user can customise the design of TOC - here) and runs `\_tocl:<level> {<number>}{<title>}{<pageno>}` macro. - This macro starts with vertical mode, - inserts one record with given `<level>` and it should end by \^`\_tocpar` - which returns to horizontal mode. The `\_tocpar` - appends `\_nobreak \_hskip-2\_iindent\_null \_par`. This causes - that the last line of the record is shifted outside the margin given by - `\_rightskip`. A typical record (with long `<title>`) looks like this: - \begtt \catcode`\<=13 - | | - \llap{<number>} text text text text text - text text text text text - text text .................... <pageno> - \endtt - Margins given by `\leftskip` and `\rightskip` are denoted by `|` in the - examle above. - \nl - \`\tocrefnum` is the global counter of all TOC records (used by hyperlinks). - \_cod ------------------------------------ - -\_newcount \_tocrefnum -\_def\_tocline#1#2#3#4#5#6#7{% - \_advance\_tocrefnum by1 - \_bgroup - \_leftskip=\_iindent \_rightskip=2\_iindent - \_ifischap \_advance\_leftskip by \_iindent \_fi - \_def\_pgn{\_ilink[pg:#6]}% - \_the\_everytocline - \_ifcsname _tocl:#1\_endcsname - \_cs{_tocl:#1}{#3}{\_scantextokens{#5}}{#7}\_par - \_fi - \_egroup -} -\_public \tocrefnum ; - - \_doc ----------------------------------- - You can re-define default macros for each level of tocline if you want.\nl - Parameters are `{<number>}{<title>}{<pageno>}`. - \_cod ----------------------------------- - -\_sdef{_tocl:1}#1#2#3{\_nofirst\_bigskip \_bf\_llaptoclink{#1}{#2}\_hfill \_pgn{#3}\_tocpar} -\_sdef{_tocl:2}#1#2#3{\_llaptoclink{#1}{#2}\_tocdotfill \_pgn{#3}\_tocpar} -\_sdef{_tocl:3}#1#2#3{\_advance\_leftskip by\_iindent \_cs{_tocl:2}{#1}{#2}{#3}} - - \_doc ----------------------------------- - The auxiliary macros are: - \begitems - * \`\_llaptoclink``<text>` does `\_noindent\_llap{<linked text>}`. - * \`\_tocdotfill` creates dots in the TOC. - * \`\_nofirst``\macro` applies the `\macro` only if we don't print the first - record of the TOC. - * \`\_tocpar` finalizes one TOC recors whith rlapped `<pageno>`. - * \`\_pgn``{<pageno>}` creates <pageno> as link to real `<gpage>` saved in `#6` - of \^`\_tocline`. This is temporarily defined in the \^`\_tocline`. - \enditems - \_cod ---------------------------------- - -\_def\_llaptoclink#1{\_noindent - \_llap{\_ilink[toc:\_the\_tocrefnum]{\_enspace#1\_kern.4em}\_kern.1em}} -\_def\_tocdotfill{\_nobreak\_leaders\_hbox to.8em{\_hss.\_hss}\_hskip 1em plus1fill\_relax} -\_def\_nofirst #1{\_ifnum \_lastpenalty=11333 \_else #1\_fi} -\_def\_tocpar{\_nobreak \_hskip-2\_iindent\_null \_par} - - \_doc ----------------------------------- - If you want a special formating of TOC with adding more - special lines (no generated as titles from `\chap`, `\sec`, `\secc`), you - can define `\addtotoc{<level>}{<type>}{<number>}{<o-title>}{<title>}` macro: - \begtt - \def\addtotoc#1#2#3#4#5{% - \incr\_tocrefnum - \_dest[toc:\_the\_tocrefnum]% - \_ewref\_Xtoc{{#1}{#2}{#3}{#4}#5}% - } - \endtt - and you can declare special lines (or something else) - as an unused level (10 in the following example): - \begtt - \sdef{_tocl:10}#1#2#3{\medskip\hbox{\Blue #2}\medskip} - \endtt - Now, users can add a blue line into TOC by - \begtt \catcode`\<=13 - \addtotoc{10}{blue-line}{}{\relax}{<blue text to be added in the TOC>} - \endtt - anywhere in the document. Note that `\relax` in the fourth parameter - means that outline will be not generated. And second parameter - `blue-line` is only a comment (unused in macros). - - \`\maketoc` prints warning if TOC data is empty, else it creates TOC by - running \^`\_toclist` - \_cod ---------------------------------- - -\_def\_maketoc{\_par \_ifx\_toclist\_empty - \_opwarning{\_noexpand\maketoc -- data unavailable, TeX me again}\_openref - \_incr\_unresolvedrefs - \_else \_begingroup - \_tocrefnum=0 \_penalty11333 - \_the\_regtoc \_toclist - \_endgroup \_fi -} - - \_doc ----------------------------------- - \`\regmacro` appends its parameters to \`\_regtoc`, \`\_regmark` and - \`\_regoul`. These token lists are used in \^`\maketoc`, \^`\_begoutput` and - \^`\pdfunidef`. - \_cod \_fin ----------------------------- - -\_newtoks \_regtoc \_newtoks \_regmark \_newtoks \_regoul - -\_def\_regmacro #1#2#3{% - \_toksapp\_regtoc{#1}\_toksapp\_regmark{#2}\_toksapp\_regoul{#3}% -} -\_public \maketoc \regmacro ; - -\_endcode - -2021-02-09 \thisoutline implemented -2020-04-23 \_tocpar introduced (incompatible change) -2020-04-22 \_pg -> \_pgn (incompatible change) -2020-03-12 introduced diff --git a/macros/luatex/optex/base/margins.opm b/macros/luatex/optex/base/margins.opm deleted file mode 100644 index d88cc04237..0000000000 --- a/macros/luatex/optex/base/margins.opm +++ /dev/null @@ -1,80 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \margins {Macros for margins setting <2021-03-15>} % preloaded in format - - \_doc ---------------------------- - \`\margins``/<pg> <fmt> (<left>,<right>,<top>,<bot>)<unit>` - takes its parameters, does calculation and sets `\hoffset`, `\voffset`, - `\hsize` and `\vsize` registers. Note that \OpTeX/ sets the page origin at - the top left corner of the paper, no at the obscure position 1\,in, 1\,in. - It is much more comfortable for macro writers. - \_cod ---------------------------- - -\_newdimen\_pgwidth \_newdimen\_pgheight \_pgwidth=0pt -\_newdimen\_shiftoffset - -\_def\_margins/#1 #2 (#3,#4,#5,#6)#7 {\_def\_tmp{#7}% - \_ifx\_tmp\_empty - \_opwarning{\_string\_margins: missing unit, mm inserted}\_def\_tmp{mm}\_fi - \_setpagedimens #2 % setting \_pgwidth, \_pgheight - \_ifdim\_pgwidth=0pt \_else - \_hoffset=0pt \_voffset=0pt - \_if$#3$\_if$#4$\_hoffset =\_dimexpr (\_pgwidth -\_hsize)/2 \_relax - \_else \_hoffset =\_dimexpr \_pgwidth -\_hsize - #4\_tmp \_relax % only right margin - \_fi - \_else \_if$#4$\_hoffset = #3\_tmp \_relax % only left margin - \_else \_hsize =\_dimexpr \_pgwidth - #3\_tmp - #4\_tmp \_relax % left+right margin - \_hoffset = #3\_tmp \_relax - \_xhsize =\_hsize \_setxhsize % \_xhsize used by \output routine - \_fi\_fi - \_if$#5$\_if$#6$\_voffset =\_dimexpr (\_pgheight -\_vsize)/2 \_relax - \_else \_voffset =\_dimexpr \_pgheight -\_vsize - #6\_tmp \_relax % only bottom margin - \_fi - \_else \_if$#6$\_voffset = #5\_tmp \_relax % only top margin - \_else \_vsize=\_dimexpr \_pgheight - #5\_tmp - #6\_tmp \_relax % top+bottom margin - \_voffset = #5\_tmp \_relax - \_fi\_fi - \_if 1#1\_shiftoffset=0pt \_def\_prepoffsets{}\_else \_if 2#1% double-page layout - \_shiftoffset = \_dimexpr \_pgwidth -\_hsize -2\_hoffset \_relax - \_def\_prepoffsets{\_ifodd\_pageno \_else \_advance\_hoffset \_shiftoffset \_fi}% - \_else \_opwarning{use \_string\_margins/1 or \_string\_margins/2}% - \_fi\_fi\_fi -} -\_def\_setpagedimens{\_isnextchar({\_setpagedimensB}{\_setpagedimensA}} -\_def\_setpagedimensA#1 {\_ifcsname _pgs:#1\_endcsname - \_ea\_ea\_ea\_setpagedimensB \_csname _pgs:#1\_ea\_endcsname\_space - \_else \_opwarning{page specification "#1" is undefined}\_fi} -\_def\_setpagedimensB (#1,#2)#3 {\_setpagedimensC\_pgwidth=#1:#3 - \_setpagedimensC\_pgheight=#2:#3 - \_pdfpagewidth=\_pgwidth \_pdfpageheight=\_pgheight -} -\_def\_setpagedimensC #1=#2:#3 {#1=#2\_ifx^#3^\_tmp\_else#3\_fi\_relax\_truedimen#1} - -\_public \margins ; - - \_doc ---------------------------- - The common page dimensions are defined here. - \_cod ---------------------------- - -\_sdef{_pgs:a3}{(297,420)mm} \_sdef{_pgs:a4}{(210,297)mm} \_sdef{_pgs:a5}{(148,210)mm} -\_sdef{_pgs:a3l}{(420,297)mm} \_sdef{_pgs:a4l}{(297,210)mm} \_sdef{_pgs:a5l}{(210,148)mm} -\_sdef{_pgs:b5}{(176,250)mm} \_sdef{_pgs:letter}{(8.5,11)in} - - \_doc ---------------------------- - \`\magscale` `[<factor>]` does `\mag=<factor>` and recalculates page - dimensions to their true values. - \_cod ---------------------------- - -\_def\_trueunit{} -\_def\_magscale[#1]{\_mag=#1\_def\_trueunit{true}% - \_ifdim\_pgwidth=0pt \_else \_truedimen\_pgwidth \_truedimen\_pgheight \_fi - \_truedimen\_pdfpagewidth \_truedimen\_pdfpageheight -} -\_def\_truedimen#1{\_ifx\_trueunit\_empty \_else#1=\_ea\_ignorept\_the#1truept \_fi} - -\_public \magscale ; - -\_endcode % ----------------------------------------- - -2021-03-15 \_setxhsize added -2020-03-14 released diff --git a/macros/luatex/optex/base/math-macros.opm b/macros/luatex/optex/base/math-macros.opm deleted file mode 100644 index 2b090ee1b8..0000000000 --- a/macros/luatex/optex/base/math-macros.opm +++ /dev/null @@ -1,1079 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \sin {Math macros plus mathchardefs <2021-02-15>} % preloaded in format - - \_doc ----------------------------- - The category code of the character `_` remains as the letter (11) and the mathocode - of it is `"8000`. - It means that it is an active character in math mode. It is defined as the subscript prefix. - - There is a problem: The `x_n` is tokenized as `x`, `_`, `n` and it works - without problems. But `\int``_a^b` is tokenized as `\int``_a`, `^`, `b`. The - control sequence `\int``_a` isn't defined. We must write `\int _a^b`. - - The Lua code presented here solves this problem. But you cannot set your own - control sequence in the form `\<word>_` or `\<word>_<one-letter>` (where - <word> is a sequence of letters) because such control sequences are - inaccessible: preprocessor rewrites it. - - The \`\mathsbon` macro activates the rewriting rule `\<word>_<nonleter>` to - `\<word> _<nonletter>` and - `\<word>``_<letter><nonletter>` to `\<word> _<letter><nonletter>` at input - processor level. The \`\mathsboff` deactivates it. - You can ask by \`\_ifmathsb` if this feature is activated or deactivated. - By default, it is activated in the `\everyjob`, see section~\ref[init]. - Note, that the `\everyjob` is processed after the first line of the document is - read, so the \^`\mathsbon` is activated from the second line of the document. - \_cod ----------------------------- - -\catcode`\_ = 8 \let\sb = _ -\catcode`\_ = 13 \let _ = \sb -\catcode`\_ = 11 -\_private \sb ; - -\_newifi\_ifmathsb \_mathsbfalse -\_def \_mathsbon {% - \_directlua{ - callback.add_to_callback("process_input_buffer", - function (str) - return string.gsub(str.." ", "(\_nbb[a-zA-Z]+)_([a-zA-Z]?[^_a-zA-Z])", "\_pcent 1 _\_pcent 2") - end, "_mathsb") }% - \_global\_mathsbtrue -} -\_def \_mathsboff {% - \_directlua{ callback.remove_from_callback("process_input_buffer", "_mathsb") }% - \_global \_mathsbfalse -} -\_public \mathsboff \mathsbon ; - - \_doc ----------------------------- - All mathcodes are set to equal values as in plain\TeX/. - But all encoding-dependent declarations (like these) will be set - to different values when a Unicode-math font is used. - \_cod ----------------------------- - -\_mathcode`\^^@="2201 % \cdot -\_mathcode`\^^A="3223 % \downarrow -\_mathcode`\^^B="010B % \alpha -\_mathcode`\^^C="010C % \beta -\_mathcode`\^^D="225E % \land -\_mathcode`\^^E="023A % \lnot -\_mathcode`\^^F="3232 % \in -\_mathcode`\^^G="0119 % \pi -\_mathcode`\^^H="0115 % \lambda -\_mathcode`\^^I="010D % \gamma -\_mathcode`\^^J="010E % \delta -\_mathcode`\^^K="3222 % \uparrow -\_mathcode`\^^L="2206 % \pm -\_mathcode`\^^M="2208 % \oplus -\_mathcode`\^^N="0231 % \infty -\_mathcode`\^^O="0140 % \partial -\_mathcode`\^^P="321A % \subset -\_mathcode`\^^Q="321B % \supset -\_mathcode`\^^R="225C % \cap -\_mathcode`\^^S="225B % \cup -\_mathcode`\^^T="0238 % \forall -\_mathcode`\^^U="0239 % \exists -\_mathcode`\^^V="220A % \otimes -\_mathcode`\^^W="3224 % \leftrightarrow -\_mathcode`\^^X="3220 % \leftarrow -\_mathcode`\^^Y="3221 % \rightarrow -\_mathcode`\^^Z="8000 % \ne -\_mathcode`\^^[="2205 % \diamond -\_mathcode`\^^\="3214 % \le -\_mathcode`\^^]="3215 % \ge -\_mathcode`\^^^="3211 % \equiv -\_mathcode`\^^_="225F % \lor -\_mathcode`\ ="8000 % \space -\_mathcode`\!="5021 -\_mathcode`\'="8000 % ^\prime -\_mathcode`\(="4028 -\_mathcode`\)="5029 -\_mathcode`\*="2203 % \ast -\_mathcode`\+="202B -\_mathcode`\,="613B -\_mathcode`\-="2200 -\_mathcode`\.="013A -\_mathcode`\/="013D -\_mathcode`\:="303A -\_mathcode`\;="603B -\_mathcode`\<="313C -\_mathcode`\=="303D -\_mathcode`\>="313E -\_mathcode`\?="503F -\_mathcode`\[="405B -\_mathcode`\\="026E % \backslash -\_mathcode`\]="505D -\_mathcode`\_="8000 % math-active subscript -\_mathcode`\{="4266 -\_mathcode`\|="026A -\_mathcode`\}="5267 -\_mathcode`\^^?="1273 % \smallint - -\_delcode`\(="028300 -\_delcode`\)="029301 -\_delcode`\[="05B302 -\_delcode`\]="05D303 -\_delcode`\<="26830A -\_delcode`\>="26930B -\_delcode`\/="02F30E -\_delcode`\|="26A30C -\_delcode`\\="26E30F - - \_doc ----------------------------- - All control sequences declared by `\mathchardef` are supposed (by default) - only for public usage. It means that they are declared without `_` prefix. - If such sequences are used in internal \OpTeX/ macro then their internal - prefixed form is declared using `\_private` macro.\nl - These encoding dependent declarations will be set to different values - when Unicode-math font is loaded.\nl - The declared sequences for math symbols are not hyperlinked in this documentation. - \maxlines=15 - \_cod ----------------------------- - -\_mathchardef\alpha="010B -\_mathchardef\beta="010C -\_mathchardef\gamma="010D -\_mathchardef\delta="010E -\_mathchardef\epsilon="010F -\_mathchardef\zeta="0110 -\_mathchardef\eta="0111 -\_mathchardef\theta="0112 -\_mathchardef\iota="0113 -\_mathchardef\kappa="0114 -\_mathchardef\lambda="0115 -\_mathchardef\mu="0116 -\_mathchardef\nu="0117 -\_mathchardef\xi="0118 -\_mathchardef\pi="0119 -\_mathchardef\rho="011A -\_mathchardef\sigma="011B -\_mathchardef\tau="011C -\_mathchardef\upsilon="011D -\_mathchardef\phi="011E -\_mathchardef\chi="011F -\_mathchardef\psi="0120 -\_mathchardef\omega="0121 -\_mathchardef\varepsilon="0122 -\_mathchardef\vartheta="0123 -\_mathchardef\varpi="0124 -\_mathchardef\varrho="0125 -\_mathchardef\varsigma="0126 -\_mathchardef\varphi="0127 -\_mathchardef\Gamma="7000 -\_mathchardef\Delta="7001 -\_mathchardef\Theta="7002 -\_mathchardef\Lambda="7003 -\_mathchardef\Xi="7004 -\_mathchardef\Pi="7005 -\_mathchardef\Sigma="7006 -\_mathchardef\Upsilon="7007 -\_mathchardef\Phi="7008 -\_mathchardef\Psi="7009 -\_mathchardef\Omega="700A - -\_mathchardef\aleph="0240 -\_mathchardef\imath="017B -\_mathchardef\jmath="017C -\_mathchardef\ell="0160 -\_mathchardef\wp="017D -\_mathchardef\Re="023C -\_mathchardef\Im="023D -\_mathchardef\partial="0140 -\_mathchardef\infty="0231 -\_mathchardef\prime="0230 -\_mathchardef\emptyset="023B -\_mathchardef\nabla="0272 -\_protected\_def \surd{{\_mathchar"1270}} -\_mathchardef\top="023E -\_mathchardef\bot="023F -\_mathchardef\triangle="0234 -\_mathchardef\forall="0238 -\_mathchardef\exists="0239 -\_mathchardef\neg="023A \_let\lnot=\neg -\_mathchardef\flat="015B -\_mathchardef\natural="015C -\_mathchardef\sharp="015D -\_mathchardef\clubsuit="027C -\_mathchardef\diamondsuit="027D -\_mathchardef\heartsuit="027E -\_mathchardef\spadesuit="027F - -\_mathchardef\coprod="1360 -\_mathchardef\bigvee="1357 -\_mathchardef\bigwedge="1356 -\_mathchardef\biguplus="1355 -\_mathchardef\bigcap="1354 -\_mathchardef\bigcup="1353 -\_mathchardef\intop="1352 -\_protected\_def \int{\_intop\_nolimits} \_private \intop; -\_mathchardef\prod="1351 -\_mathchardef\sum="1350 -\_mathchardef\bigotimes="134E -\_mathchardef\bigoplus="134C -\_mathchardef\bigodot="134A -\_mathchardef\ointop="1348 -\_protected\_def\_oint {\_ointop\_nolimits} \_private \ointop; -\_mathchardef\bigsqcup="1346 -\_mathchardef\smallint="1273 - -\_mathchardef\triangleleft="212F \_private \triangleleft; -\_mathchardef\triangleright="212E \_private \trianglerigt; -\_mathchardef\bigtriangleup="2234 -\_mathchardef\bigtriangledown="2235 -\_mathchardef\wedge="225E \let\land=\wedge -\_mathchardef\vee="225F \let\lor=\vee -\_mathchardef\cap="225C -\_mathchardef\cup="225B -\_mathchardef\ddagger="227A -\_mathchardef\dagger="2279 -\_mathchardef\sqcap="2275 -\_mathchardef\sqcup="2274 -\_mathchardef\uplus="225D -\_mathchardef\amalg="2271 -\_mathchardef\diamond="2205 -\_mathchardef\bullet="220F \_private \bullet; -\_mathchardef\wr="226F -\_mathchardef\div="2204 -\_mathchardef\odot="220C -\_mathchardef\oslash="220B -\_mathchardef\otimes="220A -\_mathchardef\ominus="2209 -\_mathchardef\oplus="2208 -\_mathchardef\mp="2207 -\_mathchardef\pm="2206 -\_mathchardef\circ="220E -\_mathchardef\bigcirc="220D -\_mathchardef\setminus="226E % for set difference A\setminus B -\_mathchardef\cdot="2201 -\_mathchardef\ast="2203 -\_mathchardef\times="2202 -\_mathchardef\star="213F - -\_mathchardef\propto="322F -\_mathchardef\sqsubseteq="3276 -\_mathchardef\sqsupseteq="3277 -\_mathchardef\parallel="326B -\_mathchardef\mid="326A -\_mathchardef\dashv="3261 -\_mathchardef\vdash="3260 -\_mathchardef\nearrow="3225 -\_mathchardef\searrow="3226 -\_mathchardef\nwarrow="322D -\_mathchardef\swarrow="322E -\_mathchardef\Leftrightarrow="322C -\_mathchardef\Leftarrow="3228 -\_mathchardef\Rightarrow="3229 -\_protected\_def \neq{\_not=} \_let\ne=\neq -\_mathchardef\leq="3214 \let\le=\leq -\_mathchardef\geq="3215 \let\ge=\geq -\_mathchardef\succ="321F -\_mathchardef\prec="321E -\_mathchardef\approx="3219 -\_mathchardef\succeq="3217 -\_mathchardef\preceq="3216 -\_mathchardef\supset="321B -\_mathchardef\subset="321A -\_mathchardef\supseteq="3213 -\_mathchardef\subseteq="3212 -\_mathchardef\in="3232 -\_mathchardef\ni="3233 \let\owns=\ni -\_mathchardef\gg="321D -\_mathchardef\ll="321C -% \_mathchardef\not="3236 % defined below -\_mathchardef\leftrightarrow="3224 -\_mathchardef\leftarrow="3220 \_let\gets=\leftarrow -\_mathchardef\rightarrow="3221 \_let\to=\rightarrow -\_mathchardef\mapstochar="3237 -\_protected\_def\mapsto{\_mapstochar\_rightarrow} \_private \mapstochar \rightarrow ; -\_mathchardef\sim="3218 -\_mathchardef\simeq="3227 -\_mathchardef\perp="323F -\_mathchardef\equiv="3211 -\_mathchardef\asymp="3210 -\_mathchardef\smile="315E -\_mathchardef\frown="315F -\_mathchardef\leftharpoonup="3128 -\_mathchardef\leftharpoondown="3129 -\_mathchardef\rightharpoonup="312A -\_mathchardef\rightharpoondown="312B - - \_doc ----------------------------- - The math functions like log, sin, cos are declared in the same way as in - plain\TeX/, but they are `\protected` in \OpTeX/. - \_cod ----------------------------- - -\_protected\_def\log {\_mathop{\_rm log}\_nolimits} -\_protected\_def\lg {\_mathop{\_rm lg}\_nolimits} -\_protected\_def\ln {\_mathop{\_rm ln}\_nolimits} -\_protected\_def\lim {\_mathop{\_rm lim}} -\_protected\_def\limsup {\_mathop{\_rm lim\_thinsk sup}} -\_protected\_def\liminf {\_mathop{\_rm lim\_thinsk inf}} -\_protected\_def\sin {\_mathop{\_rm sin}\_nolimits} -\_protected\_def\arcsin {\_mathop{\_rm arcsin}\_nolimits} -\_protected\_def\sinh {\_mathop{\_rm sinh}\_nolimits} -\_protected\_def\cos {\_mathop{\_rm cos}\_nolimits} -\_protected\_def\arccos {\_mathop{\_rm arccos}\_nolimits} -\_protected\_def\cosh {\_mathop{\_rm cosh}\_nolimits} -\_protected\_def\tan {\_mathop{\_rm tan}\_nolimits} -\_protected\_def\arctan {\_mathop{\_rm arctan}\_nolimits} -\_protected\_def\tanh {\_mathop{\_rm tanh}\_nolimits} -\_protected\_def\cot {\_mathop{\_rm cot}\_nolimits} -\_protected\_def\coth {\_mathop{\_rm coth}\_nolimits} -%\_protected\_def\sec {\_mathop{\_rm sec}\_nolimits} % \sec is section -\_protected\_def\csc {\_mathop{\_rm csc}\_nolimits} -\_protected\_def\max {\_mathop{\_rm max}} -\_protected\_def\min {\_mathop{\_rm min}} -\_protected\_def\sup {\_mathop{\_rm sup}} -\_protected\_def\inf {\_mathop{\_rm inf}} -\_protected\_def\arg {\_mathop{\_rm arg}\_nolimits} -\_protected\_def\ker {\_mathop{\_rm ker}\_nolimits} -\_protected\_def\dim {\_mathop{\_rm dim}\_nolimits} -\_protected\_def\hom {\_mathop{\_rm hom}\_nolimits} -\_protected\_def\det {\_mathop{\_rm det}} -\_protected\_def\exp {\_mathop{\_rm exp}\_nolimits} -\_protected\_def\Pr {\_mathop{\_rm Pr}} -\_protected\_def\gcd {\_mathop{\_rm gcd}} -\_protected\_def\deg {\_mathop{\_rm deg}\_nolimits} - - \_doc ----------------------------- - These macros are defined similarly as in plain\TeX. Only internal macro - names from plain\TeX/ with `@` character are re-written in a more readable - form.\nl - \`\sp` is an alternative for `^`. The \`\sb` alternative for `_` was defined - at line 27 of the file `math-macros.opm`. - \_cod ----------------------------- - -\_let\_sp=^ \public \sp ; -% \sb=_ , defined at beginning of this file - -\_def\_thinsk {\_mskip\_thinmuskip} -\_protected\_def\,{\_relax\_ifmmode \_thinsk \_else \_thinspace \_fi} -\_protected\_def\>{\_mskip\_medmuskip} \let\_medsk = \> -\_protected\_def\;{\_mskip\_thickmuskip} \let\_thicksk = \; -\_protected\_def\!{\_mskip-\_thinmuskip} \let\_thinneg = \! -%\_def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}} % obsolete - - \_doc ----------------------------- - Active \`\prime` character is defined here. - \_cod ----------------------------- - -{\_catcode`\'=\active \_gdef'{^\_bgroup\_primes}} % primes dance -\_def\_primes{\_prime\_isnextchar'{\_primesA}% - {\_isnextchar^{\_primesB}{\_egroup}}} -\_def\_primesA #1{\_primes} -\_def\_primesB #1#2{#2\egroup} -\_private \prime ; - - \_doc ----------------------------- - \`\big`, \`\Big`, \`\bigg`, \`\Bigg`, \`\bigl`, \`\bigm`, \`\bigr`, \`\Bigl`, \`\Bigm`, - \`\Bigr`, \`\biggl`, \`\biggm`, \`\biggr`, \`\Biggl`, \`\Biggm`, \`\Bigg`, \`\Biggr` - are based on the \`\_scalebig` macro because we need the dependency on - the various sizes of the fonts. - \_cod ----------------------------- - -%{\catcode`\^^Z=\active \gdef^^Z{\not=}} % ^^Z is like \ne in math %obsolete - -\_def\_scalebig#1#2{{\_left#1\_vbox to#2\_fontdimen6\_textfont1{}% - \_kern-\_nulldelimiterspace\_right.}} -\_protected\_def\_big#1{\_scalebig{#1}{.85}} -\_protected\_def\_Big#1{\_scalebig{#1}{1.15}} -\_protected\_def\_bigg#1{\_scalebig{#1}{1.45}} -\_protected\_def\_Bigg#1{\_scalebig{#1}{1.75}} -\_public \big \Big \bigg \Bigg ; - -\_protected\_def\_bigl{\_mathopen\_big} -\_protected\_def\_bigm{\_mathrel\_big} -\_protected\_def\_bigr{\_mathclose\_big} -\_protected\_def\_Bigl{\_mathopen\_Big} -\_protected\_def\_Bigm{\_mathrel\_Big} -\_protected\_def\_Bigr{\_mathclose\_Big} -\_protected\_def\_biggl{\_mathopen\_bigg} -\_protected\_def\_biggm{\_mathrel\_bigg} -\_protected\_def\_biggr{\_mathclose\_bigg} -\_protected\_def\_Biggl{\_mathopen\_Bigg} -\_protected\_def\_Biggm{\_mathrel\_Bigg} -\_protected\_def\_Biggr{\_mathclose\_Bigg} -\_public \bigl \bigm \bigr \Bigl \Bigm \Bigr \biggl \biggm \biggr \Biggl \Biggm \Biggr ; - - \_doc ----------------------------- - Math relations defined by the \`\jointrel` plain \TeX/ macro: - \_cod ----------------------------- - -\_protected\_def\_joinrel{\_mathrel{\_mkern-2.5mu}} % -3mu in plainTeX -\_protected\_def\relbar{\_mathrel{\_smash-}} % \_smash, because - has the same height as + -\_protected\_def\Relbar{\_mathrel=} -\_mathchardef\lhook="312C -\_protected\_def\hookrightarrow{\_lhook\_joinrel\_rightarrow} -\_mathchardef\rhook="312D -\_protected\_def\hookleftarrow{\_leftarrow\_joinrel\_rhook} -\_protected\_def\bowtie{\_mathrel\_triangleright\_joinrel\_mathrel\_triangleleft} -\_protected\_def\models{\_mathrel|\_joinrel=} -\_protected\_def\Longrightarrow{\_Relbar\_joinrel\_Rightarrow} -\_protected\_def\longrightarrow{\_relbar\_joinrel\_rightarrow} -\_protected\_def\longleftarrow{\_leftarrow\_joinrel\_relbar} -\_protected\_def\Longleftarrow{\_Leftarrow\_joinrel\_Relbar} -\_protected\_def\longmapsto{\_mapstochar\_longrightarrow} -\_protected\_def\longleftrightarrow{\_leftarrow\_joinrel\_rightarrow} -\_protected\_def\Longleftrightarrow{\_Leftarrow\_joinrel\_Rightarrow} -\_protected\_def\iff{\_thicksk\_Longleftrightarrow\_thicksk} -\_private \lhook \rightarrow \leftarrow \rhook \triangleright \triangleleft - \Relbar \Rightarrow \relbar \rightarrow \Leftarrow \mapstochar - \longrightarrow \Longleftrightarrow ; -\_public \joinrel ; - - \_doc ----------------------------- - \`\ldots`, \`\cdots`, \`\vdots`, \`\ddots` from plain \TeX/ - \_cod ----------------------------- - -\_mathchardef\_ldotp="613A % ldot as a punctuation mark -\_mathchardef\_cdotp="6201 % cdot as a punctuation mark -\_mathchardef\_colon="603A % colon as a punctuation mark -\_public \ldotp \cdotp \colon ; - -\_protected\_def\_ldots{\_mathinner{\_ldotp\_ldotp\_ldotp}} -\_protected\_def\_cdots{\_mathinner{\_cdotp\_cdotp\_cdotp}} -\_protected\_def\_vdots{\_vbox{\_baselineskip=.4em \_lineskiplimit=\_zo - \_kern.6em \_hbox{.}\_hbox{.}\_hbox{.}}} -\_protected\_def\_ddots{\_mathinner{% - \_mkern1mu\_raise.7em\_vbox{\_kern.7em\_hbox{.}}\_mkern2mu - \_raise.4em\_hbox{.}\_mkern2mu\_raise.1em\_hbox{.}\_mkern1mu}} - -\_public \ldots \cdots \vdots \ddots ; - - \_doc ----------------------------- - \`\adots` inspired by plain \TeX/ - \_cod ----------------------------- - -\_protected\_def\_adots{\_mathinner{% - \_mkern1mu\_raise.1em\_hbox{.}\_mkern2mu - \_raise.4em\_hbox{.}\_mkern2mu\_raise.7em\_vbox{\_kern.7em\_hbox{.}}\_mkern1mu}} - -\_public \adots ; - - \_doc ----------------------------- - Math accents (encoding dependent declarations). - \_cod ----------------------------- - -\_protected\_def\acute{\_mathaccent"7013 } -\_protected\_def\grave{\_mathaccent"7012 } -\_protected\_def\ddot{\_mathaccent"707F } -\_protected\_def\tilde{\_mathaccent"707E } -\_protected\_def\bar{\_mathaccent"7016 } -\_protected\_def\breve{\_mathaccent"7015 } -\_protected\_def\check{\_mathaccent"7014 } -\_protected\_def\hat{\_mathaccent"705E } -\_protected\_def\vec{\_mathaccent"017E } -\_protected\_def\dot{\_mathaccent"705F } -\_protected\_def\widetilde{\_mathaccent"0365 } -\_protected\_def\widehat{\_mathaccent"0362 } - - \_doc ----------------------------- - \`\_math`, \`\skew`, - \`\overrightarrow`, \`\overleftarrow`, \`\overbrace`, \`\underbrace` macros. - The last four are redefined when Unicode math is loaded. - \_cod ----------------------------- - -\_def\_math{\_mathsurround\_zo} -\_protected\_def\_skew #1#2#3{{\_muskip0=#1mu\_divide\_muskip0=by2 \_mkern\_muskip0 - #2{\_mkern-\_muskip0{#3}\_mkern\_muskip0}\_mkern-\_muskip0}{}} -\_protected\_def\_overrightarrow #1{\_vbox{\_math\_ialign{##\_crcr - \_rightarrowfill\_crcr\_noalign{\_kern-.1em \_nointerlineskip} - $\_hfil\_displaystyle{#1}\_hfil$\_crcr}}} -\_protected\_def\_overleftarrow #1{\_vbox{\_math\_ialign{##\_crcr - \_leftarrowfill\_crcr\_noalign{\_kern-.1em \_nointerlineskip} - $\_hfil\_displaystyle{#1}\_hfil$\_crcr}}} -\_protected\_def\_overbrace #1{\_mathop{% - \_vbox{\_math\_ialign{##\_crcr\_noalign{\_kern.3em} - \_downbracefill\_crcr\_noalign{\_kern.3em \_nointerlineskip} - $\_hfil\_displaystyle{#1}\_hfil$\_crcr}}}\_limits} -\_protected\_def\_underbrace #1{\_mathop{\_vtop{\_math\_ialign{##\_crcr - $\_hfil\_displaystyle{#1}\_hfil$\_crcr\_noalign{\_kern.3em \_nointerlineskip} - \_upbracefill\_crcr\_noalign{\_kern.3em}}}}\_limits} - -\_public \overrightarrow \overleftarrow \overbrace \underbrace \skew ; - - \_doc ----------------------------- - Macros based on `\delimiter`, `\*witdelims` and `\radical` primitives. - \_cod ----------------------------- - -\_protected\_def\lmoustache{\_delimiter"437A340 } % top from (, bottom from ) -\_protected\_def\rmoustache{\_delimiter"537B341 } % top from ), bottom from ( -\_protected\_def\lgroup{\_delimiter"462833A } % extensible ( with sharper tips -\_protected\_def\rgroup{\_delimiter"562933B } % extensible ) with sharper tips -\_protected\_def\arrowvert{\_delimiter"26A33C } % arrow without arrowheads -\_protected\_def\Arrowvert{\_delimiter"26B33D } % double arrow without arrowheads -\_protected\_def\bracevert{\_delimiter"77C33E } % the vertical bar that extends braces -\_protected\_def\Vert{\_delimiter"26B30D } \_let\|=\Vert -\_protected\_def\vert{\_delimiter"26A30C } -\_protected\_def\uparrow{\_delimiter"3222378 } -\_protected\_def\downarrow{\_delimiter"3223379 } -\_protected\_def\updownarrow{\_delimiter"326C33F } -\_protected\_def\Uparrow{\_delimiter"322A37E } -\_protected\_def\Downarrow{\_delimiter"322B37F } -\_protected\_def\Updownarrow{\_delimiter"326D377 } -\_protected\_def\backslash{\_delimiter"26E30F } % for double coset G\_backslash H -\_protected\_def\rangle{\_delimiter"526930B } -\_protected\_def\langle{\_delimiter"426830A } -\_protected\_def\rbrace{\_delimiter"5267309 } \_let\}=\rbrace \_let\_rbrace=\rbrace -\_protected\_def\lbrace{\_delimiter"4266308 } \_let\{=\lbrace \_let\_lbrace=\lbrace -\_protected\_def\rceil{\_delimiter"5265307 } -\_protected\_def\lceil{\_delimiter"4264306 } -\_protected\_def\rfloor{\_delimiter"5263305 } -\_protected\_def\lfloor{\_delimiter"4262304 } - -\_protected\_def\choose{\_atopwithdelims()} -\_protected\_def\brack{\_atopwithdelims[]} -\_protected\_def\brace{\_atopwithdelims\_lbrace\_rbrace} - -\_protected\_def\_sqrt{\_radical"270370 } \_public \sqrt ; - - \_doc ----------------------------- - \`\mathpalette`, \`\vphantom`, \`\hphantom`, \`\phantom`, \`\mathstrut`, and - \`\smash` macros from plain \TeX. - \_cod ----------------------------- - -\_def\_mathpalette#1#2{\_mathchoice{#1\_displaystyle{#2}}% - {#1\_textstyle{#2}}{#1\_scriptstyle{#2}}{#1\_scriptscriptstyle{#2}}} -\_newbox\_rootbox -\_protected\_def\root#1\of{\_setbox\_rootbox - \_hbox{$\_math\_scriptscriptstyle{#1}$}\_mathpalette\_rootA} -\_def\_rootA#1#2{\_setbox0=\_hbox{$\_math#1\_sqrt{#2}$}\_dimen0=\_ht0 - \_advance\_dimen0by-\_dp0 - \_mkern5mu\_raise.6\_dimen0\_copy\_rootbox \_mkern-10mu\_box0 } -\_newifi\_ifvp \_newifi\_ifhp -\_protected\_def\_vphantom{\_vptrue\_hpfalse\_phant} -\_protected\_def\_hphantom{\_vpfalse\_hptrue\_phant} -\_protected\_def\_phantom{\_vptrue\_hptrue\_phant} -\_def\_phant{\_ifmmode\_def\_next{\_mathpalette\_mathphant}% - \_else\_let\_next=\_makephant\_fi\_next} -\_def\_makephant#1{\_setbox0\_hbox{#1}\_finphant} -\_def\_mathphant#1#2{\_setbox0=\_hbox{$\_math#1{#2}$}\_finphant} -\_def\_finphant{\_setbox2=\_null - \_ifvp \_ht2=\_ht0 \_dp2=\_dp0 \_fi - \_ifhp \_wd2=\_wd0 \_fi \_hbox{\_box2}} -\_def\_mathstrut{\_vphantom(} -\_protected\_def\_smash{\_relax % \_relax, in case this comes first in \halign - \_ifmmode\_def\_next{\_mathpalette\_mathsmash}\_else\_let\_next\_makesmash - \_fi\_next} -\_def\_makesmash#1{\_setbox0=\_hbox{#1}\_finsmash} -\_def\_mathsmash#1#2{\_setbox0=\_hbox{$\_math#1{#2}$}\_finsmash} -\_def\_finsmash{\_ht0=\_zo \_dp0=\_zo \_hbox{\_box0}} -\_public \mathpalette \vphantom \hphantom \phantom \mathstrut \smash ; - - \_doc ----------------------------- - \`\cong`, \`\notin`, \`\rightleftharpoons`, \`\buildrel`, \`\doteq`, \`\bmod` - and \`\pmod` macros from plain \TeX/. - \_cod ----------------------------- - -\_protected\_def\_cong{\_mathrel{\_mathpalette\_overeq\_sim}} % congruence sign -\_def\_overeq#1#2{\_lower.05em\_vbox{\_lineskiplimit\_maxdimen\_lineskip=-.05em - \_ialign{$\_math#1\_hfil##\_hfil$\_crcr#2\_crcr=\_crcr}}} -\_protected\_def\_notin{\_mathrel{\_mathpalette\_cancel\_in}} -\_def\_cancel#1#2{\_math\_ooalign{$\_hfil#1\_mkern1mu/\_hfil$\_crcr$#1#2$}} -\_protected\_def\_rightleftharpoons{\_mathrel{\_mathpalette\_rlhp{}}} -\_def\_rlhp#1{\_vcenter{\_math\_hbox{\_ooalign{\_raise.2em - \_hbox{$#1\_rightharpoonup$}\_crcr - $#1\_leftharpoondown$}}}} -\_protected\_def\_buildrel#1\over#2{\_mathrel{\_mathop{\_kern\_zo #2}\_limits^{#1}}} -\_protected\_def\_doteq{\_buildrel\_textstyle.\over=} -\_private \in \sim ; -\_public \cong \notin \rightleftharpoons \buildrel \doteq ; - -\_protected\_def\_bmod{\_nonscript\_mskip-\_medmuskip\_mkern5mu - \_mathbin{\_rm mod}\_penalty900\_mkern5mu\_nonscript\_mskip-\_medmuskip} -\_protected\_def\_pmod#1{\_allowbreak\_mkern18mu({\_rm mod}\_thinsk\_thinsk#1)} -\_public \bmod \pmod ; - - \_doc ----------------------------- - \`\matrix` and \`\pmatrix` - behave as in Plain \TeX/, if it is used in the - `\displaystyle`. On the other hand, it is printed in smaller size - (by appropriate amount) in `\textstyle` = `\scriptstyle` and `\scriptscriptstyle`. - This feature is new in \OpTeX/. - \_cod ----------------------------- - -\_protected\_def\_matrix#1{\_null\_thinsk - \_edef\_tmpa{\_the\_numexpr \_mathstyle/4\_relax}% 0 0 1 1 1 1 2 2 - \_vcenter{\_matrixbaselines\_math - \_ialign{\_the\_lmfil$\_matrixstyle##$\_hfil&&\_quad\_the\_lmfil$\_matrixstyle##$\_hfil\_crcr - \_mathstrut\_crcr\_noalign{\_kern-\_baselineskip} - #1\_crcr\_mathstrut\_crcr\_noalign{\_kern-\_baselineskip}}}\_thinsk} - -\_def\_matrixbaselines{\_normalbaselines \_def\_matrixstyle{}% - \_let\_matrixbaselines=\_relax % \matrix inside matrix does not change size again - \_ifcase\_tmpa \_or - \_baselineskip=.7\_baselineskip \_def\_quad {\_hskip.7em\_relax}% - \_let\_matrixstyle=\_scriptstyle - \_or - \_baselineskip=.5\_baselineskip \_def\_quad {\_hskip.5em\_relax}% - \_let\_matrixstyle=\_scriptscriptstyle - \_fi -} -\_protected\_def\_pmatrix#1{\_left(\_matrix{#1}\_right)} - -\_public \matrix \pmatrix ; - - \_doc ----------------------------- - The \`\cases` and \`\bordermatrix` macros are almost identical as in plain \TeX/. - You can simply re-define `\bordermatrix` with other delimiters - using the common \`\_bordermatrixwithdelims` macro. - \_cod ----------------------------- - -\_protected\_long\_def\_cases#1{\_left\{\_thinsk\_vcenter{\_normalbaselines\_math - \_ialign{$##\_hfil$&\_quad{##\_unsskip}\_hfil\_crcr#1\_crcr}}\_right.} - -\_newdimen\_ptrenwd -\_ptrenwd=8.75pt % width of the big left ( -\_protected\_def\_bordermatrix{\_bordermatrixwithdelims()} -\_def\_bordermatrixwithdelims#1#2#3{\_begingroup \_math - \_setbox0=\_vbox{\_bordermatrixA #3\_stopbmatrix}% - \_setbox2=\_vbox{\_unvcopy0 \_global\_setbox1=\_lastbox}% - \_setbox2=\_hbox{\_unhbox1 \_unskip\_global\_setbox1=\_lastbox}% - \_setbox2=\_hbox{$\_kern\_wd1 \_kern-\_ptrenwd\_left#1\_kern-\_wd1 - \_global\_setbox1=\_vbox{\_box1 \_kern.2em}% - \_vcenter{\_kern-\_ht1 \_unvbox0 \_kern-\_baselineskip}\_thinsk\_right#2$}% - \_null\_thicksk\_vbox{\_kern\_ht1 \_box2}\_endgroup} -\_def\_bordermatrixA #1\cr#2\_stopbmatrix{% - \_ialign{$##$\_hfil\_kern.2em\_kern\_ptrenwd&\_thinspace\_hfil$##$\_hfil - &&\_quad\_hfil$##$\_hfil\_crcr - \_omit\_strut\_hfil\_crcr\_noalign{\_kern-\_baselineskip}% - #1\_crcr\_noalign{\_kern.2em}#2\_crcr\_omit\_strut\_cr}} - -\_public \cases \bordermatrix ; - - \_doc ----------------------------- - The \`\eqalign` macro behaves like in Plain \TeX/ by default. - It creates the `\vcenter` in the math mode. The content is two column - `\halign` with right-aligned left column and left-aligned right column. - The table items are in `\displaystyle` and the `\baselineskip` is - advanced by `\jot` (3pt in plain \TeX). It follows from the default - settings of \^`\eqlines` and \^`\eqstyle` parameters. - - In \OpTeX/, this macro is more flexible. See section 4.4 in the - \ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf] - {Typesetting Math with \OpTeX/}. - The `\baselineskip` value is set by the \^`\eqlines` parameter and math style - by the \^`\eqstyle` parameter. - - There are more possible columns than two (used in classical Plain TeX): - `rlcrlcrlc` etc.\ where `r` and `l` columns are without spaces and `c` column - (if used) has space \^`\eqspace`/2 at its both sides. - \_cod ----------------------------- - -\_long\_def\_eqalign#1{\_null\_thinsk\_vcenter{\_the\_eqlines\_math - \_ialign{&\_hfil$\_the\_eqstyle{##}$&$\_the\_eqstyle{{}##}$\_hfil - &\_hskip.5\_eqspace\_hfil$\_the\_eqstyle{##}$\_hskip.5\_eqspace\_hfil - \_crcr#1\_crcr}}\_thinsk} - -\_public \eqalign ; - - \_doc ----------------------------- - The \`\displaylines``{<formula>\cr<formula>\cr...<formula>}` - creates horizontally centered formulae. - It behaves exactly as in Plain \TeX/. The `\halign` is applied directly - in the outer display environment with lines of type `\hbox to\displaywidth`. - This enables to break lines inside such display to more pages but it is - impossible to use `\eqno` or `\leqno` or \^`\eqmark`. - - \OpTeX/ offers - `\dislaylines to<dimen>{<formula>\cr<formula>\cr...<formula>}` - as an alternative case of usage `\displaylines`. See section 4.3 in the - \ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf] - {Typesetting Math with \OpTeX/}. - The centered formulas are in `\vcenter` in this case, - so lines cannot be broken into more pages, but this case - enables to use `\eqno` or `\leqno` or \^`\eqmark`. - \_cod ----------------------------- - -\_def\_displaylines #1#{\_ifx&\_ea\_displaylinesD - \_else \_def\_tmp to##1\_end{\_def\_tmp{\_dimexpr ##1}}\_tmp #1\_end - \_ea\_displaylinesto \_fi} -\_long\_def\_displaylinesD #1{\_display \_tabskip=\_zoskip - \_halign{\_hbox to\_displaywidth{$\_elign\_hfil\_displaystyle##\_hfil$}\_crcr - #1\_crcr}} -\_long\_def\_displaylinesto #1{\_vcenter{\_openup\_jot \_math \_tabskip=\_zoskip - \_halign{\_strut\_hbox to\_span\_tmp{$\_hss\_displaystyle##\_hss$}\_crcr - #1\_crcr}}} - -\_public\displaylines ; - - \_doc ----------------------------- - \`\openup`, \`\eqalignno` and `\leqalignno` macros are copied from - Plain \TeX/ unchanged. - \_cod ----------------------------- - -\_def\_openup{\_afterassignment\_openupA\_dimen0=} -\_def\_openupA{\_advance\_lineskip by\_dimen0 - \_advance\_baselineskip by\_dimen0 - \_advance\_lineskiplimit by\_dimen0 } -\_newifi\_ifdtop -\_def\_display{\_global\_dtoptrue\_openup\_jot\_math - \_everycr{\_noalign{\_ifdtop \_global\_dtopfalse \_ifdim\_prevdepth>-1000pt - \_vskip-\_lineskiplimit \_vskip\_normallineskiplimit \_fi - \_else \_penalty\_interdisplaylinepenalty \_fi}}} -\_def\_elign{\_tabskip=\_zoskip\_everycr{}} % restore inside \_display -\_long\_def\_eqalignno#1{\_display \_tabskip=\_centering - \_halign to\_displaywidth{\_hfil$\_elign\_displaystyle{##}$\_tabskip=\_zoskip - &$\_elign\_displaystyle{{}##}$\_hfil\_tabskip\_centering - &\_llap{$\_elign##$}\_tabskip\_zoskip\_crcr - #1\_crcr}} -\_long\_def\_leqalignno#1{\_display \_tabskip=\_centering - \_halign to\_displaywidth{\_hfil$\_elign\_displaystyle{##}$\_tabskip=\_zoskip - &$\_elign\_displaystyle{{}##}$\_hfil\_tabskip=\_centering - &\_kern-\_displaywidth\_rlap{$\_elign##$}\_tabskip\_displaywidth\_crcr - #1\_crcr}} -\_public \openup \eqalignno \leqalignno ; - - \_doc ----------------------------- - These macros are inspired by `ams-math.tex` file. - \maxlines=15 - \_cod ----------------------------- - -\_def\_amsafam{4} \_def\_amsbfam{5} - -\_mathchardef \boxdot "2\_amsafam 00 -\_mathchardef \boxplus "2\_amsafam 01 -\_mathchardef \boxtimes "2\_amsafam 02 -\_mathchardef \square "0\_amsafam 03 -\_mathchardef \blacksquare "0\_amsafam 04 -\_mathchardef \centerdot "2\_amsafam 05 -\_mathchardef \lozenge "0\_amsafam 06 -\_mathchardef \blacklozenge "0\_amsafam 07 -\_mathchardef \circlearrowright "3\_amsafam 08 -\_mathchardef \circlearrowleft "3\_amsafam 09 -\_mathchardef \rightleftharpoons "3\_amsafam 0A -\_mathchardef \leftrightharpoons "3\_amsafam 0B -\_mathchardef \boxminus "2\_amsafam 0C -\_mathchardef \Vdash "3\_amsafam 0D -\_mathchardef \Vvdash "3\_amsafam 0E -\_mathchardef \vDash "3\_amsafam 0F -\_mathchardef \twoheadrightarrow "3\_amsafam 10 -\_mathchardef \twoheadleftarrow "3\_amsafam 11 -\_mathchardef \leftleftarrows "3\_amsafam 12 -\_mathchardef \rightrightarrows "3\_amsafam 13 -\_mathchardef \upuparrows "3\_amsafam 14 -\_mathchardef \downdownarrows "3\_amsafam 15 -\_mathchardef \upharpoonright "3\_amsafam 16 -\_mathchardef \downharpoonright "3\_amsafam 17 -\_mathchardef \upharpoonleft "3\_amsafam 18 -\_mathchardef \downharpoonleft "3\_amsafam 19 -\_mathchardef \rightarrowtail "3\_amsafam 1A -\_mathchardef \leftarrowtail "3\_amsafam 1B -\_mathchardef \leftrightarrows "3\_amsafam 1C -\_mathchardef \rightleftarrows "3\_amsafam 1D -\_mathchardef \Lsh "3\_amsafam 1E -\_mathchardef \Rsh "3\_amsafam 1F -\_mathchardef \rightsquigarrow "3\_amsafam 20 -\_mathchardef \leftrightsquigarrow "3\_amsafam 21 -\_mathchardef \looparrowleft "3\_amsafam 22 -\_mathchardef \looparrowright "3\_amsafam 23 -\_mathchardef \circeq "3\_amsafam 24 -\_mathchardef \succsim "3\_amsafam 25 -\_mathchardef \gtrsim "3\_amsafam 26 -\_mathchardef \gtrapprox "3\_amsafam 27 -\_mathchardef \multimap "3\_amsafam 28 -\_mathchardef \therefore "3\_amsafam 29 -\_mathchardef \because "3\_amsafam 2A -\_mathchardef \doteqdot "3\_amsafam 2B -\_mathchardef \triangleq "3\_amsafam 2C -\_mathchardef \precsim "3\_amsafam 2D -\_mathchardef \lesssim "3\_amsafam 2E -\_mathchardef \lessapprox "3\_amsafam 2F -\_mathchardef \eqslantless "3\_amsafam 30 -\_mathchardef \eqslantgtr "3\_amsafam 31 -\_mathchardef \curlyeqprec "3\_amsafam 32 -\_mathchardef \curlyeqsucc "3\_amsafam 33 -\_mathchardef \preccurlyeq "3\_amsafam 34 -\_mathchardef \leqq "3\_amsafam 35 -\_mathchardef \leqslant "3\_amsafam 36 -\_mathchardef \lessgtr "3\_amsafam 37 -\_mathchardef \backprime "0\_amsafam 38 -\_mathchardef \risingdotseq "3\_amsafam 3A -\_mathchardef \fallingdotseq "3\_amsafam 3B -\_mathchardef \succcurlyeq "3\_amsafam 3C -\_mathchardef \geqq "3\_amsafam 3D -\_mathchardef \geqslant "3\_amsafam 3E -\_mathchardef \gtrless "3\_amsafam 3F -\_mathchardef \sqsubset "3\_amsafam 40 -\_mathchardef \sqsupset "3\_amsafam 41 -\_mathchardef \vartriangleright "3\_amsafam 42 -\_mathchardef \vartriangleleft "3\_amsafam 43 -\_mathchardef \trianglerighteq "3\_amsafam 44 -\_mathchardef \trianglelefteq "3\_amsafam 45 -\_mathchardef \bigstar "0\_amsafam 46 -\_mathchardef \between "3\_amsafam 47 -\_mathchardef \blacktriangledown "0\_amsafam 48 -\_mathchardef \blacktriangleright "3\_amsafam 49 -\_mathchardef \blacktriangleleft "3\_amsafam 4A -\_mathchardef \vartriangle "3\_amsafam 4D -\_mathchardef \blacktriangle "0\_amsafam 4E -\_mathchardef \triangledown "0\_amsafam 4F -\_mathchardef \eqcirc "3\_amsafam 50 -\_mathchardef \lesseqgtr "3\_amsafam 51 -\_mathchardef \gtreqless "3\_amsafam 52 -\_mathchardef \lesseqqgtr "3\_amsafam 53 -\_mathchardef \gtreqqless "3\_amsafam 54 -\_mathchardef \Rrightarrow "3\_amsafam 56 -\_mathchardef \Lleftarrow "3\_amsafam 57 -\_mathchardef \veebar "2\_amsafam 59 -\_mathchardef \barwedge "2\_amsafam 5A -\_mathchardef \doublebarwedge "2\_amsafam 5B -\_mathchardef \angle "0\_amsafam 5C -\_mathchardef \measuredangle "0\_amsafam 5D -\_mathchardef \sphericalangle "0\_amsafam 5E -\_mathchardef \varpropto "3\_amsafam 5F -\_mathchardef \smallsmile "3\_amsafam 60 -\_mathchardef \smallfrown "3\_amsafam 61 -\_mathchardef \Subset "3\_amsafam 62 -\_mathchardef \Supset "3\_amsafam 63 -\_mathchardef \Cup "2\_amsafam 64 -\_mathchardef \Cap "2\_amsafam 65 -\_mathchardef \curlywedge "2\_amsafam 66 -\_mathchardef \curlyvee "2\_amsafam 67 -\_mathchardef \leftthreetimes "2\_amsafam 68 -\_mathchardef \rightthreetimes "2\_amsafam 69 -\_mathchardef \subseteqq "3\_amsafam 6A -\_mathchardef \supseteqq "3\_amsafam 6B -\_mathchardef \bumpeq "3\_amsafam 6C -\_mathchardef \Bumpeq "3\_amsafam 6D -\_mathchardef \lll "3\_amsafam 6E -\_mathchardef \ggg "3\_amsafam 6F -\_protected\_def \ulcorner {\_delimiter"4\_amsafam 70\_amsafam 70 } -\_protected\_def \urcorner {\_delimiter"5\_amsafam 71\_amsafam 71 } -\_mathchardef \circledS "0\_amsafam 73 -\_mathchardef \pitchfork "3\_amsafam 74 -\_mathchardef \dotplus "2\_amsafam 75 -\_mathchardef \backsim "3\_amsafam 76 -\_mathchardef \backsimeq "3\_amsafam 77 -\_protected\_def \llcorner {\_delimiter"4\_amsafam 78\_amsafam 78 } -\_protected\_def \lrcorner {\_delimiter"5\_amsafam 79\_amsafam 79 } -\_mathchardef \complement "0\_amsafam 7B -\_mathchardef \intercal "2\_amsafam 7C -\_mathchardef \circledcirc "2\_amsafam 7D -\_mathchardef \circledast "2\_amsafam 7E -\_mathchardef \circleddash "2\_amsafam 7F -\_mathchardef \rhd "2\_amsafam 42 -\_mathchardef \lhd "2\_amsafam 43 -\_mathchardef \unrhd "2\_amsafam 44 -\_mathchardef \unlhd "2\_amsafam 45 - - \_let\restriction\upharpoonright - \_let\Doteq\doteqdot - \_let\doublecup\Cup - \_let\doublecap\Cap - \_let\llless\lll - \_let\gggtr\ggg - \_let\Box=\square % LaTeX symbol - \_let\Box=\square % LaTeX symbol - -\_mathchardef \lvertneqq "3\_amsbfam 00 -\_mathchardef \gvertneqq "3\_amsbfam 01 -\_mathchardef \nleq "3\_amsbfam 02 -\_mathchardef \ngeq "3\_amsbfam 03 -\_mathchardef \nless "3\_amsbfam 04 -\_mathchardef \ngtr "3\_amsbfam 05 -\_mathchardef \nprec "3\_amsbfam 06 -\_mathchardef \nsucc "3\_amsbfam 07 -\_mathchardef \lneqq "3\_amsbfam 08 -\_mathchardef \gneqq "3\_amsbfam 09 -\_mathchardef \nleqslant "3\_amsbfam 0A -\_mathchardef \ngeqslant "3\_amsbfam 0B -\_mathchardef \lneq "3\_amsbfam 0C -\_mathchardef \gneq "3\_amsbfam 0D -\_mathchardef \npreceq "3\_amsbfam 0E -\_mathchardef \nsucceq "3\_amsbfam 0F -\_mathchardef \precnsim "3\_amsbfam 10 -\_mathchardef \succnsim "3\_amsbfam 11 -\_mathchardef \lnsim "3\_amsbfam 12 -\_mathchardef \gnsim "3\_amsbfam 13 -\_mathchardef \nleqq "3\_amsbfam 14 -\_mathchardef \ngeqq "3\_amsbfam 15 -\_mathchardef \precneqq "3\_amsbfam 16 -\_mathchardef \succneqq "3\_amsbfam 17 -\_mathchardef \precnapprox "3\_amsbfam 18 -\_mathchardef \succnapprox "3\_amsbfam 19 -\_mathchardef \lnapprox "3\_amsbfam 1A -\_mathchardef \gnapprox "3\_amsbfam 1B -\_mathchardef \nsim "3\_amsbfam 1C -\_mathchardef \ncong "3\_amsbfam 1D -\_mathchardef \diagup "0\_amsbfam 1E -\_mathchardef \diagdown "0\_amsbfam 1F -\_mathchardef \varsubsetneq "3\_amsbfam 20 -\_mathchardef \varsupsetneq "3\_amsbfam 21 -\_mathchardef \nsubseteqq "3\_amsbfam 22 -\_mathchardef \nsupseteqq "3\_amsbfam 23 -\_mathchardef \subsetneqq "3\_amsbfam 24 -\_mathchardef \supsetneqq "3\_amsbfam 25 -\_mathchardef \varsubsetneqq "3\_amsbfam 26 -\_mathchardef \varsupsetneqq "3\_amsbfam 27 -\_mathchardef \subsetneq "3\_amsbfam 28 -\_mathchardef \supsetneq "3\_amsbfam 29 -\_mathchardef \nsubseteq "3\_amsbfam 2A -\_mathchardef \nsupseteq "3\_amsbfam 2B -\_mathchardef \nparallel "3\_amsbfam 2C -\_mathchardef \nmid "3\_amsbfam 2D -\_mathchardef \nshortmid "3\_amsbfam 2E -\_mathchardef \nshortparallel "3\_amsbfam 2F -\_mathchardef \nvdash "3\_amsbfam 30 -\_mathchardef \nVdash "3\_amsbfam 31 -\_mathchardef \nvDash "3\_amsbfam 32 -\_mathchardef \nVDash "3\_amsbfam 33 -\_mathchardef \ntrianglerighteq "3\_amsbfam 34 -\_mathchardef \ntrianglelefteq "3\_amsbfam 35 -\_mathchardef \ntriangleleft "3\_amsbfam 36 -\_mathchardef \ntriangleright "3\_amsbfam 37 -\_mathchardef \nleftarrow "3\_amsbfam 38 -\_mathchardef \nrightarrow "3\_amsbfam 39 -\_mathchardef \nLeftarrow "3\_amsbfam 3A -\_mathchardef \nRightarrow "3\_amsbfam 3B -\_mathchardef \nLeftrightarrow "3\_amsbfam 3C -\_mathchardef \nleftrightarrow "3\_amsbfam 3D -\_mathchardef \divideontimes "2\_amsbfam 3E -\_mathchardef \varnothing "0\_amsbfam 3F -\_mathchardef \nexists "0\_amsbfam 40 -\_mathchardef \Finv "0\_amsbfam 60 -\_mathchardef \Game "0\_amsbfam 61 -\_mathchardef \mho "0\_amsbfam 66 -\_mathchardef \eth "0\_amsbfam 67 -\_mathchardef \eqsim "3\_amsbfam 68 -\_mathchardef \beth "0\_amsbfam 69 -\_mathchardef \gimel "0\_amsbfam 6A -\_mathchardef \daleth "0\_amsbfam 6B -\_mathchardef \lessdot "2\_amsbfam 6C -\_mathchardef \gtrdot "2\_amsbfam 6D -\_mathchardef \ltimes "2\_amsbfam 6E -\_mathchardef \rtimes "2\_amsbfam 6F -\_mathchardef \shortmid "3\_amsbfam 70 -\_mathchardef \shortparallel "3\_amsbfam 71 -\_mathchardef \smallsetminus "2\_amsbfam 72 -\_mathchardef \thicksim "3\_amsbfam 73 -\_mathchardef \thickapprox "3\_amsbfam 74 -\_mathchardef \approxeq "3\_amsbfam 75 -\_mathchardef \precapprox "3\_amsbfam 76 -\_mathchardef \succapprox "3\_amsbfam 77 -\_mathchardef \curvearrowleft "3\_amsbfam 78 -\_mathchardef \curvearrowright "3\_amsbfam 79 -\_mathchardef \digamma "0\_amsbfam 7A -\_mathchardef \varkappa "0\_amsbfam 7B -\_mathchardef \Bbbk "0\_amsbfam 7C -\_mathchardef \hslash "0\_amsbfam 7D -\_mathchardef \hbar "0\_amsbfam 7E -\_mathchardef \backepsilon "3\_amsbfam 7F - -\_let\circledplus\oplus -\_let\circledminus\ominus -\_let\circledtimes\otimes -\_let\circledslash\oslash -\_let\circleddot\odot - - \_doc ----------------------------- - The \^`\not` macro is re-defined to be smarter than in plain - \TeX/. The macro follows this rule: - \begtt - \not< becomes \_nless - \not> becomes \_ngtr - if \_notXXX is defined, \not\XXX becomes \_notXXX; - if \_nXXX is defined, \not\XXX becomes \_nXXX; - otherwise, \not\XXX is done in the usual way. - \endtt - \_cod ----------------------------- - -\_mathchardef \_notchar "3236 - -\_protected\_def \_not#1{% - \_ifx #1<\_nless \_else - \_ifx #1>\_ngtr \_else - \_edef\_tmpn{\_csstring#1}% - \_ifcsname _not\_tmpn\_endcsname \_csname _not\_tmpn\_endcsname - \_else \_ifcsname _n\_tmpn\_endcsname \_csname _n\_tmpn\_endcsname - \_else \_mathrel{\_mathord{\_notchar}\_mathord{#1}}% - \_fi \_fi \_fi \_fi} -\_private - \nleq \ngeq \nless \ngtr \nprec \nsucc \nleqslant \ngeqslant \npreceq - \nsucceq \nleqq \ngeqq \nsim \ncong \nsubseteqq \nsupseteqq \nsubseteq - \nsupseteq \nparallel \nmid \nshortmid \nshortparallel \nvdash \nVdash - \nvDash \nVDash \ntrianglerighteq \ntrianglelefteq \ntriangleleft - \ntriangleright \nleftarrow \nrightarrow \nLeftarrow \nRightarrow - \nLeftrightarrow \nleftrightarrow \nexists ; -\_public \not ; - - \_doc ----------------------------- - \`\mathstyles``{<math list>}` - behaves like `{<math list>}`, but you can use the following commands in the - `<math list>`: - \begitems - * \`\currstyle` which expands to `\displaystyle`, `\textstyle`, - `\scriptstyle` or `\scriptscriptstyle` depending on the current math style - when \^`\mathstyles` was opened. - * \`\dobystyle``{<D>}{<T>}{<S>}{<SS>}` is expandable macro. It expands to - `<D>`, `<T>`, `<S>` or `<SS>` depending on the current math style - when \^`\mathstyles` was opened. - * The value of the \`\stylenum` is 0, 1, 2 or 3 - depending on the current math style when \^`\mathstyles` was opened. - \enditems - Example of usage of \^`\mathstyles`: - `\def\mathframe#1{\mathstyles{\frame{$\currstyle{#1}$}}}`. - \_cod ----------------------------- - -\_newcount\_stylenum -\_def\_mathstyles#1{{\_mathchoice{\_stylenum0 #1}{\_stylenum1 #1}% - {\_stylenum2 #1}{\_stylenum3 #1}}} -\_def\_dobystyle#1#2#3#4{\_ifcase\_stylenum#1\_or#2\_or#3\_or#4\_fi} -\_def\_currstyle{\_dobystyle\_displaystyle\_textstyle\_scriptstyle\_scriptscriptstyle} -\_public \mathstyles \dobystyle \currstyle \stylenum ; - - \_doc ----------------------------- - The \`\cramped` macro - sets the cramped variant of the current style. - Note that \^`\currstyle` initializes non-cramped variants. - The example `\mathframe` above should be:\nl - `\def\mathframe#1{\mathstyles{\frame{$\currstyle\cramped #1$}}}`.\nl - Second note: `\cramped` macro reads the current math style from - the `\mathstyle` LuaTeX primitive, so it does not work in numerators of - generalized fractions but you can use it before the fraction is opened: - `$\cramped {x^2\over y^2}$`. - \_cod ----------------------------- - -\_def\_cramped{\_ifcase\_numexpr(\_mathstyle+1)/2\_relax\_or - \_crampeddisplaystyle \_or \_crampedtextstyle \_or - \_crampedscriptstyle \_or \_crampedscriptscriptstyle \_fi -} -\_public \cramped ; - - \_doc ----------------------------- - The \`\mathbox``{<text>}` macro is copied from OPmac trick 078. - It behaves like `\hbox{<text>}` but the `<text>` is scaled to a smaller - size if it is used in scriptstyle or scriptscript style.\nl - The \^`\_textmff` and \^`\_scriptmff` are redefined in order to - respect optical sizes. If we are in script style then the math mode - starts in text style, but optical size is given to script style. - The `\mathbox` in non-Unicode math respects optical sizes - using different principle. - \_cod ----------------------------- - -\_def\_mathbox#1{{\_mathstyles{\_hbox{% - \_ifnum\_stylenum<2 \_everymath{\_currstyle}% - \_else - \_ifnum\_stylenum=2 \_def\_textmff{+ssty=0;}\_fi - \_ifnum\_stylenum=3 \_def\_textmff{+ssty=1;}\_def\_scriptmff{+ssty=1;}\_fi - \_typoscale[\_dobystyle{}{}{700}{500}/]\_fi #1}}}% -} -\_public \mathbox ; - -\_endcode %--------------------------------------------------- - -2021-02-15 \_mathbox redefines \_textmff etc. in order to respect optical sizes -2021-02-04 \_bordermatrixwithdelims introduced. -2021-01-23 better expession for math styles in \matrix -2021-01-22 bad use of \_stylenum in \matrix + bad value (bug fix: \_stylenum->\_mtstylenum) -2020-12-17 \box0->\hbox{\box0} in \_finphant and \_finsmash, see https://tex.stackexchange.com/questions/574997/ -2020-06-14 \borermatrix, \cases corrected -2020-06-13 \adots introduced, \matrix smaller in T mode too. -2020-06-03 \notin corrected -2020-06-02 $$\par$$ error is supressed, so we define \(l)eqalign(no), \displayines as \long -2020-05-30 \cases: group added in the second column. - "\displaylines to<size>" implemented and documented. -2020-05-11 \let\|=\Vert, bug fixed -2020-04-27 \mathstyles introduced -2020-03-14 implemented diff --git a/macros/luatex/optex/base/math-preload.opm b/macros/luatex/optex/base/math-preload.opm deleted file mode 100644 index 0ec9abae2f..0000000000 --- a/macros/luatex/optex/base/math-preload.opm +++ /dev/null @@ -1,227 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \normalmath {Math fonts CM + AMS preloaded <2020-05-06>} % preloaded in format - - \_doc ------------------------------ - We have two math macros \`\normalmath` for the normal shape of all math - symbols and \`\boldmath` for the bold shape of all math symbols. The second one - can be used in bold titles, for example. - These macros load all fonts from all given math font families. - \_cod ------------------------------ - -\_def\_normalmath{% - \_loadmathfamily 0 cmr % CM Roman - \_loadmathfamily 1 cmmi % CM Math Italic - \_loadmathfamily 2 cmsy % CM Standard symbols - \_loadmathfamily 3 cmex % CM extra symbols - \_loadmathfamily 4 msam % AMS symbols A - \_loadmathfamily 5 msbm % AMS symbols B - \_loadmathfamily 6 rsfs % script - \_loadmathfamily 7 eufm % fractur - \_loadmathfamily 8 bfsans % sans serif bold - \_loadmathfamily 9 bisans % sans serif bold slanted (for vectors) -% \_setmathfamily 10 \_tentt -% \_setmathfamily 11 \_tenit - \_setmathdimens -} -\_def\_boldmath{% - \_loadmathfamily 0 cmbx % CM Roman Bold Extended - \_loadmathfamily 1 cmmib % CM Math Italic Bold - \_loadmathfamily 2 cmbsy % CM Standard symbols Bold - \_loadmathfamily 3 cmexb % CM extra symbols Bold - \_loadmathfamily 4 msam % AMS symbols A (bold not available?) - \_loadmathfamily 5 msbm % AMS symbols B (bold not available?) - \_loadmathfamily 6 rsfs % script (bold not available?) - \_loadmathfamily 7 eufb % fractur bold - \_loadmathfamily 8 bbfsans % sans serif extra bold - \_loadmathfamily 9 bbisans % sans serif extra bold slanted (for vectors) -% \_setmathfamily 10 \_tentt -% \_setmathfamily 11 \_tenbi - \_setmathdimens -} -\_count18=9 % families declared by \newfam are 12, 13, ... - -\_def \normalmath {\_normalmath} \_def\boldmath {\_boldmath} - - \_doc ----------------------------- - The classical math family selectors - \`\mit`, \^`\cal`, \^`\bbchar`, \^`\frak` and \^`\script` - are defined here. - The \^`\rm`, \^`\bf`, \^`\it`, \^`\bi` and \^`\tt` does two things: - they are variant selectors for text fonts and math family selectors for math fonts. - The idea was adapted from plain \TeX/.\nl - These macros are redefined when `unimat-codes.opm` is loaded, - see the section~\ref[unimath-codes]. - \_cod ----------------------------- - -\_chardef\_bffam = 8 -\_chardef\_bifam = 9 -%\_chardef\_ttfam = 10 -%\_chardef\_itfam = 11 - -\_protected\_def \_rm {\_tryloadrm \_tenrm \_fam0 } -\_protected\_def \_bf {\_tryloadbf \_tenbf \_fam\_bffam} -\_protected\_def \_it {\_tryloadit \_tenit \_fam1 } -\_protected\_def \_bi {\_tryloadbi \_tenbi \_fam\_bifam} -\_protected\_def \_tt {\_tryloadtt \_tentt} - -\_protected\_def \_mit {\_fam1 } -\_protected\_def \_cal {\_fam2 } -\_protected\_def \_bbchar {\_fam5 } % double stroked letters -\_protected\_def \_frak {\_fam7 } % fraktur -\_protected\_def \_script {\_fam6 } % more extensive script than \cal - -\_public \rm \bf \it \bi \tt \mit \cal \bbchar \frak \script ; - - \_doc ----------------------------- - The optical sizes of Computer Modern fonts, AMS, and other fonts - are declared here. - \_cod ----------------------------- - -%% CM math fonts, optical sizes: - -\_regtfm cmmi 0 cmmi5 5.5 cmmi6 6.5 cmmi7 7.5 cmmi8 8.5 cmmi9 9.5 - cmmi10 11.1 cmmi12 * -\_regtfm cmmib 0 cmmib5 5.5 cmmib6 6.5 cmmib7 7.5 cmmib8 8.5 cmmib9 9.5 cmmib10 * -\_regtfm cmtex 0 cstex8 8.5 cstex9 9.5 cstex10 * -\_regtfm cmsy 0 cmsy5 5.5 cmsy6 6.5 cmsy7 7.5 cmsy8 8.5 cmsy9 9.5 cmsy10 * -\_regtfm cmbsy 0 cmbsy5 5.5 cmbsy6 6.5 cmbsy7 7.5 cmbsy8 8.5 cmbsy9 9.5 cmbsy10 * -\_regtfm cmex 0 cmex7 7.5 cmex8 8.5 cmex9 9.5 cmex10 * -\_regtfm cmexb 0 cmexb10 * - -\_regtfm cmr 0 cmr5 5.5 cmr6 6.5 cmr7 7.5 cmr8 8.5 cmr9 9.5 - cmr10 11.1 cmr12 15 cmr17 * -\_regtfm cmbx 0 cmbx5 5.5 cmbx6 6.5 cmbx7 7.5 cmbx8 8.5 cmbx9 9.5 - cmbx10 11.1 cmbx12 * -\_regtfm cmti 0 cmti7 7.5 cmti8 8.5 cmti9 9.5 cmti10 11.1 cmti12 * -\_regtfm cmtt 0 cmtt8 8.5 cmtt9 9.5 cmtt10 11.1 cmtt12 * - -%% AMS math fonts, optical sizes: - -\_regtfm msam 0 msam5 5.5 msam6 6.5 msam7 7.5 msam8 8.5 msam9 9.5 msam10 * -\_regtfm msbm 0 msbm5 5.5 msbm6 6.5 msbm7 7.5 msbm8 8.5 msbm9 9.5 msbm10 * - -%% fraktur, rsfs, optical sizes: - -\_regtfm eufm 0 eufm5 6 eufm7 8.5 eufm10 * -\_regtfm eufb 0 eufb5 6 eufb7 8.5 eufb10 * -\_regtfm rsfs 0 rsfs5 6 rsfs7 8.5 rsfs10 * - -%% bf and bi sansserif math alternatives: - -\_regtfm bfsans 0 ecsx0500 5.5 ecsx0600 6.5 ecsx0700 7.5 ecsx0800 - 8.5 ecsx0900 9.5 ecsx1000 11.1 ecsx1200 * -\_regtfm bisans 0 ecso0500 5.5 ecso0600 6.5 ecso0700 7.5 ecso0800 - 8.5 ecso0900 9.5 ecso1000 11.1 ecso1200 * -\_regtfm bbfsans 0 ecsx0500 5.5 ecsx0600 6.5 ecsx0700 7.5 ecsx0800 - 8.5 ecsx0900 9.5 ecsx1000 11.1 ecsx1200 * -\_regtfm bbisans 0 ecso0500 5.5 ecso0600 6.5 ecso0700 7.5 ecso0800 - 8.5 ecso0900 9.5 ecso1000 11.1 ecso1200 * - - \_doc ----------------------------- - \`\_loadmathfamily` `<number> <font>` loads one math family, i.\,e.\ - the triple of fonts in the text size, script size and script-script size. - The `<font>` is `<font-id>` used in the `\_regtfm` parameter or - the real TFM name. The family is saved as `\fam<number>`. - \nl - \`\_setmathfamily` `<number> \<font-switch>` loads one math family - like `\_loadmathfamily` does it. But the second parameter is a - `\<font-switch>` declared previously by the `\font` primitive. - \nl - The font family is loaded at \`\_sizemtext`, \`\_sizemscript` and - \`\_sizemsscript` sizes. These sizes are set by the - \`\setmathsizes` `[<text-size>/<script-size>/<scriptscript-size>]` macro. - These parameters are given in the \`\ptmunit` unit, it is set to - 1\`\ptunit` and it is set to 1\,pt by default. - \nl - \`\_corrmsize` `<factor><space>` can be used just before - `\_loadmathfamily` or `\_setmathfamily`. - The `<factor>` is decimal number, it denotes - scale-factor \"size of loaded math font in `\textstyle` : size of text font". - You can use it in `\_normalmath` or `\_boldmath` macros if you want to do a - corrections (for example due to different ex-height in text and math - font). The `\_corrmsize` is applied only to one following - `\_loadmathfamily` or `\_setmathfamily`. If it is missing - then the `<factor>` is 1 for such math family (i.e.\ no size corrections). - \_cod ----------------------------- - -\_def\_corrmsize#1 {\_ptmunit=#1\_ptunit} % for corrections of sizes in diferent fonts - -\_def\_loadmathfamily #1 #2 {% - \_edef\_optsizesave{\_the\_optsize}% - \_optsize=\_sizemtext \_font\_mF=\_whichtfm{#2} at\_optsize \_textfont#1=\_mF - \_optsize=\_sizemscript \_font\_mF=\_whichtfm{#2} at\_optsize \_scriptfont#1=\_mF - \_optsize=\_sizemsscript \_font\_mF=\_whichtfm{#2} at\_optsize \_scriptscriptfont#1=\_mF - \_optsize=\_optsizesave \_ptmunit=\_ptunit -} -\_def\_setmathfamily #1 #2{\_let\_mF=#2% - \_edef\_optsizesave{\_the\_optsize}% - \_optsize=\_sizemtext \_fontlet#2=#2 at\_optsize \_textfont#1=#2% - \_optsize=\_sizemscript \_fontlet#2=#2 at\_optsize \_scriptfont#1=#2% - \_optsize=\_sizemsscript \_fontlet#2=#2 at\_optsize \_scriptscriptfont#1=#2% - \_optsize=\_optsizesave \_ptmunit=\_ptunit \_let#2=\_mF -} -\_def\_setmathsizes[#1/#2/#3]{\_ptmunit=\_ptunit - \_def\_sizemtext{#1\_ptmunit}\_def\_sizemscript{#2\_ptmunit}% - \_def\_sizemsscript{#3\_ptmunit}% -} -\_newdimen\_ptunit \_ptunit=1pt -\_newdimen\_ptmunit \_ptmunit=1\_ptunit - -\_public \setmathsizes \ptunit \ptmunit ; - - \_doc ----------------------------- - The \`\_setmathdimens` macro is used in \^`\normalmath` or \^`\boldmath` - macros. It makes math dimensions dependent on the font size (plain \TeX/ sets - them only for 10\,pt typesetting). The `\skewchar` of some math families are - set here too. - \_cod ----------------------------- - -\_def\_setmathdimens{% PlainTeX sets these dimens for 10pt size only: - \_delimitershortfall=0.5\_fontdimen6\_textfont3 - \_nulldelimiterspace=0.12\_fontdimen6\_textfont3 - \_scriptspace=0.05\_fontdimen6\_textfont3 - \_skewchar\_textfont1=127 \_skewchar\_scriptfont1=127 - \_skewchar\_scriptscriptfont1=127 - \_skewchar\_textfont2=48 \_skewchar\_scriptfont2=48 - \_skewchar\_scriptscriptfont2=48 - \_skewchar\_textfont6=127 \_skewchar\_scriptfont6=127 - \_skewchar\_scriptscriptfont6=127 -} - - \_doc ----------------------------- - Finally, we preload a math fonts collection in [10/7/5] sizes - when the format is generated. This is done when - `\_suppressfontnotfounderror=1` because we need not errors when the format is - generated. Maybe there are not all fonts in the \TeX/ distribution - installed. - \_cod ----------------------------- - -\_suppressfontnotfounderror=1 -\_setmathsizes[10/7/5]\_normalmath -\_suppressfontnotfounderror=0 - - -\_endcode %--------------------------------------------------- - -The Computer Modern and AMS fonts are preloaded here in classical math-fam -concept, where each math family includes three fonts with max 256 characters -(typically 128 characters). - -On the other hand, when \^`\fontfam` macro is used in the document then text -font family and appropriate math family is loaded with Unicode fonts, i.e. -Unicode-math is used. It re-defines all settings given here. - -The general rule of usage the math fonts in different sizes in \OpTeX/ says: set three -sizes by the macro -\^`\setmathsizes` `[<text-size>/<script-size>/<scriptscript-size>]` and then -load all math fonts in given sizes by \^`\normalmath` or \^`\boldmath` macros. -For example -\begtt -\setmathsizes[12/8.4/6]\normalmath ... math typesetting at 12 pt is ready. -\endtt - -\_endinput - -2020-05-06: \itfam, \ttfam removed, (Unicode math preferred) -2020-04-14: \skewchar\fam6 added diff --git a/macros/luatex/optex/base/math-unicode.opm b/macros/luatex/optex/base/math-unicode.opm deleted file mode 100644 index 96f9983380..0000000000 --- a/macros/luatex/optex/base/math-unicode.opm +++ /dev/null @@ -1,266 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \loadmath {Unicode Math fonts <2021-03-09>} % preloaded in format - - \_doc ----------------------------- - \`\loadmath` `{<Unicode-math font>}` loads the given font. It does: - \begitems - * define \`\_unimathfont` as `<Unicode-math font>`, - * redefine `\normalmath` and `\boldmath` macros to their Unicode counterparts, - * load the `\_unimathfont` by `\normalmath`, - * print information about the loaded font on the terminal, - * redefine all encoding dependent setting by `\input unimath-codes.opm`, - * protect new loading by setting \`\_ifmathloading` to false. - \enditems - \`\noloadmath` disallows Unicode-math loading by \`\_mathloadingfalse`.\nl - \`\doloadmath` allows Unicode-math loading by \`\_mathloadingtrue`. - \_cod ----------------------------- - -\_newifi \_ifmathloading \_mathloadingtrue - -\_def\_noloadmath{\_mathloadingfalse} -\_def\_doloadmath{\_mathloadingtrue} - -\_def\_loadmath#1{% - \_ifmathloading - \_initunifonts - \_isfont{#1}\_iffalse - \_opwarning{Math font "#1" not found, skipped...}% - \_else - \_def\_unimathfont{#1}% - \_let\_normalmath = \_normalunimath \_let\_boldmath = \_boldunimath - \_normalmath - \_wterm {MATH-FONT: "#1" -- unicode math prepared.}% - \_ifx\_ncharrmA\_undefined \_opinput {unimath-codes.opm}\_fi - \_mathloadingfalse - \_fi\_fi} - -\_public \loadmath \noloadmath \doloadmath ; - - \_doc ----------------------------- - \`\loadboldmath` `{<bold-font>} \to {<normal-font>}` - defines \`\_unimathboldfont` as `<bold-font>` only if `\_unimathfont` is - defined as `<normal-font>`. It is used when \^`\boldmath` macro is run. - When no `\_unimathboldfont` is defined then the `\boldmath` macro - use \"fake bold" generated by `embolden` \LuaTeX/ font feature. - \_cod ----------------------------- - -\_def\_loadboldmath#1#2\to #3{% - \_def\_tmp{#3}\_ifx\_unimathfont\_tmp % do work only if #3 is loaded as normal Math - \_isfont{#1}\_iffalse - \_opwarning{Bold-Math font "#1" not found, skipped...} - \_else - \_def\_unimathboldfont{#1}% - \_wterm {MATH-FONT: "#1" -- unicode math bold prepared.}% - \_fi\_fi} - -\_public \loadboldmath ; - - \_doc ----------------------------- - The Unicode version of the \^`\normalmath` and \^`\boldmath` macros - are defined here as \`\_normalunimath` and \`\_boldunimath` macros. - They are using \`\_setunimathdimens` in a similar sense as - \^`\_setmathdimens`. - \nl - You can combine more fonts if you register them to another - math families (5, 6, 7, etc.) in the \^`\normalmath` macro. - \nl - The default value of \^`\_normalunimath` shows a combination of base Unicode-math - font with 8bit Math font at family 4. See definition of `\script` macro where - `\fam4` is used. - \_cod ----------------------------- - -\_def\_normalunimath{% - \_loadumathfamily 1 {\_unimathfont}{} % Base font - \_loadmathfamily 4 rsfs % script - \_setunimathdimens -}% -\_def\_boldunimath{% - \_ifx\_unimathboldfont \_undefined - \_loadumathfamily 1 {\_unimathfont}{embolden=1.7;} % Base faked bold - \_else - \_loadumathfamily 1 {\_unimathboldfont}{} % Base real bold font - \_fi - \_loadmathfamily 4 rsfs % script - \_setunimathdimens -}% -\_def\_setunimathdimens{% PlainTeX sets these dimens for 10pt size only: - \_delimitershortfall=0.5\_fontdimen6\_textfont3 - \_nulldelimiterspace=0.12\_fontdimen6\_textfont3 - \_scriptspace=0.05\_fontdimen6\_textfont3 - \_begingroup % correction for \choose - \_everymath{}\_global\_setbox0=\_hbox{$\_fam1\_displaystyle{0\_atop0}$}\_endgroup - \_Umathfractiondelsize\_displaystyle = \_dimexpr(\_ht0-\_Umathaxis\_displaystyle)*2\_relax -} - - \_doc ----------------------------- - If you try the example above about - \~`\loadboldmath``{[xitsmath-bold]} \to {[xitsmath-regular]}` - then you can find a bug in XITSMath-Bold font: the symbols for norm - $\|x\|$ are missing. So, we have to define `\_boldmath` macro manually. - The missing symbol is loaded from family 5 as no-bold variant in our example: - \begtt - \loadmath{[xitsmath-regular]} - \def\_boldmath{% - \_loadumathfamily 1 {[xitsmath-bold]}{} % Base font - \_loadmathfamily 4 rsfs % script - \_loadumathfamily 5 {[xitsmath-regular]}{} - \_def\|{\_Udelimiter 0 5 "02016 }% % norm delimiter from family 5 - \_setmathdimens - } - \endtt - - \`\_loadumathfamily` `<number> {<font>}{<font features>}` - loads the given Unicode-math fonts in three sizes given by the - \^`\setmathsizes` macro and sets it as the math family `<number>`. - The `<font features>` are added to the default - \`\_mfontfeatures` and to the size-dependent features `+ssty=0` - if script size is asked or `+ssty=1` if scriptscriptsize is asked. - If the math family 1 is loaded then the family 2 and 3 are set by the same - font because \TeX/ needs to read dimension information about generating - math formulae from these three math families. All information needed by - \TeX/ is collected in single Unicode-math font.\nl - The \^`\_corrmsize` `<factor><space>` can be used just before - `\_loadumathfamily`, see section~\ref[math-preload] for more information.\nl - The \`\_textmff`, \`\_scriptmff` and \`\_sscriptmff` are additional font - features for text, script and sscript sizes respectively. They are - locally re-defined in \^`\mathbox` macro. - \_cod ----------------------------- - -\_def\_umathname#1#2{"#1:\_mfontfeatures#2"} -\_def\_mfontfeatures{mode=base;script=math;} - -\_def\_loadumathfamily #1 #2#3 {% - \_edef\_optsizesave{\_the\_optsize}% - \_optsize=\_sizemtext \_font\_mF=\_umathname{#2}{\_textmff #3} at\_optsize - \_textfont#1=\_mF \_ifnum#1=1 \_textfont2=\_mF \_textfont3=\_mF \_fi - \_optsize=\_sizemscript \_font\_mF=\_umathname{#2}{\_scriptmff #3} at\_optsize - \_scriptfont#1=\_mF \_ifnum#1=1 \_scriptfont2=\_mF \_scriptfont3=\_mF \_fi - \_optsize=\_sizemsscript \_font\_mF=\_umathname{#2}{\_sscriptmff #3} at\_optsize - \_scriptscriptfont#1=\_mF \_ifnum#1=1 \_scriptscriptfont2=\_mF \_scriptscriptfont3=\_mF \_fi - \_optsize=\_optsizesave \_ptmunit=\_ptunit -} -\_def\_textmff{} \_def\_scriptmff{+ssty=0;} \_def\_sscriptmff{+ssty=1;} - - \_doc ----------------------------- - Unicode math font includes all typical math alphabets together, user needs not to - load more \TeX/ math families. These math alphabets are encoded by - different parts of Unicode table. We need auxiliary macros for setting - mathcodes by selected math alphabet. - \nl - \`\_umathrange` `{<from->-<to>}<class><family>\<first>` sets `\Umathcode`s - of the characters in the interval `<from>-<to>` to `\<first>`, - `\<first>+1`, `\<first>+2` - etc., but \`\_umathcharholes` are skipped - (`\_umathcharholes` are parts of the Unicode table not designed for math - alphabets but they cause that the math alphabets are - not continuously spread out in the table; I mean that the - designers were under the influence of drugs when they created - this part of the Unicode table). - The `<from>-<to>` clause includes normal letters like `A-Z`. - \nl - \`\_umahrangegreek` `\<first>` is the same as - `\_umathrange {<alpha>-<omega>}\<first>`. - \nl - \`\_umahrangeGREEK` `\<first>` is the same as - `\_umathrange {<Alpha>-<Omega>}\<first>`. - \nl - \`\_greekdef` `<control sequences> \_relax` defines each control sequence - as a normal character with codes `\_umathnumB`, `\_umathnumB+1`, - `\_umathnumB+2` etc. It is used for redefinig the contol sequences for - math Greek `\alpha`, `\beta`, `\gamma` etc. - \_cod ----------------------------- - -\_newcount\_umathnumA \_newcount\_umathnumB - -\_def\_umathcorr#1#2{\_ea#1\_ea{\_the#2}} -\_def\_umathprepare#1{\_def\_umathscanholes##1[#1]##2##3\_relax{##2}} -\_def\_umathvalue#1{\_ea\_umathscanholes\_umathcharholes[#1]{#1}\_relax} - -\_def\_umathcharholes{% holes in math alphabets: - [119893]{"210E}[119965]{"212C}[119968]{"2130}[119969]{"2131}% - [119971]{"210B}[119972]{"2110}[119975]{"2112}[119976]{"2133}[119981]{"211B}% - [119994]{"212F}[119996]{"210A}[120004]{"2134}% - [120070]{"212D}[120075]{"210C}[120076]{"2111}[120085]{"211C}[120093]{"2128}% - [120122]{"2102}[120127]{"210D}[120133]{"2115}[120135]{"2119} - [120136]{"211A}[120137]{"211D}[120145]{"2124}% -} -\_def\_umathrange#1#2#3#4{\_umathnumB=#4\_def\_tmp{#2 #3 }\_umathrangeA#1} -\_def\_umathrangeA#1-#2{\_umathnumA=`#1\_relax - \_loop - \_umathcorr\_umathprepare\_umathnumB - \_Umathcode \_umathnumA = \_tmp \_umathcorr\_umathvalue{\_umathnumB} - \_ifnum\_umathnumA<`#2\_relax - \_advance\_umathnumA by1 \_advance\_umathnumB by1 - \_repeat -} -\_def\_umathrangeGREEK{\_umathrange{^^^^0391-^^^^03a9}} -\_def\_umathrangegreek{\_umathrange{^^^^03b1-^^^^03d6}} -\_def\_greekdef#1{\_ifx#1\_relax \_else - \_begingroup \_lccode`X=\_umathnumB \_lowercase{\_endgroup \_def#1{X}}% - \_advance\_umathnumB by 1 - \_ea\_greekdef \_fi -} - -\_endcode - - -The \^`\loadmath` `{<Unicode-math font>}` macro loads math fonts and -redefines all default math-codes using `\input unimath-codes.opm`. -If Unicode-math font is loaded then \^`\_mathloadingfalse` -is set, so the new Unicode-math font isn't loaded until \^`\doloadmath` is used. - -\^`\loadboldmath` `{<bold-font>} \to {<normal-font>}` loads bold variant only -if `<normal-font>` was sucessully loaded by the previous `\loadmath`. For example: - -\begtt -\loadmath {[xitsmath-regular]} -\loadboldmath {[xitsmath-bold]} \to {[xitsmath-regular]} -\endtt -There are very few Unicode-math fonts with full \^`\boldmath` support. -I know only XITSMath-Bold and KpMath-Bold. If \^`\loadboldmath` is not used -then \"faked bold" created from \^`\normalmath` is used by default. - -The \^`\loadmath` macro was succesfully tested on: - -\begtt -\loadmath{[XITSMath-Regular]} ... XITS MATH -\loadmath{[latinmodern-math]} ... Latin Modern Math -\loadmath{[texgyretermes-math]} ... TeXGyre Termes Math -\loadmath{[texgyrebonum-math]} ... TeXGyre Bonum Math -\loadmath{[texgyrepagella-math]} ... TeXGyre Pagella Math -\loadmath{[texgyreschola-math]} ... TeXGyre Schola Math -\loadmath{[texgyredejavu-math]} ... TeXGyre DeJaVu Math -\loadmath{[LibertinusMath-Regular]} ... Libertinus Math -\loadmath{[FiraMath-Regular]} ... Fira Math -\loadmath{[Asana-Math]} ... Asana Math -\loadmath{[KpMath-Regular]} ... KP fonts Math -\endtt - -\secc Unicode-math macros preloaded in the format - -\printdoc math-unicode.opm - - -\secc[unimath-codes] Macros and codes set when \code{\\loadmatfont} is processed - -The file `unimath-codes.opm` is loaded when the \^`\loadmath` is used. The -macros here redefines globally all encoding dependent settings declared in -the section~\ref[math-macros]. - -\printdoc unimath-codes.opm -\printdoctail unimath-codes.opm - -\secc Printing all Unicode math slots in used math font - -\printdoctail print-unimath.opm -\printdoc print-unimath.opm - -\_endinput - -2021-03-09 \_setunimathdimes: \_begin/end/group instead {}, bug fixed -2021-02-15 \_textmff, \_scriptmff and \_sscriptmff introduced -2021-02-15 \_expandafter -> \_ea -2020-06-07 \Umathfractiondelsize (for \choose brackets) corrected, see https://tug.org/pipermail/luatex/2020-June/007365.html -2020-04-15 \_setmathdimens -> \_setuniathdimens -2020-02-25 implemented diff --git a/macros/luatex/optex/base/mathclass.opm b/macros/luatex/optex/base/mathclass.opm deleted file mode 100644 index 458431abca..0000000000 --- a/macros/luatex/optex/base/mathclass.opm +++ /dev/null @@ -1,1591 +0,0 @@ -# File: MathClass.txt -# Revision: 15 -# Date: 2017-06-01, 12:35:00 GMT -# -# © 2017 Unicode®, Inc. -# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html -# For documentation, see http://www.unicode.org/reports/tr25/ -# -# ------------------------------------------------ -# This file is a classification of characters based on their usage in -# mathematical notation. -# -# While the contents of this file represent the best information -# available to the authors and the Unicode Technical Committee as -# of the date referenced above, it is likely that the information -# in this file will change from time to time. -# -# This file is *NOT* formally part of the Unicode Character Database -# at this time. -# -# The character encoding of this plain-text file is UTF-8. -# -# The data consists of 2 fields. -# -# 1: code point or range -# -# 2: class, one of: -# -# N - Normal - includes all digits and symbols requiring only one form -# A - Alphabetic -# B - Binary -# C - Closing - usually paired with opening delimiter -# D - Diacritic -# F - Fence - unpaired delimiter (often used as opening or closing) -# G - Glyph_Part - piece of large operator -# L - Large - n-ary or large operator, often takes limits -# O - Opening - usually paired with closing delimiter -# P - Punctuation -# R - Relation - includes arrows -# S - Space -# U - Unary - operators that are only unary -# V - Vary - operators that can be unary or binary depending on context -# X - Special - characters not covered by other classes -# -# Fields are delimited by ';'. Spaces adjacent to the delimiter or the '#' are -# not significant. Future versions of this file may use different amounts of -# whitespace. -# -# Some character positions in the Mathematical Alphanumeric Symbols block are -# reserved and have been mapped to the Letterlike Symbols block in Unicode. -# This is indicated in 24 special purpose comments. -# -# The character repertoire of this revision is the repertoire of Unicode -# Version 9.0. For more information see Revision 15 or later of UTR #25. -# ------------------------------------------------ - -0020;S -0021;N -0023;N -0024;N -0025;N -0026;N -0028;O -0029;C -002A;N -002B;V -002C;P -002D;N -002E;P -002F;B -0030..0039;N -003A;P -003B;P -003C;R -003D;R -003E;R -003F;P -0040;N -0041..005A;A -005B;O -005C;B -005D;C -005E;N -005F;N -0060;D -0061..007A;A -007B;O -007C;F -007D;C -007E;N -00A0;S -00A1;P -00A2;N -00A3;N -00A4;N -00A5;N -00A6;N -00A7;N -00A8;D -00AC;U -00AF;D -00B0;N -00B1;V -00B2;N -00B3;N -00B4;N -00B5;N -00B6;N -00B7;B -00B9;N -00BC;N -00BD;N -00BE;N -00BF;P -00D7;B -00F7;B -0131;A -0237;A -02C6;D -02C7;D -02D8;D -02D9;D -02DA;D -02DC;D -0300;D -0301;D -0302;D -0303;D -0304;D -0305;D -0306;D -0307;D -0308;D -030A;D -030C;D -0311;D -0323;D -032C;D -032D;D -032E;D -032F;D -0330;D -0331;D -0332;D -0333;D -0338;D -033A;D -033F;D -0346;D -0391;A -0392;A -0393;A -0394;A -0395;A -0396;A -0397;A -0398;A -0399;A -039A;A -039B;A -039C;A -039D;A -039E;A -039F;A -03A0;A -03A1;A -03A3;A -03A4;A -03A6;A -03A7;A -03A8;A -03A9;A -03B1;A -03B2;A -03B3;A -03B4;A -03B5;A -03B6;A -03B7;A -03B8;A -03B9;A -03BA;A -03BB;A -03BC;A -03BD;A -03BE;A -03BF;A -03C0;A -03C1;A -03C3;A -03C4;A -03C5;A -03C6;A -03C7;A -03C8;A -03C9;A -03D0;A -03D1;A -03D2;A -03D5;A -03D6;A -03D8;N -03D9;N -03DA;A -03DB;A -03DC;A -03DD;A -03E0;A -03E1;A -03F0;A -03F1;A -03F4;A -03F5;A -03F6;N -0428;A -0606;L -0607;L -0608;A -2000;S -2001;S -2002;S -2003;S -2004;S -2005;S -2006;S -2007;S -2009;S -200A;S -200B;S -2010;P -2012;P -2013;P -2014;P -2016;F -2020;R -2021;R -2022;B -2026;N -2032;N -2033;N -2034;N -2035;N -2036;N -2037;N -203B;N -203C;N -2040;B -2044;B -204E;B -204F;R -2050;R -2051;N -2052;N -2057;N -205F;S -2061;B -2062;B -2063;P -2064;X -207A..207E;N -208A..208E;N -20D0;D -20D1;D -20D2;D -20D3;X -20D4;D -20D5;D -20D6;D -20D7;D -20D8;D -20D9;D -20DA;D -20DB;D -20DC;D -20DD;D -20DE;D -20DF;D -20E1;D -20E4;D -20E5;D -20E6;D -20E7;D -20E8;D -20E9;D -20EA;D -20EB;D -20EC;D -20ED;D -20EE;D -20EF;D -2102;A -2107;N -210A;A -210B;A -210C;A -210D;A -210E;N -210F;N -2110;A -2111;A -2112;A -2113;A -2115;A -2118;A -2119;A -211A;A -211B;A -211C;A -211D;A -2124;A -2126;N -2127;N -2128;A -2129;N -212B;A -212C;A -212D;A -212F;A -2130;A -2131;A -2132;N -2133;A -2134;A -2135;A -2136;A -2137;A -2138;A -213C;A -213D;A -213E;N -213F;A -2140;L -2141;N -2142;N -2143;N -2144;N -2145;N -2146;N -2147;N -2148;N -2149;N -214B;N -2190..21B3;R -21B6;R -21B7;R -21BA..21FF;R -2200;U -2201;U -2202;N -2203;U -2204;U -2205;N -2206;U -2207;U -2208;R -2209;R -220A;R -220B;R -220C;R -220D;R -220E;N -220F;L -2210;L -2211;L -2212;V -2213;V -2214;B -2215;B -2216;B -2217;B -2218;B -2219;B -221A;L -221B;L -221C;L -221D;R -221E;N -221F;N -2220;N -2221;N -2222;N -2223;R -2224;R -2225;R -2226;R -2227;B -2228;B -2229;B -222A;B -222B;L -222C;L -222D;L -222E;L -222F;L -2230;L -2231;L -2232;L -2233;L -2234;R -2235;R -2236;R -2237;R -2238;B -2239;R -223A;R -223B;R -223C;R -223D;R -223E;B -223F;N -2240;B -2241;R -2242;R -2243;R -2244;R -2245;R -2246;R -2247;R -2248;R -2249;R -224A;R -224B;R -224C;R -224D;R -224E;R -224F;R -2250;R -2251;R -2252;R -2253;R -2254;R -2255;R -2256;R -2257;R -2258;R -2259;R -225A;R -225B;R -225C;R -225D;R -225E;R -225F;R -2260;R -2261;R -2262;R -2263;R -2264;R -2265;R -2266;R -2267;R -2268;R -2269;R -226A;R -226B;R -226C;R -226D;R -226E;R -226F;R -2270;R -2271;R -2272;R -2273;R -2274;R -2275;R -2276;R -2277;R -2278;R -2279;R -227A;R -227B;R -227C;R -227D;R -227E;R -227F;R -2280;R -2281;R -2282;R -2283;R -2284;R -2285;R -2286;R -2287;R -2288;R -2289;R -228A;R -228B;R -228C;B -228D;B -228E;B -228F;R -2290;R -2291;R -2292;R -2293;B -2294;B -2295;B -2296;B -2297;B -2298;B -2299;B -229A;B -229B;B -229C;B -229D;B -229E;B -229F;B -22A0;B -22A1;B -22A2;R -22A3;R -22A4;N -22A5;R -22A6;R -22A7;R -22A8;R -22A9;R -22AA;R -22AB;R -22AC;R -22AD;R -22AE;R -22AF;R -22B0;R -22B1;R -22B2;R -22B3;R -22B4;R -22B5;R -22B6;R -22B7;R -22B8;R -22B9;B -22BA;B -22BB;B -22BC;B -22BD;B -22BE;N -22BF;N -22C0;L -22C1;L -22C2;L -22C3;L -22C4;B -22C5;B -22C6;B -22C7;B -22C8;R -22C9;B -22CA;B -22CB;B -22CC;B -22CD;R -22CE;B -22CF;B -22D0;R -22D1;R -22D2;B -22D3;B -22D4;R -22D5;R -22D6;R -22D7;R -22D8;R -22D9;R -22DA;R -22DB;R -22DC;R -22DD;R -22DE;R -22DF;R -22E0;R -22E1;R -22E2;R -22E3;R -22E4;R -22E5;R -22E6;R -22E7;R -22E8;R -22E9;R -22EA;R -22EB;R -22EC;R -22ED;R -22EE;R -22EF;R -22F0;R -22F1;R -22F2;R -22F3;R -22F4;R -22F5;R -22F6;R -22F7;R -22F8;R -22F9;R -22FA;R -22FB;R -22FC;R -22FD;R -22FE;R -22FF;R -2300;N -2302;N -2305;B -2306;B -2308;O -2309;C -230A;O -230B;C -2310;N -2311;N -2319;N -231C;O -231D;C -231E;O -231F;C -2320..2321;G -2322;R -2323;R -#2329;O -#232A;C -2336;N -233D;B -233F;R -237C;R -2394;N -239B..23AF;G -23B0;R -23B1;R -23B2..23B3;G -23B4;N -23B5;N -23B6;N -23B7;G -23D0;G -23DC;N -23DD;N -23DE;N -23DF;N -23E0;N -23E1;N -23E2;N -23E3;N -23E4;N -23E5;N -23E6;N -23E7;N -24C8;N -25A0;N -25A1;N -25AA;N -25AB;N -25AD;N -25AE;N -25AF;N -25B0;N -25B1;N -25B2;B -25B3;B -25B4;B -25B5;B -25B6;B -25B7;B -25B8;B -25B9;B -25BC;B -25BD;B -25BE;B -25BF;B -25C0;B -25C1;B -25C2;B -25C3;B -25C4;B -25C5;B -25C6;N -25C7;N -25C8;N -25C9;N -25CA;B -25CB;B -25CE;N -25CF;N -25D0..25D3;N -25D6;N -25D7;N -25E2;N -25E3;N -25E4;N -25E5;N -25E6;B -25E7..25EA;N -25EB;B -25EC;B -25EF;N -25F8;B -25F9;B -25FA;B -25FB;B -25FC;B -25FD;B -25FE;B -25FF;B -2605;B -2606;B -2609;N -260C;N -263D;N -263E;N -263F;N -2640;N -2641;N -2642;N -2643;N -2644;N -2646;N -2647;N -2648;N -2649;N -2660;N -2661;N -2662;N -2663;N -2664;N -2665;N -2666;N -2667;N -2669;N -266D;N -266E;N -266F;N -2680;N -2681;N -2682;N -2683;N -2684;N -2685;N -2686;N -2687;N -2688;N -2689;N -26AA;N -26AB;N -26AC;N -26B2;N -2713;N -2717;N -2720;N -272A;N -2736;N -2772;O -2773;C -27C0;N -27C1;N -27C2;R -27C3;R -27C4;R -27C5;R -27C6;R -27C7;R -27C8;R -27C9;R -27CA;R -27CB;R -27CC;L -27CD;R -27CE;B -27CF;B -27D0;N -27D1;B -27D2;R -27D3;R -27D4;R -27D5;L -27D6;L -27D7;L -27D8;L -27D9;L -27DA;R -27DB;R -27DC;R -27DD;R -27DE;R -27DF;R -27E0;B -27E1;B -27E2;B -27E3;B -27E4;B -27E5;B -27E6;O -27E7;C -27E8;O -27E9;C -27EA;O -27EB;C -27EC;O -27ED;C -27EE;O -27EF;C -27F0;R -27F1;R -27F2;R -27F3;R -27F4;R -27F5;R -27F6;R -27F7;R -27F8;R -27F9;R -27FA;R -27FB;R -27FC;R -27FD;R -27FE;R -27FF;R -2900;R -2901;R -2902;R -2903;R -2904;R -2905;R -2906;R -2907;R -2908;R -2909;R -290A;R -290B;R -290C;R -290D;R -290E;R -290F;R -2910;R -2911;R -2912;R -2913;R -2914;R -2915;R -2916;R -2917;R -2918;R -2919;R -291A;R -291B;R -291C;R -291D;R -291E;R -291F;R -2920;R -2921;R -2922;R -2923;R -2924;R -2925;R -2926;R -2927;R -2928;R -2929;R -292A;R -292B;R -292C;R -292D;R -292E;R -292F;R -2930;R -2931;R -2932;R -2933;R -2934;R -2935;R -2936;R -2937;R -2938;R -2939;R -293A;R -293B;R -293C;R -293D;R -293E;R -293F;R -2940;R -2941;R -2942;R -2943;R -2944;R -2945;R -2946;R -2947;R -2948;R -2949;R -294A;R -294B;R -294C;R -294D;R -294E;R -294F;R -2950;R -2951;R -2952;R -2953;R -2954;R -2955;R -2956;R -2957;R -2958;R -2959;R -295A;R -295B;R -295C;R -295D;R -295E;R -295F;R -2960;R -2961;R -2962;R -2963;R -2964;R -2965;R -2966;R -2967;R -2968;R -2969;R -296A;R -296B;R -296C;R -296D;R -296E;R -296F;R -2970;R -2971;R -2972;R -2973;R -2974;R -2975;R -2976;R -2977;R -2978;R -2979;R -297A;R -297B;R -297C;R -297D;R -297E;R -297F;R -2980;F -2981;N -2982;F -2983;O -2984;C -2985;O -2986;C -2987;O -2988;C -2989;O -298A;C -298B;O -298C;C -298D;O -298E;C -298F;O -2990;C -2991;O -2992;C -2993;O -2994;C -2995;O -2996;C -2997;O -2998;C -2999;F -299A;F -299B;N -299C;N -299D;N -299E;N -299F;N -29A0;N -29A1;N -29A2;N -29A3;N -29A4;N -29A5;N -29A6;N -29A7;N -29A8;N -29A9;N -29AA;N -29AB;N -29AC;N -29AD;N -29AE;N -29AF;N -29B0;N -29B1;N -29B2;N -29B3;N -29B4;N -29B5;N -29B6;B -29B7;B -29B8;B -29B9;B -29BA;N -29BB;N -29BC;N -29BD;N -29BE;N -29BF;N -29C0;B -29C1;B -29C2;N -29C3;N -29C4;B -29C5;B -29C6;B -29C7;B -29C8;B -29C9;N -29CA;N -29CB;N -29CC;N -29CD;N -29CE;R -29CF;R -29D0;R -29D1;R -29D2;R -29D3;R -29D4;R -29D5;R -29D6;B -29D7;B -29D8;O -29D9;C -29DA;O -29DB;C -29DC;N -29DD;N -29DE;N -29DF;R -29E0;N -29E1;R -29E2;B -29E3;R -29E4;R -29E5;R -29E6;R -29E7;N -29E8;N -29E9;N -29EA;N -29EB;B -29EC;N -29ED;N -29EE;N -29EF;N -29F0;N -29F1;N -29F2;N -29F3;N -29F4;R -29F5;B -29F6;B -29F7;B -29F8;L -29F9;L -29FA;B -29FB;B -29FC;O -29FD;C -29FE;B -29FF;B -2A00;L -2A01;L -2A02;L -2A03;L -2A04;L -2A05;L -2A06;L -2A07;L -2A08;L -2A09;L -2A0A;L -2A0B;L -2A0C;L -2A0D;L -2A0E;L -2A0F;L -2A10;L -2A11;L -2A12;L -2A13;L -2A14;L -2A15;L -2A16;L -2A17;L -2A18;L -2A19;L -2A1A;L -2A1B;L -2A1C;L -2A1D;L -2A1E;L -2A1F;L -2A20;L -2A21;L -2A22;B -2A23;B -2A24;B -2A25;B -2A26;B -2A27;B -2A28;B -2A29;B -2A2A;B -2A2B;B -2A2C;B -2A2D;B -2A2E;B -2A2F;B -2A30;B -2A31;B -2A32;B -2A33;B -2A34;B -2A35;B -2A36;B -2A37;B -2A38;B -2A39;B -2A3A;B -2A3B;B -2A3C;B -2A3D;B -2A3E;B -2A3F;B -2A40;B -2A41;B -2A42;B -2A43;B -2A44;B -2A45;B -2A46;B -2A47;B -2A48;B -2A49;B -2A4A;B -2A4B;B -2A4C;B -2A4D;B -2A4E;B -2A4F;B -2A50;B -2A51;B -2A52;B -2A53;B -2A54;B -2A55;B -2A56;B -2A57;B -2A58;B -2A59;R -2A5A;B -2A5B;B -2A5C;B -2A5D;B -2A5E;B -2A5F;B -2A60;B -2A61;B -2A62;B -2A63;B -2A64;B -2A65;B -2A66;R -2A67;R -2A68;R -2A69;R -2A6A;R -2A6B;R -2A6C;R -2A6D;R -2A6E;R -2A6F;R -2A70;R -2A71;B -2A72;B -2A73;R -2A74;R -2A75;R -2A76;R -2A77;R -2A78;R -2A79;R -2A7A;R -2A7B;R -2A7C;R -2A7D;R -2A7E;R -2A7F;R -2A80;R -2A81;R -2A82;R -2A83;R -2A84;R -2A85;R -2A86;R -2A87;R -2A88;R -2A89;R -2A8A;R -2A8B;R -2A8C;R -2A8D;R -2A8E;R -2A8F;R -2A90;R -2A91;R -2A92;R -2A93;R -2A94;R -2A95;R -2A96;R -2A97;R -2A98;R -2A99;R -2A9A;R -2A9B;R -2A9C;R -2A9D;R -2A9E;R -2A9F;R -2AA0;R -2AA1;R -2AA2;R -2AA3;R -2AA4;R -2AA5;R -2AA6;R -2AA7;R -2AA8;R -2AA9;R -2AAA;R -2AAB;R -2AAC;R -2AAD;R -2AAE;R -2AAF;R -2AB0;R -2AB1;R -2AB2;R -2AB3;R -2AB4;R -2AB5;R -2AB6;R -2AB7;R -2AB8;R -2AB9;R -2ABA;R -2ABB;R -2ABC;R -2ABD;R -2ABE;R -2ABF;R -2AC0;R -2AC1;R -2AC2;R -2AC3;R -2AC4;R -2AC5;R -2AC6;R -2AC7;R -2AC8;R -2AC9;R -2ACA;R -2ACB;R -2ACC;R -2ACD;R -2ACE;R -2ACF;R -2AD0;R -2AD1;R -2AD2;R -2AD3;R -2AD4;R -2AD5;R -2AD6;R -2AD7;R -2AD8;R -2AD9;R -2ADA;R -2ADB;R -2ADC;R -2ADD;R -2ADE;R -2ADF;R -2AE0;R -2AE1;N -2AE2;R -2AE3;R -2AE4;R -2AE5;R -2AE6;R -2AE7;R -2AE8;R -2AE9;R -2AEA;R -2AEB;R -2AEC;R -2AED;R -2AEE;R -2AEF;R -2AF0;R -2AF1;N -2AF2;R -2AF3;R -2AF4;B -2AF5;B -2AF6;B -2AF7;R -2AF8;R -2AF9;R -2AFA;R -2AFB;B -2AFC;L -2AFD;B -2AFE;B -2AFF;L -2B00..2B11;R -2B12;N -2B13;N -2B14;N -2B15;N -2B16;N -2B17;N -2B18;N -2B19;N -2B1B..2B1F;N -2B20;N -2B21;N -2B22;N -2B23;N -2B24..2B2F;N -2B30..2B44;R -2B45;R -2B46;R -2B47..2B4C;R -2B50..2B54;N -2B95;R -2BC2..2BC8;N -2BCA;N -2BCB;N -3008;X -3009;X -#3014;O -#3015;C -#3018;O -#3019;C -301A;X -301B;X -306E;N -FB29;X -FE00;D -#deprecFE35; -#deprecFE36; -#deprecFE37; -#deprecFE38; -FE61..FE66;X -FE68;X -FF0B;X -FF1C..FF1E;X -FF3C;X -FF3E;X -FF5C;X -FF5E;X -FFE2;X -FFE9..FFEC;X -1D400..1D454;A -#1D455=210E;N -1D456..1D49B;A -1D49C;A -#1D49D=212C;A -1D49E;A -1D49F;A -#1D4A0=2130;A -#1D4A1=2131;A -1D4A2;A -#1D4A3=210B;A -#1D4A4=2110;A -1D4A5;A -1D4A6;A -#1D4A7=2112;A -#1D4A8=2133;A -1D4A9;A -1D4AA;A -1D4AB;A -1D4AC;A -#1D4AD=211B;A -1D4AE;A -1D4AF;A -1D4B0;A -1D4B1;A -1D4B2;A -1D4B3;A -1D4B4;A -1D4B5;A -1D4B6;A -1D4B7;A -1D4B8;A -1D4B9;A -#1D4BA=212F;A -1D4BB;A -#1D4BC=210A;A -1D4BD;A -1D4BE;A -1D4BF;A -1D4C0;A -1D4C1;A -1D4C2;A -1D4C3;A -#1D4C4=2134;A -1D4C5;A -1D4C6;A -1D4C7;A -1D4C8;A -1D4C9;A -1D4CA;A -1D4CB;A -1D4CC;A -1D4CD;A -1D4CE;A -1D4CF;A -1D4D0..1D503;A -1D504;A -1D505;A -#1D506=212D;A -1D507;A -1D508;A -1D509;A -1D50A;A -#1D50B=210C;A -#1D50C=2111;A -1D50D;A -1D50E;A -1D50F;A -1D510;A -1D511;A -1D512;A -1D513;A -1D514;A -#1D515=211C;A -1D516;A -1D517;A -1D518;A -1D519;A -1D51A;A -1D51B;A -1D51C;A -#1D51D=2128;A -1D51E;A -1D51F;A -1D520;A -1D521;A -1D522;A -1D523;A -1D524;A -1D525;A -1D526;A -1D527;A -1D528;A -1D529;A -1D52A;A -1D52B;A -1D52C;A -1D52D;A -1D52E;A -1D52F;A -1D530;A -1D531;A -1D532;A -1D533;A -1D534;A -1D535;A -1D536;A -1D537;A -1D538;A -1D539;A -#1D53A=2102;A -1D53B;A -1D53C;A -1D53D;A -1D53E;A -#1D53F=210D;A -1D540;A -1D541;A -1D542;A -1D543;A -1D544;A -#1D545=2115;A -1D546;A -#1D547=2119;A -#1D548=211A;A -#1D549=211D;A -1D54A;A -1D54B;A -1D54C;A -1D54D;A -1D54E;A -1D54F;A -1D550;A -#1D551=2124;A -1D552;A -1D553;A -1D554;A -1D555;A -1D556;A -1D557;A -1D558;A -1D559;A -1D55A;A -1D55B;A -1D55C;A -1D55D;A -1D55E;A -1D55F;A -1D560;A -1D561;A -1D562;A -1D563;A -1D564;A -1D565;A -1D566;A -1D567;A -1D568;A -1D569;A -1D56A;A -1D56B;A -1D56C..1D6A3;A -1D6A4;A -1D6A5;A -1D6A8..1D7C9;A -1D7CA;A -1D7CB;A -1D7CE..1D7FF;N -1EE00..1EE03;A -1EE05..1EE1F;A -1EE21;A -1EE22;A -1EE24;A -1EE27;A -1EE29..1EE32;A -1EE34..1EE37;A -1EE39;A -1EE3B;A -1EE42;A -1EE47;A -1EE49;A -1EE4B;A -1EE4D..1EE4F;A -1EE51;A -1EE52;A -1EE54;A -1EE57;A -1EE59;A -1EE5B;A -1EE5D;A -1EE5F;A -1EE61;A -1EE62;A -1EE64;A -1EE67..1EE6A;A -1EE6C..1EE72;A -1EE74..1EE77;A -1EE79..1EE7C;A -1EE7E;A -1EE80..1EE89;A -1EE8B..1EE9B;A -1EEA1..1EEA3;A -1EEA5..1EEA9;A -1EEAB..1EEBB;A -1EEF0;L -1EEF1;L -1F784;N -1F78C;N -1F78D;N -1F797..1F799;N -1F79D..1F79F;N - -# EOF diff --git a/macros/luatex/optex/base/more-macros.opm b/macros/luatex/optex/base/more-macros.opm deleted file mode 100644 index d5ce88c1a6..0000000000 --- a/macros/luatex/optex/base/more-macros.opm +++ /dev/null @@ -1,284 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \eoldef {OpTeX useful macos <2020-05-22>} % preloaded in format - - \_doc ----------------------------- - We define \`\opinput` `{<file name>}` macro which - does `\input {<file name>}` but the catcodes are set to normal catcodes - (like \OpTeX/ initializes them) and the catcodes setting is returned back to - the current values when the file is read. You can use `\opinput` - in any situation inside the document and you will be sure that the file - is read correctly with correct catcode settings. - - To achieve this, we declare \`\optexcatcodes` catcode table - and \`\plaintexcatcodes`. They save the commonly used catcode tables. - Note that `\catcodetable` is a part of \LuaTeX/ extension. - The catcodetable stack is implemented by \OpTeX/ macros. - The \`\setctable` `<catcode table>` pushes - current catcode table to the stack and activates catcodes from - the `<catcode table>`. The \`\restorectable` returns to the saved catcodes - from the catcode table stack. - - The `\opinput` works inside the catcode table stack. It reads `\optexcatcodes` - table and stores it to \`\_tmpcatcodes` table. - This table is actually used during `\input` (maybe catcodes are - changed here). Finally, `\_restoretable` pops the stacks and returns - to the catcodes used before `\opinput` is run. - \_cod ----------------------------- - -\_def\_opinput #1{\_setctable\_optexcatcodes - \_savecatcodetable\_tmpcatcodes \_catcodetable\_tmpcatcodes - \_input {#1}\_relax\_restorectable} - -\_newcatcodetable \_optexcatcodes -\_newcatcodetable \_plaintexcatcodes -\_newcatcodetable \_tmpcatcodes - -\_public \optexcatcodes \plaintexcatcodes \opinput ; - -\_savecatcodetable\_optexcatcodes -{\_catcode`_=8 \savecatcodetable\plaintexcatcodes} - - \_doc ----------------------------- - The implementation of the catcodetable stack follows. - - The current catcodes are - managed in the `\catcodetable0`. If the `\setctable` is used first (or at - the outer level of the stack), then the `\catcodetable0` is pushed to the - stack and the current table is re-set to the given `<catcode table>`. - The numbers of these tables are stacked to the \`\_ctablelist` macro. - The `\restorectable` reads the last saved catcode table number from the - `\_ctablelist` and uses it. - \_cod ----------------------------- - -\_newcount\_currctable \_currctable=0 -\_catcodetable0 - -\_def\_setctable#1{\_edef\_ctablelist{{\_the\_currctable}\_ctablelist}% - \_catcodetable#1\_relax \_currctable=#1\_relax -} -\_def\_restorectable{\_ea\_restorectableA\_ctablelist\_relax} -\_def\_restorectableA#1#2\_relax{% - \_ifx^#2^\_opwarning - {You can't use \_noindent\restorectable without previous \_string\setctable}% - \_else \_def\_ctablelist{#2}\_catcodetable#1\_relax \_currctable=#1\_relax \_fi -} -\_def\_ctablelist{.} - -\_public \setctable \restorectable ; - - \_doc ----------------------------- - When a special macro is defined with different catcodes then - \`\normalcatcodes` can be used at the end of such definition. - The normal catcodes are restored. - The macro reads - catcodes from `\optecatodes` table and sets it to the main catcode table 0. - \_cod ----------------------------- - -\_def\_normalcatcodes {\_catcodetable\_optexcatcodes \_savecatcodetable0 \_catcodetable0 } -\_public \normalcatodes ; - - \_doc ----------------------------- - The \`\load` `[<filename-list>]` loads files specfied in - comma separated `<filename-list>`. The first space (after comma) - is ignored using the trick `#1#2,`: first parameter is unseparated. - The `\load` macro saves information about loaded files by setting - `\_load:<filename>` as a defined macro. - - If the \`\_afterload` macro is defined then it is run after `\_opinput`. - The catcode setting should be here. Note that catcode setting done in the - loaded file is forgotten after the `\opinput`. - \_cod ----------------------------- - -\_def \_load [#1]{\_loadA #1,,,\_end} -\_def \_loadA #1#2,{\_ifx,#1 \_ea \_loadE \_else \_loadB{#1#2}\_ea\_loadA\_fi} -\_def \_loadB #1{% - \_ifcsname _load:#1\_endcsname \_else - \_isfile {#1.opm}\_iftrue \_opinput {#1.opm}\_else \_opinput {#1}\_fi - \_sxdef{_load:#1}{}% - \_trycs{_afterload}{}\_let\_afterload=\_undefined - \_fi -} -\_def \_loadE #1\_end{} -\_public \load ; - - \_doc ----------------------------- - The declarator \`\optdef``\macro [<opt default>] <params>{<replacement text>}` - defines the `\macro` with the optional parameter followed by normal parameters - declared in `<params>`. The optional parameter must be used as the first - first parameter in brackets `[...]`. If it isn't used then <opt default> - is taken into account. The `<replacement text>` can use `\the\opt` - because optional parameter is saved to the \`\opt` tokens register. - Note the difference from \LaTeX/ concept where the optional parameter is - in `#1`. \OpTeX/ uses `#1` as the first normal parameter (if declared). - - The \`\_nospaceafter` ignores the following optional space at expand - processor level using the negative `\romannumeral` trick. - \_cod ----------------------------- - -\_def\_optdef#1[#2]{% - \_def#1{\_opt={#2}\_isnextchar[{\_cs{_oA:\_string#1}}{\_cs{_oB:\_string#1}}}% - \_sdef{_oA:\_string#1}[##1]{\_opt={##1}\_cs{_oB:\_string#1\_nospaceafter}}% - \_sdef{_oB:\_string#1\_nospaceafter}% -} -\_def\_nospaceafter#1{\_ea#1\_romannumeral-`\.} -\_newtoks\_opt - -\_public \opt \optdef ; - - \_doc ----------------------------- - The declarator \`\eoldef``\macro #1{<replacement text>}` defines a `\macro` - which scans its parameter to the end of the current line. - This is the parameter `#1` which can be used in the `<replacement text>`. - The catcode of the `\endlinechar` is reset temporarily when the parameter is scanned. - - The macro defined by `\eoldef` cannot be used with its parameter inside - other macros because the catcode dancing is not possible here. But the - \`\bracedparam``\macro{<parameter>}` can be used here. The `\bracedparam` - is a prefix that re-sets temporarily the `\macro` to a `\macro` with - normal one parameter. - - The \`\skiptoeol` macro reads the text to the end of the current line - and ignores it. - \_cod ----------------------------- - -\_def\_eoldef #1{\_def #1{\_begingroup \_catcode`\^^M=12 \_eoldefA #1}% - \_ea\_def\_csname _\_csstring #1:M\_endcsname} -\_catcode`\^^M=12 % -\_def\_eoldefA #1#2^^M{\_endgroup\_csname _\_csstring #1:M\_endcsname{#2}}% -\_normalcatcodes % - -\_eoldef\_skiptoeol#1{} -\_def\_bracedparam#1{\_ifcsname _\_csstring #1:M\_endcsname - \_csname _\_csstring #1:M\_ea \_endcsname - \_else \_csname __in\_csstring #1:M\_ea \_endcsname \_fi -} -\_public \eoldef \skiptoeol \bracedparam ; - - \_doc ----------------------------- - \`\scantoeol``\macro <text to end of line>` scans the - `<text to end of line>` in verbatim mode and runs the - `\macro{<text to end of line>}`. The `\macro` - can be defined `\def\macro#1{...\scantextokens{#1}...}`. - The new tokenization of the parameter is processed when the parameter is used, - no when the parameter is scanned. This principle is used in definition - of \^`\chap`, \^`\sec`, \^`\secc` and \^`\_Xtoc` macros. - It means that user can write \code{\\sec text `&` text} for example. - Inline verbatim works in title sections. - - The verbatim scanner of `\scatoeol` keeps category 7 for `^` in - order to be able to use `^^J` as comment character which means that - the next line continues. - \_cod ----------------------------- - -\_def\_scantoeol#1{\def\_tmp{#1}\_begingroup \_setscancatcodes \_scantoeolA} -\_def\_setscancatcodes{\_setverb \_catcode`\^^M=12\_catcode`\^=7\_catcode`\ =10\_catcode`\^^J=14 } -\_catcode`\^^M=12 % -\_def\_scantoeolA#1^^M{\_endgroup \_tmp{#1}}% -\_normalcatcodes % - -\_public \scantoeol ; - - \_doc ----------------------------- - The \`\replstring``\macro{<textA>}{<textB>}` - replaces all occurrences of `<textA>` by `<textB>` in the `\macro` body. - The `\macro` must be defined without parameters. The occurrences of - `<textA>` are not replaced if they are \"hidden" in braces, for example - `...{...<textA>...}...`. The category codes in the `<textA>` must exactly - match. - - How it works: `\replstring\foo{<textA>}{<textB>}` prepares - `\_replacestringsA#1<textA>{...}` and runs - `\_replacestringsA<foo-body>?<textA>!<textA>`. - So, `#1` includes the first part of <foo-body> before first <textA>. - It is saved to \`\_tmptoks` and `\_replacestringsB` is run in a loop. - It finishes processing or appends the next part to `\_tmptoks` separated by - <textB> and continues loop. The final part of the macro removes the last `?` - from resulting `\_tmptoks` and defines a new version of the `\foo`. - \_cod ----------------------------- - -\_newtoks\_tmptoks -\_catcode`!=3 \_catcode`?=3 -\_def\_replstring #1#2#3{% \replstring #1{stringA}{stringB} - \_long\_def\_replacestringsA##1#2{\_tmptoks{##1}\_replacestringsB}% - \_long\_def\_replacestringsB##1#2{\_ifx!##1\_relax \_else \_toksapp\_tmptoks{#3##1}% - \_ea\_replacestringsB\_fi}% - \_ea\_replacestringsA #1?#2!#2% - \_long\_def\_replacestringsA##1?{\_tmptoks{##1}\_edef#1{\_the\_tmptoks}}% - \_ea\_replacestringsA \_the\_tmptoks} -\_normalcatcodes - -\_public \replstring ; - - \_doc ----------------------------- - The \`\catcode` primitive is redefined here. Why? - There is very common cases like \code{\\catcode`}`<something>` - or `\catcode"<number>` but these characters - \code{\`} or \code{"} can be set as active (typically by `\verbchar` macro). - Nothing problematic happens if re-defined `\catcode` is used in this case. - - If you really need primitive `\catcode` then you can use `\_catcode`. - \_cod ----------------------------- - -\_def\catcode#1{\_catcode \_if`\_noexpand#1\_ea`\_else\_if"\_noexpand#1"\_else - \_if'\_noexpand#1'\_else \_ea\_ea\_ea\_ea\_ea\_ea\_ea#1\_fi\_fi\_fi} - - \_doc ----------------------------- - The \`\removespaces` `<text with spaces >{}` expands to <textwithoutspaces>. - \nl - The `\_ea`\`\ignorept``\the<dimen>` expands to a decimal - number `\the<dimen>` but without `pt` unit. - \_cod ----------------------------- - -\_def\_removespaces #1 {\_isempty{#1}\_iffalse #1\_ea\_removespaces\_fi} -\_ea\_def \_ea\_ignorept \_ea#\_ea1\_detokenize{pt}{#1} - -\public \removespaces \ignorept ; - - \_doc ----------------------------- - You can use expandable \`\bp``{<dimen>}` convertor from - \TeX/ `<dimen>` (or from an expression accepted by - `\dimexpr` primitive) to a decimal value in big points - (used as natural unit in the PDF format). So, you can write, for example: - \begtt - \pdfliteral{q \_bp{.3\hsize-2mm} \_bp{2mm} m 0 \_bp{-4mm} l S Q} - \endtt - You can use expandable \`\expr``{<expression>}` for analogical purposes. - It expands to the value of the `<expression>` at expand processor level - with \`\_decdigits` digits after the decimal point. - The `<expression>` can include `+-*/()` and decimal numbers in common syntax. - - The usage of prefixed versions \`\_expr` or \`\_bp` is more recommended - because a user can re-define the control sequences `\expr` or `\bp`. - \_cod ----------------------------- - -\_def\_decdigits{3} % digits after decimal point in \_bp and \_expr outputs. -\_def\_pttopb{% - \_directlua{tex.print(string.format('\_pcent.\_decdigits f', - token.scan_dimen()/65781.76))}% pt to bp conversion -} -\def\_bp#1{\_ea\_pttopb\_dimexpr#1\_relax} -\def\_expr#1{\_directlua{tex.print(string.format('\_pcent.\_decdigits f',#1))}} - -\_public \expr \bp ; - - \_doc ------------------ - The pair {\`\_doc` ... \`\_cod`} is used for documenting macros and to - printing the technical documentation of the \OpTeX/. The syntax is: - {\begtt \catcode`\<=13 - \_doc <ignored text> - <documentation> - \_cod <ignored text> - \endtt - } - The `<documentation>` (and `<ignored text>` too) must be `<balanced text>`. - It means that you cannot document only the `{` but you must document the `}` too. - \_cod ------------------ - -\_long\_def\_doc #1\_cod {\_skiptoeol} - -\_endcode % ------------------------------------- - -2020-05-22 robust \catcode newly defined in order \catcode\string.... be possible -2020-05-03 \load macro introduced -2020-03-15 released diff --git a/macros/luatex/optex/base/multicolumns.opm b/macros/luatex/optex/base/multicolumns.opm deleted file mode 100644 index bf5b05f7db..0000000000 --- a/macros/luatex/optex/base/multicolumns.opm +++ /dev/null @@ -1,114 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \begmulti {Balanced columns <2020-03-26>} % preloaded in format - - \_doc ----------------------------- - This code is documented in detail in the \"\TeX/book naruby", pages 244--246, - free available, \url{http://petr.olsak.net/tbn.html}, but in Czech. - Roughly speaking, macros complete all material between - \`\begmulti``<num-columns>` and \`\endmulti` - into one `\vbox 6`. Then the macro measures the amount of free space at the current - page using `\pagegoal` and `\pagtotal` and does `\vsplit` of `\vbox 6` to - columns with a height of such free space. This is done only if we have - enough amount of material in `\vbox 6` to fill the full page by columns. - This is repeated in a loop until we have less amount of material in `\vbox 6`. - Then we run `\_balancecolumns` which balances the last part of the columns. - Each part of printed material is distributed to the main vertical list as - `\hbox{<columns>}` and we need not do any change in the output routine. - - If you have paragraphs in `\begmulti`... `\endmulti` environment then - you may say `\raggedright` inside this environment and you can re-assign - `\widowpenalty` and `\clubppenalty` (they are set to 10000 in \OpTeX/). - \_cod ----------------------------- - -\_def\_multiskip{\_medskip} % space above and below \begmulti...\endmulti - -\_newcount\_mullines - -\_def\_begmulti #1 {\_par\_bgroup\_wipeepar\_multiskip\_penalty0 \_def\_Ncols{#1} - \_setbox6=\_vbox\_bgroup \_let\_setxhsize=\_relax \_penalty0 - %% \hsize := column width = (\hsize+\colsep) / n - \colsep - \_advance\_hsize by\_colsep - \_divide\_hsize by\_Ncols \_advance\_hsize by-\_colsep - \_mullines=0 - \_def\par{\_ifhmode\_endgraf\_global\_advance\_mullines by\_prevgraf\_fi}% -} -\_def\_endmulti{\_vskip-\_prevdepth\_vfil - \_ea\_egroup\_ea\_baselineskip\_the\_baselineskip\_relax - \_dimen0=.8\_maxdimen \_tmpnum=\_dimen0 \_divide\_tmpnum by\_baselineskip - \_splittopskip=\_baselineskip - \_setbox1=\_vsplit6 to0pt - %% \dimen1 := the free space on the page - \_ifdim\_pagegoal=\_maxdimen \_dimen1=\_vsize \_corrsize{\_dimen1} - \_else \_dimen1=\_pagegoal \_advance\_dimen1 by-\_pagetotal \_fi - \_ifdim \_dimen1<2\_baselineskip - \_vfil\_break \_dimen1=\_vsize \_corrsize{\_dimen1} \_fi - \_ifnum\_mullines<\_tmpnum \_dimen0=\_ht6 \_else \_dimen0=.8\_maxdimen \_fi - \_divide\_dimen0 by\_Ncols \_relax - %% split the material to more pages? - \_ifdim \_dimen0>\_dimen1 \_splitpart - \_else \_balancecolumns \_fi % only balancing - \_multiskip\_egroup -} - - \_doc ----------------------------- - Splitting columns... - \_cod ----------------------------- - -\_def\_makecolumns{\_bgroup % full page, destination height: \dimen1 - \_vbadness=20000 \_setbox1=\_hbox{}\_tmpnum=0 - \_loop \_ifnum\_Ncols>\_tmpnum - \_advance\_tmpnum by1 - \_setbox1=\_hbox{\_unhbox1 \_vsplit6 to\_dimen1 \_hss} - \_repeat - \_hbox{}\_nobreak\_vskip-\_splittopskip \_nointerlineskip - \_line{\_unhbox1\_unskip} - \_dimen0=\_dimen1 \_divide\_dimen0 by\_baselineskip \_multiply\_dimen0 by\_Ncols - \_global\_advance\_mullines by-\_dimen0 - \_egroup -} -\_def\_splitpart{% - \_makecolumns % full page - \_vskip 0pt plus 1fil minus\_baselineskip \_break - \_ifnum\_mullines<\_tmpnum \_dimen0=\_ht6 \_else \_dimen0=.8\_maxdimen \_fi - \_divide\_dimen0 by\_Ncols \_relax - \_ifx\_balancecolumns\_flushcolumns \_advance\_dimen0 by-.5\_vsize \_fi - \_dimen1=\_vsize \_corrsize{\_dimen1}\_dimen2=\_dimen1 - \_advance\_dimen2 by-\_baselineskip - %% split the material to more pages? - \_ifvoid6 \_else - \_ifdim \_dimen0>\_dimen2 \_ea\_ea\_ea \_splitpart - \_else \_balancecolumns % last balancing - \_fi \_fi -} - - \_doc ----------------------------- - Final balancing of the columns. - \_cod ----------------------------- - -\_def\_balancecolumns{\_bgroup \_setbox7=\_copy6 % destination height: \dimen0 - \_ifdim\_dimen0>\_baselineskip \_else \_dimen0=\_baselineskip \_fi - \_vbadness=20000 - \_def\_tmp{% - \_setbox1=\_hbox{}\_tmpnum=0 - \_loop \_ifnum\_Ncols>\_tmpnum - \_advance\_tmpnum by1 - \_setbox1=\_hbox{\_unhbox1 - \_ifvoid6 \_hbox to\_wd6{\_hss}\_else \_vsplit6 to\_dimen0 \_fi\_hss} - \_repeat - \_ifvoid6 \_else - \_advance \_dimen0 by.2\_baselineskip - \_setbox6=\_copy7 - \_ea \_tmp \_fi}\_tmp - \_hbox{}\_nobreak\_vskip-\_splittopskip \_nointerlineskip - \_hbox to\_hsize{\_unhbox1\_unskip}% - \_egroup -} -\_def\_corrsize #1{%% #1 := #1 + \splittopskip - \topskip - \_advance #1 by \_splittopskip \_advance #1 by-\_topskip -} -\_public \begmulti \endmulti ; - -\_endcode % ------------------------------------- - - diff --git a/macros/luatex/optex/base/optex.ini b/macros/luatex/optex/base/optex.ini deleted file mode 100644 index c695b7d809..0000000000 --- a/macros/luatex/optex/base/optex.ini +++ /dev/null @@ -1,107 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -%% OpTeX ini file -%% Petr Olsak <project started from: Jan. 2020> - -% Catcodes: - -\catcode `\{=1 % left brace is begin-group character -\catcode `\}=2 % right brace is end-group character -\catcode `\$=3 % dollar sign is math shift -\catcode `\&=4 % ampersand is alignment tab -\catcode `\#=6 % hash mark is macro parameter character -\catcode `\^=7 % -\catcode `\^^K=7 % circumflex and uparrow are for superscripts -\catcode `\^^A=8 % downarrow is for subscripts -\catcode `\^^I=10 % ascii tab is a blank space -\catcode `\_=11 % underline can be used in control sequences -\catcode `\~=13 % tilde is active -\catcode `\^^a0=13 % non breaking space in Unicode -\catcode 127=12 % normal character - -% OpTeX version - -\def\optexversion{1.01 Mar.2021} -\def\fmtname{OpTeX} -\let\fmtversion=\optexversion - -% Engine testing: - -\newlinechar=`\^^J -\ifx\directlua\undefined - \message{This format is based only on LuaTeX, use luatex -ini optex.ini^^J} - \endinput \fi - -\ifx\bgroup\undefined \else - \message{This file can be used only for format initialisation, use luatex -ini^^J} - \endinput \fi - -% Basic .opm syntax: - -\let\_endcode =\endinput -\def \_codedecl #1#2{\message{#2^^J}}% information about .opm file -\long\def\_doc#1\_cod#2 {} % skip documentation - -% Initialization: - -\message{OpTeX (Olsak's Plain TeX) initialization <\optexversion>^^J} - -\input prefixed.opm % prefixed primitives and code syntax -\input luatex-ini.opm % luaTeX initialization -\input basic-macros.opm % basic macros -\input alloc.opm % allocators for registers -\input if-macros.opm % special \if-macros, \is-macros and loops -\input parameters.opm % parameters setting -\input more-macros.opm % OpTeX useful macros (todo: doc) -\input keyval.opm % key=value dictionaries -\input plain-macros.opm % plainTeX macros -\input fonts-preload.opm % preloaded Latin Modern fonts -\input fonts-resize.opm % font resizing (low-level macros) -\input fonts-select.opm % font selection system -\input math-preload.opm % math fams CM + AMS preloaded -\input math-macros.opm % basic macros for math plus mathchardefs -\input math-unicode.opm % macros for loading UnicodeMath fonts -\input fonts-opmac.opm % font managing macros from OPmac -\input output.opm % output routine -\input margins.opm % macros for margins setting -\input colors.opm % colors -\input ref-file.opm % ref file -\input references.opm % references -\input hyperlinks.opm % hyperlinks -\input maketoc.opm % maketoc -\input outlines.opm % PDF outlines -\input pdfuni-string.opm % PDFunicode strings for outlines -\input sections.opm % titles, chapters, sections -\input lists.opm % lists, \begitems, \enditems -\input verbatim.opm % verbatim -\input hi-syntax.opm % syntax highlighting of verbatim listimgs -\input graphics.opm % graphics -\input table.opm % table macro -\input multicolumns.opm % more columns by \begmulti ...\endmulti -\input cite-bib.opm % Bibliography, \cite -\input makeindex.opm % Make index and sorting -\input fnotes.opm % \fnotes, \mnotes -\input styles.opm % styles \report, \letter -\input logos.opm % standard logos -\input uni-lcuc.opm % Setting lccodes and uccodes for Unicode characters -\input hyphen-lan.opm % initialization of hyphenation patterns -\input languages.opm % languages -\input others.opm % miscenaleous - -\_directlua{ - % preload OpTeX's lua code into format as bytecode - lua.bytecode[1] = assert(loadfile(kpse.find_file("optex", "lua"))) -} - -\_everyjob = {% - \_message{This is OpTeX (Olsak's Plain TeX), version <\optexversion>^^J}% - \_mathchardef\_fnotestack=\_pdfcolorstackinit page {0 g 0 G}% - \_directlua{lua.bytecode[1]()}% load OpTeX's Lua code - \_mathsbon % replaces \int_a^b to \int _a^b - \_inputref % inputs \jobname.ref if exists -} - -\_dump - -\_endcode % ------------------------------ - diff --git a/macros/luatex/optex/base/optex.lua b/macros/luatex/optex/base/optex.lua deleted file mode 100644 index 2d83f38ed6..0000000000 --- a/macros/luatex/optex/base/optex.lua +++ /dev/null @@ -1,356 +0,0 @@ --- This is part of the OpTeX project, see http://petr.olsak.net/optex - --- The basic lua functions and declarations used in \OpTeX/ are here - --- GENERAL - --- Error function used by following functions for critical errors. -local function err(message) - error("\nerror: "..message.."\n") -end --- --- For a `\chardef`'d, `\countdef`'d, etc., csname return corresponding register --- number. The responsibility of providing a `\XXdef`'d name is on the caller. -function registernumber(name) - return token.create(name).index -end --- --- ALLOCATORS -alloc = alloc or {} --- --- An attribute allocator in Lua that cooperates with normal \OpTeX/ allocator. -local attributes = {} -function alloc.new_attribute(name) - local cnt = tex.count["_attributealloc"] + 1 - if cnt > 65534 then - tex.error("No room for a new attribute") - else - tex.setcount("global", "_attributealloc", cnt) - texio.write_nl("log", '"'..name..'"=\\attribute'..tostring(cnt)) - attributes[name] = cnt - return cnt - end -end --- --- `provides_module` is needed by older version of luaotfload -provides_module = function() end --- --- CALLBACKS -callback = callback or {} --- --- Save `callback.register` function for internal use. -local callback_register = callback.register -function callback.register(name, fn) - err("direct registering of callbacks is forbidden, use 'callback.add_to_callback'") -end --- --- Table with lists of functions for different callbacks. -local callback_functions = {} --- Table that maps callback name to a list of descriptions of its added --- functions. The order corresponds with `callback_functions`. -local callback_description = {} --- --- Table used to differentiate user callbacks from standard callbacks. Contains --- user callbacks as keys. -local user_callbacks = {} --- Table containing default functions for callbacks, which are called if either --- a user created callback is defined, but doesn't have added functions or for --- standard callbacks that are \"extended" (see `mlist_to_hlist` and its pre/post --- filters below). -local default_functions = {} --- --- Table that maps standard (and later user) callback names to their types. -local callback_types = { - -- file discovery - find_read_file = "exclusive", - find_write_file = "exclusive", - find_font_file = "data", - find_output_file = "data", - find_format_file = "data", - find_vf_file = "data", - find_map_file = "data", - find_enc_file = "data", - find_pk_file = "data", - find_data_file = "data", - find_opentype_file = "data", - find_truetype_file = "data", - find_type1_file = "data", - find_image_file = "data", - - open_read_file = "exclusive", - read_font_file = "exclusive", - read_vf_file = "exclusive", - read_map_file = "exclusive", - read_enc_file = "exclusive", - read_pk_file = "exclusive", - read_data_file = "exclusive", - read_truetype_file = "exclusive", - read_type1_file = "exclusive", - read_opentype_file = "exclusive", - - -- data processing - process_input_buffer = "data", - process_output_buffer = "data", - process_jobname = "data", - input_level_string = "data", - - -- node list processing - contribute_filter = "simple", - buildpage_filter = "simple", - build_page_insert = "exclusive", - pre_linebreak_filter = "list", - linebreak_filter = "exclusive", - append_to_vlist_filter = "exclusive", - post_linebreak_filter = "reverselist", - hpack_filter = "list", - vpack_filter = "list", - hpack_quality = "list", - vpack_quality = "list", - process_rule = "exclusive", - pre_output_filter = "list", - hyphenate = "simple", - ligaturing = "simple", - kerning = "simple", - insert_local_par = "simple", - mlist_to_hlist = "exclusive", - - -- information reporting - pre_dump = "simple", - start_run = "simple", - stop_run = "simple", - start_page_number = "simple", - stop_page_number = "simple", - show_error_hook = "simple", - show_error_message = "simple", - show_lua_error_hook = "simple", - start_file = "simple", - stop_file = "simple", - call_edit = "simple", - finish_synctex = "simple", - wrapup_run = "simple", - - -- pdf related - finish_pdffile = "data", - finish_pdfpage = "data", - page_order_index = "data", - process_pdf_image_content = "data", - - -- font related - define_font = "exclusive", - glyph_not_found = "exclusive", - glyph_info = "exclusive", - - -- undocumented - glyph_stream_provider = "exclusive", - provide_charproc_data = "exclusive", -} --- --- Return a list containing descriptions of added callback functions for --- specific callback. -function callback.callback_descriptions(name) - return callback_description[name] or {} -end - -local valid_callback_types = { - exclusive = true, - simple = true, - data = true, - list = true, - reverselist = true, -} --- --- Create a user callback that can only be called manually using --- `call_callback`. A default function is only needed by "exclusive" callbacks. -function callback.create_callback(name, cbtype, default) - if callback_types[name] then - err("cannot create callback '"..name.."' - it already exists") - elseif not valid_callback_types[cbtype] then - err("cannot create callback '"..name.. "' with invalid callback type '"..cbtype.."'") - elseif ctype == "exclusive" and not default then - err("unable to create exclusive callback '"..name.."', default function is required") - end - - callback_types[name] = cbtype - default_functions[name] = default or nil - user_callbacks[name] = true -end --- --- Add a function to the list of functions executed when callback is called. --- For standard luatex callback a proxy function that calls our machinery is --- registered as the real callback function. This doesn't happen for user --- callbacks, that are called manually by user using `call_callback` or for --- standard callbacks that have default functions -- like `mlist_to_hlist` (see --- below). -function callback.add_to_callback(name, fn, description) - if user_callbacks[name] or callback_functions[name] or default_functions[name] then - -- either: - -- a) user callback - no need to register anything - -- b) standard callback that has already been registered - -- c) standard callback with default function registered separately - -- (mlist_to_hlist) - elseif callback_types[name] then - -- This is a standard luatex callback with first function being added, - -- register a proxy function as a real callback. Assert, so we know - -- when things break, like when callbacks get redefined by future - -- luatex. - assert(callback_register(name, function(...) - return callback.call_callback(name, ...) - end)) - else - err("cannot add to callback '"..name.."' - no such callback exists") - end - - -- add function to callback list for this callback - callback_functions[name] = callback_functions[name] or {} - table.insert(callback_functions[name], fn) - - -- add description to description list - callback_description[name] = callback_description[name] or {} - table.insert(callback_description[name], description) -end --- --- Remove a function from the list of functions executed when callback is --- called. If last function in the list is removed delete the list entirely. -function callback.remove_from_callback(name, description) - local descriptions = callback_description[name] - local index - for i, desc in ipairs(descriptions) do - if desc == description then - index = i - break - end - end - - table.remove(descriptions, index) - local fn = table.remove(callback_functions[name], index) - - if #descriptions == 0 then - -- Delete the list entirely to allow easy checking of "truthiness". - callback_functions[name] = nil - - if not user_callbacks[name] and not default_functions[name] then - -- this is a standard callback with no added functions and no - -- default function (i.e. not mlist_to_hlist), restore standard - -- behaviour by unregistering. - callback_register(name, nil) - end - end - - return fn, description -end --- --- helper iterator generator for iterating over reverselist callback functions -local function reverse_ipairs(t) - local i, n = #t + 1, 1 - return function() - i = i - 1 - if i >= n then - return i, t[i] - end - end -end --- --- Call all functions added to callback. This function handles standard --- callbacks as well as user created callbacks. It can happen that this --- function is called when no functions were added to callback -- like for user --- created callbacks or `mlist_to_hlist` (see below), these are handled either --- by a default function (like for `mlist_to_hlist` and those user created --- callbacks that set a default function) or by doing nothing for empty --- function list. -function callback.call_callback(name, ...) - local cbtype = callback_types[name] - -- either take added functions or the default function if there is one - local functions = callback_functions[name] or {default_functions[name]} - - if cbtype == nil then - err("cannot call callback '"..name.."' - no such callback exists") - elseif cbtype == "exclusive" then - -- only one function, atleast default function is guaranteed by - -- create_callback - return functions[1](...) - elseif cbtype == "simple" then - -- call all functions one after another, no passing of data - for _, fn in ipairs(functions) do - fn(...) - end - return - elseif cbtype == "data" then - -- pass data (first argument) from one function to other, while keeping - -- other arguments - local data = (...) - for _, fn in ipairs(functions) do - data = fn(data, select(2, ...)) - end - return data - end - - -- list and reverselist are like data, but "true" keeps data (head node) - -- unchanged and "false" ends the chain immediately - local iter - if cbtype == "list" then - iter = ipairs - elseif cbtype == "reverselist" then - iter = reverse_ipairs - end - - local head = (...) - local new_head - local changed = false - for _, fn in iter(functions) do - new_head = fn(head, select(2, ...)) - if new_head == false then - return false - elseif new_head ~= true then - head = new_head - changed = true - end - end - return not changed or head -end --- --- Create \"virtual" callbacks `pre/post_mlist_to_hlist_filter` by setting --- `mlist_to_hlist` callback. The default behaviour of `mlist_to_hlist` is kept by --- using a default function, but it can still be overriden by using --- `add_to_callback`. -default_functions["mlist_to_hlist"] = node.mlist_to_hlist -callback.create_callback("pre_mlist_to_hlist_filter", "list") -callback.create_callback("post_mlist_to_hlist_filter", "reverselist") -callback_register("mlist_to_hlist", function(head, ...) - -- pre_mlist_to_hlist_filter - local new_head = callback.call_callback("pre_mlist_to_hlist_filter", head, ...) - if new_head == false then - node.flush_list(head) - return nil - elseif new_head ~= true then - head = new_head - end - - -- mlist_to_hlist means either added functions or standard luatex behavior - -- of node.mlist_to_hlist (handled by default function) - head = callback.call_callback("mlist_to_hlist", head, ...) - - -- post_mlist_to_hlist_filter - new_head = callback.call_callback("post_mlist_to_hlist_filter", head, ...) - if new_head == false then - node.flush_list(head) - return nil - elseif new_head ~= true then - head = new_head - end - return head -end) --- --- Compatibility with \LaTeX/ through luatexbase namespace. Needed for --- luaotfload. -luatexbase = { - registernumber = registernumber, - attributes = attributes, - provides_module = provides_module, - new_attribute = alloc.new_attribute, - callback_descriptions = callback.callback_descriptions, - create_callback = callback.create_callback, - add_to_callback = callback.add_to_callback, - remove_from_callback = callback.remove_from_callback, - call_callback = callback.call_callback, - callbacktypes = {} -} diff --git a/macros/luatex/optex/base/others.opm b/macros/luatex/optex/base/others.opm deleted file mode 100644 index 6ff15d4332..0000000000 --- a/macros/luatex/optex/base/others.opm +++ /dev/null @@ -1,106 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \uv {Miscenaleous <2020-05-22>} % preloaded in format - - \_doc ---------------------------- - \`\useOpTeX` and \`\useoptex` are declared as `\relax`. - \_cod ---------------------------- - -\_let \useOpTeX = \_relax \_let \useoptex = \_relax - - \_doc ---------------------------- - The \`\lastpage` and \`\totalpages` get the information from the - \^`\_currpage`. The \^`\_Xpage` from `.ref` file sets the \^`\_currpage`. - \_cod ---------------------------- - -\_def\_totalpages {\_openref\_ea\_ignoresecond\_currpage} -\_def\_lastpage {\_openref\_ea\_usesecond\_currpage} -\_def\_currpage {{0}{?}} -\_public \lastpage \totalpages ; - - \_doc ---------------------------- - We need \`\uv`, \`\clqq`, \`\crqq`, \`\flqq`, \`\frqq`, \`\uslang`, \`\ehyph` - \`\chyph`, \`\shyph`, for backward compatibility with \csplain. - Codes are set according to Unicode because we are using Czech only in Unicode - when \LuaTeX/ is used. - \_cod ---------------------------- - - -% for compatibility with csplain: - -\_chardef\clqq=8222 \_chardef\crqq=8220 -\_chardef\flqq=171 \_chardef\frqq=187 -\_chardef\promile=8240 - -\_def\uv#1{\clqq#1\crqq} - -\_let\uslang=\enlang \_let\ehyph=\enlang -\_let\chyph=\cslang \_let\shyph=\sklang -\_let\csUnicode=\csPatt \_let\czUnicode=\csPatt \_let\skUnicode=\skPatt - - \_doc ---------------------------- - The \`\letfont` was used in \csplain/ instead of `\fontlet`. - \_cod ---------------------------- - -\_let \letfont = \_fontlet - - \_doc ---------------------------- - Non-breaking space in Unicode. - \_cod ---------------------------- - -\let ^^a0=~ - - \_doc ---------------------------- - TikZ needs these funny control sequences. - \_cod ---------------------------- - -\_ea\_toksdef \_csname toks@\_endcsname=0 -\_ea\_let \_csname voidb@x\_endcsname=\_voidbox - - \_doc ---------------------------- - We don't want to read `opmac.tex` unless `\input opmac` is specified. - \_cod ---------------------------- - -\_def\OPmacversion{OpTeX} - - \_doc ---------------------------- - We allow empty lines in math formulae. It is more comfortable. - \_cod ---------------------------- - -\_suppressmathparerror = 1 - - \_doc ---------------------------- - Lorem ipsum can be printed by \`\lipsum``[<range>]` or \`\lorem``[<range>]`, - for example `\lipsum[3]` or `\lipsum[112-121]`, max=150. - - First usage of `\lipsum` reads the \LaTeX/ file `lipsum.ltd.tex` - by \`\_lipsumload` - and prints the selected paragraph(s). Next usages of `\lipsum` - prints the selected paragraph(s) from memory. This second and more - usages of `\lipsum` are fully expandable. If you want to have all - printings of `\lipsum` expandable, use dummy `\lipsum[0]` first. - - `\lipsum` adds `\par` after each printed paragraph. If you don't need - such `\par` here, use \`\lipsumtext``[<number>]`. - This macro prints only one selected paragraph <number> and does not add `\par`. - \_cod ---------------------------- - -\_def\_lipsumtext[#1]{\_lipsumload\_cs{_lip:#1}} -\_def\_lipsum[#1]{\_lipsumA #1\_empty-\_empty\_end} -\_def\_lipsumA #1-#2\_empty#3\_end{% - \_fornum #1..\_ifx^#2^#1\_else#2\_fi \_do {\_lipsumtext[##1]\par}} -\_def\_lipsumload{{% - \_setbox0=\_vbox{\_tmpnum=0 % vertical mode during \input lipsum.ltd.tex - \_def\ProvidesFile##1[##2]{}% - \_def\NewLipsumPar{\_incr\_tmpnum \_sxdef{_lip:\_the\_tmpnum}}% - \_opinput {lipsum.ltd.tex}% - \_global\_let\_lipsumload=\_empty - }}} -\_public \lipsum \lipsumtext ; -\_let \lorem=\lipsum - -\_endcode - -2021-01-04 \lipsumtext introduced -2020-05-22 \lipsum uses \fornum (expandable after first usage) -2020-04-02 released diff --git a/macros/luatex/optex/base/outlines.opm b/macros/luatex/optex/base/outlines.opm deleted file mode 100644 index 6230d8988b..0000000000 --- a/macros/luatex/optex/base/outlines.opm +++ /dev/null @@ -1,108 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \outlines {PDF outlines <2021-02-09>} % preloaded in format - -\_def\_outlines#1{\_pdfcatalog{/PageMode/UseOutlines}\_openref - \_ifx\_toclist\_empty - \_opwarning{\_noexpand\outlines -- data unavailable. TeX me again}% - \_incr\_unresolvedrefs - \_else - \_ifx\_dest\_destactive \_else - \_opwarning{\_noexpand\outlines doesn't work when \_noexpand\hyperlinks isn't declared}\_fi - {\_let\_tocline=\_outlinesA - \_count0=0 \_count1=0 \_count2=0 \_count3=0 \_toclist % calculate numbers o childs - \_def\_outlinelevel{#1}\_let\_tocline=\_outlinesB - \_tocrefnum=0 \_count0=0 \_count1=0 \_count2=0 \_count3=0 - \_toclist}% create outlines - \_fi -} -\_def\_outlinesA#1#2#3#4#5#6#7{% - \_isequal{\relax}{#4}\_iffalse - \_advance\_count#1 by1 - \_ifcase#1\_or - \_addoneol{_ol:\_the\_count0}\_or - \_addoneol{_ol:\_the\_count0:\_the\_count1}\_or - \_addoneol{_ol:\_the\_count0:\_the\_count1:\_the\_count2}\_or - \_addoneol{_ol:\_the\_count0:\_the\_count1:\_the\_count2:\_the\_count3}\_fi - \_fi -} -\_def\_addoneol#1{% - \_ifcsname #1\_endcsname - \_tmpnum=\_csname#1\_endcsname\_relax - \_advance\_tmpnum by1 \_sxdef{#1}{\_the\_tmpnum}% - \_else \_sxdef{#1}{1}% - \_fi -} -\_def\_outlinesB#1#2#3#4#5#6#7{% - \_advance\_tocrefnum by1 - \_isequal{\relax}{#4}\_iffalse - \_advance\_count#1 by1 - \_ifcase#1% - \_tmpnum=\_trycs{_ol:\_the\_count0}{0}\_or - \_tmpnum=\_trycs{_ol:\_the\_count0:\_the\_count1}{0}\_relax\_or - \_tmpnum=\_trycs{_ol:\_the\_count0:\_the\_count1:\_the\_count2}{0}\_relax\_or - \_tmpnum=\_trycs{_ol:\_the\_count0:\_the\_count1:\_the\_count2:\_the\_count3}{0}\_relax\_or - \_tmpnum = 0\_relax\_fi - \_isempty{#4}\_iftrue \_pdfunidef\_tmp{#5}\_else \_pdfunidef\_tmp{#4}\_fi - \_outlinesC{toc:\_the\_tocrefnum}{\_ifnum#1<\_outlinelevel\_space\_else-\_fi}{\_tmpnum}{\_tmp}% - \_fi -} -\_def\_outlinesC#1#2#3#4{\_pdfoutline goto name{#1} count #2#3{#4}\_relax} - -\_newcount\_oulnum -\_def\_insertoutline#1{\_incr\_oulnum - \_pdfdest name{oul:\_the\_oulnum} xyz\_relax - \_pdfunidef\_tmp{#1}% - \_pdfoutline goto name{oul:\_the\_oulnum} count0 {\_tmp}\_relax -} -\_public \outlines \insertoutline ; - -\_endcode % ---------------------------- - -The problem is that PDF format needs to know the number of direct -descendants of each outline if we need to create the tree of structured -outlines. But we know only the level of each outline. The required data -should be calculated from TOC data. We use two steps over TOC data saved in -the `\_toclist` where each record is represented by one `\_tocline`. - -The first step, the \`\outlines` macro sets `\_tocline` to \`\_outlinesA` and -calculates the number of direct descendants of each record. The second step, -the `\outlines` macro sets `\_tocline` to \`\_outlinesB` and it uses prepared -data and creates outlines. - -Each outline is mapped to the control sequence of the type -`\_ol:<num>` or `\_ol:<num>:<num>` or `\_ol:<num>:<num>:<num>` or etc. -The first one is reserved for level 0, the second one for level 1 (chapters), the third -one for level 2 (sections) etc. The number of direct descendants will be stored -in these macros after the first step is finished. Each new outline of a given level -increases the `<num>` at the given level. When the first step is processed then -(above that) the `\_ol:..` sequence of the parent increases its value too. The -`_ol:...` sequences are implemented by `\_ol:\_count0:\_count1:\count2` etc. -For example, when section (level 2) is processed in the first step then we do: - -\begtt - \advance \count2 by 1 - % increases the mapping pointer of the type - % \_ol:\_count0:\_count1:\_count2 of this section - \advance \_ol:\_count0:\_count1 by 1 - % increases the number of descendants connected - % to the parent of this section. -\endtt - -When the second step is processed, then we only read the stored data about the -number of descendants. And we use it in `count` parameter of `\_pdfoutline` -primitive. - -For linking, we use the same links as in TOC, i.e. the `toc:\_the\_tocrefnum` -labels are used. - -\`\insertoutline` `{<text>}` inserts one outline with zero direct descendants. -It creates a link destination of the type `oul:<num>` into the document -(where \^`\insertoutline` is used) and the link itself is created too in the -outline. - -\endinput - -2021-02-15 \_advance -> \_incr -2021-02-09 \thisoutline implemented -2020-03-12 released diff --git a/macros/luatex/optex/base/output.opm b/macros/luatex/optex/base/output.opm deleted file mode 100644 index 5bb93c2477..0000000000 --- a/macros/luatex/optex/base/output.opm +++ /dev/null @@ -1,267 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \nopagenumbers {Output routine <2021-02-25>} % preloaded in format - - \_doc ----------------------------- - \`\_optexoutput` is the default output routine. You can create another... - \_cod ----------------------------- - -\_output={\_optexoutput} -\_def \_optexoutput{\_begoutput \_shipout\_completepage \_endoutput} - - \_doc ----------------------------- - Default \`\_begoutput` and \`\_endoutput` is defined. - If you need another functionality implemented in the output routine, you can - \^`\addto``\_begoutput{...}` or \^`\addto``\_endoutput{...}`. The settings - here are local in the `\output` group. - - The \`\_prepoffsets` can set `\hoffset` differently for the left or right - page. It is re-defined by the \^`\margins` macro.. - - The \^`\_regmark` tokens list includes accumulated `#2` from the \^`\regmacro`. - Logos and other macros are re-defined here (locally) for their usage - in headlines or footlines. - \_cod ----------------------------- - -\_def \_begoutput{\_incr\_gpageno - \_immediate\_wref\_Xpage{{\_the\_gpageno}{\_folio}}% - \_setxhsize \_prepoffsets \_the\_regmark} -\_def \_endoutput{\_advancepageno - {\_globaldefs=1 \_the\_nextpages \_nextpages={}}% - \_ifnum\_outputpenalty>-20000 \_else\_dosupereject\_fi -} -\_def \_prepoffsets {} - - \_doc ----------------------------- - The `\hsize` value can be changed at various places in the document but - we need to have a constant value \`\_xhsize` in the output routine - (for headlines and footlines, for instance). This value is set - from the current value of `\hsize` when \`\_setxhsize` macro is called. - This macro destroys itself, so the value is set only once. Typically it is - done in \^`\margins` macro or - when first \^`\_optexoutput` routine is called (see \^`\_begoutput`). - Or it is called at the begining of the \^`\begtt`...`\endtt` environment before - `\hsize` value is eventually changed by the user in this environment. - \_cod ----------------------------- - -\_newdimen \_xhsize -\_def\_setxhsize {\_global\_xhsize=\_hsize \_global\_let\_setxhsize=\_relax} - - \_doc ----------------------------- - \`\gpageno` counts pages from one in the whole document - \_cod ----------------------------- - -\_newcount\_gpageno -\_public \gpageno ; - - \_doc ----------------------------- - The \`\_completepage` is similar to what plain \TeX/ does in its output routine. - New is only \`\_backgroundbox`. It is `\vbox` with zero height with its - contents (from \^`\pgbackground`) extended down. It is shifted directly to the - left-upper corner of the paper. - - The \`\_ensureblack` sets the typesetting of its parameter locally to `\Black` - color. We needn't do this if colors are never used in the document. So, - the default value of the `\_ensureblack` macro is empty. But the first usage of - color macros in the document re-defines `\_ensureblack`. - See the section~\ref[colors] for more details. - \_cod ----------------------------- - -\_def\_completepage{\_vbox{% - \_istoksempty \_pgbackground - \_iffalse \_ensureblack{\_backgroundbox{\_the\_pgbackground}}\_nointerlineskip \_fi - \_ensureblack{\_makeheadline}% - \_vbox to\_vsize {\_boxmaxdepth=\_maxdepth \_pagecontents}% \pagebody in plainTeX - \_ensureblack{\_makefootline}}% -} -\_def \_ensureblack #1{#1} % will be re-defined by color macros -\_let \_openfnotestack = \_relax % will be re-defined by color macros -\_def \_backgroundbox #1{\_moveleft\_hoffset\_vbox to\_zo{\_kern-\_voffset #1\_vss}} - - \_doc ----------------------------- - \`\_makeheadline` creates `\vbox to0pt` with its contents (the \^`\headline`) - shifted by \^`\headlinedist` up. - \_cod ----------------------------- - -\_def\_makeheadline {\_istoksempty \_headline \_iffalse - \_vbox to\_zo{\_vss - \_baselineskip=\_headlinedist \_lineskiplimit=-\_maxdimen - \_hbox to\_xhsize{\_the\_headline}\_hbox{}}\_nointerlineskip - \_fi -} - - \_doc ----------------------------- - The \`\_makefootline` appends the \^`\footline` to the page-body box. - \_cod ----------------------------- - -\_def\_makefootline{\_istoksempty \_footline \_iffalse - \_baselineskip=\_footlinedist - \_lineskiplimit=-\_maxdimen \_hbox to\_xhsize{\_the\_footline} - \_fi -} - - \_doc ----------------------------- - The \`\_pagecontents` is similar as in plain \TeX/. The only differnece is - that the \`\_pagedest` is inserted at the top of `\_pagecontents` and - \^`\_ensureblack` is applied to the \^`\topins` and \^`\footins` material.\nl - The \`\_footnoterule` is defined here. - \_cod ----------------------------- - -\_def\_pagecontents{\_pagedest % destination of the page - \_ifvoid\_topins \_else \_ensureblack{\_unvbox\_topins}\_fi - \_dimen0=\_dp255 \_unvbox255 % open up \box255 - \_ifvoid\_footins \_else % footnote info is present - \_vskip\_skip\_footins - \_ensureblack{\_footnoterule \_openfnotestack \_unvbox\_footins}\_fi - \_kern-\_dimen0 \_vskip \_pgbottomskip -} -\_def \_pagedest {{\_def\_destheight{25pt}\_dest[pg:\_the\_gpageno]}} -\_def \_footnoterule {\_kern-3pt \_hrule width 2truein \_kern 2.6pt } - - \_doc ----------------------------- - \`\pageno`, \`\folio`, \`\nopagenumbers`, \`\advancepageno` - and \`\normalbottom` - used in the context of the output routine - from plain \TeX/ is defined here. - Only the \`\raggedbottom` macro is defined differently. We use the - \^`\pgbottomskip` register here which is set to 0\,pt by default. - \_cod ----------------------------- - -\_countdef\_pageno=0 \_pageno=1 % first page is number 1 -\_def \_folio {\_ifnum\_pageno<0 \_romannumeral-\_pageno \_else \_number\_pageno \_fi} -\_def \_nopagenumbers {\_footline={}} -\_def \_advancepageno {% - \_ifnum\_pageno<0 \_decr\_pageno \_else \_incr\_pageno \_fi -} % increase |pageno| -\_def \_raggedbottom {\_topskip=\_dimexpr\_topskip plus60pt \_pgbottomskip=0pt plus1fil\_relax} -\_def \_normalbottom {\_topskip=\_dimexpr\_topskip \_pgbottomskip=0pt\_relax} - -\_public \pageno \folio \nopagenumbers \advancepageno \raggedbottom \normalbottom ; - - \_doc ----------------------------- - Macros for footnotes are the same as in plain \TeX. There is only one - difference: \`\vfootnote` is implemented as \`\_opfootnote` with empty - parameter `#1`. This parameter should do local settings inside - the \`\footins` group and it does it when `\fnote` macro is used.\nl - The `\_opfootnote` nor `\vfootnote` don't take the footnote text - as a parameter. This is due to a user can do catcode settings (like inline - verbatim) in the footnote text. This idea is adapted from plain \TeX.\nl - The \`\footnote` and \`\footstrut` is defined as in plain \TeX/. - \_cod ----------------------------- - -\_newinsert\_footins -\_def \_footnote #1{\_let\_osf=\_empty % parameter #2 (the text) is read later - \_ifhmode \_edef\_osf{\_spacefactor\_the\_spacefactor}\/\_fi - #1\_osf\_vfootnote{#1}} -\_def\_vfootnote{\_opfootnote{}} -\_def \_opfootnote #1#2{\_insert\_footins\_bgroup - \_interlinepenalty=\_interfootnotelinepenalty - \_leftskip=\_zo \_rightskip=\_zo \_spaceskip=\_zo \_xspaceskip=\_zo \_relax - \_let\_colorstackcnt=\_fnotestack % special color stack for footnotes - #1\_relax % local settings used by \fnote macro - \_splittopskip=\_ht\_strutbox % top baseline for broken footnotes - \_splitmaxdepth=\_dp\_strutbox \_floatingpenalty=20000 - \_textindent{#2}\_footstrut - \_isnextchar \_bgroup - {\_bgroup \_aftergroup\_vfootA \_afterassignment\_ignorespaces \_let\_next=}{\_vfootB}% -} -\_def\_vfootA{\_unskip\_strut\_isnextchar\_colorstackpop\_closefncolor\_vfootF} -\_def\_vfootB #1{#1\_unskip\_strut\_vfootF} -\_def\_vfootF{\_egroup} % close \_insert\_footins\_bgroup -\_def\_closefncolor#1{#1\_isnextchar\_colorstackpop\_closefncolor\_vfootF} -\_def \_footstrut {\_vbox to\_splittopskip{}} -\_skip\_footins=\_bigskipamount % space added when footnote is present -\_count\_footins=1000 % footnote magnification factor (1 to 1) -\_dimen\_footins=8in % maximum footnotes per page -\_public - \footins \footnote \vfootnote \footstrut ; - - \_doc ----------------------------- - The \`\topins` macros - \`\topinsert`, \`\midinsert`, \`\pageinsert`, \`\endinsert` - are the same as in plain \TeX/. - \_cod ----------------------------- - -\_newinsert\_topins -\_newifi\_ifupage \_newifi\_ifumid -\_def \_topinsert {\_umidfalse \_upagefalse \_oins} -\_def \_midinsert {\_umidtrue \_oins} -\_def \_pageinsert {\_umidfalse \_upagetrue \_oins} -\_skip\_topins=\_zoskip % no space added when a topinsert is present -\_count\_topins=1000 % magnification factor (1 to 1) -\_dimen\_topins=\_maxdimen % no limit per page -\_def \_oins {\_par \_begingroup\_setbox0=\_vbox\_bgroup} % start a \_vbox -\_def \_endinsert {\_par\_egroup % finish the \_vbox - \_ifumid \_dimen0=\_ht0 \_advance\_dimen0 by\_dp0 \_advance\_dimen0 by\_baselineskip - \_advance\_dimen0 by\_pagetotal \_advance\_dimen0 by-\_pageshrink - \_ifdim\_dimen0>\_pagegoal \_umidfalse \_upagefalse \_fi \_fi - \_ifumid \_bigskip \_box0 \_bigbreak - \_else \_insert \_topins {\_penalty100 % floating insertion - \_splittopskip=0pt - \_splitmaxdepth=\_maxdimen \_floatingpenalty=0 - \_ifupage \_dimen0=\_dp0 - \_vbox to\_vsize {\_unvbox0 \_kern-\_dimen0}% depth is zero - \_else \_box0 \_nobreak \_bigskip \_fi}\_fi\_endgroup} - -\_public \topins \topinsert \midinsert \pageinsert \endinsert ; - - \_doc ----------------------------- - The \`\draft` macro is an example of usage `\_pgbackground` to create - watercolor marks. - \_cod ----------------------------- - -\_def \_draft {\_pgbackground={\_draftbox{\_draftfont DRAFT}}% - \_fontdef\_draftfont{\_setfontsize{at10pt}\_bf}% - \_global\_let\_draftfont=\_draftfont -} -\_def \_draftbox #1{\_setbox0=\_hbox{#1}% - \_kern.5\_vsize \_kern\_voffset \_kern4.5\_wd0 - \_hbox to0pt{\_kern.5\_xhsize \_kern\_hoffset \_kern-2\_wd0 - \_pdfsave \_pdfrotate{55}\_pdfscale{10}{10}% - \_hbox to0pt{\_localcolor\_setgreycolor{.8}\_box0\_hss}% - \_pdfrestore - \_hss}% -} -\_public \draft ; - -\_endcode % ------------------------------------- - - -The output routine \^`\_optexoutput` is similar as in plain \TeX. It does: - -\begitems -* \^`\_begoutput` which does: - \begitems - * increments \^`\gpageno`, - * prints `\_Xpage{<gpageno>}{<pageno>}` to the `.ref` file - (if \^`\openref` is active), - * calculates `\hoffset`, - * sets local meaning of macros used in headlines/footlines (see \^`\regmacro`). - \enditems -* `\shipout`\^`\_completepage`, which is `\vbox` of -- - \begitems - * backrground box, if \^`\pgbackground` is non-empty, - * headline box by \^`\_makeheadline`, if the \^`\headline` is nonempty, - * `\vbox to\vsize` of \^`\_pagecontents` which cosnists of -- - \begitems - * \^`\_pagedest`, the page destination `pg:<gpageno>` for hyperlinks is created here, - * \^`\topins` box if non-empty (from \^`\topinsert`s), - * `\box255` with completed vertical material from main vertical mode, - * \^`\_footnoterule` and \^`\footins` box if nonempty (from \^`\fnote`, \^`\footnote`), - * \^`\pgbottomskip` (default is 0\,pt). - \enditems - * footline box by `\_makefootline`, if the \^`\footline` is nonempty - \enditems -* \^`\_endoutput` which does: - \begitems - * increments \^`\pageno` using \^`\advancepageno` - * runs output routine repeatedly if \^`\dosupereject` is activated. - \enditems -\enditems - -\_endinput - -2021-02-25 \_draftbox improved -2021-02-15 \_advance -> \_decr -2020-05-12 \vfootB: \uskip -> \unskip bug fixed -2020-03-28 Released diff --git a/macros/luatex/optex/base/parameters.opm b/macros/luatex/optex/base/parameters.opm deleted file mode 100644 index c8df6eec49..0000000000 --- a/macros/luatex/optex/base/parameters.opm +++ /dev/null @@ -1,588 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \normalbaselineskip {Parameter settings <2020-03-17>} % preloaded in format - - \_doc ----------------------------- - \secc Primitive registers - The primitive registers with the same default value as in plain \TeX/ follow: - \_cod ----------------------------- - -\_parindent=20pt % indentation of paragraphs -\_pretolerance=100 % parameters used in paragraph breaking algorithm -\_tolerance=200 -\_hbadness=1000 -\_vbadness=1000 -\_doublehyphendemerits=10000 -\_finalhyphendemerits=5000 -\_adjdemerits=10000 -\_uchyph=1 -\_defaulthyphenchar=`\- -\_defaultskewchar=-1 -\_hfuzz=0.1pt -\_vfuzz=0.1pt -\_overfullrule=5pt -\_linepenalty=10 % penalty between lines inside the paragraph -\_hyphenpenalty=50 % when a word is bro-ken -\_exhyphenpenalty=50 % when the hyphenmark is used explicitly -\_binoppenalty=700 % between binary operators in math -\_relpenalty=500 % between relations in math -\_brokenpenalty=100 % after lines if they end by a broken word. -\_displaywidowpenalty=50 % before last line of paragraph if display math follows -\_predisplaypenalty=10000 % above display math -\_postdisplaypenalty=0 % below display math -\_delimiterfactor=901 % parameter for scaling delimiters -\_delimitershortfall=5pt -\_nulldelimiterspace=1.2pt -\_scriptspace=0.5pt -\_maxdepth=4pt -\_splitmaxdepth=\_maxdimen -\_boxmaxdepth=\_maxdimen -\_parskip=0pt plus 1pt -\_abovedisplayskip=12pt plus 3pt minus 9pt -\_abovedisplayshortskip=0pt plus 3pt -\_belowdisplayskip=12pt plus 3pt minus 9pt -\_belowdisplayshortskip=7pt plus 3pt minus 4pt -\_parfillskip=0pt plus 1fil -\_thinmuskip=3mu -\_medmuskip=4mu plus 2mu minus 4mu -\_thickmuskip=5mu plus 5mu - - \_doc ----------------------------- - Note that `\topskip` and `\splittopskip` are changed when first - `\typosize` sets the main values (default font size and default - `\baselineskip`). - \_cod ----------------------------- - -\_topskip=10pt % top edge of page-box to first baseline distance -\_splittopskip=10pt - - \_doc ----------------------------- - \secc Plain \TeX/ registers - Declared registers used in plain \TeX/ - \_cod ----------------------------- - -% We also define special registers that function like parameters: -\_newskip\_smallskipamount \_smallskipamount=3pt plus 1pt minus 1pt -\_newskip\_medskipamount \_medskipamount=6pt plus 2pt minus 2pt -\_newskip\_bigskipamount \_bigskipamount=12pt plus 4pt minus 4pt -\_newskip\_normalbaselineskip \_normalbaselineskip=12pt -\_newskip\_normallineskip \_normallineskip=1pt -\_newdimen\_normallineskiplimit \_normallineskiplimit=0pt -\_newdimen\_jot \_jot=3pt -\_newcount\_interdisplaylinepenalty \_interdisplaylinepenalty=100 -\_newcount\_interfootnotelinepenalty \_interfootnotelinepenalty=100 - -\_def\_normalbaselines{\_lineskip=\_normallineskip - \_baselineskip=\_normalbaselineskip \_lineskiplimit=\_normallineskiplimit} - -\_def\_frenchspacing{\_sfcode`\.=1000 \_sfcode`\?=1000 \_sfcode`\!=1000 - \_sfcode`\:=1000 \_sfcode`\;=1000 \_sfcode`\,=1000 } -\_def\_nonfrenchspacing{\_sfcode`\.=3000 \_sfcode`\?=3000 \_sfcode`\!=3000 - \_sfcode`\:=2000 \_sfcode`\;=1500 \_sfcode`\,=1250 } - -\_public \normalbaselines \frenchspacing \nonfrenchspacing - \smallskipamount \medskipamount \bigskipamount - \normalbaselineskip \normallineskip \normallineskiplimit - \jot \interdisplaylinepenalty \interfootnotelinepenalty ; - - \_doc ----------------------------- - \secc Different settings than in plain \TeX/ - - Default \"baseline setting" is for 10\,pt fonts (like in plain \TeX/). - But `\typosize` and `\typoscale` macros re-declare it if another font size is used. - - The \`\nonfrenchspacing` is not set by default because - the author of \OpTeX/ is living in Europe. - If you set `\enlang` hyphenation patterns then `\nonfrenchspacing` - is set. - \_cod ----------------------------- - -\_normalbaselines % baseline setting, 10 pt font size - - \_doc ----------------------------- - Different values than in plain \TeX/ have the following primitive registers. - We prohibit orphans, set more information for tracing boxes, set page origin - to the upper left corner of the paper (no at 1\,in, 1\,in coordinates) - and set default page dimensions as A4, no letter. - \_cod ----------------------------- - -\_emergencystretch=20pt % we want to use third pass of paragraph building algoritmh - % we need not keep the compatibility with old documents - -\_clubpenalty=10000 % after first line of paragraph -\_widowpenalty=10000 % before last line of paragraph - -\_showboxbreadth=150 % for tracing boxes -\_showboxdepth=7 -\_errorcontextlines=15 -\_tracinglostchars=2 % missing chracter warnings on terminal too - -\_outputmode=1 % PDF ouput -\_pdfvorigin=0pt % orgin is exatly at left upper corner -\_pdfhorigin=0pt -\_hoffset=25mm % margins are 2.5cm, no 1in -\_voffset=25mm -\_hsize=160mm % 210mm (from A4 size) - 2*25mm (default margins) -\_vsize=244mm % 297mm (from A4 size) - 2*25mm (default margins) -3mm baseline correction -\_pagewidth=210 true mm -\_pageheight=297 true mm - - \_doc ----------------------------- - If you insist on plain \TeX/ values of these parameters then you can - call the `\plaintexsetting` macro. - \_cod ----------------------------- - -\_def\_plaintexsetting{% - \_emergencystretch=0pt - \_clubpenalty=150 - \_widowpenalty=150 - \_pdfvorigin=1in - \_pdfhorigin=1in - \_hoffset=0pt - \_voffset=0pt - \_hsize=6.5in - \_vsize=8.9in - \_pagewidth=8.5 true in - \_pageheight=11 true in - \_nonfrenchspacing -} -\_public \plaintexsetting ; - - \_doc ----------------------------- - \secc[oparams] \OpTeX/ parameters - - The main principle of how to configure \OpTeX/ is not to use only parameters. - A designer can copy macros from \OpTeX/ and re-define them as required. - This is a reason why we don't implement dozens of parameters, - but we keep \OpTeX/ macros relatively simple. Example: do you want - another design of section titles? Copy macros `\_printsec` and - `\_printsecc` from `sections.opm` file to your macro file and re-define them. - - Notice for OPmac users: there is an important difference: all "string-like" - parameters are token lists in \OpTeX/ (OPmac uses macros for them). The reason of - this difference: if a user sets parameter by unprefixed (public) control sequence, - an \OpTeX/ macro can read {\em the same data} using a prefixed (private) control sequence. - - The \`\picdir` tokens list can include a directory where image files - (loaded by `\inspic`) are saved. Empty `\picdir` (default value) means - that image files are in the current directory (or somewhere in the \TeX/ - system where \LuaTeX/ can find them). If you set a non-empty value to - the `\picdir`, then it must end by `/` character, for example - `\picdir={img/}` means that there exists a directory `img` in your - current directory and the image files are stored here. - \_cod ----------------------------- - -\_newtoks\_picdir -\_public \picdir ; - - \_doc ----------------------------- - You can control the dimensions of included images by - the parameters \`\picwidth` (which is equivalent to \`\picw`) and - \`\picheight`. By default these parameters are set to zero: the native - dimension of the image is used. If only `\picwidth` has a nonzero value, - then this is the width of the image (height is calculated automatically in - order to respect the aspect of the image). If only `\picheight` has - a nonzero value then the height is given, the width is calculated. If both - parameters are non-zero, the height and width are given and the aspect - ratio of the image is (probably) broken. We recommend setting these - parameters locally in the group where \^`\inspic` is used in order to not - influence the dimensions of other images. But there exist many - situations you need to put the same dimensions to more images, - so you can set this parameter only once before more \^`\inspic` macros. - \_cod ----------------------------- - -\_newdimen\_picwidth \_picwidth=0pt \_let\picw=\_picwidth -\_newdimen\_picheight \_picheight=0pt -\_public \picwidth \picheight ; - - \_doc ----------------------------- - The \`\everytt` is the token list used in - \^`\begtt`...\^`\endtt` environment and - in the verbatim group opened by \^`\verbinput` macro. You can include a - code which is processed inside the group after basic settings were done - On the other hand, it is processed before the scanner of verbatim text is started. - Your macros should influence scanner (catcode settings) or printing - process of the verbatim code or both. - - The code from the line immediately after \^`\begtt` is processed after - the \^`\everytt`. This code should overwrite \^`\everytt` settings. Use - \^`\everytt` for all verbatim environments in your document and use a code - after \^`\begtt` locally only for this environment. - - The \`\everyintt` token list does similar work - but acts in the in-line verbatim - text processed by a pair of \^`\verbchar` characters or by \^`\code``{<text>}`. - You can set `\everyintt={\Red}` for example if you want in-line verbatim - in red color. - \_cod ----------------------------- - -\_newtoks\_everytt -\_newtoks\_everyintt -\_public \everytt \everyintt ; - - \_doc ----------------------------- - The \`\ttline` is used - in \^`\begtt`...\^`\endtt` environment or in the code - printed by \^`\verbinput`. If `\ttline` is positive or zero, then the - verbatim code has numbered lines from `\ttline+1`. The `\ttline` - register is re-set to a new value after a code piece is printed, so next - code pieces have numbered lines continuously. If `\ttline=-1`, then - \^`\begtt`...\^`\endtt` lines are without numbers and \^`\verbinput` lines - show the line numbers of inputted file. If `\ttline`\code{<-1} - then no line numbers are printed. - \_cod ----------------------------- - -\_newcount\_ttline \_ttline=-1 % last line number in \begtt...\endtt -\_public \ttline ; - - \_doc ----------------------------- - The \`\ttindent` gives default indentation - of verbatim lines printed by \^`\begtt`...\^`\endtt` pair or by - \^`\verbinput`. - \nl - The \`\ttshift` gives the amount of shift of all verbatim lines to the right. - Despite the \^`\ttindent`, it does not shift the line numbers, only - the text. - \nl - The \`\iindent` gives default indentations used in the table of contents, - captions, lists, bib references, - \nl - It is strongly recommended to re-set this value if you set `\parindent` - to another value than plain \TeX/ default 20pt. A well-typeset - document should have the same dimension for all indentations, so - you should say `\ttindent=\parindent` and `\iindent=\parindent`. - \_cod ----------------------------- - -\_newdimen\_ttindent \_ttindent=\_parindent % indentation in verbatim -\_newdimen\_ttshift -\_newdimen\_iindent \_iindent=\_parindent -\_public \ttindent \ttshift \iindent ; - - \_doc ----------------------------- - The tabulator `^^I` has its category code like space: it behaves as a - space in normal text. This is a common plain \TeX/ setting. - But in the multiline verbatim environment it - is active and expands to the `\hskip<dimen>` where `<dimen>` - is the width of \`\tabspaces` spaces. - Default `\tabspaces=3` means - that tabulator behaves like three spaces in multiline verbatim. - \_cod ----------------------------- - -\_newcount \_tabspaces \_tabspaces=3 -\_public \tabspaces ; - - \_doc ----------------------------- - If \`\hicolors` is non-empty then its contents is used instead - `\_hicolors<name>` declared in the file `hisyntax-<name>.opm`. - The user can give his/her preferences about colors for - syntax highlighting by this tokens list. - The full color set must be declared here. - \_cod ----------------------------- - -\_newtoks\_hicolors -\_public \hicolors ; - - \_doc ----------------------------- - The default item mark used between \^`\begitems` and \^`\enditems` is the bullet. - The \`\defaultitem` tokens list declares this default item mark. - \nl - The \`\everyitem` tokens list is applied in vertical mode - at the start of each item. - \nl - The \`\everylist` tokens list is applied after the group is opened by \^`\begitems` - \nl - The \`\ilevel` keeps the value of the current nesting level of the items list. - \nl - The \`\listskipamount` gives vertical skip above and below the items list - if `\ilevel=1`. - \_cod ----------------------------- - -\_newtoks\_defaultitem \_defaultitem={$\_bullet$\_enspace} -\_newtoks\_everyitem -\_newtoks\_everylist -\_newskip \_listskipamount \_listskipamount=\_medskipamount -\_newcount \_ilevel -\_public \defaultitem \everyitem \everylist \listskipamount \ilevel ; - - \_doc ----------------------------- - The \^`\tit` macro includes `\vglue`\`\titskip` above the title of the document. - \_cod ----------------------------- - -\_newskip\_titskip \_titskip=40pt \_relax % \vglue above title printed by \tit -\_public \titskip ; - - \_doc ---------------------------- - The \^`\begmulti` and \^`\endmulti` pair creates more columns. The parameter - \`\colsep` declares the space between columns. If $n$ columns are specified - then we have $n-1$ `\colseps` and $n$ columns in total `\hsize`. This - gives the definite result of the width of the columns. - \_cod ---------------------------- - -\_newdimen\_colsep \_colsep=20pt % space between columns -\_public \colsep ; - - \_doc ----------------------------- - Each line in the Table of contents is printed in a group. - The \`\everytocline` tokens list is processed here before - the internal `\_tocl:<num>` macro which starts printing the line. - \_cod ----------------------------- - -\_newtoks \_everytocline -\_public \everytocline ; - - \_doc ----------------------------- - The \`\bibtexhook` tokens list is used inside the group when `\usebib` command is - processed after style file is loaded and before printing bib-entries. - You can re-define a behavior of the style file here or you can modify the - more declaration for printing (fonts, baselineskip, etc.) or you can - define specific macros used in your `.bib` file. - \_cod ----------------------------- - -\_newtoks\_bibtexhook -\_public \bibtexhook ; - - \_doc ----------------------------- - \`\everycapitonf` is used before printing caption in figures and - \`\everycapitont` is used before printing caption in tables. - \_cod ----------------------------- - -\_newtoks\_everycaptiont \_newtoks\_everycaptionf -\_public \everycaptiont \everycaptionf ; - - \_doc ----------------------------- - The \`\everyii` tokens list is used before `\noindent` for each - Index item when printing the Index. - \_cod ----------------------------- - -\_newtoks\_everyii -\_public \everyii ; - - \_doc ----------------------------- - The \`\everymnote` is used in the \^`\mnote` group before `\noindent` which - immediately precedes marginal note text. - \nl - The \`\mnotesize` is the horizontal size of the marginal notes. - \nl - The \`\mnoteindent` is horizontal space between body-text and marginal note. - \_cod ----------------------------- - -\_newtoks\_everymnote -\_newdimen\_mnotesize \_mnotesize=20mm % the width of the mnote paragraph -\_newdimen\_mnoteindent \_mnoteindent=10pt % ditance between mnote and text -\_public \everymnote \mnotesize \mnoteindent ; - - \_doc ----------------------------- - The \^`\table` parameters follow. The \`\thistable` tokens list - register should be used for giving an exception for only one `\table` - which follows. It should change locally other parameters of the `\table`. - It is reset to an empty list after the table is printed. - \nl - The \`\everytable` tokens list register is applied in every table. - There is another difference between these two registers. - The `\thistable` is used first, then strut and baselineskip settings are - done, then `\everytable` is applied and then the table is printed. - \nl - \`\tabstrut` configures the height and depth of lines in the table. - You can declare `\tabstrut={}`, then normal baselineskip is used in the - table. This can be used when you don't use horizontal nor vertical - lines in tables. - \nl - \`\tabiteml` is applied before each item, - \`\tabitemr` is applied after each item of the table. - \nl - \`\tablinespace` is additional vertical space between horizontal rules - and the lines of the table. - \nl - \`\hhkern` gives the space between horizontal lines if they are doubled and - \`\vvkern` gives the space between such vertical lines. - \nl - \`\tabskipl` is `\tabskip` used before first column, - \`\tabskipr` is `\tabskip` used after the last column. - \nl - \`\tsize` is virtual unit of the width of paragraph-like table items when - `\table pxto<size>` is used. - \_cod ----------------------------- - -\_newtoks\_everytable \_newtoks\_thistable -\_newtoks\_tabiteml \_newtoks\_tabitemr \_newtoks\_tabstrut -\_newdimen\_tablinespace \_newdimen\_vvkern \_newdimen\_hhkern \_newdimen\_tsize -\_newskip\_tabskipl \_newskip\_tabskipr -\_everytable={} % code used after settings in \vbox before table processing -\_thistable={} % code used when \vbox starts, is is removed after using it -\_tabstrut={\_strut} -\_tabiteml={\_enspace} % left material in each column -\_tabitemr={\_enspace} % right material in each column -\_tablinespace=2pt % additional vertical space before/after horizontal rules -\_vvkern=1pt % space between double vertical line and used in \frame -\_hhkern=1pt % space between double horizontal line and used in \frame -\_tabskipl=0pt\_relax % \tabskip used before first column -\_tabskipr=0pt\_relax % \tabskip used after the last column -\_public \everytable \thistable \tabiteml \tabitemr \tabstrut \tablinespace - \vvkern \hhkern \tsize \tabskipl \tabskipr ; - - \_doc ----------------------------- - The \^`\eqalign` macro can be configured by \`\eqlines` and \`\eqstyle` - tokens lists. The default values are set in order these macro beahaves - as in Plain \TeX. The \`\eqspace` is horizontal space put - between equation systems if more columns in \^`\eqalign` are used. - \_cod ----------------------------- - -\_newtoks \_eqlines \_eqlines={\_openup\_jot} -\_newtoks \_eqstyle \_eqstyle={\_strut\_displaystyle} -\_newdimen \_eqspace \_eqspace=20pt -\_public \eqlines \eqstyle \eqspace ; - - \_doc ----------------------------- - \`\lmfil` is \"left matrix filler" (for `\matrix` columns). The default - value does centering because the right matrix filler is directly set to `\hfil`. - \_cod ----------------------------- - -\_newtoks \_lmfil \_lmfil={\_hfil} -\_public \lmfil ; - - \_doc ----------------------------- - The output routine uses token list \`\headline` and \`\footline` in the - same sense as in plain \TeX/. If they are non-empty then `\hfil` or `\hss` - must be here because they are used inside `\hbox to\hsize`. - - Assume that page-body text can be typeset in different sizes and - different fonts and we don't know in what font context the output routine - is invoked. So, it is strongly recommended to declare fixed variants of - fonts at the beginning of your document. For example `\fontdef\rmfixed{\rm}`, - `\fontdef\itfixed{\it}`. Then use them in headline and footline: - \begtt - \headline={\itfixed Text of headline, section: \fistmark \hss} - \footline={\rmfixed \ifodd\pageno \hfill\fi \folio \hfil} - \endtt - \_cod ----------------------------- - -\_newtoks\_headline \_headline={} -\_newtoks\_footline \_footline={\_hss\_rmfixed \_folio \_hss} -\_public \headline \footline ; - - \_doc ----------------------------- - The distance between the `\headline` and the top of the page text - is controlled by the \`\headlinedist` register. - The distance between the bottom of - page-text and `\footline` is \`\footlinedist`. - More precisely: baseline of - headline and baseline of the first line in page-text have distance - `\headlinedist+\topskip`. The baseline of the last line in page-text and - the baseline of the footline have distance `\footlinedist`. - Default values are inspired by plain \TeX/. - \_cod ----------------------------- - -\_newdimen \_headlinedist \_headlinedist=14pt -\_newdimen \_footlinedist \_footlinedist=24pt -\_public \headlinedist \footlinedist ; - - \_doc ----------------------------- - The \`\pgbottomskip` is inserted to the page bottom - in the output routine. You can set less tolerance here than - `\raggedbotom` does. By default, no tolerance is given. - \_cod ----------------------------- - -\_newskip \_pgbottomskip \_pgbottomskip=0pt \_relax -\_public \pgbottomskip ; - - \_doc ----------------------------- - The \`\nextpages` tokens list can include settings which will be used at - next pages. It is processed at the end of output routine with - `\globaldefs=1` prefix. The `\nextpages` is reset to empty after - processing. Example of usage: - \begtt - \headline={} \nexptages={\headline={\rmfixed \firstmark \hfil}} - \endtt - This example sets current page with empty headline, but next pages have - non-empty headlines. - \_cod ----------------------------- - -\_newtoks \_nextpages -\_public \nextpages ; - - \_doc ----------------------------- - The \`\pgbackground` token list can include macros which generate a - vertical list. It is used as page background. The top-left corner of such - `\vbox` is at the top-left corner of the paper. Example creates the - background of all pages yellow: - \begtt - \pgbackground={\Yellow \hrule height 0pt depth\pdfpageheight width\pdfpagewidth} - \endtt - \_cod ----------------------------- - -\_newtoks \_pgbackground \_pgbackground={} % for page background -\_public \pgbackground ; - - \_doc ----------------------------- - The parameters used in \^`\inoval` and \^`\incircle` macros - can be re-set by \`\ovalparams`, \`\circleparams` tokens lists. - The default values (documented in the user manual) are set in the macros. - \_cod ----------------------------- - -\_newtoks \_ovalparams -\_newtoks \_circleparams -%\_ovalparams={\_roundness=2pt \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp -% \_shadow=N \_overlapmargins=N \_hhkern=0pt \_vvkern=0pt } -%\_circleparams={\_ratio=1 \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp -% \_shadow=N \_overlapmargins=N \_hhkern=3pt \_vvkern=3pt} - -\_newdimen \_roundness \_roundness=5mm % used in \clippingoval macro - -\_public \ovalparams \circleparams \roundness ; - - \_doc ----------------------------- - \OpTeX/ defines \"Standard \OpTeX/ markup language"% - \fnote{Will be developed in 2021.} - which lists selected commands from chapter~1 and gives their behavior when a - converter from \OpTeX/ document to HTML or Markdown or \LaTeX/ is used. - The structure-oriented commands are selected here, but the commands which - declare typographical appearance (page layout, dimensions, selected font - family) are omitted. More information for such a converter should be - given in \`\cnvinfo``{<data>}`. - \OpTeX/ simply ignores this but the converter can read its configuration - from here. For example, a user can write: - \begtt \catcode`\<=13 - \cnvinfo {type=html, <cnv-to-html-data>} - \cnvinfo {type=markdown, <cnv-to-markdown-data>} - \endtt - and the document can be processed by \OpTeX/ to create PDF, or by a - converter to create HTML, or by another converter to create Markdown. - \_cod ----------------------------- - -\_let\cnvinfo=\_ignoreit - - -\_endcode %---------------------------------------------------- - -The behavior of document processing by \OpTeX/ is -controlled by {\em parameters}. The parameters are -\begitems -* primitive registers used in build-in algorithms of \TeX/, -* registers declared and used by \OpTeX/ macros. -\enditems -Both groups of registers have their type: number, dimension, skip, token -list. - -The registers are represented by their names (control sequences). If the user -re-defines this control sequence then the appropriate register exists -steadily and build-in algorithms are using it without change. But user -cannot access its value in this case. \OpTeX/ declares two control sequences -for each register: prefixed (private) and unprefixed (public). \OpTeX/ macros use only -prefixed variants of control sequences. The user should use the unprefixed variant -with the same meaning and set or read the values of registers using the -unprefixed variant. If the user re-defines the unprefixed control sequence of -a register then \OpTeX/ macros still work without change. - -%There are only a few parameters declared by \OpTeX/ macros. All of them -%are listed in this section. This is the desired feature of the \OpTeX/. -%If you want to do more -%changes which cannot be controlled by parameters listed here then you -%can copy the appropriate \OpTeX/ macro to your macro file and you -%can completely re-define it. The typical examples are `\_printsomething` -%macros which declare the design of the document. - -\_endinput - -History: -2020-04-04 ... \tabspaces added -2020-04-03 ... \hicolors added diff --git a/macros/luatex/optex/base/pdfuni-string.opm b/macros/luatex/optex/base/pdfuni-string.opm deleted file mode 100644 index 25781ddfb4..0000000000 --- a/macros/luatex/optex/base/pdfuni-string.opm +++ /dev/null @@ -1,127 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \pdfunidef {PDFunicode strings for outlines <2021-02-08>} % preloaded in format - - \_doc ----------------------------- - \`\_hexprint` is a command defined in Lua, that scans a number and expands - to its UTF-16 Big Endian encoded form for use in PDF hexadecimal strings. - \_cod ----------------------------- - -\bgroup -\_catcode`\%=12 -\_gdef\_hexprint{\_directlua{ - local num = token.scan_int() - if num < 0x10000 then - tex.print(string.format("%04X", num)) - else - num = num - 0x10000 - local high = bit32.rshift(num, 10) + 0xD800 - local low = bit32.band(num, 0x3FF) + 0xDC00 - tex.print(string.format("%04X%04X", high, low)) - end -}} -\egroup - - \_doc ----------------------------- - \`\pdfunidef``\macro{<text>}` does more things than only converting to hexadecimal PDF string. - The <text> can be scanned in verbatim mode (it is true becuase \^`\_Xtoc` - reads the <text> in verbatim mode). First `\edef` do - `\_scantextokens\unexpanded` and second `\edef` expands the parameter - according to current values on selected macros from `\_regoul`. Then - \`\_removeoutmath` converts `..$x^2$..` to `..x^2..`, i.e removes dollars. - Then \`\_removeoutbraces` converts `..{x}..` to `..x..`. - Finally, the <text> is detokenized, spaces are preprocessed using \^`\replstring` - and then the \`\_pdfunidefB` is repeated on each character. It calls the - `\directlua` chunk to print hexadecimal numbers in the macro \^`\_hexprint`.\nl - Characters for quotes (and separators for quotes) are activated by first - `\_scatextokens` and they are defined as the same non-active characters. - But `\_regoul` can change this definition. - \_cod ----------------------------- - -\_def\_pdfunidef#1#2{% - \_begingroup - \_catcodetable\_optexcatcodes \_adef"{"}\_adef'{'}% - \_the\_regoul \_relax % \_regmacro alternatives of logos etc. - \_ifx\_savedttchar\_undefined \_def#1{\_scantextokens{\_unexpanded{#2}}}% - \_else \_lccode`\;=\_savedttchar \_lowercase{\_prepinverb#1;}{#2}\fi - \_edef#1{#1}% - \_escapechar=-1 - \_edef#1{#1\_empty}% - \_escapechar=`\\ - \_ea\_edef \_ea#1\_ea{\_ea\_removeoutmath #1$\_end$}% $x$ -> x - \_ea\_edef \_ea#1\_ea{\_ea\_removeoutbraces #1{\_end}}% {x} -> x - \_edef#1{\_detokenize\_ea{#1}}% - \_replstring#1{ }{{ }}% text text -> text{ }text - \_catcode`\\=12 \_let\\=\_bslash - \_edef\_out{<FEFF} - \_ea\_pdfunidefB#1^% text -> \_out in octal - \_ea - \_endgroup - \_ea\_def\_ea#1\_ea{\_out>} -} -\_def\_pdfunidefB#1{% - \_ifx^#1\_else - \_edef\_out{\_out \_hexprint `#1} - \_ea\_pdfunidefB \_fi -} - -\_def\_removeoutbraces #1#{#1\_removeoutbracesA} -\_def\_removeoutbracesA #1{\_ifx\_end#1\_else #1\_ea\_removeoutbraces\_fi} -\_def\_removeoutmath #1$#2${#1\_ifx\_end#2\_else #2\_ea\_removeoutmath\_fi} - - \_doc ----------------------------- - The \`\_prepinverb``<macro><separator>{<text>}`, - e.g.\ `\_prepinverb\tmpb|{aaa |bbb| cccc |dd| ee}` - does `\def\tmpb{<su>{aaa }bbb<su>{ cccc }dd<su>{ ee}}` where - <su> is `\scantextokens\unexpanded`. It means that in-line verbatim - are not argument of `\scantextoken`. First `\edef\tmpb` tokenizes again - the <text> but not the parts which were in the the in-line verbatim. - \_cod ----------------------------- - -\_def\_prepinverb#1#2#3{\_def#1{}% - \_def\_dotmpb ##1#2##2{\_addto#1{\_scantextokens{\_unexpanded{##1}}}% - \_ifx\_end##2\_else\_ea\_dotmpbA\_ea##2\_fi}% - \_def\_dotmpbA ##1#2{\_addto#1{##1}\_dotmpb}% - \_dotmpb#3#2\_end -} - - \_doc ----------------------------- - The \^`\regmacro` is used in order to sed the values of macros - `\em`, `\rm`, `\bf`, `\it`, `\bi`, `\tt`, `\/` and `~` to values usable in - PDF outlines. - \_cod ----------------------------- - -\_regmacro {}{}{\_let\em=\_empty \_let\rm=\_empty \_let\bf=\_empty - \_let\it=\_empty \_let\bi=\_empty \_let\tt=\_empty \_let\/=\_empty - \_let~=\_space -} -\public \pdfunidef ; - -\_endcode % -------------------------------- - -There are only two encodings for PDF strings (used in PDFoutlines, PDFinfo, -etc.). The first one is PDFDocEncoding which is single-byte encoding, but it -misses most international characters. - -The second encoding is Big Endian UTF-16 which is implemented in this file. It -encodes a single character in either two or four bytes. -This encoding is \TeX/-discomfortable because it looks like - -\begtt -<FEFF 0043 0076 0069 010D 0065 006E 00ED 0020 006A 0065 0020 007A 00E1 0074 -011B 017E 0020 0061 0020 0078 2208 D835DD44> -\endtt - -This example shows a hexadecimal PDF string (enclosed in \code{<>} as opposed -to the literal PDF string enclosed in `()`). In these strings each byte is -represented by two hexadecimal characters (`0-9`, `A-F`). You can tell the -encoding is UTF-16BE, becuase it starts with \"Byte order mark" `FEFF`. Each -unicode character is then encoded in one or two byte pairs. The example string -corresponds to the text \"Cvičení je zátěž a ${\rm x} ∈ 𝕄$". Notice the 4 bytes -for the last character, $𝕄$. (Even the whitespace would be OK in a PDF file, -because it should be ignored by PDF viewers, but \LuaTeX\ doesn't allow it.) - -\_endinput - -2021-02-08 \_octalprint -> \_hexprint -2020-03-12 Released diff --git a/macros/luatex/optex/base/plain-macros.opm b/macros/luatex/optex/base/plain-macros.opm deleted file mode 100644 index b4569ee969..0000000000 --- a/macros/luatex/optex/base/plain-macros.opm +++ /dev/null @@ -1,346 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \magstep {Macros from plain TeX <2020-02-14>} % preloaded in format - - \_doc ----------------------------- - The \`\dospecials` works like in plain TeX but does nothing with `_`. - If you need to do the same with this character, you can re-define: - \begtt - \addto \dospecials{\do\_} - \endtt - \_cod ----------------------------- - -\_def\_dospecials {\do\ \do\\\do\{\do\}\do\$\do\&% - \do\#\do\^\do\^^K\do\^^A\do\%\do\~} -\_chardef\_active = 13 - -\_public \dospecials \active ; - - \_doc ----------------------------- - The shortcuts `\chardef\@one` is not defined in \OpTeX/. Use normal - numbers instead of such obscurities. - \nl - The \`\magstep` and \`\magstephalf` are - defined with `\space`, (no `\relax`), in order to be expandable. - \_cod ----------------------------- - -\_def \_magstephalf{1095 } -\_def \_magstep#1{\_ifcase#1 1000\_or 1200\_or 1440\_or 1728\_or 2074\_or 2488\_fi\_space} -\_public \magstephalf \magstep ; - - \_doc ----------------------------- - Plain \TeX/ basic macros and control sequences. - \`\endgraf`, \`\endline`. - The `^^L` is not defined in \OpTeX/ because it is obsolete. - \_cod ----------------------------- - -\_def\^^M{\ } % control <return> = control <space> -\_def\^^I{\ } % same for <tab> - -\_def\lq{`} \def\rq{'} -\_def\lbrack{[} \_def\rbrack{]} % They are only public versions. -% \catcode`\^^L=\active \outer\def^^L{\par} % ascii form-feed is "\outer\par" % obsolete - -\_let\_endgraf=\_par \_let\_endline=\_cr -\_public \endgraf \endline ; - - \_doc ----------------------------- - Plain \TeX/ classical \`\obeylines` and \`\obeyspaces`. - \_cod ----------------------------- - -% In \obeylines, we say `\let^^M=\par' instead of `\def^^M{\par}' -% since this allows, for example, `\let\par=\cr \obeylines \halign{...' -{\_catcode`\^^M=13 % these lines must end with % - \_gdef\_obeylines{\_catcode`\^^M=13\_let^^M\_par}% - \_global\_let^^M=\par} % this is in case ^^M appears in a \write -\_def\_obeyspaces{\_catcode`\ =13 } -{\_obeyspaces\_global\_let =\_space} -\_public \obeylines \obeyspaces ; - - \_doc ----------------------------- - Spaces. - \`\thinspace`, \`\negthinspace`, \`\enspace`, \`\enskip`, - \`\quad`, \`\qquad`, \`\smallskip`, - \`\medskip`, \`\bigskip`, \`\nointerlineskip`, \`\offinterlineskip`, - \`\topglue`, \`\vglue`, \`\hglue`, \`\slash`. - \_cod ----------------------------- - -\_protected\_def\_thinspace {\_kern .16667em } -\_protected\_def\_negthinspace {\_kern-.16667em } -\_protected\_def\_enspace {\_kern.5em } -\_protected\_def\_enskip {\_hskip.5em\_relax} -\_protected\_def\_quad {\_hskip1em\_relax} -\_protected\_def\_qquad {\_hskip2em\_relax} -\_protected\_def\_smallskip {\_vskip\_smallskipamount} -\_protected\_def\_medskip {\_vskip\_medskipamount} -\_protected\_def\_bigskip {\_vskip\_bigskipamount} -\_def\_nointerlineskip {\_prevdepth=-1000pt } -\_def\_offinterlineskip {\_baselineskip=-1000pt \_lineskip=0pt \_lineskiplimit=\_maxdimen} - -\_public \thinspace \negthinspace \enspace \enskip \quad \qquad \smallskip - \medskip \bigskip \nointerlineskip \offinterlineskip ; - -\_def\_topglue {\_nointerlineskip\_vglue-\_topskip\_vglue} % for top of page -\_def\_vglue {\_afterassignment\_vglA \_skip0=} -\_def\_vglA {\_par \_dimen0=\_prevdepth \_hrule height0pt - \_nobreak\_vskip\_skip0 \_prevdepth=\_dimen0 } -\_def\_hglue {\_afterassignment\_hglA \_skip0=} -\_def\_hglA {\_leavevmode \_count255=\_spacefactor \_vrule width0pt - \_nobreak\_hskip\_skip0 \_spacefactor=\_count255 } -\_protected\_def~{\_penalty10000 \ } % tie -\_protected\_def\_slash {/\_penalty\_exhyphenpenalty} % a `/' that acts like a `-' - -\_public \topglue \vglue \hglue \slash ; - - \_doc ----------------------------- - Penalties macros: - \`\break`, \`\nobreak`, \`\allowbreak`, \`\filbreak`, \`\goodbreak`, - \`\eject`, \`\supereject`, \`\dosupereject`, - \`\removelastskip`, \`\smallbreak`, \`\medbreak`, \`\bigbreak`. - \_cod ----------------------------- - -\_protected\_def \_break {\_penalty-10000 } -\_protected\_def \_nobreak {\_penalty10000 } -\_protected\_def \_allowbreak {\_penalty0 } -\_protected\_def \_filbreak {\_par\_vfil\_penalty-200\_vfilneg} -\_protected\_def \_goodbreak {\_par\_penalty-500 } -\_protected\_def \_eject {\_par\_break} -\_protected\_def \_supereject {\_par\_penalty-20000 } -\_protected\_def \_dosupereject {\_ifnum \_insertpenalties>0 % something is being held over - \_line{}\_kern-\_topskip \_nobreak \_vfill \_supereject \_fi} -\_def \_removelastskip {\_ifdim\_lastskip=\_zo \_else \_vskip-\_lastskip \_fi} -\_def \_smallbreak {\_par\_ifdim\_lastskip<\_smallskipamount - \_removelastskip \_penalty-50 \_smallskip \_fi} -\_def \_medbreak {\_par\_ifdim\_lastskip<\_medskipamount - \_removelastskip \_penalty-100 \_medskip \_fi} -\_def \_bigbreak {\_par\_ifdim\_lastskip<\_bigskipamount - \_removelastskip \_penalty-200 \_bigskip \_fi} - -\_public \break \nobreak \allowbreak \filbreak \goodbreak \eject \supereject \dosupereject - \removelastskip \smallbreak \medbreak \bigbreak ; - - \_doc ----------------------------- - Boxes. - \`\line`, \`\leftline`, \`\rightline`, \`\centerline`, \`\rlap`, \`\llap`, - \`\underbar`. - \_cod ----------------------------- - -\_def \_line {\_hbox to\_hsize} -\_def \_leftline #1{\_line{#1\_hss}} -\_def \_rightline #1{\_line{\_hss#1}} -\_def \_centerline #1{\_line{\_hss#1\_hss}} -\_def \_rlap #1{\_hbox to\_zo{#1\_hss}} -\_def \_llap #1{\_hbox to\_zo{\_hss#1}} -\_def\_underbar #1{$\_setbox0=\_hbox{#1}\_dp0=\_zo \_math \_underline{\_box0}$} - -\_public \line \leftline \rightline \centerline \rlap \llap \underbar ; - - \_doc ----------------------------- - The \`\strutbox` is declared as 10pt size dependent (like in plain \TeX), but - the macro `\_setbaselineskip` (from `fonts-opmac.opm`) redefines it. - \_cod ----------------------------- - -\_newbox\_strutbox -\_setbox\_strutbox=\_hbox{\_vrule height8.5pt depth3.5pt width0pt} -\_def \_strut {\_relax\_ifmmode\_copy\_strutbox\_else\_unhcopy\_strutbox\_fi} - -\_public \strutbox \strut ; - - \_doc ----------------------------- - Alignment. \`\hidewidth` \`\ialign` \`\multispan`. - \_cod ----------------------------- - -\_def \_hidewidth {\_hskip\_hideskip} % for alignment entries that can stick out -\_def \_ialign{\_everycr={}\_tabskip=\_zoskip \_halign} % initialized \halign -\_newcount\_mscount -\_def \_multispan #1{\_omit \_mscount=#1\_relax - \_loop \_ifnum\_mscount>1 \_spanA \_repeat} -\_def \_spanA {\_span\_omit \_advance\_mscount by-1 } - -\_public \hidewidth \ialign \multispan ; - - \_doc ----------------------------- - Tabbing macros are omitted because they are obsolete. - \nl - Indentation and others. \`\textindent`, \`\item`, \`\itemitem`, - \`\narrower`, \`\raggedright`, \`\ttraggedright`, \`\leavevmode`. - \_cod ----------------------------- - -\_def \_hang {\_hangindent\_parindent} -\_def \_textindent #1{\_indent\_llap{#1\_enspace}\_ignorespaces} -\_def \_item {\_par\_hang\_textindent} -\_def \_itemitem {\_par\_indent \_hangindent2\_parindent \_textindent} -\_def \_narrower {\_advance\_leftskip\_parindent - \_advance\_rightskip\_parindent} -\_def \_raggedright {\_rightskip=0pt plus2em - \_spaceskip=.3333em \_xspaceskip=.5em\_relax} -\_def \_ttraggedright {\_tt \_rightskip=0pt plus2em\_relax} % for use with \tt only -\_def \_leavevmode {\_unhbox\_voidbox} % begins a paragraph, if necessary - -\_public \hang \textindent \item \itemitem \narrower \raggedright \ttraggedright \leavevmode ; - - \_doc ----------------------------- - Few character codes are set for backward compatibility. But old obscurities - (from plain TeX) based on \`\mathhexbox` - are not supported -- an error message and recommendation - to directly using the desired character is implemented by the - \`\_usedirectly` macro). - The user can re-define these control sequences of course. - \_cod ----------------------------- - -%\chardef\%=`\% -\_let\% = \_pcent % more natural, can be used in lua codes. -\_chardef\&=`\& -\_chardef\#=`\# -\_chardef\$=`\$ -\_chardef\ss="FF -\_chardef\ae="E6 -\_chardef\oe="F7 -\_chardef\o="F8 -\_chardef\AE="C6 -\_chardef\OE="D7 -\_chardef\O="D8 -\_chardef\i="11 \chardef\j="12 % dotless letters -\_chardef\aa="E5 -\_chardef\AA="C5 -\_chardef\S="9F -\_def\l{\_errmessage{\_usedirectly ł}} -\_def\L{\_errmessage{\_usedirectly Ł}} -%\def\_{\_ifmmode \kern.06em \vbox{\hrule width.3em}\else _\fi} % obsolete -\_def\_{\_hbox{_}} -\_def\dag{\_errmessage{\_usedirectly †}} -\_def\ddag{\_errmessage{\_usedirectly ‡}} -%\_def\copyright{\_errmessage{\_usedirectly ©}} -\_def\copyright{©} % << example, what to do -%\_def\Orb{\_mathhexbox20D} % obsolete (part of Copyright) -%\_def\P{\_mathhexbox27B} % obsolete - -\_def \_usedirectly #1{Load Unicoded font by \string\fontfam\space and use directly #1} -\_def \_mathhexbox #1#2#3{\_leavevmode \_hbox{$\_math \_mathchar"#1#2#3$}} -\_public \mathhexbox ; - - \_doc ----------------------------- - Accents. - The macros \`\ooalign`, \`\d`, \`\b`, \`\c`, \`\dots`, - are defined for backward compatibility. - \_cod ----------------------------- - -\_def \_oalign #1{\_leavevmode\_vtop{\_baselineskip=\_zo \_lineskip=.25ex - \_ialign{##\_crcr#1\_crcr}}} -\_def \_oalignA {\_lineskiplimit=\_zo \_oalign} -\_def \_ooalign {\_lineskiplimit=-\_maxdimen \_oalign} % chars over each other -\_def \_shiftx #1{\_dimen0=#1\_kern\_ea\_ignorept \_the\_fontdimen1\_font - \_dimen0 } % kern by #1 times the current slant -\_def \_d #1{{\_oalignA{\_relax#1\_crcr\_hidewidth\_shiftx{-1ex}.\_hidewidth}}} -\_def \_b #1{{\_oalignA{\_relax#1\_crcr\_hidewidth\_shiftx{-3ex}% - \_vbox to.2ex{\_hbox{\_char\_macron}\_vss}\_hidewidth}}} -\_def \_c #1{{\_setbox0=\_hbox{#1}\_ifdim\_ht0=1ex\_accent\_cedilla #1% - \_else\_ooalign{\_unhbox0\_crcr\_hidewidth\_cedilla\_hidewidth}\_fi}} -\_def\_dots{\_relax\_ifmmode\_ldots\_else$\_math\_ldots\_thinsk$\_fi} -\_public \oalign \ooalign \d \b \c \dots ; - - \_doc ----------------------------- - The accent commands like `\v`, `\.`, `\H`, etc. are not defined. Use the - accented characters directly -- it is the best solution. But you can use the - macro \`\oldaccents` which defines accented macros. - \nl - Much more usable is to define these control sequences for other purposes. - \_cod ----------------------------- - -\_def \_oldaccents {% - \_def\`##1{{\_accent\_tgrave ##1}}% - \_def\'##1{{\_accent\_tacute ##1}}% - \_def\v##1{{\_accent\_caron ##1}}% - \_def\u##1{{\_accent\_tbreve ##1}}% - \_def\=##1{{\_accent\_macron ##1}}% - \_def\^##1{{\_accent\_circumflex ##1}}% - \_def\.##1{{\_accent\_dotaccent ##1}}% - \_def\H##1{{\_accent\_hungarumlaut ##1}}% - \_def\~##1{{\_accent\_ttilde ##1}}% - \_def\"##1{{\_accent\_dieresis ##1}}% - \_def\r##1{{\_accent\_ring ##1}}% -} -\_public \oldaccents ; - -% ec-lmr encoding (will be changed after \fontfam macro): -\_chardef\_tgrave=0 -\_chardef\_tacute=1 -\_chardef\_circumflex=2 -\_chardef\_ttilde=3 -\_chardef\_dieresis=4 -\_chardef\_hungarumlaut=5 -\_chardef\_ring=6 -\_chardef\_caron=7 -\_chardef\_tbreve=8 -\_chardef\_macron=9 -\_chardef\_dotaccent=10 -\_chardef\_cedilla=11 - -\_def \_uniaccents {% accents with Unicode - \_chardef\_tgrave="0060 - \_chardef\_tacute="00B4 - \_chardef\_circumflex="005E - \_chardef\_ttilde="02DC - \_chardef\_dieresis="00A8 - \_chardef\_hungarumlaut="02DD - \_chardef\_ring="02DA - \_chardef\_caron="02C7 - \_chardef\_tbreve="02D8 - \_chardef\_macron="00AF - \_chardef\_dotaccent="02D9 - \_chardef\_cedilla="00B8 - \_chardef\_ogonek="02DB - \_let \_uniaccents=\_relax -} - - \_doc ----------------------------- - The plain \TeX/ macros - \`\hrulefill`, \`\dotfill`, \`\rightarrowfill`, \`\leftarrowfill`, - \`\downbracefill`, \`\upbracefill`. - The last four are used in non-Unicode variants of `\overrightarrow`, - `\overleftarrow`, `\overbrace` and `\underbrace` macros, see - section~\ref[math-macros]. - \_cod ----------------------------- - -\_def \_hrulefill {\_leaders\_hrule\_hfill} -\_def \_dotfill {\_cleaders\_hbox{$\_math \_mkern1.5mu.\_mkern1.5mu$}\_hfill} -\_def \_rightarrowfill {$\_math\_smash-\_mkern-7mu% - \_cleaders\_hbox{$\_mkern-2mu\_smash-\_mkern-2mu$}\_hfill - \_mkern-7mu\_mathord\_rightarrow$} -\_def \_leftarrowfill {$\_math\_mathord\_leftarrow\_mkern-7mu% - \_cleaders\_hbox{$\_mkern-2mu\_smash-\_mkern-2mu$}\_hfill - \_mkern-7mu\_smash-$} - -\_mathchardef \_braceld="37A \_mathchardef \_bracerd="37B -\_mathchardef \_bracelu="37C \_mathchardef \_braceru="37D -\_def \_downbracefill {$\_math \_setbox0=\_hbox{$\_braceld$}% - \_braceld \_leaders\_vrule height\_ht0 depth\_zo \_hfill \_braceru - \_bracelu \_leaders\_vrule height\_ht0 depth\_zo \_hfill \_bracerd$} -\_def \_upbracefill {$\_math \_setbox0=\_hbox{$\_braceld$}% - \_bracelu \_leaders\_vrule height\_ht0 depth\_zo \_hfill \_bracerd - \_braceld \_leaders\_vrule height\_ht0 depth\_zo \_hfill \_braceru$} - -\_public \hrulefill \dotfill - \rightarrowfill \leftarrowfill \downbracefill \upbracefill ; - - \_doc ----------------------------- - The last part of plain \TeX/ macros: \`\magnification`, \`\bye`. - Note that math macros are defined in the `math-macros.opm` file - (section~\ref[math-macros]). - \_cod ----------------------------- - -\_def \_magnification {\_afterassignment \_magA \_count255 } -\_def \_magA {\_mag=\_count255 \_truedimen\_hsize \_truedimen\_vsize - \_dimen\_footins=8truein -} -% only for backward compatibility, but \margins macro is preferred. -\_public \magnification ; - -\_def \_showhyphens #1{\_setbox0=\_vbox{\_parfillskip=0pt \_hsize=\_maxdimen \_tenrm - \_pretolerance=-1 \tolerance=-1 \hbadness=0 \showboxdepth=0 \ #1}} - -\_def \_bye {\_par \_vfill \_supereject \_byehook \_end} -\_public \bye ; - -\_endcode % ------------------------------------- - diff --git a/macros/luatex/optex/base/prefixed.opm b/macros/luatex/optex/base/prefixed.opm deleted file mode 100644 index 61df791ddb..0000000000 --- a/macros/luatex/optex/base/prefixed.opm +++ /dev/null @@ -1,298 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \public {Prefixing and code syntax <2020-02-14>} % preloaded in format - - \_doc --------- - All \TeX/ primitives have alternative control sequence `\_hbox` `\_string`, ... - \_cod --------- - -\let\_directlua = \directlua -\_directlua { - % enable all TeX primitives with _ prefix - tex.enableprimitives('_', tex.extraprimitives('tex')) - % enable all primitives without prefixing - tex.enableprimitives('', tex.extraprimitives()) - % enable all primitives with _ prefix - tex.enableprimitives('_', tex.extraprimitives()) -} - - \_doc ------------------ - \`\ea` is useful shortcut for `\expandafter`. We recommend to use always the - private form of \`\_ea` - because there is high probability that `\ea` will be redefined by the user. - \nl - \`\public` `<sequence> <sequence> ... ;` does - `\let \<sequence> = \_<sequence>` for all sequences. - \nl - \`\private` `<sequence> <sequence> ...;` does - `\let \_<sequence> = \<sequence>` for all sequences. - \nl - \`\xargs` `<what> <sequence> <sequence> ... ;` - does `<what><sequence>` for each sequences. - \_cod ----------------- - -\_let\_ea =\_expandafter % usefull shortcut - -\_long\_def \_xargs #1#2{\_ifx #2;\_else \_ea#1\_ea#2\_ea\_xargs \_ea #1\_fi} - -\_def \_pkglabel{} -\_def \_public {\_xargs \_publicA} -\_def \_publicA #1{\_ea\_let \_ea#1\_csname _\_csstring #1\_endcsname} - -\_def \_private {\_xargs \_privateA} -\_def \_privateA #1{\_ea\_let \_csname _\_csstring #1\_endcsname =#1} - -\_public \public \private \xargs \ea ; - - \_doc ----------------------- - Each macro file should begin with \`\_codedecl` `\macro {<info>}`. - If the `\macro` is defined already then the `\endpinput` protects to read - such file more than once. Else the <info> is printed to the terminal - and the file is read.\nl - The {\`\_endcode`} is defined as `\endinput` in the `optex.ini` file. - \`\wterm` `{<text>}` prints `<text>` - to the terminal and to the `.log` file (as in plain \TeX/). - \_cod ----------------------- - -\_def \_codedecl #1#2{% - \_ifx #1\_undefined \_wterm{#2}% - \_else \_ea \_endinput \_fi -} -\_def \_wterm {\_immediate \_write16 } - -\_public \wterm ; - - \_doc ------------------------ - The `\optexversion` and `\fmtname` are defined in the `optex.ini` file. - Maybe, somebody will need a private version of these macros. - \_cod ------------------------ - -\_private \optexversion \fmtname ; - - \_doc ----------------------------- - The `\_mathsbon` and `\_mathsboff` are defined in `math-macros.opm` file. - Now, we define the macros - \`\_namespace` `{<pkg label>}`, \`\_resetnamespace` `{<pkg label>}`, \`\_endnamespace`, - \`\_nspublic` and \`\_nsprivate` - for package writers, see section~\ref[pkg-namespace].{\hbadness=2200\par} - \_cod ----------------------------- - -\_def \_pkglabel{} -\_def\_namespace #1{% - \_ifcsname namesp:#1\_endcsname \_errmessage - {The name space "#1" is used already, it cannot be used twice}% - \_endinput - \_else \_resetnamespace{#1}\_fi -} -\_def\_resetnamespace #1{% - \_ea \_gdef \_csname namesp:#1\_endcsname {}% - \_gdef \_pkglabel{_#1}% - \_directlua{ - callback.add_to_callback("process_input_buffer", - function (str) - return string.gsub(str, "\_nbb[.]([a-zA-Z])", "\_nbb _#1_\_pcent 1") - end, "_namespace") - }% -} -\_def\_endnamespace {% - \_directlua{ callback.remove_from_callback("process_input_buffer", "_namespace") }% - \_gdef \_pkglabel{}% -} - -\_def \_nspublic {\_xargs \_nspublicA} -\_def \_nspublicA #1{% - \_unless\_ifx #1\_undefined - \_opwarning{\_ea\_ignoreit\_pkglabel\_space redefines the meaning of \_string#1}\_fi - \_ea\_let \_ea#1\_csname \_pkglabel _\_csstring #1\_endcsname} - -\_def \_nsprivate {\_xargs \_nsprivateA} -\_def \_nsprivateA #1{\_ea\_let \_csname \_pkglabel _\_csstring #1\_endcsname =#1} - - -\_endcode %---------------------------------------------------- - - -\sec[prefixed] Concept of namespaces of control sequences - -\secc Prefixing internal control sequences - -All control sequences used in \OpTeX/ are used and defined with `_` prefix. -The user can be sure that when he/she does `\def\foo` then internal macros of -\OpTeX/ nor \TeX/ primitives will be not damaged. For example -`\def\if{...}` will not damage macros because \OpTeX/'s macros -are using `\_if` instead of `\if`. - -All \TeX/ primitives are initialized with two representative control -sequences: `\word` and `\_word`, for example `\hbox` and `\_hbox`. -The first alternative is reserved for users or such control sequences -can be re-defined by a user. - -\OpTeX/ sets the character `_` as the letter, so it can be used in -control sequences. When a control sequence begins with this character -then it means that it is a primitive or it is used in \OpTeX/ macros as -internal. User can redefine such prefixed control sequence only -if he/she explicitly know what happens. - -We never change catcode of `_`, so internal macros can be -redefined by user without problems if it is desired. We need not -something like `\makealetter` from \LaTeX/. - -\OpTeX/ defines all new macros as prefixed. For public usage of such macros, -we need to set non-prefixed version. This is done by - -\begtt \catcode`\<=13 -\public <list of control sequences> ; -\endtt - -For example \^`\public`` \foo \bar ;` does `\let\foo=\_foo`, `\let\bar=\_bar`. - -At the end of each code segment in \OpTeX/, the `\_public` macro is used. You -can see, what macros are defined for public usage in this code segment. - -The macro \^`\private` does a reverse job to `\public` with the same syntax. -For example `\private \foo \bar ;` does `\let\_foo=\foo`, `\let\_bar=\bar`. -This should be used when an unprefixed variant of a control sequence is declared -already but we need the prefixed variant too. - -In this documentation: if both variants of a control sequence are declared -(prefixed and unprefixed), then the accompanying text mentions only -the unprefixed variant. The code typically defines the prefixed variant -and then the \^`\public` (or `\_public`) macro is used. - -\secc Namespace of control sequences for users - -Users can define or declare any control sequence with a name without any `_`. -This does not make any problem. Only one exception is the reserved control -sequence `\par`. It is generated by tokenizer (at empty lines) -and used as internal in \TeX/. - -User can define or declare control sequences with `_` character, for -example `\my_control_sequence`, but with the following exceptions: - -\begitems -* Control sequences which begin with `_` are reserved for \TeX/ primitives, - \OpTeX/ internal macros and packages internal macros. -* Control sequences (terminated by non-letter) in the form - `\<word>_` or `\<word>_<one-letter>`, where - <word> is a sequence of letters, are inaccessible, because they - are interpreted as `\<word>` followed by `_` or as `\<word>` followed by - `_<one-letter>`. This is important for writing math, for example: -\begtt \adef-{_} - \int-a^b ... is interpreted as \int _a^b - \max-M ... is interpreted as \max _M - \alpha-{ij} ... is interpreted as \alpha _{ij} -\endtt - This feature is implemented using lua code at input processor level, see - the section~\ref[math-macros] for more details. You can deactivate this feature by - \^`\mathsboff`. After this, you can still write - `$`$\int$`_a^b$` (Unicode) or `$\int _a^b$` % $∫_a^b$ (Unicode) or $\int _a^b$ - without problems but `\int``_a^b` yields to undefined control sequence - `\int``_a`. You can activate this feature again by \^`\mathsbon`. The - effect will take shape from next line read from input file. -* Control sequences in the form `\_<pkg>_<word>` is intended for package - writers as internal macros for a package with `<pkg>` identifier, - see section~\ref[pkg-namespace]. -\enditems - -The single-letter control sequences like `\%`, `\$`, `\^` etc. are not used -in internal macros. Users can redefine them, but (of course) some classical -features can be lost (printing percent character by `\%` for example). - -\secc Macro files syntax - -Each segment of \OpTeX/ macros is stored in one file with `.opm` extension -(means OPtex Macros). Your local macros should be in a normal `*.tex` file. - -The code in macro files starts by \^`\_codedecl` and ends by \^`\_endcode`. -The \^`\_endcode` is equivalent for `\endinput`, so documentation can follow. -The \^`\_codedecl` has syntax: - -\begtt -\_codedecl \sequence {Name <version>} -\endtt - -If the mentioned `\sequence` is defined, then \^`\_codedecl` does the same as -`\endinput`: this protects from reading the file twice. We suppose, that -`\sequence` is defined in the macro file. - -It is possible to use the \^`\_doc` ... \^`\_cod` pair between the macro lines. -The documentation text should be here. It is ignored when macros are read -but it can be printed using `doc.opm` macros like in this documentation. - - -\secc[pkg-namespace] Name spaces for package writers - -Package writer should use internal names in the form `\_<pgk>_<sequence>`, -where `<pkg>` is a package label. For example: -`\_qr_utfstring` from `qrcode.opm` package. - -The package writer needs not to write repeatedly `\_pkg_foo` `\_pkg_bar` -etc.\ again and again in the macro file.\fnote -{We have not adopted the idea from expl3 language:)} -When the \^`\_namespace` `{<pkg>}` -is declared at the beginning of the macro file then all occurrences of -`\.foo` will be replaced by `\_<pkg>_foo` at the input processor level. -The macro writer can write (and backward can read his/her code) simply with -`\.foo`, `\.bar` control sequences and `\_<pkg>_foo`, `\_<pkg>_bar` -control sequences are processed internally. -The scope of the \^`\_namespace` command ends at the \^`\_endnamespace` command -or when another \^`\_namespace` is used. This command checks -if the same package label is not declared by the \^`\_namespace` twice. - -The \^`\_nspublic` macro does `\let\foo = \_<pkg>_foo` when -\^`\_namespace{<pkg>}` is declared. Moreover, it prints a warning if `\foo` is -defined already. The \^`\_nsprivate` macro does reverse -operation to it without warnings. Example: you can define `\def\.macro{...}` and then -set it to the user name space by `\_nspublic \macro;`. - -Don't load other packages (which are using their own namespace) inside your -namespace. Do load them before your \^`\_namespace`~`{<pkg>}` is -initialized. Or close your namespace by \^`\_endnamespace` and open it again -(after other packages are loaded) by \^`\_resetnamespace`~`{<pkg>}`. - -If the package writer needs to declare a control -sequence by \^`\newif`, then there is an exception of the rule described above. Use -\^`\_newifi\_if<pkg>_bar`, for example `\_newifi\_ifqr_incorner`. -Then the control sequences `\_qr_incornertrue` and -`\_qr_incornerfalse` can be used (or the sequences `\.incornertrue` -and `\.incornerfalse` when `\_namespace{qr}` is used). - - -\secc Summary about rules for external macro files published for \OpTeX/ - -If you are writing a macro file that is intended to be published for -\OpTeX/, then you are greatly welcome. You should follow these rules: - -\begitems -* Don't use control sequences from the user namespace in the macro - bodies if there is not explicit and documented reason to do this. -* Don't declare control sequences in the user namespace if there are not - explicit and documented reasons to do this. -* Use control sequences from \OpTeX/ and primitive namespace - in read-only mode, if there is not an explicit and documented reason to - redefine them. -* Use `\_<pkg>_<name>` for your internal macros or `\.<name>` if the - \^`\_namespace{<pkg>}` is declared. See section~\ref[pkg-namespace]. -* Use \^`\load` (or better: `\_load`) for loading more external macros - if you need them. Don't use `\_input` explicitly in such cases. - The reason is: the external macro file is not loaded - twice if another macro or the user needs it explicitly too. -* Use \^`\_codedecl` as your first command in the macro file and - \^`\_endcode` to close the text of macros. -* Use \^`\_doc` ... \^`\_cod` pairs for documenting the code pieces and/or write - more documentation after the \^`\_endcode` command. -\enditems - -If the macro file accepts these recommendations then it should be -named by `<filename>.opm` where `<filename>` differs from file names -used directly in \OpTeX/ and from other published macros. -This extension `opm` has precedence before `.tex` when -the \^`\load` macro is used. - -The `qrcode.opm` is the first example of how an external macro file for \OpTeX/ -can look like. - -\endinput - -2021-02-15 \_expandafter -> \_ea in \_codedecl -2020-02-14 released diff --git a/macros/luatex/optex/base/print-unimath.opm b/macros/luatex/optex/base/print-unimath.opm deleted file mode 100644 index 2b1a07f30a..0000000000 --- a/macros/luatex/optex/base/print-unimath.opm +++ /dev/null @@ -1,56 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \_undefined {Printing Unicode-math table \string<2020-06-08>} - -\_begingroup - \_def\UnicodeMathSymbol#1#2#3#4{% - \_ifnum#1>"10000 \_endinput \_else \_printmathsymbol{#1}{#2}{#3}{#4}\_fi - } - \_def\UnicodeMathSymbolA#1#2#3#4{% - \_ifnum#1>"10000 \_printmathsymbol{#1}{#2}{#3}{#4}\_fi - } - \_def\_printmathsymbol#1#2#3#4{% - \_hbox{\_hbox to2em{$#2{}$\_hss}\_hbox to3em - {\small\_printop#3\_hss}{\_tt\_string#2\_trycs{_eq:\_string#2}{}}} - } - \_def\_eq#1#2{\_sdef{_eq:\_string#2}{=\_string#1}} - \_eq \diamond\smwhtdiamond \_eq \bullet\smblkcircle \_eq \circ\vysmwhtcircle - \_eq \bigcirc\mdlgwhtcircle \_eq \to\rightarrow \_eq \le\leq - \_eq \ge\geq \_eq \neq\ne \_eq \emptyset\varnothing \_eq \hbar\hslash - \_eq \land\wedge \_eq \lor\vee \_eq \owns\ni \_eq \gets\leftarrow - \_eq \mathring\ocirc \_eq \lnot\neg \_eq \backepsilon\upbackepsilon - \_eq \eth\matheth \_eq \dbkarow\dbkarrow \_eq \drbkarow\drbkarrow - \_eq \hksearow\hksearrow \_eq \hkswarow\hkswarrow - - \_tracinglostchars=0 - \_fontdef\small{\_setfontsize{at5pt}\_rm} - \_def\_printop{\_def\mathop{Op}} - \_def\mathalpha{Alph}\_def\mathord{Ord}\_def\mathbin{Bin}\_def\mathrel{Rel} - \_def\mathopen{Open}\_def\mathclose{Close}\_def\mathpunct{Punct}\_def\mathfence{Fence} - \_def\mathaccent{Acc}\_def\mathaccentwide{Accw}\_def\mathbotaccentwide{AccBw} - \_def\mathbotaccent{AccB}\_def\mathaccentoverlay{AccO} - \_def\mathover{Over}\_def\mathunder{Under} - \_typosize[7.5/9]\_normalmath \_everymath={} - - Codes U+00000 \_dots\ U+10000 - \_begmulti 3 - \_input unimath-table.opm - \_endmulti - - \_medskip\_goodbreak - Codes U+10001 \_dots\ U+1EEF1 \_let\UnicodeMathSymbol=\UnicodeMathSymbolA - \_begmulti 4 - \_input unimath-table.opm - \_endmulti -\_endgroup - -\_endcode - -This file can be used for testing your Unicode-math font -and/or for printing \TeX/ sequences which can be used in math. - -Load Unicode math font first (for example by `\fontfam[termes]` or by -`\loadmath{<math-font>}`) and then you -can do `\input print-unimath.opm`. The big table with all math symbols is printed. - -\_endinput diff --git a/macros/luatex/optex/base/ref-file.opm b/macros/luatex/optex/base/ref-file.opm deleted file mode 100644 index d594bf88c0..0000000000 --- a/macros/luatex/optex/base/ref-file.opm +++ /dev/null @@ -1,141 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \openref {File for references <2021-02-05>} % preloaded in format - - \_doc -------------------------- - The \`\_inputref` macro is used in `\everyjob`. It reads `\jobname.ref` file - if it exists. After the file is read then it is removed and opened to write - a new contents to this file. - \_cod -------------------------- - -\_newwrite\_reffile - -\_def\_inputref {% - \_isfile{\_jobname.ref}\_iftrue - \_input {\_jobname.ref} - \_gfnotenum=0 \_lfnotenum=0 \_mnotenum=0 - \_openrefA{\_string\_inputref}% - \_fi -} - - \_doc -------------------------- - If the file does not exist then it is not created by default. It means that if you - process a document without any forward references then no `\jobname.ref` - file is created because it is unusable. The \^`\_wref` macro is a dummy in - this case. - \_cod -------------------------- - -\_def\_wrefrelax#1#2{} -\_let\_wref=\_wrefrelax - - \_doc --------------------- - If a macro needs to create and to use `.ref` file then such macro must use - \`\openref`. When the file is created (using internal \`\_openrefA`) then - the \`\_wref` `\<macro>{<data>}` is redefined in order to - save the line `\<macro><data>` to the `.ref` file using asynchronous - `\write` primitive. Finally, the `\_openref` destroys itself, because we - need not open the file again.\nl - The `\_wref``<csname>{<params>}` does exactly `\write\_reffile{\string<csname><params>}` - in this case and \`\_ewref``<csname>{<params>}` does - `\write\_reffile{\string<csname><expanded-params>}`. - \_cod --------------------- - -\_def\_openref {% - \_ifx \_wref\_wrefrelax \_openrefA{\_string\openref}\_fi - \_gdef\_openref{}% -} -\_def\_openrefA #1{% - \_immediate\_openout\_reffile="\_jobname.ref"\_relax - \_gdef\_wref ##1##2{\_write\_reffile{\_bslash\_csstring##1##2}}% - \_immediate\_write\_reffile {\_pcent\_pcent\_space OPTeX <\_optexversion> - REF file (#1)}% - \_immediate\_wref \Xrefversion{{\_REFversion}}% -} -\_def\_ewref #1#2{\_edef\_ewrefA{#2}\_ea\_wref\_ea#1\_ea{\_ewrefA}} -\_def\openref{\_openref} - - \_doc ---------------------- - We are using the convention that the macros used in `.ref` file are named - `\_X<foo>`. If there is a new version of \OpTeX/ with a different collection - of such macros then we don't want to read the `.ref` files produced by an - old version of \OpTeX/ or by OPmac. So the first line of `.ref` file is in - the form - \begtt \catcode`\<=13 - \Xrefversion{<version>} - \endtt - We can check the version compatibility by this macro. - Because OPmac does not understand `\_Xrefversion` we use - \`\Xrefversion` (with a different number of `<version>` form OPmac) here. - The result: OPmac skips the `.ref` files produced by \OpTeX/ and vice - versa. - \_cod ---------------------- - -\_def\_REFversion{5} % actual version of .ref files in OpTeX -\_def\_Xrefversion#1{\_ifnum #1=\_REFversion\_relax \_else \_endinput \_fi} -\_public \Xrefversion ; % we want to ignore .ref files generated by OPmac - - \_doc ----------------------- - You cannot define your special `.ref` macros before `.ref` file is read - because it is read in `\everyjob`. But you can define such macros using - \`\refdecl``{<definitions of your ref macros>}`. - This command sends to `.ref` file your `<definitions of your ref macros>` - immediately. Next lines in `.ref` file should include our macros. Example - from CTUstyle2: - \begtt - \refdecl{% - \def\totlist{} \def\toflist{}^^J - \def\Xtab#1#2#3{\addto\totlist{\totline{#1}{#2}{#3}}}^^J - \def\Xfig#1#2#3{\addto\toflist{\tofline{#1}{#2}{#3}}} - } - \endtt - We must read `<definition of your ref macros>` when the catcode of `#` is 12 - because we needn't duplicate each `#` in the `.ref` file. - \_cod \_fin ----------------- - -\_def\_refdecl{\_bgroup \_catcode`\#=12 \_refdeclA} -\_def\_refdeclA #1{\egroup\_openref - \_immediate\_write\_reffile {\_pcent\_space \_string \refdecl:}% - \_immediate\_write\_reffile {\_detokenize{#1}}% -} -\_public \refdecl ; - -\_endcode % ================================================ - - -The `.ref` file has the name `\jobname.ref` and -it saves information about references, TOC lines, etc. -All data needed in next \TeX/ run are saved here. -\OpTeX/ reads this file at the beginning of the document -(using `\everyjob`) if such file exists. -The `.ref` file looks like: - -\begtt \catcode`\<=13 -\Xrefversion{<ref-version>} -\_Xpage{<gpageno>}{<pageno>} -\_Xtoc{<level>}{<type>}{<text>}{}<title> -\_Xlabel{<label>}{<text>} -\_Xlabel{<label>}{<text>} -... -\_Xpage{<gpageno>}{<pageno>} -\_Xlabel{<label>}{<text>} -... -\endtt -% -where <gpageno> is internal page number globally numbered from one and -`<pageno>` is a page number (`\the\pageno`) used in pagination (they may differ). -Each page begins with \^`\_Xpage`. -The `<label>` is a label used by user in `\label[<label>]` and `<text>` is a -text which should be referenced (the number of section or table, for -example `2.3.14`). The `<title>` is the title of the chapter (`<level>`=1, -`<type>`=`chap`), section (`<level>`=2, `<type>`=`sec`), subsection -(`<level>`=3, `<type>`=`secc`). The \^`\_Xpage` is written at the beginning of each -page, the `\_Xtoc` is written when chapter or section or subsection title -exists on the page and `\_Xlabel` when labeled object prefixed by -`\label[<label>]` exists on the page. - -The `.ref` file is read when the processing of the document starts using -`\everyjob`. It is read, removed, and opened to writing immediately. -But the `.ref` file should be missing. If none forward references are needed -in the document then `.ref` file is not created. For example, you only want -to test a simple plain \TeX/ macro, you create `test.tex` file, you do -`optex test` and you don't need to see an empty `test.ref` file in your directory. - diff --git a/macros/luatex/optex/base/references.opm b/macros/luatex/optex/base/references.opm deleted file mode 100644 index 03c8f6955c..0000000000 --- a/macros/luatex/optex/base/references.opm +++ /dev/null @@ -1,94 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \ref {References <2020-03-03>} % preloaded in format - - \_doc ---------------------------- - \`\_Xpage` `{<gpageno>}{<pageno>}` saves the parameter pair into \`\_currpage`. - Resets `\_lfnotenum`; it is used if footnotes are numbered from one at each page. - \_cod ---------------------------- - -\_def\_Xpage#1#2{\_def\_currpage{{#1}{#2}}\_lfnotenum=0 } - - \_doc ---------------------------- - Counter for the number of unresolved references \`\_unresolvedrefs`. - \_cod ---------------------------- - -\_newcount\_unresolvedrefs -\_unresolvedrefs=0 - - \_doc ---------------------------- - \`\_Xlabel` `{<label>}{<text>}` saves the <text> to `\_lab:<label>` and saves - `[pg:<gpageno>]{<pageno>}` to `\_pgref:<label>`. - \_cod ---------------------------- - -\_def\_Xlabel#1#2{\_sdef{_lab:#1}{#2}\_sxdef{_pgref:#1}{\_ea\_bracketspg\_currpage}} -\_def\_bracketspg#1#2{[pg:#1]{#2}} - - \_doc ---------------------------- - \`\label``[<label>]` saves the decalred label to `\_lastlabel` and - \`\wlabel``{<text>}` uses the `\_lastlabel` and activates - `\_wref\_Xlabel{<label>}{<text>}`. - \_cod ---------------------------- - -\_def\_label[#1]{\_isempty{#1}\_iftrue \_global\_let \_lastlabel=\_undefined - \_else \_isdefined{l0:#1}% - \_iftrue \_opwarning{duplicated label [#1], ignored}\_else \_xdef\_lastlabel{#1}\_fi - \_fi \_ignorespaces -} -\_def\_wlabel#1{% - \_ifx\_lastlabel\_undefined \_else - \_dest[ref:\_lastlabel]% - \_printlabel\_lastlabel - \_ewref \_Xlabel {{\_lastlabel}{#1}}% - \_sxdef{_lab:\_lastlabel}{#1}\_sxdef{l0:\_lastlabel}{}% - \_global\_let\_lastlabel=\_undefined - \_fi -} -\_public \label \wlabel ; - - \_doc ---------------------------- - \`\ref``[<label>]` uses saved `\_lab:<label>` and prints (linked) `<text>`. - If the reference is backward then we know `\lab:<label>` without any need - to read REF file. On the other hand, if the reference is forwarded, then we - doesn't know `\_lab:<label>` in the first run of \TeX/ and we print a warning and - do `\_openref`. - \nl - \`\pgref``[<label>]` uses `{<gpageno>}{<pageno>}` from `\_pgref:<label>` and - prints (linked) `<pageno>` using `\_ilink` macro. - \_cod ---------------------------- - -\_def\_ref[#1]{\_isdefined{_lab:#1}% - \_iftrue \_ilink[ref:#1]{\_csname _lab:#1\_endcsname}% - \_else ??\_opwarning{label [#1] unknown. Try to TeX me again}% - \_incr\_unresolvedrefs \_openref - \_fi -} -\_def\_pgref[#1]{\_isdefined{_pgref:#1}% - \_iftrue \_ea\_ea\_ea\_ilink \_csname _pgref:#1\_endcsname - \_else ??\_opwarning{pg-label [#1] unknown. Try to TeX me again}% - \_incr\_unresolvedrefs \_openref - \_fi -} -\_public \ref \pgref ; - - \_doc ----------------------------- - Default \`\_printlabel` is empty macro (labels are not printed). - The \`\showlabels` redefines it as box with zero dimensions and - with left lapped `[<label>]` in blue 10pt `\tt` font shifted up by 1.7ex. - \_cod ----------------------------- - -\_def\_printlabel#1{} -\_def\_showlabels {% - \_def\_printlabel##1{\_vbox to\_zo{\_vss\_llap{\_labelfont[##1]}\_kern1.7ex}}% - \_fontdef\_labelfont{\_setfontsize{at10pt}\setfontcolor{blue}\_tt} -} -\_public \showlabels ; - -\_endcode %------------------------------------------ - - -If the references are \"forward" (i.~e. the `\ref` is used first, the destination -is created later) or if the reference text is page number then we must read -`.ref` file first in order to get appropriate information. -See section \ref[ref-file] for more information about `.ref` file concept. - diff --git a/macros/luatex/optex/base/sections.opm b/macros/luatex/optex/base/sections.opm deleted file mode 100644 index 39759962bf..0000000000 --- a/macros/luatex/optex/base/sections.opm +++ /dev/null @@ -1,469 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \chap {Titles, chapters, sections, subsections <2021-03-03>} % preloaded in format - - \_doc --------------------------- - We are using scaled fonts for titles - \`\_titfont`, \`\_chapfont`, \`\_secfont` and \`\_seccfont`. - They are scaled from main fonts size - of the document, which is declared by first `\typosize[<fo-size>/<b-size>]` - command. - \_cod --------------------------- - -\_def \_titfont {\_scalemain\_typoscale[\_magstep4/\_magstep5]\_boldify} -\_def \_chapfont {\_scalemain\_typoscale[\_magstep3/\_magstep3]\_boldify} -\_def \_secfont {\_scalemain\_typoscale[\_magstep2/\_magstep2]\_boldify} -\_def \_seccfont {\_scalemain\_typoscale[\_magstep1/\_magstep1]\_boldify} - - \_doc --------------------------- - The \`\tit` macro is defined using \^`\scantoeol` and \`\_printtit`. - It means that the parameter is - separated by end of line and inline verbatim is allowed. The same - principle is used in the \^`\chap`, \^`\sec`, and \^`\secc` macros. - \_cod --------------------------- - -\_def\_printtit #1{\_vglue\_titskip - {\_leftskip=0pt plus1fill \_rightskip=\_leftskip % centering - \_titfont \_noindent \_scantextokens{#1}\_par}% - \_nobreak\_bigskip -} -\_def\_tit{\_scantoeol\_printtit} - -\_public \tit ; - - \_doc --------------------------- - You can re-define \`\_printchap`, \`\_printsec` or \`\_printsecc` macros if - another design of section titles is needed. These macros get the - `<title>` text in its parameter. The common recommendations for these macros are: - \begitems - * Use \^`\_abovetitle``{<penaltyA>}{<skipA>}` and \^`\_belowtitle``{<skipB>}` - for inserting vertical material above and below the section title. - The arguments of these macros are normally used, i.\,e.\ \^`\_abovetitle` - inserts `<penaltyA><skipA>` and \^`\_belowtitle` inserts `<skipB>`. - But there is an - exception: if \^`\_belowtitle``{<skipB>}` is immediately followed by - \^`\_abovetitle``{<penaltyA>}{<skipA>}` (for example section title is - immediately followed by subsection title), then only `<skipA>` is generated, - i.\,e.\ `<skipB><penaltyA><skipA>` is reduced only to `<skipA>`. - The reason for such behavior: we don't want to duplicate vertical skip - and we don't want to use the negative penalty in such cases. - Moreover, \^`\_abovetitle``{<penaltyA>}{<skipA>}` takes previous whatever - vertical skip (other than from `\_belowtitle`) and generates only - greater from this pair of skips. It means that `<whatever-skip><penaltyA><skipA>` - is transformed to `<penaltyA>`max(`<whatever-skip><skipA>`). - The reason for such behavior: we don't want to - duplicate vertical skips (from `\_belowlistskip`, for example) above the title. - * Use \^`\_printrefnum``[<pre>@<post>]` in horizontal mode. It prints - `<pre><ref-num><post>`. The `<ref-num>` is \^`\_thechapnum` or \^`\_thesecnum` - or \^`\_theseccnum` depending on what type o title is processed. - If \^`\nonum` prefix is used then \^`\_printrefnum` prints nothing. - The macro \^`\_printrefnum` does more work: it creates destination of hyperlinks - (if \^`\hyperlinks``{}{}` is used) and saves references from the label (if - \^`\label``[<label>]` precedes) and saves references for the table of contents - (if \^`\maketoc` is used). - * Use \^`\nbpar` for closing the paragraph for printing title. This - command inserts `\_nobreak` between each line of such paragraph, so - the title cannot be broken into more pages. - * You can use \^`\_firstnoindent` in order to the first paragraph after - the title is not indented. - \enditems - \_cod --------------------------- - -\_def\_printchap #1{\_vfill\_supereject - \_vglue\_medskipamount % shifted by topkip+\medskipamount - {\_chapfont \_noindent \_mtext{chap} \_printrefnum[@]\_par - \_nobreak\_smallskip - \_noindent \_raggedright #1\_nbpar}\_mark{}% - \_nobreak \_belowtitle{\_bigskip}% - \_firstnoindent -} -\_def\_printsec#1{\_par - \_abovetitle{\_penalty-400}\_bigskip - {\_secfont \_noindent \_raggedright \_printrefnum[@\_quad]#1\_nbpar}\_insertmark{#1}% - \_nobreak \_belowtitle{\_medskip}% - \_firstnoindent -} -\_def\_printsecc#1{\_par - \_abovetitle{\_penalty-200}{\_medskip\_smallskip} - {\_seccfont \_noindent \_raggedright \_printrefnum[@\_quad]#1\_nbpar}% - \_nobreak \_belowtitle{\_medskip}% - \_firstnoindent -} - - \_doc -------------------------- - The \`\_sectionlevel` is the level of the printed section: - \begitems - * `\_sectionlevel=0` -- reserved for parts of the book (unused by default) - * `\_sectionlevel=1` -- chapters (used in `\chap`) - * `\_sectionlevel=2` -- sections (used in `\sec`) - * `\_sectionlevel=3` -- subsections (used in `\secc`) - * `\_sectionlevel=4` -- subsubsections (unused by default, see the - \ulink[http://petr.olsak.net/optex/optex-tricks.html\#seccc]{\OpTeX/ trick 0033}) - \enditems - \_cod -------------------------- - -\_newcount\_sectionlevel -\_def \_secinfo {\_ifcase \_sectionlevel - part\_or chap\_or sec\_or secc\_or seccc\_fi -} - - \_doc -------------------------- - The \`\_chapx` initializes counters used in chapters, - the \`\_secx` initializes counters in sections - and \`\_seccx` initializes counters in subsections. - If you have more types of numbered objects in your document then you can - declare appropriate counters and do `\addto\_chapx{\yourcounter=0 }` - for example. If you have another concept of numbering objects used in your - document, you can re-define these macros. All settings here are global - because it is used by `{\_globaldefs=1 \_chapx}`. - - Default concept: Tables, figures, and display maths are numbered - from one in each section -- subsections don't reset these counters. - Footnotes declared by \^`\fnotenumchapters` are numbered in each chapter - from one. - - The `\_the*` macros - \`\_thechapnum`, \`\_thesecnum`, \`\_theseccnum`, - \`\_thetnum`, \`\_thefnum` and \`\_thednum` - include the format of numbers used when the object - is printing. If chapter is never used in the document then `\_chapnum=0` - and \`\_othe``\_chapnum.` expands to empty. Sections have numbers <num> and - subsections <num>.<num>. On the other hand, if chapter is used in the - document then `\_chapnum>0` and sections have numbers` <num>.<num>` - and subsections have numbers `<num>.<num>.<num>`. - \_cod -------------------------- - -\_newcount \_chapnum % chapters -\_newcount \_secnum % sections -\_newcount \_seccnum % subsections -\_newcount \_tnum % table numbers -\_newcount \_fnum % figure numbers -\_newcount \_dnum % numbered display maths - -\_def \_chapx {\_secx \_secnum=0 \_lfnotenum=0 } -\_def \_secx {\_seccx \_seccnum=0 \_tnum=0 \_fnum=0 \_dnum=0 \_resetABCDE } -\_def \_seccx {} - -\_def \_thechapnum {\_the\_chapnum} -\_def \_thesecnum {\_othe\_chapnum.\_the\_secnum} -\_def \_theseccnum {\_othe\_chapnum.\_the\_secnum.\_the\_seccnum} -\_def \_thetnum {\_othe\_chapnum.\_othe\_secnum.\_the\_tnum} -\_def \_thefnum {\_othe\_chapnum.\_othe\_secnum.\_the\_fnum} -\_def \_thednum {(\_the\_dnum)} - -\_def\_othe #1.{\_ifnum#1>0 \_the#1.\_fi} - - \_doc ---------------------------- - The \`\notoc` and \`\nonum` prefixes are implemented by - internal `\_ifnotoc` and `\_ifnonum`. They are reset - after each chapter/section/subsection by the \`\_resetnonumnotoc` macro. - \_cod ---------------------------- - -\_newifi \_ifnotoc \_notocfalse \_def\_notoc {\_global\_notoctrue} -\_newifi \_ifnonum \_nonumfalse \_def\_nonum {\_global\_nonumtrue} -\_def \_resetnonumnotoc{\_global\_notocfalse \_global\_nonumfalse} -\_public \notoc \nonum ; - - \_doc ---------------------------- - The \`\chap`, \`\sec`, and \`\secc` macros are implemented here. - The \`\_inchap`, \`\_insec` and \`\_insecc` macros do the real work, - First, we read the optional parameter `[<label>]`, if it exists. - The `\chap`, `\sec` and `\secc` macro reads its parameter using - \^`\scantoeol`. This causes that they cannot be used inside other macros. - Use \`\_inchap`, \`\_insec`, and \`\_insecc` macros directly in such case. - \_cod ---------------------------- - -\_optdef\_chap[]{\_trylabel \_scantoeol\_inchap} -\_optdef\_sec []{\_trylabel \_scantoeol\_insec} -\_optdef\_secc[]{\_trylabel \_scantoeol\_insecc} -\_def\_trylabel{\_istoksempty\_opt\_iffalse \_label[\_the\_opt]\_fi} - -\_def\_inchap #1{\_par \_sectionlevel=1 - \_def \_savedtitle {#1}% saved to .ref file - \_ifnonum \_else {\_globaldefs=1 \_incr\_chapnum \_chapx}\_fi - \_edef \_therefnum {\_ifnonum \_space \_else \_thechapnum \_fi}% - \_printchap{\_scantextokens{#1}}% - \_resetnonumnotoc -} -\_def\_insec #1{\_par \_sectionlevel=2 - \_def \_savedtitle {#1}% saved to .ref file - \_ifnonum \_else {\_globaldefs=1 \_incr\_secnum \_secx}\_fi - \_edef \_therefnum {\_ifnonum \_space \_else \_thesecnum \_fi}% - \_printsec{\_scantextokens{#1}}% - \_resetnonumnotoc -} -\_def\_insecc #1{\_par \_sectionlevel=3 - \_def \_savedtitle {#1}% saved to .ref file - \_ifnonum \_else {\_globaldefs=1 \_incr\_seccnum \_seccx}\_fi - \_edef \_therefnum {\_ifnonum \_space \_else \_theseccnum \_fi}% - \_printsecc{\_scantextokens{#1}}% - \_resetnonumnotoc -} -\_public \chap \sec \secc ; - - \_doc ---------------------------- - The \`\_printrefnum``[<pre>@<post>]` macro is used in `\_print*` macros. - - Note that the `<tite-text>` is `\detokenize`d before `\_wref`, so the - problem of \"fragile macros" from old \LaTeX/ never occurs. - This fourth parameter is not delimited by `{...}` but by end of line. - This gives possibility to have unbalanced braces in inline verbatim in titles. - \_cod ---------------------------- - -\_def \_printrefnum [#1@#2]{\_leavevmode % we must be in horizontal mode - \_ifnonum \_else #1\_therefnum #2\_fi - \_wlabel \_therefnum % references, if `\label[<label>]` is declared - \_ifnotoc \_else \_incr \_tocrefnum - \_dest[toc:\_the\_tocrefnum]% - \_ewref\_Xtoc{{\_the\_sectionlevel}{\_secinfo}% - {\_therefnum}{\_theoutline}\_detokenize\_ea{\_savedtitle}}% - \_fi - \_gdef\_theoutline{}% -} - - \_doc ----------------------------- - \`\thisoutline``{<text>}` saves text to the \`\_theoutline` macro. - \^`\_printrefnum` uses it and removes it. - \_cod ----------------------------- - -\_def\_theoutline{} -\_def\_thisoutline#1{\_gdef\_theoutline{#1}} -\_public \thisoutline ; - - \_doc ----------------------------- - The \`\_abovetitle``{<penaltyA>}{<skipA>}` and \`\_belowtitle``{<skipB>}` pair - communicates using a special penalty 11333 in vertical mode. - The `\_belowtitle` puts the vertical skip (its value is saved in - `\_savedtitleskip`) followed by this special penalty. - The `\_abovetitle` reads `\lastpenalty` and if it has this special value - then it removes the skip used before and doesn't use the parameter. - The `\abovetitle` creates `<skipA>` only if whatever previous skip is less - or equal than `<skipA>`. We must save `<whatever-skip>`, remove it, - create `<penaltyA>` (if `\_belowtitle` does not precede) and create - <whatever-skip> or `<skipA>` depending on what is greater. - The amount of `<skipA>` is measured using `\setbox0=\vbox`. - \_cod ----------------------------- - -\_newskip \_savedtitleskip -\_newskip \_savedlastskip -\_def\_abovetitle #1#2{\_savedlastskip=\_lastskip % <whatever-skip> - \_ifdim\_lastskip>\_zo \_vskip-\_lastskip \_fi - \_ifnum\_lastpenalty=11333 \_vskip-\_savedtitleskip \_else #1\_fi - \_ifdim\_savedlastskip>\_zo \_setbox0=\_vbox{#2\_global\_tmpdim=\_lastskip}% - \_else \_tmpdim=\_maxdimen \_fi - \_ifdim\_savedlastskip>\_tmpdim \vskip\_savedlastskip \_else #2\_fi -} -\_def\_belowtitle #1{#1\_global\_savedtitleskip=\_lastskip \_penalty11333 } - - \_doc ----------------------------- - \`\nbpar` sets `\interlinepenaty` value. - \`\nl` is \"new line" in the text (or titles), but space in toc or headlines or outlines. - \_cod ----------------------------- - -\_def\_nbpar{{\_interlinepenalty=10000\_endgraf}} - -\_protected\_def\_nl{\_unskip\_hfil\_break} -\_regmacro {\_def\_nl{\_unskip\_space}} {\_def\_nl{\_unskip\_space}} {\_def\_nl{ }} -\_regmacro {\_def\nl{\_unskip\_space}} {\_def\nl{\_unskip\_space}} {\_def\nl{ }} - -\_public \nbpar \nl ; - - \_doc ----------------------------- - \`\_firstnoindent` puts a material to `\everypar` in order to next - paragraph will be without indentation. It is useful after titles. - If you dislike this feature then you can say `\let\_firtnoindent=\relax`. - The \`\_wipeepar` removes the material from `\everypar`. - \_cod ----------------------------- - -\_def \_firstnoindent {\_global\_everypar={\_wipeepar \_setbox7=\_lastbox}} -\_def \_wipeepar {\_global\_everypar={}} - - \_doc ----------------------------- - The `\mark` (for running heads) is used in `\_printsection` only. We - suppose that chapters will be printed after `\vfil\break`, so users can - implement chapter titles for running headers directly by macros, no - `\mark` mechanism is needed. But sections need `\mark`s. And they can be - mixed with chapter's running heads, of course. - - The \`\_insertmark``{<title text>}` saves `\mark` in the format - `{<title-num>} {<title-text>}`, so it can be printed \"as is" in - `\headline` (see the space between them), or you can define a formating - macro with two parameters for processing these data, if you need it. - \_cod ----------------------------- - -\_def\_insertmark#1{\_mark{{\_ifnonum\_else\_therefnum\_fi} {\_unexpanded{#1}}}} - - \_doc ----------------------------- - \OpTeX/ sets `\headline={}` by default, so no running headings are printed. - You can activate the running headings by following code, for example: - \begtt - \addto\_chapx {\_edef\_runningchap {\_thechapnum: \_unexpanded\_ea{\_savedtitle}}} - \def \formathead #1#2{\isempty{#1}\iffalse #1: #2\fi} - \headline = {% - \ifodd \pageno - \hfil \ea\formathead\firstmark{}{}% - \else - Chapter: \runningchap \hfil - \fi - } - \endtt - - The \`\secl``<number> <title-text><eol>` - should be used for various levels of sections (for example, when - converting from Markdown to \OpTeX/). `\secl1` is `\chap`, `\secl2` is `\sec`, - `\secl3` is `\secc` and all more levels (for <number>$>3$) - are printed by the common \`\_seclp` macro. It declares only a simple design. - If there is a requirement to use such more levels then the book designer can - define something different here. - \_cod ----------------------------- - -\_def\_secl{\_afterassignment\_secla \_sectionlevel=} -\_def\_secla{\_ifcase\_sectionlevel - \_or\_ea\_chap\_or\_ea\_sec\_or\_ea\_secc\_else\_ea\_seclp\_fi} -\_eoldef\_seclp#1{\_par \_ifnum\_lastpenalty=0 \_removelastskip\_medskip\_fi - \_noindent{\_bf #1}\_vadjust{\_nobreak}\_nl\_ignorepars} -\_def\_ignorepars{\_isnextchar\_par{\_ignoresecond\_ignorepars}{}} - -\_public \secl ; - - \_doc ----------------------------- - The \`\caption``/<letter>` increases `\_<letter>num` counter, - edefines \`\_thecapnum` as `\_the<letter>num` and - defines \`\_thecaptitle` as language-dependent word using \^`\_mtext`, - runs the `\_everycaption<letter>` tokens register. - The group opened by `\caption` is finalized by first `\par` from - an empty line or from `\vskip` or from `\endinsert`. - The `\_printcaption<letter>` is called, it starts with - printing of the caption.\nl - The \`\cskip` macro inserts nonbreakable vertical space between the caption and - the object. - \_cod ----------------------------- - -\_def\_caption/#1{\_def\_tmpa{#1}\_nospaceafter \_capA} -\_optdef\_capA []{\_trylabel \_incaption} -\_def\_incaption {\_bgroup - \_ifcsname _\_tmpa num\_endcsname \_ea\_incr \_csname _\_tmpa num\_endcsname - \_else \_opwarning{Unknown caption /\_tmpa}\_fi - \_edef\_thecapnum {\_csname _the\_tmpa num\_endcsname}% - \_edef\_thecaptitle{\_mtext{\_tmpa}}% - \_ea\_the \_csname _everycaption\_tmpa\_endcsname - \_def\_par{\_nbpar\_egroup}\_let\par=\_par - \_cs{_printcaption\_tmpa}% -} -\_def \_cskip {\_par\_nobreak\_medskip} % space between caption and the object - -\_public \caption \cskip ; - - \_doc ----------------------------- - The \`\_printcaptiont` and \`\_printcaptionf` macros start in vertical mode. - They switch to horizontal mode and use `\_wlabel\_thecapnum` (in order to - make reference and hyperlink destination) a they can use: - \begitems - * \^`\_thecaptitle` ... expands to the word Table or Figure (depending on - the current language). - * \^`\_thecapnum` ... expands to `\the<letter>num` (caption number). - \enditems - The \`\_captionsep` inserts a separator between auto-generated - caption number and the following caption text. Default separator - is `\_enspace` but if the caption text starts with dot or colon, then - the space is not inserted. A user can wite `\caption/t: My table` - and \"{\bf Table 1.1:} My table" is printed. You can re-define - the \^`\_captionsep` macro if you want to use another separator. - \_cod ----------------------------- - -\_def \_printcaptiont {% - \_noindent \_wlabel\_thecapnum {\_bf\_thecaptitle~\_thecapnum}% - \_narrowlastlinecentered\_iindent \_futurelet\_next\_captionsep -} -\_def\_captionsep{\_ifx\_next.\_ea\_bfnext \_else\_ifx\_next:\_ea\_ea\_ea\_bfnext - \_else \_enspace \_fi\_fi} -\_def\_bfnext#1{{\_bf#1}} -\_let \_printcaptionf = \_printcaptiont % caption of figures = caption of tables - - \_doc ----------------------------- - If you want to declare a new type of `\caption` with independent counter, - you can use following lines, where `\caption/a` for Algorithms are - declared: - \begtt - \let\_printcaptiona = \_printcaptionf \let\_everycaptiona = \_everycaptionf - \newcount\_anum \addto\_secx {\_anum=0 } - \def\_theanum {\_othe\_chapnum.\_the\_secnum.\_the\_anum} - \sdef{_mt:a:en}{Algorithm} \sdef{_mt:a:cs}{Algoritmus} % + your language... - \endtt - The default format of `\caption` text is a paragraph in block narrower by - `\_iindent` and with the last line is centered. This setting is done by - the \`\_narrowlastlinecentered` macro. - \_cod ----------------------------- - -\_def\_narrowlastlinecentered#1{% - \_leftskip=#1plus1fil - \_rightskip=#1plus-1fil - \_parfillskip=0pt plus2fil\_relax -} - - \_doc ----------------------------- - \`\eqmark` is processed in display mode (we add `\eqno` primitive) - or in internal mode when `\eqaligno` is used (we don't add `\eqno`). - \_cod ----------------------------- - -\_optdef\_eqmark []{\_trylabel \_ineqmark} -\_def\_ineqmark{\_incr\_dnum - \_ifinner\_else\_eqno \_fi - \_wlabel\_thednum \_hbox{\_thednum}% -} -\_public \eqmark ; - - \_doc ----------------------------- - The \`\numberedpar` `<letter>{<name>}` is implemented here. - \_cod ----------------------------- - -\_newcount\_counterA \_newcount\_counterB \_newcount\_counterC -\_newcount\_counterD \_newcount\_counterE - -\_def\_resetABCDE {\_counterA=0 \_counterB=0 \_counterC=0 \_counterD=0 \_counterE=0 } - -\_def \_theAnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterA} -\_def \_theBnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterB} -\_def \_theCnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterC} -\_def \_theDnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterD} -\_def \_theEnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterE} - -\_def\_numberedpar#1#2{\_ea \_incr \_csname _counter#1\_endcsname - \_def\_tmpa{#1}\_def\_tmpb{#2}\_numberedparparam} -\_optdef\_numberedparparam[]{% - \_ea \_printnumberedpar \_csname _the\_tmpa num\_ea\_endcsname\_ea{\_tmpb}} - -\_public \numberedpar ; - - \_doc ----------------------------- - The \`\_printnumberedpar` `\theXnum {<name>}` opens numbered paragraph and - prints it. The optional parameter is in `\_the\_opt`. You can re-define - it if you need another design. - - `\_printnumberedpar` needs not to be re-defined if you only want to print - Theorems in italic and to insert vertical skips (for example). You can do this - by the following code: - \begtt - \def\theorem {\medskip\bgroup\it \numberedpar A{Theorem}} - \def\endtheorem {\par\egroup\medskip} - - \theorem Let $M$ be... \endtheorem - \endtt - \_cod ----------------------------- - -\_def \_printnumberedpar #1#2{\_par - \_noindent\_wlabel #1% - {\_bf #2 #1\_istoksempty\_opt\_iffalse \_space \_the\_opt \_fi.}\_space - \_ignorespaces -} - -\_endcode % ------------------------------------- - -2021-03-03 \_captionsep introduced, \_othe used in \_thetnum, \_thefnum. -2021-02-09 \thisoutline implemented -2021-01-26 \_nl: \unskip added -2021-01-11 \secl introduced -2021-01-05 \_thednum printed in text mode in its both occurences. -2020-04-28 \_secfonts etc: \_boldify is last. -2020-04-22 \_chapx, \_secx, \_seccx rewritten -2020-03-14 introduced diff --git a/macros/luatex/optex/base/slides.opm b/macros/luatex/optex/base/slides.opm deleted file mode 100644 index 94fa3afac8..0000000000 --- a/macros/luatex/optex/base/slides.opm +++ /dev/null @@ -1,247 +0,0 @@ -% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \slideshow {Slides style for OpTeX <2021-03-10>} % loaded on demand by \slides - - \_doc ----------------------------- - Default margins and design is declared here. - The `\_ttfont` is scaled by `mag1.15` in order to balance the - ex height of Helvetica (Heros) and LM fonts Typewriter. - The `\begtt`...`\endtt` verbatim is printed by smaller text. - \_cod ----------------------------- - -\_margins/1 a5l (14,14,10,3)mm % landscape A5 format -\_def\_wideformat{\_margins/1 (263,148) (16,16,10,3)mm } % 16:9 format - -\_ifx\_fontnamegen\_undefined \_fontfam[Heros] - \_let\_ttfont=\_undefined \_famvardef\_ttfont{\_setfontsize{mag1.15}\_tt} -\_fi -\_typosize[16/19] -\_def\_urlfont{} -\_everytt={\_typosize[13/16] \_advance\_hsize by10mm} -\_fontdef\_fixbf{\_bf} - -\_nopagenumbers -\_parindent=0pt -\_ttindent=5mm -\_parskip=5pt plus 4pt minus2pt -\_rightskip=0pt plus 1fil -\_ttindent=10pt -\_def\_ttskip{\_smallskip} - -\_onlyrgb % RGB color space is better for presentations - - \_doc ----------------------------- - The bottom margin is set to 3\,mm. If we use 1\,mm, then the baseline of - `\footline` is 2\,mm from the bottom page. This is the depth of the `\Grey` - rectangle used for page numbers. It is r-lapped to `\hoffset` width because left - margin = `\hoffset` = right margin. It is 14\,mm for narrow pages or - 16\,mm for wide pages. - \_cod ----------------------------- - -\_footlinedist=1mm -\_footline={\_hss \_rlap{% - \_rlap{\Grey\_kern.2\_hoffset\_vrule height6mm depth2mm width.8\_hoffset}% - \_hbox to\_hoffset{\White\_hss\_folio\_kern3mm}}} - - \_doc ----------------------------- - The \`\subtit` is defined analogically like `\tit`. - \_cod ----------------------------- - -\_eoldef\_subtit#1{\_vskip20pt {\_leftskip=0pt plus1fill \_rightskip=\_leftskip - \_subtitfont #1\_nbpar}} - - \_doc ----------------------------- - The \`\pshow``<num>` prints the text in invisible - (transparent) font when \^`\layernum`\code{<}`<num>`. - The transparency is set by `\pdfpageresoyrces` primitive. - \_cod ----------------------------- - -\pdfpageresources{/ExtGState << /Invisible << /Type /ExtGState /ca 0 /CA 0 >> - /Visible << /Type /ExtGState /ca 1 /CA 1 >> >>} -\addto\_morepgresources{/Invisible << /Type /ExtGState /ca 0 /CA 0 >> - /Visible << /Type /ExtGState /ca 1 /CA 1 >>} -\def\Invisible {\_pdfliteral{/Invisible gs}} -\def\Visible {\_pdfliteral{/Visible gs}} -\def\Transparent {\Invisible \_aftergroup \Visible} - -\_def\_use#1#2{\_ifnum\_layernum#1\_relax#2\_fi} -\_def\_pshow#1{\_use{=#1}\Red \_use{<#1}\Transparent \_ignorespaces} - - \_doc ----------------------------- - The main level list of items is activated here. The `\_item:X` and - `\_item:x` are used and are re-defined here. - If we are in a nested level of items and `\pg+` is used then - `\egroups` macro expands to the right number of `\egroup`s - to close the page correctly. The level of nested item lists - is saved to the `\_ilevel` register and used when we start again - the next text after `\pg+`. - \_cod ----------------------------- - -\_newcount\_gilevel -\_def\*{*} -\_adef*{\_relax\_ifmmode*\_else\_ea\_startitem\_fi} -\_sdef{_item:X}{\Blue\_raise.2ex\_fullrectangle{.8ex}\_kern.5em} -\_sdef{_item:x}{\Blue\_raise.3ex\_fullrectangle{.6ex}\_kern.4em} -\_style X -\_def\_egroups{\_par\_global\_gilevel=\_ilevel \_egroup} -\_everylist={\_novspaces \_ifcase\_ilevel \_or \_style x \_else \_style - \_fi - \_addto\_egroups{\_egroup}} - - \_doc ----------------------------- - The default values of \`\pg`, i.\,e.\ `\pg;`, `\pg+` and `\pg.` are very simple. - They are used when `\showslides` is not specified. - \_cod ----------------------------- - -\_def\_pg#1{\_cs{_spg:#1}} -\_sdef{_spg:;}{\_vfil\_break \_lfnotenumreset} -\_sdef{_spg:.}{\_endslides} -\_sdef{_spg:+}{\_par} - - \_doc ----------------------------- - The \`\_endslides` is defined as `\_end` primitive, but - slide-designer can redefine it. For example, - \ulink[http://petr.olsak.net/optex/optex-tricks.html\#slider]{OpTeX trick 0029} - shows how to define clickable navigation to the pages and how to check - the data integrity at the end of the document using `\_endslides`. - - The `\bye` macro is redefined here as an alternative to `\pg.`. - \_cod ----------------------------- - -\_def\_endslides{\_end} -\_def\bye{\_pg.} - - \_doc ----------------------------- - We need no numbers and no table of contents when using slides. - The \^`\_printsec` macro is redefined in order the title is centered - and typeset in `\Blue`. - \_cod ----------------------------- - -\_def\_titfont{\_typosize[42/60]\_bf \Blue} -\_def\_subtitfont{\_typosize[20/30]\_bf} -\_def\_secfont{\_typosize[25/30]\_bf \Blue} - -\_nonum \_notoc \_let\_resetnonumnotoc=\_relax -\_def\_printsec#1{\_par - \_abovetitle{\_penalty-400}\_bigskip - {\_secfont \_noindent \_leftskip=0pt plus1fill \_rightskip=\_leftskip - \_printrefnum[@\_quad]#1\_nbpar}\_insertmark{#1}% - \_nobreak \_belowtitle{\_medskip}% -} - - \_doc ----------------------------- - When \`\slideshow` is active then each page is opened - by `\setbox\_slidepage=\vbox\bgroup` (roughly speaking) - and closed by `\egroup`. The material is - `\unvbox`ed and saved for the usage in the next usage if `\pg+` is in process. - The \`\_slidelayer` is incremented instead `\pageno` if `\pg+`. - This counter is equal to `\count1`, so it is printed to the terminal and - log file next to `\pageno`. - - The code is somewhat more complicated when \^`\layers` is used. Then - `<layered-text>` is saved to the \`\_layertext` macro, the material before - it is in \`\_slidepage` box and the material after it is in `\_slidepageB` - box. The pages are completed in the `\loop` which increments the - \`\layernum` register. - \_cod ----------------------------- - -\_newbox\_slidepage \_newbox\_slidepageB -\_countdef\_slidelayer=1 - -\_def\_slideshow{\_slidelayer=1 \_slideshowactive - \_let\slideopen=\_relax % first wins - \_setbox\_slidepage=\_vbox\_bgroup\_bgroup} - -\_def\_slideshowactive{% - \_sdef{_spg:;}{\_closepage \_global\_slidelayer=1 \_resetpage \_openslide} - \_sdef{_spg:.}{\_closepage \_endslides} - \_sdef{_spg:+}{\_closepage \_incr\_slidelayer \_decr\_pageno \_openslide} - \_let\_layers=\_layersactive - \_destboxslide % to prevent hyperlink-dests duplication -} -\_def\_destboxslide{\_def\_destbox[##1:##2]{\_isequal{##1}{ref}\_iffalse \_destboxori[##1:##2]\_fi}} - -\_def\_openslide{\_setbox\_slidepage=\_vbox\_bgroup\_bgroup \_setilevel - \_ifvoid\_slidepage \_else \_unvbox\_slidepage \_nointerlineskip\_lastbox \_fi} -\_def\_setilevel{\_loop \_decr\_gilevel \_ifnum\_gilevel<0 \_else \_begitems \_repeat} - -\_def\_closepage{\_egroups \_egroup - \_ifnum \_maxlayers=0 \_unvcopy\_slidepage \_vfil\_break - \_else \_begingroup \_setwarnslides \_layernum=0 - \_loop - \_ifnum\_layernum<\_maxlayers \_advance\_layernum by1 - \_printlayers \_vfil\_break - \_ifnum\_layernum<\_maxlayers \_incr\_slidelayer \_decr\_pageno \_fi - \_repeat - \_global\_maxlayers=0 - \_incr\_layernum \_global\_setbox\_slidepage=\_vbox{\_printlayers}% - \_endgroup - \_fi} -\_def\_resetpage{% - \_global\_setbox\_slidepage=\_box\_voidbox \_global\_setbox\_slidepageB=\_box\_voidbox - \_lfnotenumreset -} -\_def\_setwarnslides{% - \_def\pg##1{\_opwarning{\_string\pg##1 \_layersenv}\_def\pg####1{}}% - \_def\layers##1 {\_opwarning{\_string\layers\_space \_layersenv}\_def\layers####1{}}% -} -\_def\_layersenv{cannot be inside \_string\layers...\_string\endlayers, ignored} - -\_def\_printlayers{\_unvcopy\_slidepage \_nointerlineskip\_lastbox - \_layertext \_endgraf - \_ifdim\_prevdepth>-1000pt \_kern-\_prevdepth \_kern\_dp\_strutbox \_fi - \_vskip\_parskip - \_unvcopy\_slidepageB -} -\_let\_destboxori=\_destbox - -\_newcount\_layernum \_newcount\_maxlayers -\_maxlayers=0 - -\_long\_def\_layersactive #1 #2\endlayers{% - \_par\_penalty0\_egroup - \_gdef\_layertext{#2}% - \_global\_maxlayers=#1 - \_setbox\_slidepageB=\_vbox\_bgroup -} -\_def\_slideopen{\_let\slideshow=\_relax % first wins - \_sdef{_spg:;}{\_egroups\_vfil\_break \_lfnotenumreset\_bgroup \_setilevel} - \_sdef{_spg:.}{\_egroups\_endslides} - \_sdef{_spg:+}{\_egroups\_bgroup \_setilevel} - \_bgroup -} - -\_public \subtit \slideshow \slideopen \pg \wideformat \use \pshow \layernum ; - - \_doc ----------------------------- - Default \`\layers` `<num>` macro (when \^`\slideshow` is not activated) is simple. - It prints the `<layered-text>` with `\layernum=<num>+1` because we need the - result after last layer is processed. - \_cod ----------------------------- - -\_def\_layers #1 {\_par\_layernum=\_numexpr#1+1\_relax} -\_let\endlayers=\_relax - -\_def\layers{\_layers} - - \_doc ----------------------------- - We must to redefine \`\fnotenumpages` because the data from `.ref` file - are less usable for implementing such a feature: the - footnote should be in more layers repeatedly. But we can suppose that - each page starts by `\pg;` macro, so we can reset the footnote counter by - this macro. - \_cod ----------------------------- - -\_def \_fnotenumpages {\_def\_fnotenum{\_the\_lfnotenum}\_pgfnotefalse - \_def\_lfnotenumreset{\_global\_lfnotenum=0 }} -\_let \_lfnotenumreset=\_relax -\_public \fnotenumpages ; - -\_endcode % ---------------------------------------------- - -The user manual of \OpTeX/ slides are in `op-slides.tex` file. - -2021-03-10 \slideopen introduced, bug with colors in \setbox fixed -2021-03-10 \ifmmode* added to \adef* -2021-02-15 \_def\_decr removed -2021-01-16 \layers at empty page raises error: problem fixed -2020-03-19 slides introduced diff --git a/macros/luatex/optex/base/styles.opm b/macros/luatex/optex/base/styles.opm deleted file mode 100644 index 534eb13663..0000000000 --- a/macros/luatex/optex/base/styles.opm +++ /dev/null @@ -1,120 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \report {Basic styles of OpTeX <2021-03-10>} % preloaded in format - - \_doc ----------------------------- - We define auxiliary macro first (used by the \^`\address` macro) - \nl - The `{`\`\boxlines` `<line-1><eol><line-2><eol>...<line-n><eol>}` - returns to the outer vertical mode a box with `<line-1>`, next box with - `<line-2>` etc. Each box has its natural width. This is reason why we cannot - use paragraph mode where each resulting box has the width `\hsize`. - The `<eol>` is set active and `\everypar` starts `\hbox{` and acive <eol> - closes this `\hbox` by `}`. - \_cod ----------------------------- - -\_def\_boxlines{% - \_def\_boxlinesE{\_ifhmode\_egroup\_empty\_fi}% - \_def\_nl{\_boxlinesE}% - \_bgroup \_lccode`\~=`\^^M\_lowercase{\_egroup\_let~}\_boxlinesE - \_everypar{\_setbox0=\_lastbox\_endgraf - \_hbox\_bgroup \_catcode`\^^M=13 \_let\par=\_nl \_aftergroup\_boxlinesC}% -} -\_def\_boxlinesC{\_futurelet\_next\_boxlinesD} -\_def\_boxlinesD{\_ifx\_next\_empty\_else\_ea\_egroup\_fi} - -\_public \boxlines ; - - \_doc ----------------------------- - The \`\report` and \`\letter` style initialization macros are defined here. - \nl - The `\letter` defines \`\address` and \`\subject` macros. - \_cod ----------------------------- - -\_def\_report{ - \_typosize[11/13.2] - \_vsize=\_dimexpr \_topskip + 52\_baselineskip \_relax % added 2020-03-28 - \_let\_titfont=\_chapfont - \_titskip=3ex - \_eoldef\_author##1{\_removelastskip\_bigskip - {\_leftskip=0pt plus1fill \_rightskip=\_leftskip \_it \_noindent ##1\_par}\_nobreak\_bigskip - } - \_public \author ; - \_parindent=1.2em \_iindent=\_parindent \_ttindent=\_parindent - \_footline={\_global\_footline={\_hss\_rmfixed\_folio\_hss}} -} -\_def\_letter{ - \_def\_address{\_vtop\_bgroup\_boxlines \_parskip=0pt \_let\par=\_egroup} - \_def\_subject{{\_bf \_mtext{subj}: }} - \_public \address \subject ; - \_typosize[11/14] - \_vsize=\_dimexpr \_topskip + 49\_baselineskip \_relax % added 2020-03-28 - \_parindent=0pt - \_parskip=\_medskipamount - \_nopagenumbers -} -\_public \letter \report ; - - \_doc ----------------------------- - The \`\slides` macro reads macro file `slides.opm`, see the section~\ref[slides]. - \_cod ----------------------------- - -\_def\_slides{\_par - \_opinput{slides.opm} - \_adef*{\_relax\_ifmmode*\_else\_ea\_startitem\_fi} -} -\_public \slides ; - - -\_endcode % ------------------------------------- - -The example of `\letter` style document follows: - -\begtt %----------------------------------------------------------------- - -\letter -\fontfam[bonum] -\chyph - -\address - Vážený pan - Mgr. Bořek Byrokrat - ředitel Ústavu pro další možnosti - Úřední 789 - 123 45 Praha 1 - -\hfill V Praze dne \today - -\subject Žádost o možnost další možnosti - -Vážený pane řediteli - -na základě Vašeho dopisu č.j.~123456/78-dat a elektronické výzvy si dovoluji -Vás požádat o prozkoumání mé možnosti další možnosti. -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do -eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim -veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea -commodo consequat. - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do -eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim -veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea -commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit -esse cillum dolore eu fugiat nulla pariatur. - -S úctou - -\hfill \address - {\it Petr Olšák} - specialista na \TeX{} - Ulice 12345 - Praha 13 - -\bye - -\endtt %--------------------------------------------------------------------- - -\endinput - -2021-03-10 \ifmmode* added to \adef* -2020-03-28 released diff --git a/macros/luatex/optex/base/table.opm b/macros/luatex/optex/base/table.opm deleted file mode 100644 index a4a6511958..0000000000 --- a/macros/luatex/optex/base/table.opm +++ /dev/null @@ -1,526 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \table {Basic macros for OpTeX <2021-03-09>} % preloaded in format - - \_doc ----------------------------- - The result of the \`\table``{<declaration>}{<data>}` macro is inserted into - \`\_tablebox`. You can change default value if you want by - `\let\_tablebox=\vtop` or `\let\_tablebox=\relax`. - \_cod ----------------------------- - -\_let\_tablebox=\_vbox - - \_doc ----------------------------- - We save the `to<size>` or `pxto<size>` to `#1` and \`\_tableW` sets the - `to<size>` to the \`\_tablew` macro. - If `pxto<size>` is used then `\_tablew` is empty and `\_tmpdim` includes - given <size>. The `\_ifpxto` returns true in this case. - - The `\table` continues by reading `{<declaration>}` in the \^`\_tableA` macro. - Catcodes (for example the `|` character) have to be normal when reading - `\table` parameters. This is the reason why we use `\catcodetable` here. - \_cod ----------------------------- - -\_newifi \_ifpxto -\_def\_table#1#{\_tablebox\_bgroup \_tableW#1\_empty\_end - \_bgroup \_catcodetable\_optexcatcodes \_tableA} -\_def\_tableW#1#2\_end{\_pxtofalse - \_ifx#1\_empty \_def\_tablew{}\_else - \_ifx#1p \_def\_tablew{}\_tableWx#2\_end \_else \_def\_tablew{#1#2}\_fi\_fi} -\_def\_tableWx xto#1\_end{\_tmpdim=#1\_relax \_pxtotrue} -\_public \table ; - - \_doc ----------------------------- - The \^`\tablinespace` is implemented by enlarging given \^`\tabstrut` - by desired dimension (height and depth too) and by setting - `\_lineskip=-2\_tablinespace`. Normal table rows (where no `\hrule` is - between them) have normal baseline distance.\nl - The \`\_tableA``{<declaration>}` macro scans the `<declaration>` by - `\_scantabdata#1\_relax` and continues by processing `{<data>}` by \^`\_tableB`. - The trick `\_tmptoks={<data>}\_edef\_tmpb{\_the\_tmptoks}` - is used here in order to keep the hash marks in the <data> unchanged. - \_cod ----------------------------- - -\_def\_tableA#1{\_egroup - \_the\_thistable \_global\_thistable={}% - \_ea\_ifx\_ea^\_the\_tabstrut^\_setbox\_tstrutbox=\_null - \_else \_setbox\_tstrutbox=\_hbox{\_the\_tabstrut}% - \_setbox\_tstrutbox=\_hbox{\_vrule width\_zo - height\_dimexpr\_ht\_tstrutbox+\_tablinespace - depth\_dimexpr\_dp\_tstrutbox+\_tablinespace}% - \_offinterlineskip - \_lineskip=-2\_tablinespace - \_fi - \_colnum=0 \_let\_addtabitem=\_addtabitemx - \_def\_tmpa{}\_tabdata={\_colnum1\_relax}\_scantabdata#1\_relax - \_the\_everytable \_bgroup \_catcode`\#=12 \_tableB -} - - \_doc ----------------------------- - The \`\_tableB` saves `<data>` to `\_tmpb` - and does four \^`\replstring`s to prefix each macro \^`\crl` (etc.) - by `\_crcr`. The reason is: we want to use macros that scan its parameter - to the delimiter written in the right part of the table item declaration. - See \^`\fS` for example. The `\crcr` cannot be hidden in another macro in this case. - - The `\tabskip` value is saved for places between columns - into the \`\_tabskipmid` macro. Then it runs - \begtt \catcode`\<=13 - \tabskip=\tabskipl \halign{<converted declaration>\tabskip=\tabskipr \cr <data>\crcr} - \endtt - This sets the desired boundary values of `\tabskip`. The - \"between-columns" values are set as `\tabskip=`\^`\_tabskipmid` in the - `<converted declaration>` immediately after each column declarator. - - If `pxto` keyword was used, then we set the virtual unit \^`\tsize` to - `\hsize` first. Then the first attempt of the table is created in box 0. - Then the \^`\tsize` is re-calculated using `\wd0` and the real table is - printed by `\halign` in the second pass. - - If no `pxto` keyword was used, then we print the table using `\halign` - directly. The \^`\_tablew` macro is nonempty if the `to` keyword was used. - - Because the color selector with `\aftergroup` can be used inside the - table item, we must create the second real group for each table item. - This is reason why we start `<converted declaration>` by `\bgroup` and we - end it by `\egroup` in the \`\_tableC` macro. Each `&` character - is stored as `\egroup&\bgroup` in `<converted declaration>`. The - `\halign\_tablew\_tableC` really does: - \begtt \catcode`\<=13 - \halign\_tablew{\bgroup<converted declaration>\egroup\tabskip=\tabskipr \cr<data>\crcr} - \endtt - \relax - The <data> are re-tokenized by `\_scantextokens` in order to be more - robust to catcode changing inside the <data>. But inline verbatim cannot - work in special cases here like \code{`\{`} for example. - \_cod ----------------------------- - -\_long\_def\_tableB #1{\_egroup \_def\_tmpb{#1}% - \_replstring\_tmpb{\crl}{\_crcr\crl}\_replstring\_tmpb{\crll}{\_crcr\crll}% - \_replstring\_tmpb{\crli}{\_crcr\crli}\_replstring\_tmpb{\crlli}{\_crcr\crlli}% - \_replstring\_tmpb{\crlp}{\_crcr\crlp}% - \_edef\_tabskipmid{\_the\_tabskip}\_tabskip=\_tabskipl - \_ifpxto - \_tsize=\_hsize \_setbox0 = \_vbox{\_tablepxpreset \_halign \_tableC}% - \_tsize=\_dimexpr\_hsize-(\_wd0-\_tmpdim)\_relax - \_setbox0=\_null \_halign \_tableC - \_else - \_halign\_tablew \_tableC - \_fi \_egroup -} -\_def\_tableC{\_ea{\_ea\_bgroup\_the\_tabdata\_egroup\_tabskip=\_tabskipr\_cr - \_scantextokens\_ea{\_tmpb\_crcr}}} - -\_def\_tablepxpreset{} % can be used to de-activate references to .ref file -\_newbox\_tstrutbox % strut used in table rows -\_newtoks\_tabdata % the \halign declaration line - - \_doc ----------------------------- - The \`\_scantabdata` macro converts `\table`'s `<declaration>` to - `\halign` `<converted declaration>`. - The result is stored into \`\_tabdata` tokens list. - For example, the - following result is generated when `<declaration>=|cr||cl|`. - \begtt - tabdata: \_vrule\_the\_tabiteml\_hfil#\_unsskip\_hfil\_the\_tabitemr\_tabstrutA - &\_the\_tabiteml\_hfil#\_unsskip\_the\_tabitemr - \_vrule\_kern\_vvkern\_vrule\_tabstrutA - &\_the\_tabiteml\_hfil#\_unsskip\_hfil\_the\_tabitemr\_tabstrutA - &\_the\_tabiteml#\_unsskip\_hfil\_the\_tabitemr\_vrule\_tabstrutA - ddlinedata: &\_dditem &\_dditem\_vvitem &\_dditem &\_dditem - \endtt - The second result in the \`\_ddlinedata` macro is a template of one row of the table - used by \^`\crli` macro. - \_cod ----------------------------- - -\_def\_scantabdata#1{\_let\_next=\_scantabdata - \_ifx\_relax#1\_let\_next=\_relax - \_else\_ifx|#1\_addtabvrule - \_else\_ifx(#1\_def\_next{\_scantabdataE}% - \_else\_ifx:#1\_def\_next{\_scantabdataF}% - \_else\_isinlist{123456789}#1\_iftrue \_def\_next{\_scantabdataC#1}% - \_else \_ea\_ifx\_csname _tabdeclare#1\_endcsname \_relax - \_ea\_ifx\_csname _paramtabdeclare#1\_endcsname \_relax - \_opwarning{tab-declarator "#1" unknown, ignored}% - \_else - \_def\_next{\_ea\_scantabdataB\_csname _paramtabdeclare#1\_endcsname}\_fi - \_else \_def\_next{\_ea\_scantabdataA\_csname _tabdeclare#1\_endcsname}% - \_fi\_fi\_fi\_fi\_fi\_fi \_next -} -\_def\_scantabdataA#1{\_addtabitem - \_ea\_addtabdata\_ea{#1\_tabstrutA \_tabskip\_tabskipmid\_relax}\_scantabdata} -\_def\_scantabdataB#1#2{\_addtabitem - \_ea\_addtabdata\_ea{#1{#2}\_tabstrutA \_tabskip\_tabskipmid\_relax}\_scantabdata} -\_def\_scantabdataC {\_def\_tmpb{}\_afterassignment\_scantabdataD \_tmpnum=} -\_def\_scantabdataD#1{\_loop \_ifnum\_tmpnum>0 \_advance\_tmpnum by-1 \_addto\_tmpb{#1}\_repeat - \_ea\_scantabdata\_tmpb} -\_def\_scantabdataE#1){\_addtabdata{#1}\_scantabdata} -\_def\_scantabdataF {\_addtabitem\_def\_addtabitem{\_let\_addtabitem=\_addtabitemx}\_scantabdata} - - \_doc ----------------------------- - The \`\_addtabitemx` adds the boundary code (used between columns) - to the <converted declaration>. This code is - `\egroup &\bgroup \colnum=<value>\relax`. You can get the current number of - column from the \`\colnum` register, but you cannot write - `\the\colnum` as the first object in a <data> item because `\halign` - first expands the front of the item and the left part of the declaration - is processed after this. Use `\relax\the\colnum` instead. Or you can - write: - \begtt - \def\showcolnum{\ea\def\ea\totcolnum\ea{\the\colnum}\the\colnum/\totcolnum} - \table{ccc}{\showcolnum & \showcolnum & \showcolnum} - \endtt - This example prints 1/3 \ 2/3 \ 3/3, because the value of the `\colnum` is - equal to the total number of columns before left part of the column declaration - is processed. - \_cod ----------------------------- - -\_newcount\_colnum % number of current column in the table -\_public \colnum ; - -\_def\_addtabitemx{\_ifnum\_colnum>0 - \_addtabdata{\_egroup &\_bgroup}\_addto\_ddlinedata{&\_dditem}\_fi - \_advance\_colnum by1 \_let\_tmpa=\_relax - \_ifnum\_colnum>1 \_ea\_addtabdata\_ea{\_ea\_colnum\_the\_colnum\_relax}\_fi} -\_def\_addtabdata#1{\_tabdata\_ea{\_the\_tabdata#1}} - - \_doc ----------------------------- - This code converts `||` or `|` from `\table` <declaration> to the <converted declaration>. - \_cod ----------------------------- - -\_def\_addtabvrule{% - \_ifx\_tmpa\_vrule \_addtabdata{\_kern\_vvkern}% - \_ifnum\_colnum=0 \_addto\_vvleft{\_vvitem}\_else\_addto\_ddlinedata{\_vvitem}\_fi - \_else \_ifnum\_colnum=0 \_addto\_vvleft{\_vvitemA}\_else\_addto\_ddlinedata{\_vvitemA}\_fi\_fi - \_let\_tmpa=\_vrule \_addtabdata{\_vrule}% -} -\_def\_tabstrutA{\_copy\_tstrutbox} -\_def\_vvleft{} -\_def\_ddlinedata{} - - \_doc ----------------------------- - The default \"declaration letters" `c`, `l`, `r` and `p` are declared - by setting \`\_tabdeclarec`, \`\_tabdeclarel`, \`\_tabdeclarer` and - \`\_paramtabdeclarep` macros. In general, define - `\def\_tabdeclare<letter>{...}` for a non-parametric - letter and `\def\_paramtabdeclare<letter>{...}` for a letter with a parameter. - The double hash `##` must be in the definition, it is replaced by a real table item data. - You can declare more such \"declaration letters" if you want. - \_cod ----------------------------- - -\_def\_tabdeclarec{\_the\_tabiteml\_hfil##\_unsskip\_hfil\_the\_tabitemr} -\_def\_tabdeclarel{\_the\_tabiteml\_relax##\_unsskip\_hfil\_the\_tabitemr} -\_def\_tabdeclarer{\_the\_tabiteml\_hfil##\_unsskip\_the\_tabitemr} -\_def\_paramtabdeclarep#1{\_the\_tabiteml - \_vtop{\_hsize=#1\_relax \_baselineskip=\_normalbaselineskip - \_lineskiplimit=\_zo \_noindent##\_unsskip - \_ifvmode\_vskip\_dp\_tstrutbox \_else\_lower\_dp\_tstrutbox\_hbox{}\_fi}\_the\_tabitemr} - - \_doc ----------------------------- - Users put optional spaces around the table item typically, i.e.\ they write - `& text &` instead `&text&`. The left space is ignored by the internal \TeX/ algorithm but - the right space must be removed by macros. This is a reason why we recommend to - use \`\_unsskip` after each `##` in your definition of \"declaration letters". - This macro isn't only the primitive `\unskip` because we allow usage of plain \TeX/ - `\hideskip` macro: `&\hideskip text\hideskip&`. - \_cod ----------------------------- - -\_def\_unsskip{\_ifmmode\_else\_ifdim\_lastskip>\_zo \_unskip\_fi\_fi} - - \_doc ----------------------------- - The \`\fL`, \`\fR`, \`\fC` and \`\fX` macros only do special parameters settings - for paragraph building algorithm. The \`\fS` prints the paragraph into - box 0 first, measures the number of lines by the `\prevgraf` primitive - and use (or don't use) `\hfil` (for centering) before the first line. - \_cod ----------------------------- - -\_let\_fL=\_raggedright -\_def\_fR{\_leftskip=0pt plus 1fill \_relax} -\_def\_fC{\_leftskip=0pt plus1fill \_rightskip=0pt plus 1fill \_relax} -\_def\_fX{\_leftskip=0pt plus1fil \_rightskip=0pt plus-1fil \_parfillskip=0pt plus2fil \_relax} -\_long\_def\_fS #1\_unsskip{\_noindent \_setbox0 =\_vbox{\_noindent #1\_endgraf \_ea}% - \_ifnum\_prevgraf=1 \_hfil \_fi #1\_unsskip -} -\_public \fL \fR \fC \fX \fS ; - - \_doc ----------------------------- - The family of `\_cr*` macros - \`\crl`, \`\crll`, \`\crli`, \`\crlli`, \`\crlp` and - \`\tskip` `<dimen>` is implemented here. - The \`\_zerotabrule` is used to suppress the negative `\lineskip` - declared by \^`\tablinespace`. - \_cod ----------------------------- - -\_def\_crl{\_crcr\_noalign{\_hrule}} -\_def\_crll{\_crcr\_noalign{\_hrule\_kern\_hhkern\_hrule}} -\_def\_zerotabrule {\_noalign{\_hrule height\_zo width\_zo depth\_zo}} - -\_def\_crli{\_crcr \_zerotabrule \_omit - \_gdef\_dditem{\_omit\_tablinefil}\_gdef\_vvitem{\_kern\_vvkern\_vrule}\_gdef\_vvitemA{\_vrule}% - \_vvleft\_tablinefil\_ddlinedata\_crcr \_zerotabrule} -\_def\_crlli{\_crli\_noalign{\_kern\_hhkern}\_crli} -\_def\_tablinefil{\_leaders\_hrule\_hfil} - -\_def\_crlp#1{\_crcr \_zerotabrule \_noalign{\_kern-\_drulewidth}% - \_omit \_xdef\_crlplist{#1}\_xdef\_crlplist{,\_ea}\_ea\_crlpA\_crlplist,\_end,% - \_global\_tmpnum=0 \_gdef\_dditem{\_omit\_crlpD}% - \_gdef\_vvitem{\_kern\_vvkern\_kern\_drulewidth}\_gdef\_vvitemA{\_kern\_drulewidth}% - \_vvleft\_crlpD\_ddlinedata \_global\_tmpnum=0 \_crcr \_zerotabrule} -\_def\_crlpA#1,{\_ifx\_end#1\_else \_crlpB#1-\_end,\_ea\_crlpA\_fi} -\_def\_crlpB#1#2-#3,{\_ifx\_end#3\_xdef\_crlplist{\_crlplist#1#2,}\_else\_crlpC#1#2-#3,\_fi} -\_def\_crlpC#1-#2-#3,{\_tmpnum=#1\_relax - \_loop \_xdef\_crlplist{\_crlplist\_the\_tmpnum,}\_ifnum\_tmpnum<#2\_advance\_tmpnum by1 \_repeat} -\_def\_crlpD{\_incr\_tmpnum \_edef\_tmpa{\_noexpand\_isinlist\_noexpand\_crlplist{,\_the\_tmpnum,}}% - \_tmpa\_iftrue \_kern-\_drulewidth \_tablinefil \_kern-\_drulewidth\_else\_hfil \_fi} - -\_def\_tskip{\_afterassignment\_tskipA \_tmpdim} -\_def\_tskipA{\_gdef\_dditem{}\_gdef\_vvitem{}\_gdef\_vvitemA{}\_gdef\_tabstrutA{}% - \_vbox to\_tmpdim{}\_ddlinedata \_crcr - \_zerotabrule \_noalign{\_gdef\_tabstrutA{\_copy\_tstrutbox}}} - -\_public \crl \crll \crli \crlli \crlp \tskip ; - - \_doc ----------------------------- - The \`\mspan``{<number>}[<declaration>]{<text>}` macro generates similar `\omit\span\omit\span` - sequence as plain \TeX/ macro `\multispan`. Moreover, it uses \^`\_scantabdata` to - convert `<declaration>` from `\table` syntax to `\halign` syntax. - \_cod ----------------------------- - -\_def\_mspan{\_omit \_afterassignment\_mspanA \_mscount=} -\_def\_mspanA[#1]#2{\_loop \_ifnum\_mscount>1 \_cs{_span}\_omit \_advance\_mscount-1 \_repeat - \_count1=\_colnum \_colnum=0 \_def\_tmpa{}\_tabdata={}\_scantabdata#1\_relax - \_colnum=\_count1 \_setbox0=\_vbox{\_halign\_ea{\_ea\_bgroup\_the\_tabdata\_egroup\_cr#2\_cr}% - \_global\_setbox8=\_lastbox}% - \_setbox0=\_hbox{\_unhbox8 \_unskip \_global\_setbox8=\_lastbox}% - \_unhbox8 \_ignorespaces} -\_public \mspan ; - - \_doc ----------------------------- - The \`\vspan``<number>{<text>}` implementation is here. - We need to lower the box by - \begtt \catcode`\<=13 - (<number>-1)*(\ht+\dp of \tabstrut) / 2. - \endtt - The `#1` parameter must be a one-digit number. If you want to set more digits - then use braces. - \_cod ----------------------------- - -\_def\_vspan#1#2#{\_vspanA{#1#2}} -\_def\_vspanA#1#2{\_vtop to\_zo{\_hbox{\_lower \_dimexpr - #1\_dimexpr(\_ht\_tstrutbox+\_dp\_tstrutbox)/2\_relax - -\_dimexpr(\_ht\_tstrutbox+\_dp\_tstrutbox)/2\_relax \_hbox{#2}}\_vss}} -\_public \vspan ; - - \_doc ----------------------------- - The parameters of primitive `\vrule` and `\hrule` keeps the rule \"last wins". - If we re-define `\hrule` to `\_orihrule height1pt` then each usage - of redefined `\hrule` uses `1pt` height if this parameter isn't - overwritten by another following `height` parameter. This principle is used for - settings another default rule thickness than 0.4\,pt by the macro - \`\rulewidth`. - \_cod ----------------------------- - -\_newdimen\_drulewidth \_drulewidth=0.4pt -\_let\_orihrule=\_hrule \_let\_orivrule=\_vrule -\_def\_rulewidth{\_afterassignment\_rulewidthA \_drulewidth} -\_def\_rulewidthA{\_edef\_hrule{\_orihrule height\_drulewidth}% - \_edef\_vrule{\_orivrule width\_drulewidth}% - \_let\_rulewidth=\_drulewidth - \_public \vrule \hrule \rulewidth;} -\_public \rulewidth ; - - \_doc ----------------------------- - The \`\frame``{<text>}` uses \"\code{\\vbox} in \code{\\vtop}" trick in order to keep the - baseline of the internal text at the same level as outer baseline. - User can write `\frame{abcxyz}` in normal paragraph line, for example - and gets the expected result: \frame{abcxyz}. - The internal margins are set by `\vvkern` and `\hhkern` parameters. - \_cod ----------------------------- - -\_long\_def\_frame#1{% - \_hbox{\_vrule\_vtop{\_vbox{\_hrule\_kern\_vvkern - \_hbox{\_kern\_hhkern\_relax#1\_kern\_hhkern}% - }\_kern\_vvkern\_hrule}\_vrule}} -\_public \frame ; - - \_doc ----------------------------- - \`\eqbox` and \`\eqboxsize` are implemented here. The widths of - all `\eqbox`es are saved to the `.ref` file in the format - \`\_Xeqbox``{<label>}{<size>}`. The `.ref` file is read again and maximum - box width for each <label> is saved to `\_eqb:<label>`. - \_cod ----------------------------- - -\_def\_Xeqbox#1#2{% - \_ifcsname _eqb:#1\_endcsname - \_ifdim #2>\_cs{_eqb:#1}\_relax \_sdef{_eqb:#1}{#2}\_fi - \_else \_sdef{_eqb:#1}{#2}\_fi -} -\_def\_eqbox #1[#2]#3{\_setbox0=\_hbox{{#3}}% - \_openref \_immediate\_wref \_Xeqbox{{#2}{\_the\_wd0}}% - \_ifcsname _eqb:#2\_endcsname - \_hbox to\_cs{_eqb:#2}{\_ifx r#1\_hfill\_fi\_hss\_unhbox0\_hss\_ifx l#1\_hfill\_fi}% - \_else \_box0 \_fi -} -\_def\_eqboxsize [#1]#2{\_trycs{_eqb:#1}{#2}} - -\public \eqbox \eqboxsize ; - -\_endcode % ------------------------------------- - -\secc[table.bound] The boundary declarator \code{:} - -The `<declaration>` part of `\table{<declaration>}{<data>}` includes -column declarators (letters) and other material: the `|` or `(<cmd>)`. -If the boundary declarator `:` is not used then -the boundaries of columns are just before each column declarator -with exception of the first one. -For example, the declaration `{|c||c(xx)(yy)c}` -should be written more exactly using the boundary declarator `:` -by `{|c||:c(xx)(yy):c}`. But you can set these boundaries to -other places using the boundary declarator~`:` explicitly, -for example `{|c:||c(xx):(yy)c}`. The boundary declarator `:` -can be used only once between each pair of column declarators. - -Each table item has its group. The `(<cmd>)` are parts of the given -table item (depending on the boundary declarator position). -If you want to apply a special setting for a given column, you can do this by -`(<setting>)` followed by column declarator. But if the column is not -first, you must use `:(<setting>)`. Example. We have three centered columns, -the second one have to be in bold font and the third one have to be in red: -`\table{c:(\bf)c:(\Red)c}{<data>}` - -\secc Usage of the \code{\\tabskip} primitive - -The value of `\tabskip` primitive is used between all columns of the table. -It is glue-type, so it can be stretchable or shrinkable, see next -section~\ref[table.w]. - -By default, `\tabskip` is 0\,pt. It means that only \^`\tabiteml`, -\^`\tabitemr` and `(<cmds>)` can generate visual spaces between columns. But they -are not real spaces between columns because they are in fact the part of -the total column width. - -The `\tabskip` value declared before the \^`\table` macro (or in -\^`\everytable` or in \^`\thistable`) is used between all columns in the table. -This value is equal to all spaces between columns. But you can set each such space -individually if you use `(\tabskip=<value>)` in the <declaration> immediately -before boundary character. The boundary character represents the column pair for -which the `\tabskip` has individual value. For example -`c(\tabskip=5pt):r` gives `\tabskip` value between `c` and `r` columns. -You need not use boundary character explicitly, so `c(\tabskip=5pt)r` gives -the same result. - -Space before the first column is given by the \^`\tabskipl` -and space after the last column is equal to \^`\tabskipr`. -Default values are 0\,pt. - -Use nonzero `\tabskip` only in special applications. If `\tabskip` is -nonzero then horizontal lines generated by \^`\crli`, \^`\crlli` and \^`\crlp` -have another behavior than you probably expected: they are interrupted in -each `\tabskip` space. - -\secc[table.w] Tables to given width - -There are two possibilities how to create tables to given width: - -\begitems -* `\table to<size>{<declaration>}{<data>}` uses stretchability or - shrinkability of all spaces between columns generated by `\tabskip` value and - eventually by \^`\tabskipl`, \^`\tabskipr` values. See example below. -* `\table pxto<size>{<declaration>}{<data>}` expands the columns declared - by `p{<size>}`, if the `<size>` is given by a virtual \^`\tsize` unit. - See the example below. -\enditems - -Example of `\table to<size>`: - -\begtt \catcode`\<=13 -\thistable{\tabskip=0pt plus1fil minus1fil} -\table to\hsize {lr}{<data>} -\endtt -% -This table has its width `\hsize`. The first column starts at the left boundary of -this table and it is justified left (to the boundary). The second column ends at -the right boundary of the table and it is justified right (to the boundary). -The space between them is stretchable and shrinkable to reach -the given width `\hsize`. - -\medskip -Example of `\table pxto<size>` (means \"{\bf p}aragraphs e{\bf x}panded {\bf to}"): - -\begtt -\table pxto\hsize {|c|p{\tsize}|}{\crl - aaa & Ddkas jd dsjds ds cgha sfgs dd fddzf dfhz xxz - dras ffg hksd kds d sdjds h sd jd dsjds ds cgha - sfgs dd fddzf dfhz xxz. \crl - bb ddd ggg & Dsjds ds cgha sfgs dd fddzf dfhz xxz - ddkas jd dsjds ds cgha sfgs dd fddzf. \crl } -\endtt - -\noindent\table pxto\hsize {|c|p{\tsize}|}{\crl - aaa & Ddkas jd dsjds ds cgha sfgs dd fddzf dfhz xxz - dras ffg hksd kds d sdjds h sd jd dsjds ds cgha - sfgs dd fddzf dfhz xxz. \crl - bb ddd ggg & Dsjds ds cgha sfgs dd fddzf dfhz xxz - ddkas jd dsjds ds cgha sfgs dd fddzf. \crl } -\medskip - -The first `c` column is variable width (it gets the width of the most wide item) -and the resting space to given `\hsize` is filled by the `p` column. - -You can declare more than one `p{<coefficient>\tsize}` columns in the table -when `pxto` keyword is used. The total sum of <coefficinets> must be exactly one. -For example, - -\begtt \catcode`\<=13 -\table pxto13cm {r p{.3\tsize} p{.5\tsize} p{.2\tsize} l}{<data>} -\endtt -% -This gives the ratio of widths of individual paragraphs in the table. - -\secc `\eqbox`: boxes with equal width across the whole document - -The \^`\eqbox` `[<label>]{<text>}` behaves like `\hbox{<text>}` in the first -run of \TeX. But the widths of all boxes with the same label are saved to -`.ref` file and the maximum box width for each label is calculated at the -beginning of the next \TeX/ run. Then \^`\eqbox`~`[<label>]{<text>}` behaves -like `\hbox to <dim:label> {\hss <text>\hss}`, where <dim:label> is -the maximum width of all boxes -labeled by the same `[<label>]`. The documentation of the \LaTeX/ package -`eqparbox` includes more information and tips. - -The \^`\eqboxsize` `[<label>]{<dimen>}` expands to <dim:label> if this value is known, -else it expands to the given <dimen>. - -The optional parameter `r` or `l` can be written before `[<label>]` (for example -`\eqbox r[label]{text}`) if you want to put the text to the right or to the -left side of the box width. - -Try the following example and watch what happens after first \TeX/ run and -after the second one. - -\begtt -\def\leftitem#1{\par - \noindent \hangindent=\eqboxsize[items]{2em}\hangafter=1 - \eqbox r[items]{#1 }\ignorespaces} - -\leftitem {\bf first} \lorem[1] -\leftitem {\bf second one} \lorem[2] -\leftitem {\bf final} \lorem[3] -\endtt - - -\_endinput - -2021-03-09 \_tablepxpreset introduced -2021-02-15 \_expandafter -> \_ea -2021-01-27 \_tableB: \long\def added, \vspan syntax improved -2020-05-26 \eqbox implemented -2020-05-20 \colnum implemented. - \vspan implemented. -2020-05-19 \fL, \fR ets defined. - \table to, \table pxto implemented. -2020-05-10 \bgroup &\egroup added to tabdata (in order to \aftergroup from colors) - boundary declarator : introduced - \_unsskip: \ifmmode added. -2020-04-10 second group for items in order to \localcolors diff --git a/macros/luatex/optex/base/uni-lcuc.opm b/macros/luatex/optex/base/uni-lcuc.opm deleted file mode 100644 index 2a99f52d66..0000000000 --- a/macros/luatex/optex/base/uni-lcuc.opm +++ /dev/null @@ -1,15944 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% Preloaded in format. A copy o uni-lcuc.tex fom csplain is here: - -% uni-lcuc.tex -- sets \lccodes and \uccodes for Unicode chars, nothing more -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Petr Olsak, Jul. 2014 - -\_wterm{Setting lccodes and uccodes for Unicode characters} - -\_def\_tmp #1 #2 {\_ifx^#1^\_else - \_lccode"#1="#1 - \_ifx.#2% - \_uccode"#1="#1 - \_else - \_uccode"#2="#2 - \_lccode"#2="#1 - \_uccode"#1="#2 - \_fi - \_ea \_tmp \_fi -} -\_tmp -00AA . -00B5 039C -00BA . -00E0 00C0 -00E1 00C1 -00E2 00C2 -00E3 00C3 -00E4 00C4 -00E5 00C5 -00E6 00C6 -00E7 00C7 -00E8 00C8 -00E9 00C9 -00EA 00CA -00EB 00CB -00EC 00CC -00ED 00CD -00EE 00CE -00EF 00CF -00F0 00D0 -00F1 00D1 -00F2 00D2 -00F3 00D3 -00F4 00D4 -00F5 00D5 -00F6 00D6 -00F8 00D8 -00F9 00D9 -00FA 00DA -00FB 00DB -00FC 00DC -00FD 00DD -00FE 00DE -00DF . -00FF 0178 -0101 0100 -0103 0102 -0105 0104 -0107 0106 -0109 0108 -010B 010A -010D 010C -010F 010E -0111 0110 -0113 0112 -0115 0114 -0117 0116 -0119 0118 -011B 011A -011D 011C -011F 011E -0121 0120 -0123 0122 -0125 0124 -0127 0126 -0129 0128 -012B 012A -012D 012C -012F 012E -0133 0132 -0135 0134 -0137 0136 -0138 . -013A 0139 -013C 013B -013E 013D -0140 013F -0142 0141 -0144 0143 -0146 0145 -0148 0147 -0149 . -014B 014A -014D 014C -014F 014E -0151 0150 -0153 0152 -0155 0154 -0157 0156 -0159 0158 -015B 015A -015D 015C -015F 015E -0161 0160 -0163 0162 -0165 0164 -0167 0166 -0169 0168 -016B 016A -016D 016C -016F 016E -0171 0170 -0173 0172 -0175 0174 -0177 0176 -017A 0179 -017C 017B -017E 017D -0180 0243 -0253 0181 -0183 0182 -0185 0184 -0254 0186 -0188 0187 -0256 0189 -0257 018A -018C 018B -018D . -01DD 018E -0259 018F -025B 0190 -0192 0191 -0260 0193 -0263 0194 -0195 01F6 -0269 0196 -0268 0197 -0199 0198 -019A 023D -019B . -026F 019C -0272 019D -019E 0220 -0275 019F -01A1 01A0 -01A3 01A2 -01A5 01A4 -0280 01A6 -01A8 01A7 -0283 01A9 -01AA . -01AB . -01AD 01AC -0288 01AE -01B0 01AF -028A 01B1 -028B 01B2 -01B4 01B3 -01B6 01B5 -0292 01B7 -01B9 01B8 -01BA . -01BB . -01BD 01BC -01BE . -01BF 01F7 -01C0 . -01C1 . -01C2 . -01C3 . -01C6 01C4 -01C9 01C7 -01CC 01CA -01CE 01CD -01D0 01CF -01D2 01D1 -01D4 01D3 -01D6 01D5 -01D8 01D7 -01DA 01D9 -01DC 01DB -01DF 01DE -01E1 01E0 -01E3 01E2 -01E5 01E4 -01E7 01E6 -01E9 01E8 -01EB 01EA -01ED 01EC -01EF 01EE -01F0 . -01F3 01F1 -01F5 01F4 -01F9 01F8 -01FB 01FA -01FD 01FC -01FF 01FE -0201 0200 -0203 0202 -0205 0204 -0207 0206 -0209 0208 -020B 020A -020D 020C -020F 020E -0211 0210 -0213 0212 -0215 0214 -0217 0216 -0219 0218 -021B 021A -021D 021C -021F 021E -0221 . -0223 0222 -0225 0224 -0227 0226 -0229 0228 -022B 022A -022D 022C -022F 022E -0231 0230 -0233 0232 -0234 . -0235 . -0236 . -0237 . -0238 . -0239 . -2C65 023A -023C 023B -2C66 023E -023F 2C7E -0240 2C7F -0242 0241 -0289 0244 -028C 0245 -0247 0246 -0249 0248 -024B 024A -024D 024C -024F 024E -0250 2C6F -0251 2C6D -0252 2C70 -0255 . -0258 . -025A . -025C . -025D . -025E . -025F . -0261 . -0262 . -0264 . -0265 A78D -0266 A7AA -0267 . -026A . -026B 2C62 -026C . -026D . -026E . -0270 . -0271 2C6E -0273 . -0274 . -0276 . -0277 . -0278 . -0279 . -027A . -027B . -027C . -027D 2C64 -027E . -027F . -0281 . -0282 . -0284 . -0285 . -0286 . -0287 . -028D . -028E . -028F . -0290 . -0291 . -0293 . -0294 . -0295 . -0296 . -0297 . -0298 . -0299 . -029A . -029B . -029C . -029D . -029E . -029F . -02A0 . -02A1 . -02A2 . -02A3 . -02A4 . -02A5 . -02A6 . -02A7 . -02A8 . -02A9 . -02AA . -02AB . -02AC . -02AD . -02AE . -02AF . -02B0 . -02B1 . -02B2 . -02B3 . -02B4 . -02B5 . -02B6 . -02B7 . -02B8 . -02B9 . -02BA . -02BB . -02BC . -02BD . -02BE . -02BF . -02C0 . -02C1 . -02C6 . -02C7 . -02C8 . -02C9 . -02CA . -02CB . -02CC . -02CD . -02CE . -02CF . -02D0 . -02D1 . -02E0 . -02E1 . -02E2 . -02E3 . -02E4 . -02EC . -02EE . -0371 0370 -0373 0372 -0374 . -0377 0376 -037A . -037B 03FD -037C 03FE -037D 03FF -03AC 0386 -03AD 0388 -03AE 0389 -03AF 038A -03CC 038C -03CD 038E -03CE 038F -0390 . -03B1 0391 -03B2 0392 -03B3 0393 -03B4 0394 -03B5 0395 -03B6 0396 -03B7 0397 -03B8 0398 -03B9 0399 -03BA 039A -03BB 039B -03BD 039D -03BE 039E -03BF 039F -03C0 03A0 -03C1 03A1 -03C3 03A3 -03C4 03A4 -03C5 03A5 -03C6 03A6 -03C7 03A7 -03C8 03A8 -03C9 03A9 -03CA 03AA -03CB 03AB -03B0 . -03D7 03CF -03D2 . -03D3 . -03D4 . -03D9 03D8 -03DB 03DA -03DD 03DC -03DF 03DE -03E1 03E0 -03E3 03E2 -03E5 03E4 -03E7 03E6 -03E9 03E8 -03EB 03EA -03ED 03EC -03EF 03EE -03F2 03F9 -03F3 . -03F8 03F7 -03FB 03FA -03FC . -0450 0400 -0451 0401 -0452 0402 -0453 0403 -0454 0404 -0455 0405 -0456 0406 -0457 0407 -0458 0408 -0459 0409 -045A 040A -045B 040B -045C 040C -045D 040D -045E 040E -045F 040F -0430 0410 -0431 0411 -0432 0412 -0433 0413 -0434 0414 -0435 0415 -0436 0416 -0437 0417 -0438 0418 -0439 0419 -043A 041A -043B 041B -043C 041C -043D 041D -043E 041E -043F 041F -0440 0420 -0441 0421 -0442 0422 -0443 0423 -0444 0424 -0445 0425 -0446 0426 -0447 0427 -0448 0428 -0449 0429 -044A 042A -044B 042B -044C 042C -044D 042D -044E 042E -044F 042F -0461 0460 -0463 0462 -0465 0464 -0467 0466 -0469 0468 -046B 046A -046D 046C -046F 046E -0471 0470 -0473 0472 -0475 0474 -0477 0476 -0479 0478 -047B 047A -047D 047C -047F 047E -0481 0480 -048B 048A -048D 048C -048F 048E -0491 0490 -0493 0492 -0495 0494 -0497 0496 -0499 0498 -049B 049A -049D 049C -049F 049E -04A1 04A0 -04A3 04A2 -04A5 04A4 -04A7 04A6 -04A9 04A8 -04AB 04AA -04AD 04AC -04AF 04AE -04B1 04B0 -04B3 04B2 -04B5 04B4 -04B7 04B6 -04B9 04B8 -04BB 04BA -04BD 04BC -04BF 04BE -04CF 04C0 -04C2 04C1 -04C4 04C3 -04C6 04C5 -04C8 04C7 -04CA 04C9 -04CC 04CB -04CE 04CD -04D1 04D0 -04D3 04D2 -04D5 04D4 -04D7 04D6 -04D9 04D8 -04DB 04DA -04DD 04DC -04DF 04DE -04E1 04E0 -04E3 04E2 -04E5 04E4 -04E7 04E6 -04E9 04E8 -04EB 04EA -04ED 04EC -04EF 04EE -04F1 04F0 -04F3 04F2 -04F5 04F4 -04F7 04F6 -04F9 04F8 -04FB 04FA -04FD 04FC -04FF 04FE -0501 0500 -0503 0502 -0505 0504 -0507 0506 -0509 0508 -050B 050A -050D 050C -050F 050E -0511 0510 -0513 0512 -0515 0514 -0517 0516 -0519 0518 -051B 051A -051D 051C -051F 051E -0521 0520 -0523 0522 -0525 0524 -0527 0526 -0561 0531 -0562 0532 -0563 0533 -0564 0534 -0565 0535 -0566 0536 -0567 0537 -0568 0538 -0569 0539 -056A 053A -056B 053B -056C 053C -056D 053D -056E 053E -056F 053F -0570 0540 -0571 0541 -0572 0542 -0573 0543 -0574 0544 -0575 0545 -0576 0546 -0577 0547 -0578 0548 -0579 0549 -057A 054A -057B 054B -057C 054C -057D 054D -057E 054E -057F 054F -0580 0550 -0581 0551 -0582 0552 -0583 0553 -0584 0554 -0585 0555 -0586 0556 -0559 . -0587 . -05D0 . -05D1 . -05D2 . -05D3 . -05D4 . -05D5 . -05D6 . -05D7 . -05D8 . -05D9 . -05DA . -05DB . -05DC . -05DD . -05DE . -05DF . -05E0 . -05E1 . -05E2 . -05E3 . -05E4 . -05E5 . -05E6 . -05E7 . -05E8 . -05E9 . -05EA . -05F0 . -05F1 . -05F2 . -0620 . -0621 . -0622 . -0623 . -0624 . -0625 . -0626 . -0627 . -0628 . -0629 . -062A . -062B . -062C . -062D . -062E . -062F . -0630 . -0631 . -0632 . -0633 . -0634 . -0635 . -0636 . -0637 . -0638 . -0639 . -063A . -063B . -063C . -063D . -063E . -063F . -0640 . -0641 . -0642 . -0643 . -0644 . -0645 . -0646 . -0647 . -0648 . -0649 . -064A . -066E . -066F . -0671 . -0672 . -0673 . -0674 . -0675 . -0676 . -0677 . -0678 . -0679 . -067A . -067B . -067C . -067D . -067E . -067F . -0680 . -0681 . -0682 . -0683 . -0684 . -0685 . -0686 . -0687 . -0688 . -0689 . -068A . -068B . -068C . -068D . -068E . -068F . -0690 . -0691 . -0692 . -0693 . -0694 . -0695 . -0696 . -0697 . -0698 . -0699 . -069A . -069B . -069C . -069D . -069E . -069F . -06A0 . -06A1 . -06A2 . -06A3 . -06A4 . -06A5 . -06A6 . -06A7 . -06A8 . -06A9 . -06AA . -06AB . -06AC . -06AD . -06AE . -06AF . -06B0 . -06B1 . -06B2 . -06B3 . -06B4 . -06B5 . -06B6 . -06B7 . -06B8 . -06B9 . -06BA . -06BB . -06BC . -06BD . -06BE . -06BF . -06C0 . -06C1 . -06C2 . -06C3 . -06C4 . -06C5 . -06C6 . -06C7 . -06C8 . -06C9 . -06CA . -06CB . -06CC . -06CD . -06CE . -06CF . -06D0 . -06D1 . -06D2 . -06D3 . -06D5 . -06E5 . -06E6 . -06EE . -06EF . -06FA . -06FB . -06FC . -06FF . -0710 . -0712 . -0713 . -0714 . -0715 . -0716 . -0717 . -0718 . -0719 . -071A . -071B . -071C . -071D . -071E . -071F . -0720 . -0721 . -0722 . -0723 . -0724 . -0725 . -0726 . -0727 . -0728 . -0729 . -072A . -072B . -072C . -072D . -072E . -072F . -074D . -074E . -074F . -0750 . -0751 . -0752 . -0753 . -0754 . -0755 . -0756 . -0757 . -0758 . -0759 . -075A . -075B . -075C . -075D . -075E . -075F . -0760 . -0761 . -0762 . -0763 . -0764 . -0765 . -0766 . -0767 . -0768 . -0769 . -076A . -076B . -076C . -076D . -076E . -076F . -0770 . -0771 . -0772 . -0773 . -0774 . -0775 . -0776 . -0777 . -0778 . -0779 . -077A . -077B . -077C . -077D . -077E . -077F . -0780 . -0781 . -0782 . -0783 . -0784 . -0785 . -0786 . -0787 . -0788 . -0789 . -078A . -078B . -078C . -078D . -078E . -078F . -0790 . -0791 . -0792 . -0793 . -0794 . -0795 . -0796 . -0797 . -0798 . -0799 . -079A . -079B . -079C . -079D . -079E . -079F . -07A0 . -07A1 . -07A2 . -07A3 . -07A4 . -07A5 . -07B1 . -07CA . -07CB . -07CC . -07CD . -07CE . -07CF . -07D0 . -07D1 . -07D2 . -07D3 . -07D4 . -07D5 . -07D6 . -07D7 . -07D8 . -07D9 . -07DA . -07DB . -07DC . -07DD . -07DE . -07DF . -07E0 . -07E1 . -07E2 . -07E3 . -07E4 . -07E5 . -07E6 . -07E7 . -07E8 . -07E9 . -07EA . -07F4 . -07F5 . -07FA . -0800 . -0801 . -0802 . -0803 . -0804 . -0805 . -0806 . -0807 . -0808 . -0809 . -080A . -080B . -080C . -080D . -080E . -080F . -0810 . -0811 . -0812 . -0813 . -0814 . -0815 . -081A . -0824 . -0828 . -0840 . -0841 . -0842 . -0843 . -0844 . -0845 . -0846 . -0847 . -0848 . -0849 . -084A . -084B . -084C . -084D . -084E . -084F . -0850 . -0851 . -0852 . -0853 . -0854 . -0855 . -0856 . -0857 . -0858 . -08A0 . -08A2 . -08A3 . -08A4 . -08A5 . -08A6 . -08A7 . -08A8 . -08A9 . -08AA . -08AB . -08AC . -0904 . -0905 . -0906 . -0907 . -0908 . -0909 . -090A . -090B . -090C . -090D . -090E . -090F . -0910 . -0911 . -0912 . -0913 . -0914 . -0915 . -0916 . -0917 . -0918 . -0919 . -091A . -091B . -091C . -091D . -091E . -091F . -0920 . -0921 . -0922 . -0923 . -0924 . -0925 . -0926 . -0927 . -0928 . -0929 . -092A . -092B . -092C . -092D . -092E . -092F . -0930 . -0931 . -0932 . -0933 . -0934 . -0935 . -0936 . -0937 . -0938 . -0939 . -093D . -0950 . -0958 . -0959 . -095A . -095B . -095C . -095D . -095E . -095F . -0960 . -0961 . -0971 . -0972 . -0973 . -0974 . -0975 . -0976 . -0977 . -0979 . -097A . -097B . -097C . -097D . -097E . -097F . -0985 . -0986 . -0987 . -0988 . -0989 . -098A . -098B . -098C . -098F . -0990 . -0993 . -0994 . -0995 . -0996 . -0997 . -0998 . -0999 . -099A . -099B . -099C . -099D . -099E . -099F . -09A0 . -09A1 . -09A2 . -09A3 . -09A4 . -09A5 . -09A6 . -09A7 . -09A8 . -09AA . -09AB . -09AC . -09AD . -09AE . -09AF . -09B0 . -09B2 . -09B6 . -09B7 . -09B8 . -09B9 . -09BD . -09CE . -09DC . -09DD . -09DF . -09E0 . -09E1 . -09F0 . -09F1 . -0A05 . -0A06 . -0A07 . -0A08 . -0A09 . -0A0A . -0A0F . -0A10 . -0A13 . -0A14 . -0A15 . -0A16 . -0A17 . -0A18 . -0A19 . -0A1A . -0A1B . -0A1C . -0A1D . -0A1E . -0A1F . -0A20 . -0A21 . -0A22 . -0A23 . -0A24 . -0A25 . -0A26 . -0A27 . -0A28 . -0A2A . -0A2B . -0A2C . -0A2D . -0A2E . -0A2F . -0A30 . -0A32 . -0A33 . -0A35 . -0A36 . -0A38 . -0A39 . -0A59 . -0A5A . -0A5B . -0A5C . -0A5E . -0A72 . -0A73 . -0A74 . -0A85 . -0A86 . -0A87 . -0A88 . -0A89 . -0A8A . -0A8B . -0A8C . -0A8D . -0A8F . -0A90 . -0A91 . -0A93 . -0A94 . -0A95 . -0A96 . -0A97 . -0A98 . -0A99 . -0A9A . -0A9B . -0A9C . -0A9D . -0A9E . -0A9F . -0AA0 . -0AA1 . -0AA2 . -0AA3 . -0AA4 . -0AA5 . -0AA6 . -0AA7 . -0AA8 . -0AAA . -0AAB . -0AAC . -0AAD . -0AAE . -0AAF . -0AB0 . -0AB2 . -0AB3 . -0AB5 . -0AB6 . -0AB7 . -0AB8 . -0AB9 . -0ABD . -0AD0 . -0AE0 . -0AE1 . -0B05 . -0B06 . -0B07 . -0B08 . -0B09 . -0B0A . -0B0B . -0B0C . -0B0F . -0B10 . -0B13 . -0B14 . -0B15 . -0B16 . -0B17 . -0B18 . -0B19 . -0B1A . -0B1B . -0B1C . -0B1D . -0B1E . -0B1F . -0B20 . -0B21 . -0B22 . -0B23 . -0B24 . -0B25 . -0B26 . -0B27 . -0B28 . -0B2A . -0B2B . -0B2C . -0B2D . -0B2E . -0B2F . -0B30 . -0B32 . -0B33 . -0B35 . -0B36 . -0B37 . -0B38 . -0B39 . -0B3D . -0B5C . -0B5D . -0B5F . -0B60 . -0B61 . -0B71 . -0B83 . -0B85 . -0B86 . -0B87 . -0B88 . -0B89 . -0B8A . -0B8E . -0B8F . -0B90 . -0B92 . -0B93 . -0B94 . -0B95 . -0B99 . -0B9A . -0B9C . -0B9E . -0B9F . -0BA3 . -0BA4 . -0BA8 . -0BA9 . -0BAA . -0BAE . -0BAF . -0BB0 . -0BB1 . -0BB2 . -0BB3 . -0BB4 . -0BB5 . -0BB6 . -0BB7 . -0BB8 . -0BB9 . -0BD0 . -0C05 . -0C06 . -0C07 . -0C08 . -0C09 . -0C0A . -0C0B . -0C0C . -0C0E . -0C0F . -0C10 . -0C12 . -0C13 . -0C14 . -0C15 . -0C16 . -0C17 . -0C18 . -0C19 . -0C1A . -0C1B . -0C1C . -0C1D . -0C1E . -0C1F . -0C20 . -0C21 . -0C22 . -0C23 . -0C24 . -0C25 . -0C26 . -0C27 . -0C28 . -0C2A . -0C2B . -0C2C . -0C2D . -0C2E . -0C2F . -0C30 . -0C31 . -0C32 . -0C33 . -0C35 . -0C36 . -0C37 . -0C38 . -0C39 . -0C3D . -0C58 . -0C59 . -0C60 . -0C61 . -0C85 . -0C86 . -0C87 . -0C88 . -0C89 . -0C8A . -0C8B . -0C8C . -0C8E . -0C8F . -0C90 . -0C92 . -0C93 . -0C94 . -0C95 . -0C96 . -0C97 . -0C98 . -0C99 . -0C9A . -0C9B . -0C9C . -0C9D . -0C9E . -0C9F . -0CA0 . -0CA1 . -0CA2 . -0CA3 . -0CA4 . -0CA5 . -0CA6 . -0CA7 . -0CA8 . -0CAA . -0CAB . -0CAC . -0CAD . -0CAE . -0CAF . -0CB0 . -0CB1 . -0CB2 . -0CB3 . -0CB5 . -0CB6 . -0CB7 . -0CB8 . -0CB9 . -0CBD . -0CDE . -0CE0 . -0CE1 . -0CF1 . -0CF2 . -0D05 . -0D06 . -0D07 . -0D08 . -0D09 . -0D0A . -0D0B . -0D0C . -0D0E . -0D0F . -0D10 . -0D12 . -0D13 . -0D14 . -0D15 . -0D16 . -0D17 . -0D18 . -0D19 . -0D1A . -0D1B . -0D1C . -0D1D . -0D1E . -0D1F . -0D20 . -0D21 . -0D22 . -0D23 . -0D24 . -0D25 . -0D26 . -0D27 . -0D28 . -0D29 . -0D2A . -0D2B . -0D2C . -0D2D . -0D2E . -0D2F . -0D30 . -0D31 . -0D32 . -0D33 . -0D34 . -0D35 . -0D36 . -0D37 . -0D38 . -0D39 . -0D3A . -0D3D . -0D4E . -0D60 . -0D61 . -0D7A . -0D7B . -0D7C . -0D7D . -0D7E . -0D7F . -0D85 . -0D86 . -0D87 . -0D88 . -0D89 . -0D8A . -0D8B . -0D8C . -0D8D . -0D8E . -0D8F . -0D90 . -0D91 . -0D92 . -0D93 . -0D94 . -0D95 . -0D96 . -0D9A . -0D9B . -0D9C . -0D9D . -0D9E . -0D9F . -0DA0 . -0DA1 . -0DA2 . -0DA3 . -0DA4 . -0DA5 . -0DA6 . -0DA7 . -0DA8 . -0DA9 . -0DAA . -0DAB . -0DAC . -0DAD . -0DAE . -0DAF . -0DB0 . -0DB1 . -0DB3 . -0DB4 . -0DB5 . -0DB6 . -0DB7 . -0DB8 . -0DB9 . -0DBA . -0DBB . -0DBD . -0DC0 . -0DC1 . -0DC2 . -0DC3 . -0DC4 . -0DC5 . -0DC6 . -0E01 . -0E02 . -0E03 . -0E04 . -0E05 . -0E06 . -0E07 . -0E08 . -0E09 . -0E0A . -0E0B . -0E0C . -0E0D . -0E0E . -0E0F . -0E10 . -0E11 . -0E12 . -0E13 . -0E14 . -0E15 . -0E16 . -0E17 . -0E18 . -0E19 . -0E1A . -0E1B . -0E1C . -0E1D . -0E1E . -0E1F . -0E20 . -0E21 . -0E22 . -0E23 . -0E24 . -0E25 . -0E26 . -0E27 . -0E28 . -0E29 . -0E2A . -0E2B . -0E2C . -0E2D . -0E2E . -0E2F . -0E30 . -0E32 . -0E33 . -0E40 . -0E41 . -0E42 . -0E43 . -0E44 . -0E45 . -0E46 . -0E81 . -0E82 . -0E84 . -0E87 . -0E88 . -0E8A . -0E8D . -0E94 . -0E95 . -0E96 . -0E97 . -0E99 . -0E9A . -0E9B . -0E9C . -0E9D . -0E9E . -0E9F . -0EA1 . -0EA2 . -0EA3 . -0EA5 . -0EA7 . -0EAA . -0EAB . -0EAD . -0EAE . -0EAF . -0EB0 . -0EB2 . -0EB3 . -0EBD . -0EC0 . -0EC1 . -0EC2 . -0EC3 . -0EC4 . -0EC6 . -0EDC . -0EDD . -0EDE . -0EDF . -0F00 . -0F40 . -0F41 . -0F42 . -0F43 . -0F44 . -0F45 . -0F46 . -0F47 . -0F49 . -0F4A . -0F4B . -0F4C . -0F4D . -0F4E . -0F4F . -0F50 . -0F51 . -0F52 . -0F53 . -0F54 . -0F55 . -0F56 . -0F57 . -0F58 . -0F59 . -0F5A . -0F5B . -0F5C . -0F5D . -0F5E . -0F5F . -0F60 . -0F61 . -0F62 . -0F63 . -0F64 . -0F65 . -0F66 . -0F67 . -0F68 . -0F69 . -0F6A . -0F6B . -0F6C . -0F88 . -0F89 . -0F8A . -0F8B . -0F8C . -1000 . -1001 . -1002 . -1003 . -1004 . -1005 . -1006 . -1007 . -1008 . -1009 . -100A . -100B . -100C . -100D . -100E . -100F . -1010 . -1011 . -1012 . -1013 . -1014 . -1015 . -1016 . -1017 . -1018 . -1019 . -101A . -101B . -101C . -101D . -101E . -101F . -1020 . -1021 . -1022 . -1023 . -1024 . -1025 . -1026 . -1027 . -1028 . -1029 . -102A . -103F . -1050 . -1051 . -1052 . -1053 . -1054 . -1055 . -105A . -105B . -105C . -105D . -1061 . -1065 . -1066 . -106E . -106F . -1070 . -1075 . -1076 . -1077 . -1078 . -1079 . -107A . -107B . -107C . -107D . -107E . -107F . -1080 . -1081 . -108E . -2D00 10A0 -2D01 10A1 -2D02 10A2 -2D03 10A3 -2D04 10A4 -2D05 10A5 -2D06 10A6 -2D07 10A7 -2D08 10A8 -2D09 10A9 -2D0A 10AA -2D0B 10AB -2D0C 10AC -2D0D 10AD -2D0E 10AE -2D0F 10AF -2D10 10B0 -2D11 10B1 -2D12 10B2 -2D13 10B3 -2D14 10B4 -2D15 10B5 -2D16 10B6 -2D17 10B7 -2D18 10B8 -2D19 10B9 -2D1A 10BA -2D1B 10BB -2D1C 10BC -2D1D 10BD -2D1E 10BE -2D1F 10BF -2D20 10C0 -2D21 10C1 -2D22 10C2 -2D23 10C3 -2D24 10C4 -2D25 10C5 -2D27 10C7 -2D2D 10CD -10D0 . -10D1 . -10D2 . -10D3 . -10D4 . -10D5 . -10D6 . -10D7 . -10D8 . -10D9 . -10DA . -10DB . -10DC . -10DD . -10DE . -10DF . -10E0 . -10E1 . -10E2 . -10E3 . -10E4 . -10E5 . -10E6 . -10E7 . -10E8 . -10E9 . -10EA . -10EB . -10EC . -10ED . -10EE . -10EF . -10F0 . -10F1 . -10F2 . -10F3 . -10F4 . -10F5 . -10F6 . -10F7 . -10F8 . -10F9 . -10FA . -10FC . -10FD . -10FE . -10FF . -1100 . -1101 . -1102 . -1103 . -1104 . -1105 . -1106 . -1107 . -1108 . -1109 . -110A . -110B . -110C . -110D . -110E . -110F . -1110 . -1111 . -1112 . -1113 . -1114 . -1115 . -1116 . -1117 . -1118 . -1119 . -111A . -111B . -111C . -111D . -111E . -111F . -1120 . -1121 . -1122 . -1123 . -1124 . -1125 . -1126 . -1127 . -1128 . -1129 . -112A . -112B . -112C . -112D . -112E . -112F . -1130 . -1131 . -1132 . -1133 . -1134 . -1135 . -1136 . -1137 . -1138 . -1139 . -113A . -113B . -113C . -113D . -113E . -113F . -1140 . -1141 . -1142 . -1143 . -1144 . -1145 . -1146 . -1147 . -1148 . -1149 . -114A . -114B . -114C . -114D . -114E . -114F . -1150 . -1151 . -1152 . -1153 . -1154 . -1155 . -1156 . -1157 . -1158 . -1159 . -115A . -115B . -115C . -115D . -115E . -115F . -1160 . -1161 . -1162 . -1163 . -1164 . -1165 . -1166 . -1167 . -1168 . -1169 . -116A . -116B . -116C . -116D . -116E . -116F . -1170 . -1171 . -1172 . -1173 . -1174 . -1175 . -1176 . -1177 . -1178 . -1179 . -117A . -117B . -117C . -117D . -117E . -117F . -1180 . -1181 . -1182 . -1183 . -1184 . -1185 . -1186 . -1187 . -1188 . -1189 . -118A . -118B . -118C . -118D . -118E . -118F . -1190 . -1191 . -1192 . -1193 . -1194 . -1195 . -1196 . -1197 . -1198 . -1199 . -119A . -119B . -119C . -119D . -119E . -119F . -11A0 . -11A1 . -11A2 . -11A3 . -11A4 . -11A5 . -11A6 . -11A7 . -11A8 . -11A9 . -11AA . -11AB . -11AC . -11AD . -11AE . -11AF . -11B0 . -11B1 . -11B2 . -11B3 . -11B4 . -11B5 . -11B6 . -11B7 . -11B8 . -11B9 . -11BA . -11BB . -11BC . -11BD . -11BE . -11BF . -11C0 . -11C1 . -11C2 . -11C3 . -11C4 . -11C5 . -11C6 . -11C7 . -11C8 . -11C9 . -11CA . -11CB . -11CC . -11CD . -11CE . -11CF . -11D0 . -11D1 . -11D2 . -11D3 . -11D4 . -11D5 . -11D6 . -11D7 . -11D8 . -11D9 . -11DA . -11DB . -11DC . -11DD . -11DE . -11DF . -11E0 . -11E1 . -11E2 . -11E3 . -11E4 . -11E5 . -11E6 . -11E7 . -11E8 . -11E9 . -11EA . -11EB . -11EC . -11ED . -11EE . -11EF . -11F0 . -11F1 . -11F2 . -11F3 . -11F4 . -11F5 . -11F6 . -11F7 . -11F8 . -11F9 . -11FA . -11FB . -11FC . -11FD . -11FE . -11FF . -1200 . -1201 . -1202 . -1203 . -1204 . -1205 . -1206 . -1207 . -1208 . -1209 . -120A . -120B . -120C . -120D . -120E . -120F . -1210 . -1211 . -1212 . -1213 . -1214 . -1215 . -1216 . -1217 . -1218 . -1219 . -121A . -121B . -121C . -121D . -121E . -121F . -1220 . -1221 . -1222 . -1223 . -1224 . -1225 . -1226 . -1227 . -1228 . -1229 . -122A . -122B . -122C . -122D . -122E . -122F . -1230 . -1231 . -1232 . -1233 . -1234 . -1235 . -1236 . -1237 . -1238 . -1239 . -123A . -123B . -123C . -123D . -123E . -123F . -1240 . -1241 . -1242 . -1243 . -1244 . -1245 . -1246 . -1247 . -1248 . -124A . -124B . -124C . -124D . -1250 . -1251 . -1252 . -1253 . -1254 . -1255 . -1256 . -1258 . -125A . -125B . -125C . -125D . -1260 . -1261 . -1262 . -1263 . -1264 . -1265 . -1266 . -1267 . -1268 . -1269 . -126A . -126B . -126C . -126D . -126E . -126F . -1270 . -1271 . -1272 . -1273 . -1274 . -1275 . -1276 . -1277 . -1278 . -1279 . -127A . -127B . -127C . -127D . -127E . -127F . -1280 . -1281 . -1282 . -1283 . -1284 . -1285 . -1286 . -1287 . -1288 . -128A . -128B . -128C . -128D . -1290 . -1291 . -1292 . -1293 . -1294 . -1295 . -1296 . -1297 . -1298 . -1299 . -129A . -129B . -129C . -129D . -129E . -129F . -12A0 . -12A1 . -12A2 . -12A3 . -12A4 . -12A5 . -12A6 . -12A7 . -12A8 . -12A9 . -12AA . -12AB . -12AC . -12AD . -12AE . -12AF . -12B0 . -12B2 . -12B3 . -12B4 . -12B5 . -12B8 . -12B9 . -12BA . -12BB . -12BC . -12BD . -12BE . -12C0 . -12C2 . -12C3 . -12C4 . -12C5 . -12C8 . -12C9 . -12CA . -12CB . -12CC . -12CD . -12CE . -12CF . -12D0 . -12D1 . -12D2 . -12D3 . -12D4 . -12D5 . -12D6 . -12D8 . -12D9 . -12DA . -12DB . -12DC . -12DD . -12DE . -12DF . -12E0 . -12E1 . -12E2 . -12E3 . -12E4 . -12E5 . -12E6 . -12E7 . -12E8 . -12E9 . -12EA . -12EB . -12EC . -12ED . -12EE . -12EF . -12F0 . -12F1 . -12F2 . -12F3 . -12F4 . -12F5 . -12F6 . -12F7 . -12F8 . -12F9 . -12FA . -12FB . -12FC . -12FD . -12FE . -12FF . -1300 . -1301 . -1302 . -1303 . -1304 . -1305 . -1306 . -1307 . -1308 . -1309 . -130A . -130B . -130C . -130D . -130E . -130F . -1310 . -1312 . -1313 . -1314 . -1315 . -1318 . -1319 . -131A . -131B . -131C . -131D . -131E . -131F . -1320 . -1321 . -1322 . -1323 . -1324 . -1325 . -1326 . -1327 . -1328 . -1329 . -132A . -132B . -132C . -132D . -132E . -132F . -1330 . -1331 . -1332 . -1333 . -1334 . -1335 . -1336 . -1337 . -1338 . -1339 . -133A . -133B . -133C . -133D . -133E . -133F . -1340 . -1341 . -1342 . -1343 . -1344 . -1345 . -1346 . -1347 . -1348 . -1349 . -134A . -134B . -134C . -134D . -134E . -134F . -1350 . -1351 . -1352 . -1353 . -1354 . -1355 . -1356 . -1357 . -1358 . -1359 . -135A . -1380 . -1381 . -1382 . -1383 . -1384 . -1385 . -1386 . -1387 . -1388 . -1389 . -138A . -138B . -138C . -138D . -138E . -138F . -13A0 . -13A1 . -13A2 . -13A3 . -13A4 . -13A5 . -13A6 . -13A7 . -13A8 . -13A9 . -13AA . -13AB . -13AC . -13AD . -13AE . -13AF . -13B0 . -13B1 . -13B2 . -13B3 . -13B4 . -13B5 . -13B6 . -13B7 . -13B8 . -13B9 . -13BA . -13BB . -13BC . -13BD . -13BE . -13BF . -13C0 . -13C1 . -13C2 . -13C3 . -13C4 . -13C5 . -13C6 . -13C7 . -13C8 . -13C9 . -13CA . -13CB . -13CC . -13CD . -13CE . -13CF . -13D0 . -13D1 . -13D2 . -13D3 . -13D4 . -13D5 . -13D6 . -13D7 . -13D8 . -13D9 . -13DA . -13DB . -13DC . -13DD . -13DE . -13DF . -13E0 . -13E1 . -13E2 . -13E3 . -13E4 . -13E5 . -13E6 . -13E7 . -13E8 . -13E9 . -13EA . -13EB . -13EC . -13ED . -13EE . -13EF . -13F0 . -13F1 . -13F2 . -13F3 . -13F4 . -1401 . -1402 . -1403 . -1404 . -1405 . -1406 . -1407 . -1408 . -1409 . -140A . -140B . -140C . -140D . -140E . -140F . -1410 . -1411 . -1412 . -1413 . -1414 . -1415 . -1416 . -1417 . -1418 . -1419 . -141A . -141B . -141C . -141D . -141E . -141F . -1420 . -1421 . -1422 . -1423 . -1424 . -1425 . -1426 . -1427 . -1428 . -1429 . -142A . -142B . -142C . -142D . -142E . -142F . -1430 . -1431 . -1432 . -1433 . -1434 . -1435 . -1436 . -1437 . -1438 . -1439 . -143A . -143B . -143C . -143D . -143E . -143F . -1440 . -1441 . -1442 . -1443 . -1444 . -1445 . -1446 . -1447 . -1448 . -1449 . -144A . -144B . -144C . -144D . -144E . -144F . -1450 . -1451 . -1452 . -1453 . -1454 . -1455 . -1456 . -1457 . -1458 . -1459 . -145A . -145B . -145C . -145D . -145E . -145F . -1460 . -1461 . -1462 . -1463 . -1464 . -1465 . -1466 . -1467 . -1468 . -1469 . -146A . -146B . -146C . -146D . -146E . -146F . -1470 . -1471 . -1472 . -1473 . -1474 . -1475 . -1476 . -1477 . -1478 . -1479 . -147A . -147B . -147C . -147D . -147E . -147F . -1480 . -1481 . -1482 . -1483 . -1484 . -1485 . -1486 . -1487 . -1488 . -1489 . -148A . -148B . -148C . -148D . -148E . -148F . -1490 . -1491 . -1492 . -1493 . -1494 . -1495 . -1496 . -1497 . -1498 . -1499 . -149A . -149B . -149C . -149D . -149E . -149F . -14A0 . -14A1 . -14A2 . -14A3 . -14A4 . -14A5 . -14A6 . -14A7 . -14A8 . -14A9 . -14AA . -14AB . -14AC . -14AD . -14AE . -14AF . -14B0 . -14B1 . -14B2 . -14B3 . -14B4 . -14B5 . -14B6 . -14B7 . -14B8 . -14B9 . -14BA . -14BB . -14BC . -14BD . -14BE . -14BF . -14C0 . -14C1 . -14C2 . -14C3 . -14C4 . -14C5 . -14C6 . -14C7 . -14C8 . -14C9 . -14CA . -14CB . -14CC . -14CD . -14CE . -14CF . -14D0 . -14D1 . -14D2 . -14D3 . -14D4 . -14D5 . -14D6 . -14D7 . -14D8 . -14D9 . -14DA . -14DB . -14DC . -14DD . -14DE . -14DF . -14E0 . -14E1 . -14E2 . -14E3 . -14E4 . -14E5 . -14E6 . -14E7 . -14E8 . -14E9 . -14EA . -14EB . -14EC . -14ED . -14EE . -14EF . -14F0 . -14F1 . -14F2 . -14F3 . -14F4 . -14F5 . -14F6 . -14F7 . -14F8 . -14F9 . -14FA . -14FB . -14FC . -14FD . -14FE . -14FF . -1500 . -1501 . -1502 . -1503 . -1504 . -1505 . -1506 . -1507 . -1508 . -1509 . -150A . -150B . -150C . -150D . -150E . -150F . -1510 . -1511 . -1512 . -1513 . -1514 . -1515 . -1516 . -1517 . -1518 . -1519 . -151A . -151B . -151C . -151D . -151E . -151F . -1520 . -1521 . -1522 . -1523 . -1524 . -1525 . -1526 . -1527 . -1528 . -1529 . -152A . -152B . -152C . -152D . -152E . -152F . -1530 . -1531 . -1532 . -1533 . -1534 . -1535 . -1536 . -1537 . -1538 . -1539 . -153A . -153B . -153C . -153D . -153E . -153F . -1540 . -1541 . -1542 . -1543 . -1544 . -1545 . -1546 . -1547 . -1548 . -1549 . -154A . -154B . -154C . -154D . -154E . -154F . -1550 . -1551 . -1552 . -1553 . -1554 . -1555 . -1556 . -1557 . -1558 . -1559 . -155A . -155B . -155C . -155D . -155E . -155F . -1560 . -1561 . -1562 . -1563 . -1564 . -1565 . -1566 . -1567 . -1568 . -1569 . -156A . -156B . -156C . -156D . -156E . -156F . -1570 . -1571 . -1572 . -1573 . -1574 . -1575 . -1576 . -1577 . -1578 . -1579 . -157A . -157B . -157C . -157D . -157E . -157F . -1580 . -1581 . -1582 . -1583 . -1584 . -1585 . -1586 . -1587 . -1588 . -1589 . -158A . -158B . -158C . -158D . -158E . -158F . -1590 . -1591 . -1592 . -1593 . -1594 . -1595 . -1596 . -1597 . -1598 . -1599 . -159A . -159B . -159C . -159D . -159E . -159F . -15A0 . -15A1 . -15A2 . -15A3 . -15A4 . -15A5 . -15A6 . -15A7 . -15A8 . -15A9 . -15AA . -15AB . -15AC . -15AD . -15AE . -15AF . -15B0 . -15B1 . -15B2 . -15B3 . -15B4 . -15B5 . -15B6 . -15B7 . -15B8 . -15B9 . -15BA . -15BB . -15BC . -15BD . -15BE . -15BF . -15C0 . -15C1 . -15C2 . -15C3 . -15C4 . -15C5 . -15C6 . -15C7 . -15C8 . -15C9 . -15CA . -15CB . -15CC . -15CD . -15CE . -15CF . -15D0 . -15D1 . -15D2 . -15D3 . -15D4 . -15D5 . -15D6 . -15D7 . -15D8 . -15D9 . -15DA . -15DB . -15DC . -15DD . -15DE . -15DF . -15E0 . -15E1 . -15E2 . -15E3 . -15E4 . -15E5 . -15E6 . -15E7 . -15E8 . -15E9 . -15EA . -15EB . -15EC . -15ED . -15EE . -15EF . -15F0 . -15F1 . -15F2 . -15F3 . -15F4 . -15F5 . -15F6 . -15F7 . -15F8 . -15F9 . -15FA . -15FB . -15FC . -15FD . -15FE . -15FF . -1600 . -1601 . -1602 . -1603 . -1604 . -1605 . -1606 . -1607 . -1608 . -1609 . -160A . -160B . -160C . -160D . -160E . -160F . -1610 . -1611 . -1612 . -1613 . -1614 . -1615 . -1616 . -1617 . -1618 . -1619 . -161A . -161B . -161C . -161D . -161E . -161F . -1620 . -1621 . -1622 . -1623 . -1624 . -1625 . -1626 . -1627 . -1628 . -1629 . -162A . -162B . -162C . -162D . -162E . -162F . -1630 . -1631 . -1632 . -1633 . -1634 . -1635 . -1636 . -1637 . -1638 . -1639 . -163A . -163B . -163C . -163D . -163E . -163F . -1640 . -1641 . -1642 . -1643 . -1644 . -1645 . -1646 . -1647 . -1648 . -1649 . -164A . -164B . -164C . -164D . -164E . -164F . -1650 . -1651 . -1652 . -1653 . -1654 . -1655 . -1656 . -1657 . -1658 . -1659 . -165A . -165B . -165C . -165D . -165E . -165F . -1660 . -1661 . -1662 . -1663 . -1664 . -1665 . -1666 . -1667 . -1668 . -1669 . -166A . -166B . -166C . -166F . -1670 . -1671 . -1672 . -1673 . -1674 . -1675 . -1676 . -1677 . -1678 . -1679 . -167A . -167B . -167C . -167D . -167E . -167F . -1681 . -1682 . -1683 . -1684 . -1685 . -1686 . -1687 . -1688 . -1689 . -168A . -168B . -168C . -168D . -168E . -168F . -1690 . -1691 . -1692 . -1693 . -1694 . -1695 . -1696 . -1697 . -1698 . -1699 . -169A . -16A0 . -16A1 . -16A2 . -16A3 . -16A4 . -16A5 . -16A6 . -16A7 . -16A8 . -16A9 . -16AA . -16AB . -16AC . -16AD . -16AE . -16AF . -16B0 . -16B1 . -16B2 . -16B3 . -16B4 . -16B5 . -16B6 . -16B7 . -16B8 . -16B9 . -16BA . -16BB . -16BC . -16BD . -16BE . -16BF . -16C0 . -16C1 . -16C2 . -16C3 . -16C4 . -16C5 . -16C6 . -16C7 . -16C8 . -16C9 . -16CA . -16CB . -16CC . -16CD . -16CE . -16CF . -16D0 . -16D1 . -16D2 . -16D3 . -16D4 . -16D5 . -16D6 . -16D7 . -16D8 . -16D9 . -16DA . -16DB . -16DC . -16DD . -16DE . -16DF . -16E0 . -16E1 . -16E2 . -16E3 . -16E4 . -16E5 . -16E6 . -16E7 . -16E8 . -16E9 . -16EA . -1700 . -1701 . -1702 . -1703 . -1704 . -1705 . -1706 . -1707 . -1708 . -1709 . -170A . -170B . -170C . -170E . -170F . -1710 . -1711 . -1720 . -1721 . -1722 . -1723 . -1724 . -1725 . -1726 . -1727 . -1728 . -1729 . -172A . -172B . -172C . -172D . -172E . -172F . -1730 . -1731 . -1740 . -1741 . -1742 . -1743 . -1744 . -1745 . -1746 . -1747 . -1748 . -1749 . -174A . -174B . -174C . -174D . -174E . -174F . -1750 . -1751 . -1760 . -1761 . -1762 . -1763 . -1764 . -1765 . -1766 . -1767 . -1768 . -1769 . -176A . -176B . -176C . -176E . -176F . -1770 . -1780 . -1781 . -1782 . -1783 . -1784 . -1785 . -1786 . -1787 . -1788 . -1789 . -178A . -178B . -178C . -178D . -178E . -178F . -1790 . -1791 . -1792 . -1793 . -1794 . -1795 . -1796 . -1797 . -1798 . -1799 . -179A . -179B . -179C . -179D . -179E . -179F . -17A0 . -17A1 . -17A2 . -17A3 . -17A4 . -17A5 . -17A6 . -17A7 . -17A8 . -17A9 . -17AA . -17AB . -17AC . -17AD . -17AE . -17AF . -17B0 . -17B1 . -17B2 . -17B3 . -17D7 . -17DC . -1820 . -1821 . -1822 . -1823 . -1824 . -1825 . -1826 . -1827 . -1828 . -1829 . -182A . -182B . -182C . -182D . -182E . -182F . -1830 . -1831 . -1832 . -1833 . -1834 . -1835 . -1836 . -1837 . -1838 . -1839 . -183A . -183B . -183C . -183D . -183E . -183F . -1840 . -1841 . -1842 . -1843 . -1844 . -1845 . -1846 . -1847 . -1848 . -1849 . -184A . -184B . -184C . -184D . -184E . -184F . -1850 . -1851 . -1852 . -1853 . -1854 . -1855 . -1856 . -1857 . -1858 . -1859 . -185A . -185B . -185C . -185D . -185E . -185F . -1860 . -1861 . -1862 . -1863 . -1864 . -1865 . -1866 . -1867 . -1868 . -1869 . -186A . -186B . -186C . -186D . -186E . -186F . -1870 . -1871 . -1872 . -1873 . -1874 . -1875 . -1876 . -1877 . -1880 . -1881 . -1882 . -1883 . -1884 . -1885 . -1886 . -1887 . -1888 . -1889 . -188A . -188B . -188C . -188D . -188E . -188F . -1890 . -1891 . -1892 . -1893 . -1894 . -1895 . -1896 . -1897 . -1898 . -1899 . -189A . -189B . -189C . -189D . -189E . -189F . -18A0 . -18A1 . -18A2 . -18A3 . -18A4 . -18A5 . -18A6 . -18A7 . -18A8 . -18AA . -18B0 . -18B1 . -18B2 . -18B3 . -18B4 . -18B5 . -18B6 . -18B7 . -18B8 . -18B9 . -18BA . -18BB . -18BC . -18BD . -18BE . -18BF . -18C0 . -18C1 . -18C2 . -18C3 . -18C4 . -18C5 . -18C6 . -18C7 . -18C8 . -18C9 . -18CA . -18CB . -18CC . -18CD . -18CE . -18CF . -18D0 . -18D1 . -18D2 . -18D3 . -18D4 . -18D5 . -18D6 . -18D7 . -18D8 . -18D9 . -18DA . -18DB . -18DC . -18DD . -18DE . -18DF . -18E0 . -18E1 . -18E2 . -18E3 . -18E4 . -18E5 . -18E6 . -18E7 . -18E8 . -18E9 . -18EA . -18EB . -18EC . -18ED . -18EE . -18EF . -18F0 . -18F1 . -18F2 . -18F3 . -18F4 . -18F5 . -1900 . -1901 . -1902 . -1903 . -1904 . -1905 . -1906 . -1907 . -1908 . -1909 . -190A . -190B . -190C . -190D . -190E . -190F . -1910 . -1911 . -1912 . -1913 . -1914 . -1915 . -1916 . -1917 . -1918 . -1919 . -191A . -191B . -191C . -1950 . -1951 . -1952 . -1953 . -1954 . -1955 . -1956 . -1957 . -1958 . -1959 . -195A . -195B . -195C . -195D . -195E . -195F . -1960 . -1961 . -1962 . -1963 . -1964 . -1965 . -1966 . -1967 . -1968 . -1969 . -196A . -196B . -196C . -196D . -1970 . -1971 . -1972 . -1973 . -1974 . -1980 . -1981 . -1982 . -1983 . -1984 . -1985 . -1986 . -1987 . -1988 . -1989 . -198A . -198B . -198C . -198D . -198E . -198F . -1990 . -1991 . -1992 . -1993 . -1994 . -1995 . -1996 . -1997 . -1998 . -1999 . -199A . -199B . -199C . -199D . -199E . -199F . -19A0 . -19A1 . -19A2 . -19A3 . -19A4 . -19A5 . -19A6 . -19A7 . -19A8 . -19A9 . -19AA . -19AB . -19C1 . -19C2 . -19C3 . -19C4 . -19C5 . -19C6 . -19C7 . -1A00 . -1A01 . -1A02 . -1A03 . -1A04 . -1A05 . -1A06 . -1A07 . -1A08 . -1A09 . -1A0A . -1A0B . -1A0C . -1A0D . -1A0E . -1A0F . -1A10 . -1A11 . -1A12 . -1A13 . -1A14 . -1A15 . -1A16 . -1A20 . -1A21 . -1A22 . -1A23 . -1A24 . -1A25 . -1A26 . -1A27 . -1A28 . -1A29 . -1A2A . -1A2B . -1A2C . -1A2D . -1A2E . -1A2F . -1A30 . -1A31 . -1A32 . -1A33 . -1A34 . -1A35 . -1A36 . -1A37 . -1A38 . -1A39 . -1A3A . -1A3B . -1A3C . -1A3D . -1A3E . -1A3F . -1A40 . -1A41 . -1A42 . -1A43 . -1A44 . -1A45 . -1A46 . -1A47 . -1A48 . -1A49 . -1A4A . -1A4B . -1A4C . -1A4D . -1A4E . -1A4F . -1A50 . -1A51 . -1A52 . -1A53 . -1A54 . -1AA7 . -1B05 . -1B06 . -1B07 . -1B08 . -1B09 . -1B0A . -1B0B . -1B0C . -1B0D . -1B0E . -1B0F . -1B10 . -1B11 . -1B12 . -1B13 . -1B14 . -1B15 . -1B16 . -1B17 . -1B18 . -1B19 . -1B1A . -1B1B . -1B1C . -1B1D . -1B1E . -1B1F . -1B20 . -1B21 . -1B22 . -1B23 . -1B24 . -1B25 . -1B26 . -1B27 . -1B28 . -1B29 . -1B2A . -1B2B . -1B2C . -1B2D . -1B2E . -1B2F . -1B30 . -1B31 . -1B32 . -1B33 . -1B45 . -1B46 . -1B47 . -1B48 . -1B49 . -1B4A . -1B4B . -1B83 . -1B84 . -1B85 . -1B86 . -1B87 . -1B88 . -1B89 . -1B8A . -1B8B . -1B8C . -1B8D . -1B8E . -1B8F . -1B90 . -1B91 . -1B92 . -1B93 . -1B94 . -1B95 . -1B96 . -1B97 . -1B98 . -1B99 . -1B9A . -1B9B . -1B9C . -1B9D . -1B9E . -1B9F . -1BA0 . -1BAE . -1BAF . -1BBA . -1BBB . -1BBC . -1BBD . -1BBE . -1BBF . -1BC0 . -1BC1 . -1BC2 . -1BC3 . -1BC4 . -1BC5 . -1BC6 . -1BC7 . -1BC8 . -1BC9 . -1BCA . -1BCB . -1BCC . -1BCD . -1BCE . -1BCF . -1BD0 . -1BD1 . -1BD2 . -1BD3 . -1BD4 . -1BD5 . -1BD6 . -1BD7 . -1BD8 . -1BD9 . -1BDA . -1BDB . -1BDC . -1BDD . -1BDE . -1BDF . -1BE0 . -1BE1 . -1BE2 . -1BE3 . -1BE4 . -1BE5 . -1C00 . -1C01 . -1C02 . -1C03 . -1C04 . -1C05 . -1C06 . -1C07 . -1C08 . -1C09 . -1C0A . -1C0B . -1C0C . -1C0D . -1C0E . -1C0F . -1C10 . -1C11 . -1C12 . -1C13 . -1C14 . -1C15 . -1C16 . -1C17 . -1C18 . -1C19 . -1C1A . -1C1B . -1C1C . -1C1D . -1C1E . -1C1F . -1C20 . -1C21 . -1C22 . -1C23 . -1C4D . -1C4E . -1C4F . -1C5A . -1C5B . -1C5C . -1C5D . -1C5E . -1C5F . -1C60 . -1C61 . -1C62 . -1C63 . -1C64 . -1C65 . -1C66 . -1C67 . -1C68 . -1C69 . -1C6A . -1C6B . -1C6C . -1C6D . -1C6E . -1C6F . -1C70 . -1C71 . -1C72 . -1C73 . -1C74 . -1C75 . -1C76 . -1C77 . -1C78 . -1C79 . -1C7A . -1C7B . -1C7C . -1C7D . -1CE9 . -1CEA . -1CEB . -1CEC . -1CEE . -1CEF . -1CF0 . -1CF1 . -1CF5 . -1CF6 . -1D00 . -1D01 . -1D02 . -1D03 . -1D04 . -1D05 . -1D06 . -1D07 . -1D08 . -1D09 . -1D0A . -1D0B . -1D0C . -1D0D . -1D0E . -1D0F . -1D10 . -1D11 . -1D12 . -1D13 . -1D14 . -1D15 . -1D16 . -1D17 . -1D18 . -1D19 . -1D1A . -1D1B . -1D1C . -1D1D . -1D1E . -1D1F . -1D20 . -1D21 . -1D22 . -1D23 . -1D24 . -1D25 . -1D26 . -1D27 . -1D28 . -1D29 . -1D2A . -1D2B . -1D2C . -1D2D . -1D2E . -1D2F . -1D30 . -1D31 . -1D32 . -1D33 . -1D34 . -1D35 . -1D36 . -1D37 . -1D38 . -1D39 . -1D3A . -1D3B . -1D3C . -1D3D . -1D3E . -1D3F . -1D40 . -1D41 . -1D42 . -1D43 . -1D44 . -1D45 . -1D46 . -1D47 . -1D48 . -1D49 . -1D4A . -1D4B . -1D4C . -1D4D . -1D4E . -1D4F . -1D50 . -1D51 . -1D52 . -1D53 . -1D54 . -1D55 . -1D56 . -1D57 . -1D58 . -1D59 . -1D5A . -1D5B . -1D5C . -1D5D . -1D5E . -1D5F . -1D60 . -1D61 . -1D62 . -1D63 . -1D64 . -1D65 . -1D66 . -1D67 . -1D68 . -1D69 . -1D6A . -1D6B . -1D6C . -1D6D . -1D6E . -1D6F . -1D70 . -1D71 . -1D72 . -1D73 . -1D74 . -1D75 . -1D76 . -1D77 . -1D78 . -1D79 A77D -1D7A . -1D7B . -1D7C . -1D7D 2C63 -1D7E . -1D7F . -1D80 . -1D81 . -1D82 . -1D83 . -1D84 . -1D85 . -1D86 . -1D87 . -1D88 . -1D89 . -1D8A . -1D8B . -1D8C . -1D8D . -1D8E . -1D8F . -1D90 . -1D91 . -1D92 . -1D93 . -1D94 . -1D95 . -1D96 . -1D97 . -1D98 . -1D99 . -1D9A . -1D9B . -1D9C . -1D9D . -1D9E . -1D9F . -1DA0 . -1DA1 . -1DA2 . -1DA3 . -1DA4 . -1DA5 . -1DA6 . -1DA7 . -1DA8 . -1DA9 . -1DAA . -1DAB . -1DAC . -1DAD . -1DAE . -1DAF . -1DB0 . -1DB1 . -1DB2 . -1DB3 . -1DB4 . -1DB5 . -1DB6 . -1DB7 . -1DB8 . -1DB9 . -1DBA . -1DBB . -1DBC . -1DBD . -1DBE . -1DBF . -1E01 1E00 -1E03 1E02 -1E05 1E04 -1E07 1E06 -1E09 1E08 -1E0B 1E0A -1E0D 1E0C -1E0F 1E0E -1E11 1E10 -1E13 1E12 -1E15 1E14 -1E17 1E16 -1E19 1E18 -1E1B 1E1A -1E1D 1E1C -1E1F 1E1E -1E21 1E20 -1E23 1E22 -1E25 1E24 -1E27 1E26 -1E29 1E28 -1E2B 1E2A -1E2D 1E2C -1E2F 1E2E -1E31 1E30 -1E33 1E32 -1E35 1E34 -1E37 1E36 -1E39 1E38 -1E3B 1E3A -1E3D 1E3C -1E3F 1E3E -1E41 1E40 -1E43 1E42 -1E45 1E44 -1E47 1E46 -1E49 1E48 -1E4B 1E4A -1E4D 1E4C -1E4F 1E4E -1E51 1E50 -1E53 1E52 -1E55 1E54 -1E57 1E56 -1E59 1E58 -1E5B 1E5A -1E5D 1E5C -1E5F 1E5E -1E61 1E60 -1E63 1E62 -1E65 1E64 -1E67 1E66 -1E69 1E68 -1E6B 1E6A -1E6D 1E6C -1E6F 1E6E -1E71 1E70 -1E73 1E72 -1E75 1E74 -1E77 1E76 -1E79 1E78 -1E7B 1E7A -1E7D 1E7C -1E7F 1E7E -1E81 1E80 -1E83 1E82 -1E85 1E84 -1E87 1E86 -1E89 1E88 -1E8B 1E8A -1E8D 1E8C -1E8F 1E8E -1E91 1E90 -1E93 1E92 -1E95 1E94 -1E96 . -1E97 . -1E98 . -1E99 . -1E9A . -1E9C . -1E9D . -1E9F . -1EA1 1EA0 -1EA3 1EA2 -1EA5 1EA4 -1EA7 1EA6 -1EA9 1EA8 -1EAB 1EAA -1EAD 1EAC -1EAF 1EAE -1EB1 1EB0 -1EB3 1EB2 -1EB5 1EB4 -1EB7 1EB6 -1EB9 1EB8 -1EBB 1EBA -1EBD 1EBC -1EBF 1EBE -1EC1 1EC0 -1EC3 1EC2 -1EC5 1EC4 -1EC7 1EC6 -1EC9 1EC8 -1ECB 1ECA -1ECD 1ECC -1ECF 1ECE -1ED1 1ED0 -1ED3 1ED2 -1ED5 1ED4 -1ED7 1ED6 -1ED9 1ED8 -1EDB 1EDA -1EDD 1EDC -1EDF 1EDE -1EE1 1EE0 -1EE3 1EE2 -1EE5 1EE4 -1EE7 1EE6 -1EE9 1EE8 -1EEB 1EEA -1EED 1EEC -1EEF 1EEE -1EF1 1EF0 -1EF3 1EF2 -1EF5 1EF4 -1EF7 1EF6 -1EF9 1EF8 -1EFB 1EFA -1EFD 1EFC -1EFF 1EFE -1F00 1F08 -1F01 1F09 -1F02 1F0A -1F03 1F0B -1F04 1F0C -1F05 1F0D -1F06 1F0E -1F07 1F0F -1F10 1F18 -1F11 1F19 -1F12 1F1A -1F13 1F1B -1F14 1F1C -1F15 1F1D -1F20 1F28 -1F21 1F29 -1F22 1F2A -1F23 1F2B -1F24 1F2C -1F25 1F2D -1F26 1F2E -1F27 1F2F -1F30 1F38 -1F31 1F39 -1F32 1F3A -1F33 1F3B -1F34 1F3C -1F35 1F3D -1F36 1F3E -1F37 1F3F -1F40 1F48 -1F41 1F49 -1F42 1F4A -1F43 1F4B -1F44 1F4C -1F45 1F4D -1F50 . -1F51 1F59 -1F52 . -1F53 1F5B -1F54 . -1F55 1F5D -1F56 . -1F57 1F5F -1F60 1F68 -1F61 1F69 -1F62 1F6A -1F63 1F6B -1F64 1F6C -1F65 1F6D -1F66 1F6E -1F67 1F6F -1F70 1FBA -1F71 1FBB -1F72 1FC8 -1F73 1FC9 -1F74 1FCA -1F75 1FCB -1F76 1FDA -1F77 1FDB -1F78 1FF8 -1F79 1FF9 -1F7A 1FEA -1F7B 1FEB -1F7C 1FFA -1F7D 1FFB -1F80 1F88 -1F81 1F89 -1F82 1F8A -1F83 1F8B -1F84 1F8C -1F85 1F8D -1F86 1F8E -1F87 1F8F -1F90 1F98 -1F91 1F99 -1F92 1F9A -1F93 1F9B -1F94 1F9C -1F95 1F9D -1F96 1F9E -1F97 1F9F -1FA0 1FA8 -1FA1 1FA9 -1FA2 1FAA -1FA3 1FAB -1FA4 1FAC -1FA5 1FAD -1FA6 1FAE -1FA7 1FAF -1FB0 1FB8 -1FB1 1FB9 -1FB2 . -1FB3 1FBC -1FB4 . -1FB6 . -1FB7 . -1FC2 . -1FC3 1FCC -1FC4 . -1FC6 . -1FC7 . -1FD0 1FD8 -1FD1 1FD9 -1FD2 . -1FD3 . -1FD6 . -1FD7 . -1FE0 1FE8 -1FE1 1FE9 -1FE2 . -1FE3 . -1FE4 . -1FE5 1FEC -1FE6 . -1FE7 . -1FF2 . -1FF3 1FFC -1FF4 . -1FF6 . -1FF7 . -2071 . -207F . -2090 . -2091 . -2092 . -2093 . -2094 . -2095 . -2096 . -2097 . -2098 . -2099 . -209A . -209B . -209C . -2102 . -2107 . -210A . -210B . -210C . -210D . -210E . -210F . -2110 . -2111 . -2112 . -2113 . -2115 . -2119 . -211A . -211B . -211C . -211D . -2124 . -2128 . -212C . -212D . -212F . -2130 . -2131 . -214E 2132 -2133 . -2134 . -2135 . -2136 . -2137 . -2138 . -2139 . -213C . -213D . -213E . -213F . -2145 . -2146 . -2147 . -2148 . -2149 . -2184 2183 -2C30 2C00 -2C31 2C01 -2C32 2C02 -2C33 2C03 -2C34 2C04 -2C35 2C05 -2C36 2C06 -2C37 2C07 -2C38 2C08 -2C39 2C09 -2C3A 2C0A -2C3B 2C0B -2C3C 2C0C -2C3D 2C0D -2C3E 2C0E -2C3F 2C0F -2C40 2C10 -2C41 2C11 -2C42 2C12 -2C43 2C13 -2C44 2C14 -2C45 2C15 -2C46 2C16 -2C47 2C17 -2C48 2C18 -2C49 2C19 -2C4A 2C1A -2C4B 2C1B -2C4C 2C1C -2C4D 2C1D -2C4E 2C1E -2C4F 2C1F -2C50 2C20 -2C51 2C21 -2C52 2C22 -2C53 2C23 -2C54 2C24 -2C55 2C25 -2C56 2C26 -2C57 2C27 -2C58 2C28 -2C59 2C29 -2C5A 2C2A -2C5B 2C2B -2C5C 2C2C -2C5D 2C2D -2C5E 2C2E -2C61 2C60 -2C68 2C67 -2C6A 2C69 -2C6C 2C6B -2C71 . -2C73 2C72 -2C74 . -2C76 2C75 -2C77 . -2C78 . -2C79 . -2C7A . -2C7B . -2C7C . -2C7D . -2C81 2C80 -2C83 2C82 -2C85 2C84 -2C87 2C86 -2C89 2C88 -2C8B 2C8A -2C8D 2C8C -2C8F 2C8E -2C91 2C90 -2C93 2C92 -2C95 2C94 -2C97 2C96 -2C99 2C98 -2C9B 2C9A -2C9D 2C9C -2C9F 2C9E -2CA1 2CA0 -2CA3 2CA2 -2CA5 2CA4 -2CA7 2CA6 -2CA9 2CA8 -2CAB 2CAA -2CAD 2CAC -2CAF 2CAE -2CB1 2CB0 -2CB3 2CB2 -2CB5 2CB4 -2CB7 2CB6 -2CB9 2CB8 -2CBB 2CBA -2CBD 2CBC -2CBF 2CBE -2CC1 2CC0 -2CC3 2CC2 -2CC5 2CC4 -2CC7 2CC6 -2CC9 2CC8 -2CCB 2CCA -2CCD 2CCC -2CCF 2CCE -2CD1 2CD0 -2CD3 2CD2 -2CD5 2CD4 -2CD7 2CD6 -2CD9 2CD8 -2CDB 2CDA -2CDD 2CDC -2CDF 2CDE -2CE1 2CE0 -2CE3 2CE2 -2CE4 . -2CEC 2CEB -2CEE 2CED -2CF3 2CF2 -2D30 . -2D31 . -2D32 . -2D33 . -2D34 . -2D35 . -2D36 . -2D37 . -2D38 . -2D39 . -2D3A . -2D3B . -2D3C . -2D3D . -2D3E . -2D3F . -2D40 . -2D41 . -2D42 . -2D43 . -2D44 . -2D45 . -2D46 . -2D47 . -2D48 . -2D49 . -2D4A . -2D4B . -2D4C . -2D4D . -2D4E . -2D4F . -2D50 . -2D51 . -2D52 . -2D53 . -2D54 . -2D55 . -2D56 . -2D57 . -2D58 . -2D59 . -2D5A . -2D5B . -2D5C . -2D5D . -2D5E . -2D5F . -2D60 . -2D61 . -2D62 . -2D63 . -2D64 . -2D65 . -2D66 . -2D67 . -2D6F . -2D80 . -2D81 . -2D82 . -2D83 . -2D84 . -2D85 . -2D86 . -2D87 . -2D88 . -2D89 . -2D8A . -2D8B . -2D8C . -2D8D . -2D8E . -2D8F . -2D90 . -2D91 . -2D92 . -2D93 . -2D94 . -2D95 . -2D96 . -2DA0 . -2DA1 . -2DA2 . -2DA3 . -2DA4 . -2DA5 . -2DA6 . -2DA8 . -2DA9 . -2DAA . -2DAB . -2DAC . -2DAD . -2DAE . -2DB0 . -2DB1 . -2DB2 . -2DB3 . -2DB4 . -2DB5 . -2DB6 . -2DB8 . -2DB9 . -2DBA . -2DBB . -2DBC . -2DBD . -2DBE . -2DC0 . -2DC1 . -2DC2 . -2DC3 . -2DC4 . -2DC5 . -2DC6 . -2DC8 . -2DC9 . -2DCA . -2DCB . -2DCC . -2DCD . -2DCE . -2DD0 . -2DD1 . -2DD2 . -2DD3 . -2DD4 . -2DD5 . -2DD6 . -2DD8 . -2DD9 . -2DDA . -2DDB . -2DDC . -2DDD . -2DDE . -2E2F . -3005 . -3006 . -3031 . -3032 . -3033 . -3034 . -3035 . -303B . -303C . -3041 . -3042 . -3043 . -3044 . -3045 . -3046 . -3047 . -3048 . -3049 . -304A . -304B . -304C . -304D . -304E . -304F . -3050 . -3051 . -3052 . -3053 . -3054 . -3055 . -3056 . -3057 . -3058 . -3059 . -305A . -305B . -305C . -305D . -305E . -305F . -3060 . -3061 . -3062 . -3063 . -3064 . -3065 . -3066 . -3067 . -3068 . -3069 . -306A . -306B . -306C . -306D . -306E . -306F . -3070 . -3071 . -3072 . -3073 . -3074 . -3075 . -3076 . -3077 . -3078 . -3079 . -307A . -307B . -307C . -307D . -307E . -307F . -3080 . -3081 . -3082 . -3083 . -3084 . -3085 . -3086 . -3087 . -3088 . -3089 . -308A . -308B . -308C . -308D . -308E . -308F . -3090 . -3091 . -3092 . -3093 . -3094 . -3095 . -3096 . -309D . -309E . -309F . -30A1 . -30A2 . -30A3 . -30A4 . -30A5 . -30A6 . -30A7 . -30A8 . -30A9 . -30AA . -30AB . -30AC . -30AD . -30AE . -30AF . -30B0 . -30B1 . -30B2 . -30B3 . -30B4 . -30B5 . -30B6 . -30B7 . -30B8 . -30B9 . -30BA . -30BB . -30BC . -30BD . -30BE . -30BF . -30C0 . -30C1 . -30C2 . -30C3 . -30C4 . -30C5 . -30C6 . -30C7 . -30C8 . -30C9 . -30CA . -30CB . -30CC . -30CD . -30CE . -30CF . -30D0 . -30D1 . -30D2 . -30D3 . -30D4 . -30D5 . -30D6 . -30D7 . -30D8 . -30D9 . -30DA . -30DB . -30DC . -30DD . -30DE . -30DF . -30E0 . -30E1 . -30E2 . -30E3 . -30E4 . -30E5 . -30E6 . -30E7 . -30E8 . -30E9 . -30EA . -30EB . -30EC . -30ED . -30EE . -30EF . -30F0 . -30F1 . -30F2 . -30F3 . -30F4 . -30F5 . -30F6 . -30F7 . -30F8 . -30F9 . -30FA . -30FC . -30FD . -30FE . -30FF . -3105 . -3106 . -3107 . -3108 . -3109 . -310A . -310B . -310C . -310D . -310E . -310F . -3110 . -3111 . -3112 . -3113 . -3114 . -3115 . -3116 . -3117 . -3118 . -3119 . -311A . -311B . -311C . -311D . -311E . -311F . -3120 . -3121 . -3122 . -3123 . -3124 . -3125 . -3126 . -3127 . -3128 . -3129 . -312A . -312B . -312C . -312D . -3131 . -3132 . -3133 . -3134 . -3135 . -3136 . -3137 . -3138 . -3139 . -313A . -313B . -313C . -313D . -313E . -313F . -3140 . -3141 . -3142 . -3143 . -3144 . -3145 . -3146 . -3147 . -3148 . -3149 . -314A . -314B . -314C . -314D . -314E . -314F . -3150 . -3151 . -3152 . -3153 . -3154 . -3155 . -3156 . -3157 . -3158 . -3159 . -315A . -315B . -315C . -315D . -315E . -315F . -3160 . -3161 . -3162 . -3163 . -3164 . -3165 . -3166 . -3167 . -3168 . -3169 . -316A . -316B . -316C . -316D . -316E . -316F . -3170 . -3171 . -3172 . -3173 . -3174 . -3175 . -3176 . -3177 . -3178 . -3179 . -317A . -317B . -317C . -317D . -317E . -317F . -3180 . -3181 . -3182 . -3183 . -3184 . -3185 . -3186 . -3187 . -3188 . -3189 . -318A . -318B . -318C . -318D . -318E . -31A0 . -31A1 . -31A2 . -31A3 . -31A4 . -31A5 . -31A6 . -31A7 . -31A8 . -31A9 . -31AA . -31AB . -31AC . -31AD . -31AE . -31AF . -31B0 . -31B1 . -31B2 . -31B3 . -31B4 . -31B5 . -31B6 . -31B7 . -31B8 . -31B9 . -31BA . -31F0 . -31F1 . -31F2 . -31F3 . -31F4 . -31F5 . -31F6 . -31F7 . -31F8 . -31F9 . -31FA . -31FB . -31FC . -31FD . -31FE . -31FF . -A000 . -A001 . -A002 . -A003 . -A004 . -A005 . -A006 . -A007 . -A008 . -A009 . -A00A . -A00B . -A00C . -A00D . -A00E . -A00F . -A010 . -A011 . -A012 . -A013 . -A014 . -A015 . -A016 . -A017 . -A018 . -A019 . -A01A . -A01B . -A01C . -A01D . -A01E . -A01F . -A020 . -A021 . -A022 . -A023 . -A024 . -A025 . -A026 . -A027 . -A028 . -A029 . -A02A . -A02B . -A02C . -A02D . -A02E . -A02F . -A030 . -A031 . -A032 . -A033 . -A034 . -A035 . -A036 . -A037 . -A038 . -A039 . -A03A . -A03B . -A03C . -A03D . -A03E . -A03F . -A040 . -A041 . -A042 . -A043 . -A044 . -A045 . -A046 . -A047 . -A048 . -A049 . -A04A . -A04B . -A04C . -A04D . -A04E . -A04F . -A050 . -A051 . -A052 . -A053 . -A054 . -A055 . -A056 . -A057 . -A058 . -A059 . -A05A . -A05B . -A05C . -A05D . -A05E . -A05F . -A060 . -A061 . -A062 . -A063 . -A064 . -A065 . -A066 . -A067 . -A068 . -A069 . -A06A . -A06B . -A06C . -A06D . -A06E . -A06F . -A070 . -A071 . -A072 . -A073 . -A074 . -A075 . -A076 . -A077 . -A078 . -A079 . -A07A . -A07B . -A07C . -A07D . -A07E . -A07F . -A080 . -A081 . -A082 . -A083 . -A084 . -A085 . -A086 . -A087 . -A088 . -A089 . -A08A . -A08B . -A08C . -A08D . -A08E . -A08F . -A090 . -A091 . -A092 . -A093 . -A094 . -A095 . -A096 . -A097 . -A098 . -A099 . -A09A . -A09B . -A09C . -A09D . -A09E . -A09F . -A0A0 . -A0A1 . -A0A2 . -A0A3 . -A0A4 . -A0A5 . -A0A6 . -A0A7 . -A0A8 . -A0A9 . -A0AA . -A0AB . -A0AC . -A0AD . -A0AE . -A0AF . -A0B0 . -A0B1 . -A0B2 . -A0B3 . -A0B4 . -A0B5 . -A0B6 . -A0B7 . -A0B8 . -A0B9 . -A0BA . -A0BB . -A0BC . -A0BD . -A0BE . -A0BF . -A0C0 . -A0C1 . -A0C2 . -A0C3 . -A0C4 . -A0C5 . -A0C6 . -A0C7 . -A0C8 . -A0C9 . -A0CA . -A0CB . -A0CC . -A0CD . -A0CE . -A0CF . -A0D0 . -A0D1 . -A0D2 . -A0D3 . -A0D4 . -A0D5 . -A0D6 . -A0D7 . -A0D8 . -A0D9 . -A0DA . -A0DB . -A0DC . -A0DD . -A0DE . -A0DF . -A0E0 . -A0E1 . -A0E2 . -A0E3 . -A0E4 . -A0E5 . -A0E6 . -A0E7 . -A0E8 . -A0E9 . -A0EA . -A0EB . -A0EC . -A0ED . -A0EE . -A0EF . -A0F0 . -A0F1 . -A0F2 . -A0F3 . -A0F4 . -A0F5 . -A0F6 . -A0F7 . -A0F8 . -A0F9 . -A0FA . -A0FB . -A0FC . -A0FD . -A0FE . -A0FF . -A100 . -A101 . -A102 . -A103 . -A104 . -A105 . -A106 . -A107 . -A108 . -A109 . -A10A . -A10B . -A10C . -A10D . -A10E . -A10F . -A110 . -A111 . -A112 . -A113 . -A114 . -A115 . -A116 . -A117 . -A118 . -A119 . -A11A . -A11B . -A11C . -A11D . -A11E . -A11F . -A120 . -A121 . -A122 . -A123 . -A124 . -A125 . -A126 . -A127 . -A128 . -A129 . -A12A . -A12B . -A12C . -A12D . -A12E . -A12F . -A130 . -A131 . -A132 . -A133 . -A134 . -A135 . -A136 . -A137 . -A138 . -A139 . -A13A . -A13B . -A13C . -A13D . -A13E . -A13F . -A140 . -A141 . -A142 . -A143 . -A144 . -A145 . -A146 . -A147 . -A148 . -A149 . -A14A . -A14B . -A14C . -A14D . -A14E . -A14F . -A150 . -A151 . -A152 . -A153 . -A154 . -A155 . -A156 . -A157 . -A158 . -A159 . -A15A . -A15B . -A15C . -A15D . -A15E . -A15F . -A160 . -A161 . -A162 . -A163 . -A164 . -A165 . -A166 . -A167 . -A168 . -A169 . -A16A . -A16B . -A16C . -A16D . -A16E . -A16F . -A170 . -A171 . -A172 . -A173 . -A174 . -A175 . -A176 . -A177 . -A178 . -A179 . -A17A . -A17B . -A17C . -A17D . -A17E . -A17F . -A180 . -A181 . -A182 . -A183 . -A184 . -A185 . -A186 . -A187 . -A188 . -A189 . -A18A . -A18B . -A18C . -A18D . -A18E . -A18F . -A190 . -A191 . -A192 . -A193 . -A194 . -A195 . -A196 . -A197 . -A198 . -A199 . -A19A . -A19B . -A19C . -A19D . -A19E . -A19F . -A1A0 . -A1A1 . -A1A2 . -A1A3 . -A1A4 . -A1A5 . -A1A6 . -A1A7 . -A1A8 . -A1A9 . -A1AA . -A1AB . -A1AC . -A1AD . -A1AE . -A1AF . -A1B0 . -A1B1 . -A1B2 . -A1B3 . -A1B4 . -A1B5 . -A1B6 . -A1B7 . -A1B8 . -A1B9 . -A1BA . -A1BB . -A1BC . -A1BD . -A1BE . -A1BF . -A1C0 . -A1C1 . -A1C2 . -A1C3 . -A1C4 . -A1C5 . -A1C6 . -A1C7 . -A1C8 . -A1C9 . -A1CA . -A1CB . -A1CC . -A1CD . -A1CE . -A1CF . -A1D0 . -A1D1 . -A1D2 . -A1D3 . -A1D4 . -A1D5 . -A1D6 . -A1D7 . -A1D8 . -A1D9 . -A1DA . -A1DB . -A1DC . -A1DD . -A1DE . -A1DF . -A1E0 . -A1E1 . -A1E2 . -A1E3 . -A1E4 . -A1E5 . -A1E6 . -A1E7 . -A1E8 . -A1E9 . -A1EA . -A1EB . -A1EC . -A1ED . -A1EE . -A1EF . -A1F0 . -A1F1 . -A1F2 . -A1F3 . -A1F4 . -A1F5 . -A1F6 . -A1F7 . -A1F8 . -A1F9 . -A1FA . -A1FB . -A1FC . -A1FD . -A1FE . -A1FF . -A200 . -A201 . -A202 . -A203 . -A204 . -A205 . -A206 . -A207 . -A208 . -A209 . -A20A . -A20B . -A20C . -A20D . -A20E . -A20F . -A210 . -A211 . -A212 . -A213 . -A214 . -A215 . -A216 . -A217 . -A218 . -A219 . -A21A . -A21B . -A21C . -A21D . -A21E . -A21F . -A220 . -A221 . -A222 . -A223 . -A224 . -A225 . -A226 . -A227 . -A228 . -A229 . -A22A . -A22B . -A22C . -A22D . -A22E . -A22F . -A230 . -A231 . -A232 . -A233 . -A234 . -A235 . -A236 . -A237 . -A238 . -A239 . -A23A . -A23B . -A23C . -A23D . -A23E . -A23F . -A240 . -A241 . -A242 . -A243 . -A244 . -A245 . -A246 . -A247 . -A248 . -A249 . -A24A . -A24B . -A24C . -A24D . -A24E . -A24F . -A250 . -A251 . -A252 . -A253 . -A254 . -A255 . -A256 . -A257 . -A258 . -A259 . -A25A . -A25B . -A25C . -A25D . -A25E . -A25F . -A260 . -A261 . -A262 . -A263 . -A264 . -A265 . -A266 . -A267 . -A268 . -A269 . -A26A . -A26B . -A26C . -A26D . -A26E . -A26F . -A270 . -A271 . -A272 . -A273 . -A274 . -A275 . -A276 . -A277 . -A278 . -A279 . -A27A . -A27B . -A27C . -A27D . -A27E . -A27F . -A280 . -A281 . -A282 . -A283 . -A284 . -A285 . -A286 . -A287 . -A288 . -A289 . -A28A . -A28B . -A28C . -A28D . -A28E . -A28F . -A290 . -A291 . -A292 . -A293 . -A294 . -A295 . -A296 . -A297 . -A298 . -A299 . -A29A . -A29B . -A29C . -A29D . -A29E . -A29F . -A2A0 . -A2A1 . -A2A2 . -A2A3 . -A2A4 . -A2A5 . -A2A6 . -A2A7 . -A2A8 . -A2A9 . -A2AA . -A2AB . -A2AC . -A2AD . -A2AE . -A2AF . -A2B0 . -A2B1 . -A2B2 . -A2B3 . -A2B4 . -A2B5 . -A2B6 . -A2B7 . -A2B8 . -A2B9 . -A2BA . -A2BB . -A2BC . -A2BD . -A2BE . -A2BF . -A2C0 . -A2C1 . -A2C2 . -A2C3 . -A2C4 . -A2C5 . -A2C6 . -A2C7 . -A2C8 . -A2C9 . -A2CA . -A2CB . -A2CC . -A2CD . -A2CE . -A2CF . -A2D0 . -A2D1 . -A2D2 . -A2D3 . -A2D4 . -A2D5 . -A2D6 . -A2D7 . -A2D8 . -A2D9 . -A2DA . -A2DB . -A2DC . -A2DD . -A2DE . -A2DF . -A2E0 . -A2E1 . -A2E2 . -A2E3 . -A2E4 . -A2E5 . -A2E6 . -A2E7 . -A2E8 . -A2E9 . -A2EA . -A2EB . -A2EC . -A2ED . -A2EE . -A2EF . -A2F0 . -A2F1 . -A2F2 . -A2F3 . -A2F4 . -A2F5 . -A2F6 . -A2F7 . -A2F8 . -A2F9 . -A2FA . -A2FB . -A2FC . -A2FD . -A2FE . -A2FF . -A300 . -A301 . -A302 . -A303 . -A304 . -A305 . -A306 . -A307 . -A308 . -A309 . -A30A . -A30B . -A30C . -A30D . -A30E . -A30F . -A310 . -A311 . -A312 . -A313 . -A314 . -A315 . -A316 . -A317 . -A318 . -A319 . -A31A . -A31B . -A31C . -A31D . -A31E . -A31F . -A320 . -A321 . -A322 . -A323 . -A324 . -A325 . -A326 . -A327 . -A328 . -A329 . -A32A . -A32B . -A32C . -A32D . -A32E . -A32F . -A330 . -A331 . -A332 . -A333 . -A334 . -A335 . -A336 . -A337 . -A338 . -A339 . -A33A . -A33B . -A33C . -A33D . -A33E . -A33F . -A340 . -A341 . -A342 . -A343 . -A344 . -A345 . -A346 . -A347 . -A348 . -A349 . -A34A . -A34B . -A34C . -A34D . -A34E . -A34F . -A350 . -A351 . -A352 . -A353 . -A354 . -A355 . -A356 . -A357 . -A358 . -A359 . -A35A . -A35B . -A35C . -A35D . -A35E . -A35F . -A360 . -A361 . -A362 . -A363 . -A364 . -A365 . -A366 . -A367 . -A368 . -A369 . -A36A . -A36B . -A36C . -A36D . -A36E . -A36F . -A370 . -A371 . -A372 . -A373 . -A374 . -A375 . -A376 . -A377 . -A378 . -A379 . -A37A . -A37B . -A37C . -A37D . -A37E . -A37F . -A380 . -A381 . -A382 . -A383 . -A384 . -A385 . -A386 . -A387 . -A388 . -A389 . -A38A . -A38B . -A38C . -A38D . -A38E . -A38F . -A390 . -A391 . -A392 . -A393 . -A394 . -A395 . -A396 . -A397 . -A398 . -A399 . -A39A . -A39B . -A39C . -A39D . -A39E . -A39F . -A3A0 . -A3A1 . -A3A2 . -A3A3 . -A3A4 . -A3A5 . -A3A6 . -A3A7 . -A3A8 . -A3A9 . -A3AA . -A3AB . -A3AC . -A3AD . -A3AE . -A3AF . -A3B0 . -A3B1 . -A3B2 . -A3B3 . -A3B4 . -A3B5 . -A3B6 . -A3B7 . -A3B8 . -A3B9 . -A3BA . -A3BB . -A3BC . -A3BD . -A3BE . -A3BF . -A3C0 . -A3C1 . -A3C2 . -A3C3 . -A3C4 . -A3C5 . -A3C6 . -A3C7 . -A3C8 . -A3C9 . -A3CA . -A3CB . -A3CC . -A3CD . -A3CE . -A3CF . -A3D0 . -A3D1 . -A3D2 . -A3D3 . -A3D4 . -A3D5 . -A3D6 . -A3D7 . -A3D8 . -A3D9 . -A3DA . -A3DB . -A3DC . -A3DD . -A3DE . -A3DF . -A3E0 . -A3E1 . -A3E2 . -A3E3 . -A3E4 . -A3E5 . -A3E6 . -A3E7 . -A3E8 . -A3E9 . -A3EA . -A3EB . -A3EC . -A3ED . -A3EE . -A3EF . -A3F0 . -A3F1 . -A3F2 . -A3F3 . -A3F4 . -A3F5 . -A3F6 . -A3F7 . -A3F8 . -A3F9 . -A3FA . -A3FB . -A3FC . -A3FD . -A3FE . -A3FF . -A400 . -A401 . -A402 . -A403 . -A404 . -A405 . -A406 . -A407 . -A408 . -A409 . -A40A . -A40B . -A40C . -A40D . -A40E . -A40F . -A410 . -A411 . -A412 . -A413 . -A414 . -A415 . -A416 . -A417 . -A418 . -A419 . -A41A . -A41B . -A41C . -A41D . -A41E . -A41F . -A420 . -A421 . -A422 . -A423 . -A424 . -A425 . -A426 . -A427 . -A428 . -A429 . -A42A . -A42B . -A42C . -A42D . -A42E . -A42F . -A430 . -A431 . -A432 . -A433 . -A434 . -A435 . -A436 . -A437 . -A438 . -A439 . -A43A . -A43B . -A43C . -A43D . -A43E . -A43F . -A440 . -A441 . -A442 . -A443 . -A444 . -A445 . -A446 . -A447 . -A448 . -A449 . -A44A . -A44B . -A44C . -A44D . -A44E . -A44F . -A450 . -A451 . -A452 . -A453 . -A454 . -A455 . -A456 . -A457 . -A458 . -A459 . -A45A . -A45B . -A45C . -A45D . -A45E . -A45F . -A460 . -A461 . -A462 . -A463 . -A464 . -A465 . -A466 . -A467 . -A468 . -A469 . -A46A . -A46B . -A46C . -A46D . -A46E . -A46F . -A470 . -A471 . -A472 . -A473 . -A474 . -A475 . -A476 . -A477 . -A478 . -A479 . -A47A . -A47B . -A47C . -A47D . -A47E . -A47F . -A480 . -A481 . -A482 . -A483 . -A484 . -A485 . -A486 . -A487 . -A488 . -A489 . -A48A . -A48B . -A48C . -A4D0 . -A4D1 . -A4D2 . -A4D3 . -A4D4 . -A4D5 . -A4D6 . -A4D7 . -A4D8 . -A4D9 . -A4DA . -A4DB . -A4DC . -A4DD . -A4DE . -A4DF . -A4E0 . -A4E1 . -A4E2 . -A4E3 . -A4E4 . -A4E5 . -A4E6 . -A4E7 . -A4E8 . -A4E9 . -A4EA . -A4EB . -A4EC . -A4ED . -A4EE . -A4EF . -A4F0 . -A4F1 . -A4F2 . -A4F3 . -A4F4 . -A4F5 . -A4F6 . -A4F7 . -A4F8 . -A4F9 . -A4FA . -A4FB . -A4FC . -A4FD . -A500 . -A501 . -A502 . -A503 . -A504 . -A505 . -A506 . -A507 . -A508 . -A509 . -A50A . -A50B . -A50C . -A50D . -A50E . -A50F . -A510 . -A511 . -A512 . -A513 . -A514 . -A515 . -A516 . -A517 . -A518 . -A519 . -A51A . -A51B . -A51C . -A51D . -A51E . -A51F . -A520 . -A521 . -A522 . -A523 . -A524 . -A525 . -A526 . -A527 . -A528 . -A529 . -A52A . -A52B . -A52C . -A52D . -A52E . -A52F . -A530 . -A531 . -A532 . -A533 . -A534 . -A535 . -A536 . -A537 . -A538 . -A539 . -A53A . -A53B . -A53C . -A53D . -A53E . -A53F . -A540 . -A541 . -A542 . -A543 . -A544 . -A545 . -A546 . -A547 . -A548 . -A549 . -A54A . -A54B . -A54C . -A54D . -A54E . -A54F . -A550 . -A551 . -A552 . -A553 . -A554 . -A555 . -A556 . -A557 . -A558 . -A559 . -A55A . -A55B . -A55C . -A55D . -A55E . -A55F . -A560 . -A561 . -A562 . -A563 . -A564 . -A565 . -A566 . -A567 . -A568 . -A569 . -A56A . -A56B . -A56C . -A56D . -A56E . -A56F . -A570 . -A571 . -A572 . -A573 . -A574 . -A575 . -A576 . -A577 . -A578 . -A579 . -A57A . -A57B . -A57C . -A57D . -A57E . -A57F . -A580 . -A581 . -A582 . -A583 . -A584 . -A585 . -A586 . -A587 . -A588 . -A589 . -A58A . -A58B . -A58C . -A58D . -A58E . -A58F . -A590 . -A591 . -A592 . -A593 . -A594 . -A595 . -A596 . -A597 . -A598 . -A599 . -A59A . -A59B . -A59C . -A59D . -A59E . -A59F . -A5A0 . -A5A1 . -A5A2 . -A5A3 . -A5A4 . -A5A5 . -A5A6 . -A5A7 . -A5A8 . -A5A9 . -A5AA . -A5AB . -A5AC . -A5AD . -A5AE . -A5AF . -A5B0 . -A5B1 . -A5B2 . -A5B3 . -A5B4 . -A5B5 . -A5B6 . -A5B7 . -A5B8 . -A5B9 . -A5BA . -A5BB . -A5BC . -A5BD . -A5BE . -A5BF . -A5C0 . -A5C1 . -A5C2 . -A5C3 . -A5C4 . -A5C5 . -A5C6 . -A5C7 . -A5C8 . -A5C9 . -A5CA . -A5CB . -A5CC . -A5CD . -A5CE . -A5CF . -A5D0 . -A5D1 . -A5D2 . -A5D3 . -A5D4 . -A5D5 . -A5D6 . -A5D7 . -A5D8 . -A5D9 . -A5DA . -A5DB . -A5DC . -A5DD . -A5DE . -A5DF . -A5E0 . -A5E1 . -A5E2 . -A5E3 . -A5E4 . -A5E5 . -A5E6 . -A5E7 . -A5E8 . -A5E9 . -A5EA . -A5EB . -A5EC . -A5ED . -A5EE . -A5EF . -A5F0 . -A5F1 . -A5F2 . -A5F3 . -A5F4 . -A5F5 . -A5F6 . -A5F7 . -A5F8 . -A5F9 . -A5FA . -A5FB . -A5FC . -A5FD . -A5FE . -A5FF . -A600 . -A601 . -A602 . -A603 . -A604 . -A605 . -A606 . -A607 . -A608 . -A609 . -A60A . -A60B . -A60C . -A610 . -A611 . -A612 . -A613 . -A614 . -A615 . -A616 . -A617 . -A618 . -A619 . -A61A . -A61B . -A61C . -A61D . -A61E . -A61F . -A62A . -A62B . -A641 A640 -A643 A642 -A645 A644 -A647 A646 -A649 A648 -A64B A64A -A64D A64C -A64F A64E -A651 A650 -A653 A652 -A655 A654 -A657 A656 -A659 A658 -A65B A65A -A65D A65C -A65F A65E -A661 A660 -A663 A662 -A665 A664 -A667 A666 -A669 A668 -A66B A66A -A66D A66C -A66E . -A67F . -A681 A680 -A683 A682 -A685 A684 -A687 A686 -A689 A688 -A68B A68A -A68D A68C -A68F A68E -A691 A690 -A693 A692 -A695 A694 -A697 A696 -A6A0 . -A6A1 . -A6A2 . -A6A3 . -A6A4 . -A6A5 . -A6A6 . -A6A7 . -A6A8 . -A6A9 . -A6AA . -A6AB . -A6AC . -A6AD . -A6AE . -A6AF . -A6B0 . -A6B1 . -A6B2 . -A6B3 . -A6B4 . -A6B5 . -A6B6 . -A6B7 . -A6B8 . -A6B9 . -A6BA . -A6BB . -A6BC . -A6BD . -A6BE . -A6BF . -A6C0 . -A6C1 . -A6C2 . -A6C3 . -A6C4 . -A6C5 . -A6C6 . -A6C7 . -A6C8 . -A6C9 . -A6CA . -A6CB . -A6CC . -A6CD . -A6CE . -A6CF . -A6D0 . -A6D1 . -A6D2 . -A6D3 . -A6D4 . -A6D5 . -A6D6 . -A6D7 . -A6D8 . -A6D9 . -A6DA . -A6DB . -A6DC . -A6DD . -A6DE . -A6DF . -A6E0 . -A6E1 . -A6E2 . -A6E3 . -A6E4 . -A6E5 . -A717 . -A718 . -A719 . -A71A . -A71B . -A71C . -A71D . -A71E . -A71F . -A723 A722 -A725 A724 -A727 A726 -A729 A728 -A72B A72A -A72D A72C -A72F A72E -A730 . -A731 . -A733 A732 -A735 A734 -A737 A736 -A739 A738 -A73B A73A -A73D A73C -A73F A73E -A741 A740 -A743 A742 -A745 A744 -A747 A746 -A749 A748 -A74B A74A -A74D A74C -A74F A74E -A751 A750 -A753 A752 -A755 A754 -A757 A756 -A759 A758 -A75B A75A -A75D A75C -A75F A75E -A761 A760 -A763 A762 -A765 A764 -A767 A766 -A769 A768 -A76B A76A -A76D A76C -A76F A76E -A770 . -A771 . -A772 . -A773 . -A774 . -A775 . -A776 . -A777 . -A778 . -A77A A779 -A77C A77B -A77F A77E -A781 A780 -A783 A782 -A785 A784 -A787 A786 -A788 . -A78C A78B -A78E . -A791 A790 -A793 A792 -A7A1 A7A0 -A7A3 A7A2 -A7A5 A7A4 -A7A7 A7A6 -A7A9 A7A8 -A7F8 . -A7F9 . -A7FA . -A7FB . -A7FC . -A7FD . -A7FE . -A7FF . -A800 . -A801 . -A803 . -A804 . -A805 . -A807 . -A808 . -A809 . -A80A . -A80C . -A80D . -A80E . -A80F . -A810 . -A811 . -A812 . -A813 . -A814 . -A815 . -A816 . -A817 . -A818 . -A819 . -A81A . -A81B . -A81C . -A81D . -A81E . -A81F . -A820 . -A821 . -A822 . -A840 . -A841 . -A842 . -A843 . -A844 . -A845 . -A846 . -A847 . -A848 . -A849 . -A84A . -A84B . -A84C . -A84D . -A84E . -A84F . -A850 . -A851 . -A852 . -A853 . -A854 . -A855 . -A856 . -A857 . -A858 . -A859 . -A85A . -A85B . -A85C . -A85D . -A85E . -A85F . -A860 . -A861 . -A862 . -A863 . -A864 . -A865 . -A866 . -A867 . -A868 . -A869 . -A86A . -A86B . -A86C . -A86D . -A86E . -A86F . -A870 . -A871 . -A872 . -A873 . -A882 . -A883 . -A884 . -A885 . -A886 . -A887 . -A888 . -A889 . -A88A . -A88B . -A88C . -A88D . -A88E . -A88F . -A890 . -A891 . -A892 . -A893 . -A894 . -A895 . -A896 . -A897 . -A898 . -A899 . -A89A . -A89B . -A89C . -A89D . -A89E . -A89F . -A8A0 . -A8A1 . -A8A2 . -A8A3 . -A8A4 . -A8A5 . -A8A6 . -A8A7 . -A8A8 . -A8A9 . -A8AA . -A8AB . -A8AC . -A8AD . -A8AE . -A8AF . -A8B0 . -A8B1 . -A8B2 . -A8B3 . -A8F2 . -A8F3 . -A8F4 . -A8F5 . -A8F6 . -A8F7 . -A8FB . -A90A . -A90B . -A90C . -A90D . -A90E . -A90F . -A910 . -A911 . -A912 . -A913 . -A914 . -A915 . -A916 . -A917 . -A918 . -A919 . -A91A . -A91B . -A91C . -A91D . -A91E . -A91F . -A920 . -A921 . -A922 . -A923 . -A924 . -A925 . -A930 . -A931 . -A932 . -A933 . -A934 . -A935 . -A936 . -A937 . -A938 . -A939 . -A93A . -A93B . -A93C . -A93D . -A93E . -A93F . -A940 . -A941 . -A942 . -A943 . -A944 . -A945 . -A946 . -A960 . -A961 . -A962 . -A963 . -A964 . -A965 . -A966 . -A967 . -A968 . -A969 . -A96A . -A96B . -A96C . -A96D . -A96E . -A96F . -A970 . -A971 . -A972 . -A973 . -A974 . -A975 . -A976 . -A977 . -A978 . -A979 . -A97A . -A97B . -A97C . -A984 . -A985 . -A986 . -A987 . -A988 . -A989 . -A98A . -A98B . -A98C . -A98D . -A98E . -A98F . -A990 . -A991 . -A992 . -A993 . -A994 . -A995 . -A996 . -A997 . -A998 . -A999 . -A99A . -A99B . -A99C . -A99D . -A99E . -A99F . -A9A0 . -A9A1 . -A9A2 . -A9A3 . -A9A4 . -A9A5 . -A9A6 . -A9A7 . -A9A8 . -A9A9 . -A9AA . -A9AB . -A9AC . -A9AD . -A9AE . -A9AF . -A9B0 . -A9B1 . -A9B2 . -A9CF . -AA00 . -AA01 . -AA02 . -AA03 . -AA04 . -AA05 . -AA06 . -AA07 . -AA08 . -AA09 . -AA0A . -AA0B . -AA0C . -AA0D . -AA0E . -AA0F . -AA10 . -AA11 . -AA12 . -AA13 . -AA14 . -AA15 . -AA16 . -AA17 . -AA18 . -AA19 . -AA1A . -AA1B . -AA1C . -AA1D . -AA1E . -AA1F . -AA20 . -AA21 . -AA22 . -AA23 . -AA24 . -AA25 . -AA26 . -AA27 . -AA28 . -AA40 . -AA41 . -AA42 . -AA44 . -AA45 . -AA46 . -AA47 . -AA48 . -AA49 . -AA4A . -AA4B . -AA60 . -AA61 . -AA62 . -AA63 . -AA64 . -AA65 . -AA66 . -AA67 . -AA68 . -AA69 . -AA6A . -AA6B . -AA6C . -AA6D . -AA6E . -AA6F . -AA70 . -AA71 . -AA72 . -AA73 . -AA74 . -AA75 . -AA76 . -AA7A . -AA80 . -AA81 . -AA82 . -AA83 . -AA84 . -AA85 . -AA86 . -AA87 . -AA88 . -AA89 . -AA8A . -AA8B . -AA8C . -AA8D . -AA8E . -AA8F . -AA90 . -AA91 . -AA92 . -AA93 . -AA94 . -AA95 . -AA96 . -AA97 . -AA98 . -AA99 . -AA9A . -AA9B . -AA9C . -AA9D . -AA9E . -AA9F . -AAA0 . -AAA1 . -AAA2 . -AAA3 . -AAA4 . -AAA5 . -AAA6 . -AAA7 . -AAA8 . -AAA9 . -AAAA . -AAAB . -AAAC . -AAAD . -AAAE . -AAAF . -AAB1 . -AAB5 . -AAB6 . -AAB9 . -AABA . -AABB . -AABC . -AABD . -AAC0 . -AAC2 . -AADB . -AADC . -AADD . -AAE0 . -AAE1 . -AAE2 . -AAE3 . -AAE4 . -AAE5 . -AAE6 . -AAE7 . -AAE8 . -AAE9 . -AAEA . -AAF2 . -AAF3 . -AAF4 . -AB01 . -AB02 . -AB03 . -AB04 . -AB05 . -AB06 . -AB09 . -AB0A . -AB0B . -AB0C . -AB0D . -AB0E . -AB11 . -AB12 . -AB13 . -AB14 . -AB15 . -AB16 . -AB20 . -AB21 . -AB22 . -AB23 . -AB24 . -AB25 . -AB26 . -AB28 . -AB29 . -AB2A . -AB2B . -AB2C . -AB2D . -AB2E . -ABC0 . -ABC1 . -ABC2 . -ABC3 . -ABC4 . -ABC5 . -ABC6 . -ABC7 . -ABC8 . -ABC9 . -ABCA . -ABCB . -ABCC . -ABCD . -ABCE . -ABCF . -ABD0 . -ABD1 . -ABD2 . -ABD3 . -ABD4 . -ABD5 . -ABD6 . -ABD7 . -ABD8 . -ABD9 . -ABDA . -ABDB . -ABDC . -ABDD . -ABDE . -ABDF . -ABE0 . -ABE1 . -ABE2 . -D7B0 . -D7B1 . -D7B2 . -D7B3 . -D7B4 . -D7B5 . -D7B6 . -D7B7 . -D7B8 . -D7B9 . -D7BA . -D7BB . -D7BC . -D7BD . -D7BE . -D7BF . -D7C0 . -D7C1 . -D7C2 . -D7C3 . -D7C4 . -D7C5 . -D7C6 . -D7CB . -D7CC . -D7CD . -D7CE . -D7CF . -D7D0 . -D7D1 . -D7D2 . -D7D3 . -D7D4 . -D7D5 . -D7D6 . -D7D7 . -D7D8 . -D7D9 . -D7DA . -D7DB . -D7DC . -D7DD . -D7DE . -D7DF . -D7E0 . -D7E1 . -D7E2 . -D7E3 . -D7E4 . -D7E5 . -D7E6 . -D7E7 . -D7E8 . -D7E9 . -D7EA . -D7EB . -D7EC . -D7ED . -D7EE . -D7EF . -D7F0 . -D7F1 . -D7F2 . -D7F3 . -D7F4 . -D7F5 . -D7F6 . -D7F7 . -D7F8 . -D7F9 . -D7FA . -D7FB . -F900 . -F901 . -F902 . -F903 . -F904 . -F905 . -F906 . -F907 . -F908 . -F909 . -F90A . -F90B . -F90C . -F90D . -F90E . -F90F . -F910 . -F911 . -F912 . -F913 . -F914 . -F915 . -F916 . -F917 . -F918 . -F919 . -F91A . -F91B . -F91C . -F91D . -F91E . -F91F . -F920 . -F921 . -F922 . -F923 . -F924 . -F925 . -F926 . -F927 . -F928 . -F929 . -F92A . -F92B . -F92C . -F92D . -F92E . -F92F . -F930 . -F931 . -F932 . -F933 . -F934 . -F935 . -F936 . -F937 . -F938 . -F939 . -F93A . -F93B . -F93C . -F93D . -F93E . -F93F . -F940 . -F941 . -F942 . -F943 . -F944 . -F945 . -F946 . -F947 . -F948 . -F949 . -F94A . -F94B . -F94C . -F94D . -F94E . -F94F . -F950 . -F951 . -F952 . -F953 . -F954 . -F955 . -F956 . -F957 . -F958 . -F959 . -F95A . -F95B . -F95C . -F95D . -F95E . -F95F . -F960 . -F961 . -F962 . -F963 . -F964 . -F965 . -F966 . -F967 . -F968 . -F969 . -F96A . -F96B . -F96C . -F96D . -F96E . -F96F . -F970 . -F971 . -F972 . -F973 . -F974 . -F975 . -F976 . -F977 . -F978 . -F979 . -F97A . -F97B . -F97C . -F97D . -F97E . -F97F . -F980 . -F981 . -F982 . -F983 . -F984 . -F985 . -F986 . -F987 . -F988 . -F989 . -F98A . -F98B . -F98C . -F98D . -F98E . -F98F . -F990 . -F991 . -F992 . -F993 . -F994 . -F995 . -F996 . -F997 . -F998 . -F999 . -F99A . -F99B . -F99C . -F99D . -F99E . -F99F . -F9A0 . -F9A1 . -F9A2 . -F9A3 . -F9A4 . -F9A5 . -F9A6 . -F9A7 . -F9A8 . -F9A9 . -F9AA . -F9AB . -F9AC . -F9AD . -F9AE . -F9AF . -F9B0 . -F9B1 . -F9B2 . -F9B3 . -F9B4 . -F9B5 . -F9B6 . -F9B7 . -F9B8 . -F9B9 . -F9BA . -F9BB . -F9BC . -F9BD . -F9BE . -F9BF . -F9C0 . -F9C1 . -F9C2 . -F9C3 . -F9C4 . -F9C5 . -F9C6 . -F9C7 . -F9C8 . -F9C9 . -F9CA . -F9CB . -F9CC . -F9CD . -F9CE . -F9CF . -F9D0 . -F9D1 . -F9D2 . -F9D3 . -F9D4 . -F9D5 . -F9D6 . -F9D7 . -F9D8 . -F9D9 . -F9DA . -F9DB . -F9DC . -F9DD . -F9DE . -F9DF . -F9E0 . -F9E1 . -F9E2 . -F9E3 . -F9E4 . -F9E5 . -F9E6 . -F9E7 . -F9E8 . -F9E9 . -F9EA . -F9EB . -F9EC . -F9ED . -F9EE . -F9EF . -F9F0 . -F9F1 . -F9F2 . -F9F3 . -F9F4 . -F9F5 . -F9F6 . -F9F7 . -F9F8 . -F9F9 . -F9FA . -F9FB . -F9FC . -F9FD . -F9FE . -F9FF . -FA00 . -FA01 . -FA02 . -FA03 . -FA04 . -FA05 . -FA06 . -FA07 . -FA08 . -FA09 . -FA0A . -FA0B . -FA0C . -FA0D . -FA0E . -FA0F . -FA10 . -FA11 . -FA12 . -FA13 . -FA14 . -FA15 . -FA16 . -FA17 . -FA18 . -FA19 . -FA1A . -FA1B . -FA1C . -FA1D . -FA1E . -FA1F . -FA20 . -FA21 . -FA22 . -FA23 . -FA24 . -FA25 . -FA26 . -FA27 . -FA28 . -FA29 . -FA2A . -FA2B . -FA2C . -FA2D . -FA2E . -FA2F . -FA30 . -FA31 . -FA32 . -FA33 . -FA34 . -FA35 . -FA36 . -FA37 . -FA38 . -FA39 . -FA3A . -FA3B . -FA3C . -FA3D . -FA3E . -FA3F . -FA40 . -FA41 . -FA42 . -FA43 . -FA44 . -FA45 . -FA46 . -FA47 . -FA48 . -FA49 . -FA4A . -FA4B . -FA4C . -FA4D . -FA4E . -FA4F . -FA50 . -FA51 . -FA52 . -FA53 . -FA54 . -FA55 . -FA56 . -FA57 . -FA58 . -FA59 . -FA5A . -FA5B . -FA5C . -FA5D . -FA5E . -FA5F . -FA60 . -FA61 . -FA62 . -FA63 . -FA64 . -FA65 . -FA66 . -FA67 . -FA68 . -FA69 . -FA6A . -FA6B . -FA6C . -FA6D . -FA70 . -FA71 . -FA72 . -FA73 . -FA74 . -FA75 . -FA76 . -FA77 . -FA78 . -FA79 . -FA7A . -FA7B . -FA7C . -FA7D . -FA7E . -FA7F . -FA80 . -FA81 . -FA82 . -FA83 . -FA84 . -FA85 . -FA86 . -FA87 . -FA88 . -FA89 . -FA8A . -FA8B . -FA8C . -FA8D . -FA8E . -FA8F . -FA90 . -FA91 . -FA92 . -FA93 . -FA94 . -FA95 . -FA96 . -FA97 . -FA98 . -FA99 . -FA9A . -FA9B . -FA9C . -FA9D . -FA9E . -FA9F . -FAA0 . -FAA1 . -FAA2 . -FAA3 . -FAA4 . -FAA5 . -FAA6 . -FAA7 . -FAA8 . -FAA9 . -FAAA . -FAAB . -FAAC . -FAAD . -FAAE . -FAAF . -FAB0 . -FAB1 . -FAB2 . -FAB3 . -FAB4 . -FAB5 . -FAB6 . -FAB7 . -FAB8 . -FAB9 . -FABA . -FABB . -FABC . -FABD . -FABE . -FABF . -FAC0 . -FAC1 . -FAC2 . -FAC3 . -FAC4 . -FAC5 . -FAC6 . -FAC7 . -FAC8 . -FAC9 . -FACA . -FACB . -FACC . -FACD . -FACE . -FACF . -FAD0 . -FAD1 . -FAD2 . -FAD3 . -FAD4 . -FAD5 . -FAD6 . -FAD7 . -FAD8 . -FAD9 . -FB00 . -FB01 . -FB02 . -FB03 . -FB04 . -FB05 . -FB06 . -FB13 . -FB14 . -FB15 . -FB16 . -FB17 . -FB1D . -FB1F . -FB20 . -FB21 . -FB22 . -FB23 . -FB24 . -FB25 . -FB26 . -FB27 . -FB28 . -FB2A . -FB2B . -FB2C . -FB2D . -FB2E . -FB2F . -FB30 . -FB31 . -FB32 . -FB33 . -FB34 . -FB35 . -FB36 . -FB38 . -FB39 . -FB3A . -FB3B . -FB3C . -FB3E . -FB40 . -FB41 . -FB43 . -FB44 . -FB46 . -FB47 . -FB48 . -FB49 . -FB4A . -FB4B . -FB4C . -FB4D . -FB4E . -FB4F . -FB50 . -FB51 . -FB52 . -FB53 . -FB54 . -FB55 . -FB56 . -FB57 . -FB58 . -FB59 . -FB5A . -FB5B . -FB5C . -FB5D . -FB5E . -FB5F . -FB60 . -FB61 . -FB62 . -FB63 . -FB64 . -FB65 . -FB66 . -FB67 . -FB68 . -FB69 . -FB6A . -FB6B . -FB6C . -FB6D . -FB6E . -FB6F . -FB70 . -FB71 . -FB72 . -FB73 . -FB74 . -FB75 . -FB76 . -FB77 . -FB78 . -FB79 . -FB7A . -FB7B . -FB7C . -FB7D . -FB7E . -FB7F . -FB80 . -FB81 . -FB82 . -FB83 . -FB84 . -FB85 . -FB86 . -FB87 . -FB88 . -FB89 . -FB8A . -FB8B . -FB8C . -FB8D . -FB8E . -FB8F . -FB90 . -FB91 . -FB92 . -FB93 . -FB94 . -FB95 . -FB96 . -FB97 . -FB98 . -FB99 . -FB9A . -FB9B . -FB9C . -FB9D . -FB9E . -FB9F . -FBA0 . -FBA1 . -FBA2 . -FBA3 . -FBA4 . -FBA5 . -FBA6 . -FBA7 . -FBA8 . -FBA9 . -FBAA . -FBAB . -FBAC . -FBAD . -FBAE . -FBAF . -FBB0 . -FBB1 . -FBD3 . -FBD4 . -FBD5 . -FBD6 . -FBD7 . -FBD8 . -FBD9 . -FBDA . -FBDB . -FBDC . -FBDD . -FBDE . -FBDF . -FBE0 . -FBE1 . -FBE2 . -FBE3 . -FBE4 . -FBE5 . -FBE6 . -FBE7 . -FBE8 . -FBE9 . -FBEA . -FBEB . -FBEC . -FBED . -FBEE . -FBEF . -FBF0 . -FBF1 . -FBF2 . -FBF3 . -FBF4 . -FBF5 . -FBF6 . -FBF7 . -FBF8 . -FBF9 . -FBFA . -FBFB . -FBFC . -FBFD . -FBFE . -FBFF . -FC00 . -FC01 . -FC02 . -FC03 . -FC04 . -FC05 . -FC06 . -FC07 . -FC08 . -FC09 . -FC0A . -FC0B . -FC0C . -FC0D . -FC0E . -FC0F . -FC10 . -FC11 . -FC12 . -FC13 . -FC14 . -FC15 . -FC16 . -FC17 . -FC18 . -FC19 . -FC1A . -FC1B . -FC1C . -FC1D . -FC1E . -FC1F . -FC20 . -FC21 . -FC22 . -FC23 . -FC24 . -FC25 . -FC26 . -FC27 . -FC28 . -FC29 . -FC2A . -FC2B . -FC2C . -FC2D . -FC2E . -FC2F . -FC30 . -FC31 . -FC32 . -FC33 . -FC34 . -FC35 . -FC36 . -FC37 . -FC38 . -FC39 . -FC3A . -FC3B . -FC3C . -FC3D . -FC3E . -FC3F . -FC40 . -FC41 . -FC42 . -FC43 . -FC44 . -FC45 . -FC46 . -FC47 . -FC48 . -FC49 . -FC4A . -FC4B . -FC4C . -FC4D . -FC4E . -FC4F . -FC50 . -FC51 . -FC52 . -FC53 . -FC54 . -FC55 . -FC56 . -FC57 . -FC58 . -FC59 . -FC5A . -FC5B . -FC5C . -FC5D . -FC5E . -FC5F . -FC60 . -FC61 . -FC62 . -FC63 . -FC64 . -FC65 . -FC66 . -FC67 . -FC68 . -FC69 . -FC6A . -FC6B . -FC6C . -FC6D . -FC6E . -FC6F . -FC70 . -FC71 . -FC72 . -FC73 . -FC74 . -FC75 . -FC76 . -FC77 . -FC78 . -FC79 . -FC7A . -FC7B . -FC7C . -FC7D . -FC7E . -FC7F . -FC80 . -FC81 . -FC82 . -FC83 . -FC84 . -FC85 . -FC86 . -FC87 . -FC88 . -FC89 . -FC8A . -FC8B . -FC8C . -FC8D . -FC8E . -FC8F . -FC90 . -FC91 . -FC92 . -FC93 . -FC94 . -FC95 . -FC96 . -FC97 . -FC98 . -FC99 . -FC9A . -FC9B . -FC9C . -FC9D . -FC9E . -FC9F . -FCA0 . -FCA1 . -FCA2 . -FCA3 . -FCA4 . -FCA5 . -FCA6 . -FCA7 . -FCA8 . -FCA9 . -FCAA . -FCAB . -FCAC . -FCAD . -FCAE . -FCAF . -FCB0 . -FCB1 . -FCB2 . -FCB3 . -FCB4 . -FCB5 . -FCB6 . -FCB7 . -FCB8 . -FCB9 . -FCBA . -FCBB . -FCBC . -FCBD . -FCBE . -FCBF . -FCC0 . -FCC1 . -FCC2 . -FCC3 . -FCC4 . -FCC5 . -FCC6 . -FCC7 . -FCC8 . -FCC9 . -FCCA . -FCCB . -FCCC . -FCCD . -FCCE . -FCCF . -FCD0 . -FCD1 . -FCD2 . -FCD3 . -FCD4 . -FCD5 . -FCD6 . -FCD7 . -FCD8 . -FCD9 . -FCDA . -FCDB . -FCDC . -FCDD . -FCDE . -FCDF . -FCE0 . -FCE1 . -FCE2 . -FCE3 . -FCE4 . -FCE5 . -FCE6 . -FCE7 . -FCE8 . -FCE9 . -FCEA . -FCEB . -FCEC . -FCED . -FCEE . -FCEF . -FCF0 . -FCF1 . -FCF2 . -FCF3 . -FCF4 . -FCF5 . -FCF6 . -FCF7 . -FCF8 . -FCF9 . -FCFA . -FCFB . -FCFC . -FCFD . -FCFE . -FCFF . -FD00 . -FD01 . -FD02 . -FD03 . -FD04 . -FD05 . -FD06 . -FD07 . -FD08 . -FD09 . -FD0A . -FD0B . -FD0C . -FD0D . -FD0E . -FD0F . -FD10 . -FD11 . -FD12 . -FD13 . -FD14 . -FD15 . -FD16 . -FD17 . -FD18 . -FD19 . -FD1A . -FD1B . -FD1C . -FD1D . -FD1E . -FD1F . -FD20 . -FD21 . -FD22 . -FD23 . -FD24 . -FD25 . -FD26 . -FD27 . -FD28 . -FD29 . -FD2A . -FD2B . -FD2C . -FD2D . -FD2E . -FD2F . -FD30 . -FD31 . -FD32 . -FD33 . -FD34 . -FD35 . -FD36 . -FD37 . -FD38 . -FD39 . -FD3A . -FD3B . -FD3C . -FD3D . -FD50 . -FD51 . -FD52 . -FD53 . -FD54 . -FD55 . -FD56 . -FD57 . -FD58 . -FD59 . -FD5A . -FD5B . -FD5C . -FD5D . -FD5E . -FD5F . -FD60 . -FD61 . -FD62 . -FD63 . -FD64 . -FD65 . -FD66 . -FD67 . -FD68 . -FD69 . -FD6A . -FD6B . -FD6C . -FD6D . -FD6E . -FD6F . -FD70 . -FD71 . -FD72 . -FD73 . -FD74 . -FD75 . -FD76 . -FD77 . -FD78 . -FD79 . -FD7A . -FD7B . -FD7C . -FD7D . -FD7E . -FD7F . -FD80 . -FD81 . -FD82 . -FD83 . -FD84 . -FD85 . -FD86 . -FD87 . -FD88 . -FD89 . -FD8A . -FD8B . -FD8C . -FD8D . -FD8E . -FD8F . -FD92 . -FD93 . -FD94 . -FD95 . -FD96 . -FD97 . -FD98 . -FD99 . -FD9A . -FD9B . -FD9C . -FD9D . -FD9E . -FD9F . -FDA0 . -FDA1 . -FDA2 . -FDA3 . -FDA4 . -FDA5 . -FDA6 . -FDA7 . -FDA8 . -FDA9 . -FDAA . -FDAB . -FDAC . -FDAD . -FDAE . -FDAF . -FDB0 . -FDB1 . -FDB2 . -FDB3 . -FDB4 . -FDB5 . -FDB6 . -FDB7 . -FDB8 . -FDB9 . -FDBA . -FDBB . -FDBC . -FDBD . -FDBE . -FDBF . -FDC0 . -FDC1 . -FDC2 . -FDC3 . -FDC4 . -FDC5 . -FDC6 . -FDC7 . -FDF0 . -FDF1 . -FDF2 . -FDF3 . -FDF4 . -FDF5 . -FDF6 . -FDF7 . -FDF8 . -FDF9 . -FDFA . -FDFB . -FE70 . -FE71 . -FE72 . -FE73 . -FE74 . -FE76 . -FE77 . -FE78 . -FE79 . -FE7A . -FE7B . -FE7C . -FE7D . -FE7E . -FE7F . -FE80 . -FE81 . -FE82 . -FE83 . -FE84 . -FE85 . -FE86 . -FE87 . -FE88 . -FE89 . -FE8A . -FE8B . -FE8C . -FE8D . -FE8E . -FE8F . -FE90 . -FE91 . -FE92 . -FE93 . -FE94 . -FE95 . -FE96 . -FE97 . -FE98 . -FE99 . -FE9A . -FE9B . -FE9C . -FE9D . -FE9E . -FE9F . -FEA0 . -FEA1 . -FEA2 . -FEA3 . -FEA4 . -FEA5 . -FEA6 . -FEA7 . -FEA8 . -FEA9 . -FEAA . -FEAB . -FEAC . -FEAD . -FEAE . -FEAF . -FEB0 . -FEB1 . -FEB2 . -FEB3 . -FEB4 . -FEB5 . -FEB6 . -FEB7 . -FEB8 . -FEB9 . -FEBA . -FEBB . -FEBC . -FEBD . -FEBE . -FEBF . -FEC0 . -FEC1 . -FEC2 . -FEC3 . -FEC4 . -FEC5 . -FEC6 . -FEC7 . -FEC8 . -FEC9 . -FECA . -FECB . -FECC . -FECD . -FECE . -FECF . -FED0 . -FED1 . -FED2 . -FED3 . -FED4 . -FED5 . -FED6 . -FED7 . -FED8 . -FED9 . -FEDA . -FEDB . -FEDC . -FEDD . -FEDE . -FEDF . -FEE0 . -FEE1 . -FEE2 . -FEE3 . -FEE4 . -FEE5 . -FEE6 . -FEE7 . -FEE8 . -FEE9 . -FEEA . -FEEB . -FEEC . -FEED . -FEEE . -FEEF . -FEF0 . -FEF1 . -FEF2 . -FEF3 . -FEF4 . -FEF5 . -FEF6 . -FEF7 . -FEF8 . -FEF9 . -FEFA . -FEFB . -FEFC . -FF41 FF21 -FF42 FF22 -FF43 FF23 -FF44 FF24 -FF45 FF25 -FF46 FF26 -FF47 FF27 -FF48 FF28 -FF49 FF29 -FF4A FF2A -FF4B FF2B -FF4C FF2C -FF4D FF2D -FF4E FF2E -FF4F FF2F -FF50 FF30 -FF51 FF31 -FF52 FF32 -FF53 FF33 -FF54 FF34 -FF55 FF35 -FF56 FF36 -FF57 FF37 -FF58 FF38 -FF59 FF39 -FF5A FF3A -FF66 . -FF67 . -FF68 . -FF69 . -FF6A . -FF6B . -FF6C . -FF6D . -FF6E . -FF6F . -FF70 . -FF71 . -FF72 . -FF73 . -FF74 . -FF75 . -FF76 . -FF77 . -FF78 . -FF79 . -FF7A . -FF7B . -FF7C . -FF7D . -FF7E . -FF7F . -FF80 . -FF81 . -FF82 . -FF83 . -FF84 . -FF85 . -FF86 . -FF87 . -FF88 . -FF89 . -FF8A . -FF8B . -FF8C . -FF8D . -FF8E . -FF8F . -FF90 . -FF91 . -FF92 . -FF93 . -FF94 . -FF95 . -FF96 . -FF97 . -FF98 . -FF99 . -FF9A . -FF9B . -FF9C . -FF9D . -FF9E . -FF9F . -FFA0 . -FFA1 . -FFA2 . -FFA3 . -FFA4 . -FFA5 . -FFA6 . -FFA7 . -FFA8 . -FFA9 . -FFAA . -FFAB . -FFAC . -FFAD . -FFAE . -FFAF . -FFB0 . -FFB1 . -FFB2 . -FFB3 . -FFB4 . -FFB5 . -FFB6 . -FFB7 . -FFB8 . -FFB9 . -FFBA . -FFBB . -FFBC . -FFBD . -FFBE . -FFC2 . -FFC3 . -FFC4 . -FFC5 . -FFC6 . -FFC7 . -FFCA . -FFCB . -FFCC . -FFCD . -FFCE . -FFCF . -FFD2 . -FFD3 . -FFD4 . -FFD5 . -FFD6 . -FFD7 . -FFDA . -FFDB . -FFDC . -10000 . -10001 . -10002 . -10003 . -10004 . -10005 . -10006 . -10007 . -10008 . -10009 . -1000A . -1000B . -1000D . -1000E . -1000F . -10010 . -10011 . -10012 . -10013 . -10014 . -10015 . -10016 . -10017 . -10018 . -10019 . -1001A . -1001B . -1001C . -1001D . -1001E . -1001F . -10020 . -10021 . -10022 . -10023 . -10024 . -10025 . -10026 . -10028 . -10029 . -1002A . -1002B . -1002C . -1002D . -1002E . -1002F . -10030 . -10031 . -10032 . -10033 . -10034 . -10035 . -10036 . -10037 . -10038 . -10039 . -1003A . -1003C . -1003D . -1003F . -10040 . -10041 . -10042 . -10043 . -10044 . -10045 . -10046 . -10047 . -10048 . -10049 . -1004A . -1004B . -1004C . -1004D . -10050 . -10051 . -10052 . -10053 . -10054 . -10055 . -10056 . -10057 . -10058 . -10059 . -1005A . -1005B . -1005C . -1005D . -10080 . -10081 . -10082 . -10083 . -10084 . -10085 . -10086 . -10087 . -10088 . -10089 . -1008A . -1008B . -1008C . -1008D . -1008E . -1008F . -10090 . -10091 . -10092 . -10093 . -10094 . -10095 . -10096 . -10097 . -10098 . -10099 . -1009A . -1009B . -1009C . -1009D . -1009E . -1009F . -100A0 . -100A1 . -100A2 . -100A3 . -100A4 . -100A5 . -100A6 . -100A7 . -100A8 . -100A9 . -100AA . -100AB . -100AC . -100AD . -100AE . -100AF . -100B0 . -100B1 . -100B2 . -100B3 . -100B4 . -100B5 . -100B6 . -100B7 . -100B8 . -100B9 . -100BA . -100BB . -100BC . -100BD . -100BE . -100BF . -100C0 . -100C1 . -100C2 . -100C3 . -100C4 . -100C5 . -100C6 . -100C7 . -100C8 . -100C9 . -100CA . -100CB . -100CC . -100CD . -100CE . -100CF . -100D0 . -100D1 . -100D2 . -100D3 . -100D4 . -100D5 . -100D6 . -100D7 . -100D8 . -100D9 . -100DA . -100DB . -100DC . -100DD . -100DE . -100DF . -100E0 . -100E1 . -100E2 . -100E3 . -100E4 . -100E5 . -100E6 . -100E7 . -100E8 . -100E9 . -100EA . -100EB . -100EC . -100ED . -100EE . -100EF . -100F0 . -100F1 . -100F2 . -100F3 . -100F4 . -100F5 . -100F6 . -100F7 . -100F8 . -100F9 . -100FA . -10280 . -10281 . -10282 . -10283 . -10284 . -10285 . -10286 . -10287 . -10288 . -10289 . -1028A . -1028B . -1028C . -1028D . -1028E . -1028F . -10290 . -10291 . -10292 . -10293 . -10294 . -10295 . -10296 . -10297 . -10298 . -10299 . -1029A . -1029B . -1029C . -102A0 . -102A1 . -102A2 . -102A3 . -102A4 . -102A5 . -102A6 . -102A7 . -102A8 . -102A9 . -102AA . -102AB . -102AC . -102AD . -102AE . -102AF . -102B0 . -102B1 . -102B2 . -102B3 . -102B4 . -102B5 . -102B6 . -102B7 . -102B8 . -102B9 . -102BA . -102BB . -102BC . -102BD . -102BE . -102BF . -102C0 . -102C1 . -102C2 . -102C3 . -102C4 . -102C5 . -102C6 . -102C7 . -102C8 . -102C9 . -102CA . -102CB . -102CC . -102CD . -102CE . -102CF . -102D0 . -10300 . -10301 . -10302 . -10303 . -10304 . -10305 . -10306 . -10307 . -10308 . -10309 . -1030A . -1030B . -1030C . -1030D . -1030E . -1030F . -10310 . -10311 . -10312 . -10313 . -10314 . -10315 . -10316 . -10317 . -10318 . -10319 . -1031A . -1031B . -1031C . -1031D . -1031E . -10330 . -10331 . -10332 . -10333 . -10334 . -10335 . -10336 . -10337 . -10338 . -10339 . -1033A . -1033B . -1033C . -1033D . -1033E . -1033F . -10340 . -10342 . -10343 . -10344 . -10345 . -10346 . -10347 . -10348 . -10349 . -10380 . -10381 . -10382 . -10383 . -10384 . -10385 . -10386 . -10387 . -10388 . -10389 . -1038A . -1038B . -1038C . -1038D . -1038E . -1038F . -10390 . -10391 . -10392 . -10393 . -10394 . -10395 . -10396 . -10397 . -10398 . -10399 . -1039A . -1039B . -1039C . -1039D . -103A0 . -103A1 . -103A2 . -103A3 . -103A4 . -103A5 . -103A6 . -103A7 . -103A8 . -103A9 . -103AA . -103AB . -103AC . -103AD . -103AE . -103AF . -103B0 . -103B1 . -103B2 . -103B3 . -103B4 . -103B5 . -103B6 . -103B7 . -103B8 . -103B9 . -103BA . -103BB . -103BC . -103BD . -103BE . -103BF . -103C0 . -103C1 . -103C2 . -103C3 . -103C8 . -103C9 . -103CA . -103CB . -103CC . -103CD . -103CE . -103CF . -10428 10400 -10429 10401 -1042A 10402 -1042B 10403 -1042C 10404 -1042D 10405 -1042E 10406 -1042F 10407 -10430 10408 -10431 10409 -10432 1040A -10433 1040B -10434 1040C -10435 1040D -10436 1040E -10437 1040F -10438 10410 -10439 10411 -1043A 10412 -1043B 10413 -1043C 10414 -1043D 10415 -1043E 10416 -1043F 10417 -10440 10418 -10441 10419 -10442 1041A -10443 1041B -10444 1041C -10445 1041D -10446 1041E -10447 1041F -10448 10420 -10449 10421 -1044A 10422 -1044B 10423 -1044C 10424 -1044D 10425 -1044E 10426 -1044F 10427 -10450 . -10451 . -10452 . -10453 . -10454 . -10455 . -10456 . -10457 . -10458 . -10459 . -1045A . -1045B . -1045C . -1045D . -1045E . -1045F . -10460 . -10461 . -10462 . -10463 . -10464 . -10465 . -10466 . -10467 . -10468 . -10469 . -1046A . -1046B . -1046C . -1046D . -1046E . -1046F . -10470 . -10471 . -10472 . -10473 . -10474 . -10475 . -10476 . -10477 . -10478 . -10479 . -1047A . -1047B . -1047C . -1047D . -1047E . -1047F . -10480 . -10481 . -10482 . -10483 . -10484 . -10485 . -10486 . -10487 . -10488 . -10489 . -1048A . -1048B . -1048C . -1048D . -1048E . -1048F . -10490 . -10491 . -10492 . -10493 . -10494 . -10495 . -10496 . -10497 . -10498 . -10499 . -1049A . -1049B . -1049C . -1049D . -10800 . -10801 . -10802 . -10803 . -10804 . -10805 . -10808 . -1080A . -1080B . -1080C . -1080D . -1080E . -1080F . -10810 . -10811 . -10812 . -10813 . -10814 . -10815 . -10816 . -10817 . -10818 . -10819 . -1081A . -1081B . -1081C . -1081D . -1081E . -1081F . -10820 . -10821 . -10822 . -10823 . -10824 . -10825 . -10826 . -10827 . -10828 . -10829 . -1082A . -1082B . -1082C . -1082D . -1082E . -1082F . -10830 . -10831 . -10832 . -10833 . -10834 . -10835 . -10837 . -10838 . -1083C . -1083F . -10840 . -10841 . -10842 . -10843 . -10844 . -10845 . -10846 . -10847 . -10848 . -10849 . -1084A . -1084B . -1084C . -1084D . -1084E . -1084F . -10850 . -10851 . -10852 . -10853 . -10854 . -10855 . -10900 . -10901 . -10902 . -10903 . -10904 . -10905 . -10906 . -10907 . -10908 . -10909 . -1090A . -1090B . -1090C . -1090D . -1090E . -1090F . -10910 . -10911 . -10912 . -10913 . -10914 . -10915 . -10920 . -10921 . -10922 . -10923 . -10924 . -10925 . -10926 . -10927 . -10928 . -10929 . -1092A . -1092B . -1092C . -1092D . -1092E . -1092F . -10930 . -10931 . -10932 . -10933 . -10934 . -10935 . -10936 . -10937 . -10938 . -10939 . -10980 . -10981 . -10982 . -10983 . -10984 . -10985 . -10986 . -10987 . -10988 . -10989 . -1098A . -1098B . -1098C . -1098D . -1098E . -1098F . -10990 . -10991 . -10992 . -10993 . -10994 . -10995 . -10996 . -10997 . -10998 . -10999 . -1099A . -1099B . -1099C . -1099D . -1099E . -1099F . -109A0 . -109A1 . -109A2 . -109A3 . -109A4 . -109A5 . -109A6 . -109A7 . -109A8 . -109A9 . -109AA . -109AB . -109AC . -109AD . -109AE . -109AF . -109B0 . -109B1 . -109B2 . -109B3 . -109B4 . -109B5 . -109B6 . -109B7 . -109BE . -109BF . -10A00 . -10A10 . -10A11 . -10A12 . -10A13 . -10A15 . -10A16 . -10A17 . -10A19 . -10A1A . -10A1B . -10A1C . -10A1D . -10A1E . -10A1F . -10A20 . -10A21 . -10A22 . -10A23 . -10A24 . -10A25 . -10A26 . -10A27 . -10A28 . -10A29 . -10A2A . -10A2B . -10A2C . -10A2D . -10A2E . -10A2F . -10A30 . -10A31 . -10A32 . -10A33 . -10A60 . -10A61 . -10A62 . -10A63 . -10A64 . -10A65 . -10A66 . -10A67 . -10A68 . -10A69 . -10A6A . -10A6B . -10A6C . -10A6D . -10A6E . -10A6F . -10A70 . -10A71 . -10A72 . -10A73 . -10A74 . -10A75 . -10A76 . -10A77 . -10A78 . -10A79 . -10A7A . -10A7B . -10A7C . -10B00 . -10B01 . -10B02 . -10B03 . -10B04 . -10B05 . -10B06 . -10B07 . -10B08 . -10B09 . -10B0A . -10B0B . -10B0C . -10B0D . -10B0E . -10B0F . -10B10 . -10B11 . -10B12 . -10B13 . -10B14 . -10B15 . -10B16 . -10B17 . -10B18 . -10B19 . -10B1A . -10B1B . -10B1C . -10B1D . -10B1E . -10B1F . -10B20 . -10B21 . -10B22 . -10B23 . -10B24 . -10B25 . -10B26 . -10B27 . -10B28 . -10B29 . -10B2A . -10B2B . -10B2C . -10B2D . -10B2E . -10B2F . -10B30 . -10B31 . -10B32 . -10B33 . -10B34 . -10B35 . -10B40 . -10B41 . -10B42 . -10B43 . -10B44 . -10B45 . -10B46 . -10B47 . -10B48 . -10B49 . -10B4A . -10B4B . -10B4C . -10B4D . -10B4E . -10B4F . -10B50 . -10B51 . -10B52 . -10B53 . -10B54 . -10B55 . -10B60 . -10B61 . -10B62 . -10B63 . -10B64 . -10B65 . -10B66 . -10B67 . -10B68 . -10B69 . -10B6A . -10B6B . -10B6C . -10B6D . -10B6E . -10B6F . -10B70 . -10B71 . -10B72 . -10C00 . -10C01 . -10C02 . -10C03 . -10C04 . -10C05 . -10C06 . -10C07 . -10C08 . -10C09 . -10C0A . -10C0B . -10C0C . -10C0D . -10C0E . -10C0F . -10C10 . -10C11 . -10C12 . -10C13 . -10C14 . -10C15 . -10C16 . -10C17 . -10C18 . -10C19 . -10C1A . -10C1B . -10C1C . -10C1D . -10C1E . -10C1F . -10C20 . -10C21 . -10C22 . -10C23 . -10C24 . -10C25 . -10C26 . -10C27 . -10C28 . -10C29 . -10C2A . -10C2B . -10C2C . -10C2D . -10C2E . -10C2F . -10C30 . -10C31 . -10C32 . -10C33 . -10C34 . -10C35 . -10C36 . -10C37 . -10C38 . -10C39 . -10C3A . -10C3B . -10C3C . -10C3D . -10C3E . -10C3F . -10C40 . -10C41 . -10C42 . -10C43 . -10C44 . -10C45 . -10C46 . -10C47 . -10C48 . -11003 . -11004 . -11005 . -11006 . -11007 . -11008 . -11009 . -1100A . -1100B . -1100C . -1100D . -1100E . -1100F . -11010 . -11011 . -11012 . -11013 . -11014 . -11015 . -11016 . -11017 . -11018 . -11019 . -1101A . -1101B . -1101C . -1101D . -1101E . -1101F . -11020 . -11021 . -11022 . -11023 . -11024 . -11025 . -11026 . -11027 . -11028 . -11029 . -1102A . -1102B . -1102C . -1102D . -1102E . -1102F . -11030 . -11031 . -11032 . -11033 . -11034 . -11035 . -11036 . -11037 . -11083 . -11084 . -11085 . -11086 . -11087 . -11088 . -11089 . -1108A . -1108B . -1108C . -1108D . -1108E . -1108F . -11090 . -11091 . -11092 . -11093 . -11094 . -11095 . -11096 . -11097 . -11098 . -11099 . -1109A . -1109B . -1109C . -1109D . -1109E . -1109F . -110A0 . -110A1 . -110A2 . -110A3 . -110A4 . -110A5 . -110A6 . -110A7 . -110A8 . -110A9 . -110AA . -110AB . -110AC . -110AD . -110AE . -110AF . -110D0 . -110D1 . -110D2 . -110D3 . -110D4 . -110D5 . -110D6 . -110D7 . -110D8 . -110D9 . -110DA . -110DB . -110DC . -110DD . -110DE . -110DF . -110E0 . -110E1 . -110E2 . -110E3 . -110E4 . -110E5 . -110E6 . -110E7 . -110E8 . -11103 . -11104 . -11105 . -11106 . -11107 . -11108 . -11109 . -1110A . -1110B . -1110C . -1110D . -1110E . -1110F . -11110 . -11111 . -11112 . -11113 . -11114 . -11115 . -11116 . -11117 . -11118 . -11119 . -1111A . -1111B . -1111C . -1111D . -1111E . -1111F . -11120 . -11121 . -11122 . -11123 . -11124 . -11125 . -11126 . -11183 . -11184 . -11185 . -11186 . -11187 . -11188 . -11189 . -1118A . -1118B . -1118C . -1118D . -1118E . -1118F . -11190 . -11191 . -11192 . -11193 . -11194 . -11195 . -11196 . -11197 . -11198 . -11199 . -1119A . -1119B . -1119C . -1119D . -1119E . -1119F . -111A0 . -111A1 . -111A2 . -111A3 . -111A4 . -111A5 . -111A6 . -111A7 . -111A8 . -111A9 . -111AA . -111AB . -111AC . -111AD . -111AE . -111AF . -111B0 . -111B1 . -111B2 . -111C1 . -111C2 . -111C3 . -111C4 . -11680 . -11681 . -11682 . -11683 . -11684 . -11685 . -11686 . -11687 . -11688 . -11689 . -1168A . -1168B . -1168C . -1168D . -1168E . -1168F . -11690 . -11691 . -11692 . -11693 . -11694 . -11695 . -11696 . -11697 . -11698 . -11699 . -1169A . -1169B . -1169C . -1169D . -1169E . -1169F . -116A0 . -116A1 . -116A2 . -116A3 . -116A4 . -116A5 . -116A6 . -116A7 . -116A8 . -116A9 . -116AA . -12000 . -12001 . -12002 . -12003 . -12004 . -12005 . -12006 . -12007 . -12008 . -12009 . -1200A . -1200B . -1200C . -1200D . -1200E . -1200F . -12010 . -12011 . -12012 . -12013 . -12014 . -12015 . -12016 . -12017 . -12018 . -12019 . -1201A . -1201B . -1201C . -1201D . -1201E . -1201F . -12020 . -12021 . -12022 . -12023 . -12024 . -12025 . -12026 . -12027 . -12028 . -12029 . -1202A . -1202B . -1202C . -1202D . -1202E . -1202F . -12030 . -12031 . -12032 . -12033 . -12034 . -12035 . -12036 . -12037 . -12038 . -12039 . -1203A . -1203B . -1203C . -1203D . -1203E . -1203F . -12040 . -12041 . -12042 . -12043 . -12044 . -12045 . -12046 . -12047 . -12048 . -12049 . -1204A . -1204B . -1204C . -1204D . -1204E . -1204F . -12050 . -12051 . -12052 . -12053 . -12054 . -12055 . -12056 . -12057 . -12058 . -12059 . -1205A . -1205B . -1205C . -1205D . -1205E . -1205F . -12060 . -12061 . -12062 . -12063 . -12064 . -12065 . -12066 . -12067 . -12068 . -12069 . -1206A . -1206B . -1206C . -1206D . -1206E . -1206F . -12070 . -12071 . -12072 . -12073 . -12074 . -12075 . -12076 . -12077 . -12078 . -12079 . -1207A . -1207B . -1207C . -1207D . -1207E . -1207F . -12080 . -12081 . -12082 . -12083 . -12084 . -12085 . -12086 . -12087 . -12088 . -12089 . -1208A . -1208B . -1208C . -1208D . -1208E . -1208F . -12090 . -12091 . -12092 . -12093 . -12094 . -12095 . -12096 . -12097 . -12098 . -12099 . -1209A . -1209B . -1209C . -1209D . -1209E . -1209F . -120A0 . -120A1 . -120A2 . -120A3 . -120A4 . -120A5 . -120A6 . -120A7 . -120A8 . -120A9 . -120AA . -120AB . -120AC . -120AD . -120AE . -120AF . -120B0 . -120B1 . -120B2 . -120B3 . -120B4 . -120B5 . -120B6 . -120B7 . -120B8 . -120B9 . -120BA . -120BB . -120BC . -120BD . -120BE . -120BF . -120C0 . -120C1 . -120C2 . -120C3 . -120C4 . -120C5 . -120C6 . -120C7 . -120C8 . -120C9 . -120CA . -120CB . -120CC . -120CD . -120CE . -120CF . -120D0 . -120D1 . -120D2 . -120D3 . -120D4 . -120D5 . -120D6 . -120D7 . -120D8 . -120D9 . -120DA . -120DB . -120DC . -120DD . -120DE . -120DF . -120E0 . -120E1 . -120E2 . -120E3 . -120E4 . -120E5 . -120E6 . -120E7 . -120E8 . -120E9 . -120EA . -120EB . -120EC . -120ED . -120EE . -120EF . -120F0 . -120F1 . -120F2 . -120F3 . -120F4 . -120F5 . -120F6 . -120F7 . -120F8 . -120F9 . -120FA . -120FB . -120FC . -120FD . -120FE . -120FF . -12100 . -12101 . -12102 . -12103 . -12104 . -12105 . -12106 . -12107 . -12108 . -12109 . -1210A . -1210B . -1210C . -1210D . -1210E . -1210F . -12110 . -12111 . -12112 . -12113 . -12114 . -12115 . -12116 . -12117 . -12118 . -12119 . -1211A . -1211B . -1211C . -1211D . -1211E . -1211F . -12120 . -12121 . -12122 . -12123 . -12124 . -12125 . -12126 . -12127 . -12128 . -12129 . -1212A . -1212B . -1212C . -1212D . -1212E . -1212F . -12130 . -12131 . -12132 . -12133 . -12134 . -12135 . -12136 . -12137 . -12138 . -12139 . -1213A . -1213B . -1213C . -1213D . -1213E . -1213F . -12140 . -12141 . -12142 . -12143 . -12144 . -12145 . -12146 . -12147 . -12148 . -12149 . -1214A . -1214B . -1214C . -1214D . -1214E . -1214F . -12150 . -12151 . -12152 . -12153 . -12154 . -12155 . -12156 . -12157 . -12158 . -12159 . -1215A . -1215B . -1215C . -1215D . -1215E . -1215F . -12160 . -12161 . -12162 . -12163 . -12164 . -12165 . -12166 . -12167 . -12168 . -12169 . -1216A . -1216B . -1216C . -1216D . -1216E . -1216F . -12170 . -12171 . -12172 . -12173 . -12174 . -12175 . -12176 . -12177 . -12178 . -12179 . -1217A . -1217B . -1217C . -1217D . -1217E . -1217F . -12180 . -12181 . -12182 . -12183 . -12184 . -12185 . -12186 . -12187 . -12188 . -12189 . -1218A . -1218B . -1218C . -1218D . -1218E . -1218F . -12190 . -12191 . -12192 . -12193 . -12194 . -12195 . -12196 . -12197 . -12198 . -12199 . -1219A . -1219B . -1219C . -1219D . -1219E . -1219F . -121A0 . -121A1 . -121A2 . -121A3 . -121A4 . -121A5 . -121A6 . -121A7 . -121A8 . -121A9 . -121AA . -121AB . -121AC . -121AD . -121AE . -121AF . -121B0 . -121B1 . -121B2 . -121B3 . -121B4 . -121B5 . -121B6 . -121B7 . -121B8 . -121B9 . -121BA . -121BB . -121BC . -121BD . -121BE . -121BF . -121C0 . -121C1 . -121C2 . -121C3 . -121C4 . -121C5 . -121C6 . -121C7 . -121C8 . -121C9 . -121CA . -121CB . -121CC . -121CD . -121CE . -121CF . -121D0 . -121D1 . -121D2 . -121D3 . -121D4 . -121D5 . -121D6 . -121D7 . -121D8 . -121D9 . -121DA . -121DB . -121DC . -121DD . -121DE . -121DF . -121E0 . -121E1 . -121E2 . -121E3 . -121E4 . -121E5 . -121E6 . -121E7 . -121E8 . -121E9 . -121EA . -121EB . -121EC . -121ED . -121EE . -121EF . -121F0 . -121F1 . -121F2 . -121F3 . -121F4 . -121F5 . -121F6 . -121F7 . -121F8 . -121F9 . -121FA . -121FB . -121FC . -121FD . -121FE . -121FF . -12200 . -12201 . -12202 . -12203 . -12204 . -12205 . -12206 . -12207 . -12208 . -12209 . -1220A . -1220B . -1220C . -1220D . -1220E . -1220F . -12210 . -12211 . -12212 . -12213 . -12214 . -12215 . -12216 . -12217 . -12218 . -12219 . -1221A . -1221B . -1221C . -1221D . -1221E . -1221F . -12220 . -12221 . -12222 . -12223 . -12224 . -12225 . -12226 . -12227 . -12228 . -12229 . -1222A . -1222B . -1222C . -1222D . -1222E . -1222F . -12230 . -12231 . -12232 . -12233 . -12234 . -12235 . -12236 . -12237 . -12238 . -12239 . -1223A . -1223B . -1223C . -1223D . -1223E . -1223F . -12240 . -12241 . -12242 . -12243 . -12244 . -12245 . -12246 . -12247 . -12248 . -12249 . -1224A . -1224B . -1224C . -1224D . -1224E . -1224F . -12250 . -12251 . -12252 . -12253 . -12254 . -12255 . -12256 . -12257 . -12258 . -12259 . -1225A . -1225B . -1225C . -1225D . -1225E . -1225F . -12260 . -12261 . -12262 . -12263 . -12264 . -12265 . -12266 . -12267 . -12268 . -12269 . -1226A . -1226B . -1226C . -1226D . -1226E . -1226F . -12270 . -12271 . -12272 . -12273 . -12274 . -12275 . -12276 . -12277 . -12278 . -12279 . -1227A . -1227B . -1227C . -1227D . -1227E . -1227F . -12280 . -12281 . -12282 . -12283 . -12284 . -12285 . -12286 . -12287 . -12288 . -12289 . -1228A . -1228B . -1228C . -1228D . -1228E . -1228F . -12290 . -12291 . -12292 . -12293 . -12294 . -12295 . -12296 . -12297 . -12298 . -12299 . -1229A . -1229B . -1229C . -1229D . -1229E . -1229F . -122A0 . -122A1 . -122A2 . -122A3 . -122A4 . -122A5 . -122A6 . -122A7 . -122A8 . -122A9 . -122AA . -122AB . -122AC . -122AD . -122AE . -122AF . -122B0 . -122B1 . -122B2 . -122B3 . -122B4 . -122B5 . -122B6 . -122B7 . -122B8 . -122B9 . -122BA . -122BB . -122BC . -122BD . -122BE . -122BF . -122C0 . -122C1 . -122C2 . -122C3 . -122C4 . -122C5 . -122C6 . -122C7 . -122C8 . -122C9 . -122CA . -122CB . -122CC . -122CD . -122CE . -122CF . -122D0 . -122D1 . -122D2 . -122D3 . -122D4 . -122D5 . -122D6 . -122D7 . -122D8 . -122D9 . -122DA . -122DB . -122DC . -122DD . -122DE . -122DF . -122E0 . -122E1 . -122E2 . -122E3 . -122E4 . -122E5 . -122E6 . -122E7 . -122E8 . -122E9 . -122EA . -122EB . -122EC . -122ED . -122EE . -122EF . -122F0 . -122F1 . -122F2 . -122F3 . -122F4 . -122F5 . -122F6 . -122F7 . -122F8 . -122F9 . -122FA . -122FB . -122FC . -122FD . -122FE . -122FF . -12300 . -12301 . -12302 . -12303 . -12304 . -12305 . -12306 . -12307 . -12308 . -12309 . -1230A . -1230B . -1230C . -1230D . -1230E . -1230F . -12310 . -12311 . -12312 . -12313 . -12314 . -12315 . -12316 . -12317 . -12318 . -12319 . -1231A . -1231B . -1231C . -1231D . -1231E . -1231F . -12320 . -12321 . -12322 . -12323 . -12324 . -12325 . -12326 . -12327 . -12328 . -12329 . -1232A . -1232B . -1232C . -1232D . -1232E . -1232F . -12330 . -12331 . -12332 . -12333 . -12334 . -12335 . -12336 . -12337 . -12338 . -12339 . -1233A . -1233B . -1233C . -1233D . -1233E . -1233F . -12340 . -12341 . -12342 . -12343 . -12344 . -12345 . -12346 . -12347 . -12348 . -12349 . -1234A . -1234B . -1234C . -1234D . -1234E . -1234F . -12350 . -12351 . -12352 . -12353 . -12354 . -12355 . -12356 . -12357 . -12358 . -12359 . -1235A . -1235B . -1235C . -1235D . -1235E . -1235F . -12360 . -12361 . -12362 . -12363 . -12364 . -12365 . -12366 . -12367 . -12368 . -12369 . -1236A . -1236B . -1236C . -1236D . -1236E . -13000 . -13001 . -13002 . -13003 . -13004 . -13005 . -13006 . -13007 . -13008 . -13009 . -1300A . -1300B . -1300C . -1300D . -1300E . -1300F . -13010 . -13011 . -13012 . -13013 . -13014 . -13015 . -13016 . -13017 . -13018 . -13019 . -1301A . -1301B . -1301C . -1301D . -1301E . -1301F . -13020 . -13021 . -13022 . -13023 . -13024 . -13025 . -13026 . -13027 . -13028 . -13029 . -1302A . -1302B . -1302C . -1302D . -1302E . -1302F . -13030 . -13031 . -13032 . -13033 . -13034 . -13035 . -13036 . -13037 . -13038 . -13039 . -1303A . -1303B . -1303C . -1303D . -1303E . -1303F . -13040 . -13041 . -13042 . -13043 . -13044 . -13045 . -13046 . -13047 . -13048 . -13049 . -1304A . -1304B . -1304C . -1304D . -1304E . -1304F . -13050 . -13051 . -13052 . -13053 . -13054 . -13055 . -13056 . -13057 . -13058 . -13059 . -1305A . -1305B . -1305C . -1305D . -1305E . -1305F . -13060 . -13061 . -13062 . -13063 . -13064 . -13065 . -13066 . -13067 . -13068 . -13069 . -1306A . -1306B . -1306C . -1306D . -1306E . -1306F . -13070 . -13071 . -13072 . -13073 . -13074 . -13075 . -13076 . -13077 . -13078 . -13079 . -1307A . -1307B . -1307C . -1307D . -1307E . -1307F . -13080 . -13081 . -13082 . -13083 . -13084 . -13085 . -13086 . -13087 . -13088 . -13089 . -1308A . -1308B . -1308C . -1308D . -1308E . -1308F . -13090 . -13091 . -13092 . -13093 . -13094 . -13095 . -13096 . -13097 . -13098 . -13099 . -1309A . -1309B . -1309C . -1309D . -1309E . -1309F . -130A0 . -130A1 . -130A2 . -130A3 . -130A4 . -130A5 . -130A6 . -130A7 . -130A8 . -130A9 . -130AA . -130AB . -130AC . -130AD . -130AE . -130AF . -130B0 . -130B1 . -130B2 . -130B3 . -130B4 . -130B5 . -130B6 . -130B7 . -130B8 . -130B9 . -130BA . -130BB . -130BC . -130BD . -130BE . -130BF . -130C0 . -130C1 . -130C2 . -130C3 . -130C4 . -130C5 . -130C6 . -130C7 . -130C8 . -130C9 . -130CA . -130CB . -130CC . -130CD . -130CE . -130CF . -130D0 . -130D1 . -130D2 . -130D3 . -130D4 . -130D5 . -130D6 . -130D7 . -130D8 . -130D9 . -130DA . -130DB . -130DC . -130DD . -130DE . -130DF . -130E0 . -130E1 . -130E2 . -130E3 . -130E4 . -130E5 . -130E6 . -130E7 . -130E8 . -130E9 . -130EA . -130EB . -130EC . -130ED . -130EE . -130EF . -130F0 . -130F1 . -130F2 . -130F3 . -130F4 . -130F5 . -130F6 . -130F7 . -130F8 . -130F9 . -130FA . -130FB . -130FC . -130FD . -130FE . -130FF . -13100 . -13101 . -13102 . -13103 . -13104 . -13105 . -13106 . -13107 . -13108 . -13109 . -1310A . -1310B . -1310C . -1310D . -1310E . -1310F . -13110 . -13111 . -13112 . -13113 . -13114 . -13115 . -13116 . -13117 . -13118 . -13119 . -1311A . -1311B . -1311C . -1311D . -1311E . -1311F . -13120 . -13121 . -13122 . -13123 . -13124 . -13125 . -13126 . -13127 . -13128 . -13129 . -1312A . -1312B . -1312C . -1312D . -1312E . -1312F . -13130 . -13131 . -13132 . -13133 . -13134 . -13135 . -13136 . -13137 . -13138 . -13139 . -1313A . -1313B . -1313C . -1313D . -1313E . -1313F . -13140 . -13141 . -13142 . -13143 . -13144 . -13145 . -13146 . -13147 . -13148 . -13149 . -1314A . -1314B . -1314C . -1314D . -1314E . -1314F . -13150 . -13151 . -13152 . -13153 . -13154 . -13155 . -13156 . -13157 . -13158 . -13159 . -1315A . -1315B . -1315C . -1315D . -1315E . -1315F . -13160 . -13161 . -13162 . -13163 . -13164 . -13165 . -13166 . -13167 . -13168 . -13169 . -1316A . -1316B . -1316C . -1316D . -1316E . -1316F . -13170 . -13171 . -13172 . -13173 . -13174 . -13175 . -13176 . -13177 . -13178 . -13179 . -1317A . -1317B . -1317C . -1317D . -1317E . -1317F . -13180 . -13181 . -13182 . -13183 . -13184 . -13185 . -13186 . -13187 . -13188 . -13189 . -1318A . -1318B . -1318C . -1318D . -1318E . -1318F . -13190 . -13191 . -13192 . -13193 . -13194 . -13195 . -13196 . -13197 . -13198 . -13199 . -1319A . -1319B . -1319C . -1319D . -1319E . -1319F . -131A0 . -131A1 . -131A2 . -131A3 . -131A4 . -131A5 . -131A6 . -131A7 . -131A8 . -131A9 . -131AA . -131AB . -131AC . -131AD . -131AE . -131AF . -131B0 . -131B1 . -131B2 . -131B3 . -131B4 . -131B5 . -131B6 . -131B7 . -131B8 . -131B9 . -131BA . -131BB . -131BC . -131BD . -131BE . -131BF . -131C0 . -131C1 . -131C2 . -131C3 . -131C4 . -131C5 . -131C6 . -131C7 . -131C8 . -131C9 . -131CA . -131CB . -131CC . -131CD . -131CE . -131CF . -131D0 . -131D1 . -131D2 . -131D3 . -131D4 . -131D5 . -131D6 . -131D7 . -131D8 . -131D9 . -131DA . -131DB . -131DC . -131DD . -131DE . -131DF . -131E0 . -131E1 . -131E2 . -131E3 . -131E4 . -131E5 . -131E6 . -131E7 . -131E8 . -131E9 . -131EA . -131EB . -131EC . -131ED . -131EE . -131EF . -131F0 . -131F1 . -131F2 . -131F3 . -131F4 . -131F5 . -131F6 . -131F7 . -131F8 . -131F9 . -131FA . -131FB . -131FC . -131FD . -131FE . -131FF . -13200 . -13201 . -13202 . -13203 . -13204 . -13205 . -13206 . -13207 . -13208 . -13209 . -1320A . -1320B . -1320C . -1320D . -1320E . -1320F . -13210 . -13211 . -13212 . -13213 . -13214 . -13215 . -13216 . -13217 . -13218 . -13219 . -1321A . -1321B . -1321C . -1321D . -1321E . -1321F . -13220 . -13221 . -13222 . -13223 . -13224 . -13225 . -13226 . -13227 . -13228 . -13229 . -1322A . -1322B . -1322C . -1322D . -1322E . -1322F . -13230 . -13231 . -13232 . -13233 . -13234 . -13235 . -13236 . -13237 . -13238 . -13239 . -1323A . -1323B . -1323C . -1323D . -1323E . -1323F . -13240 . -13241 . -13242 . -13243 . -13244 . -13245 . -13246 . -13247 . -13248 . -13249 . -1324A . -1324B . -1324C . -1324D . -1324E . -1324F . -13250 . -13251 . -13252 . -13253 . -13254 . -13255 . -13256 . -13257 . -13258 . -13259 . -1325A . -1325B . -1325C . -1325D . -1325E . -1325F . -13260 . -13261 . -13262 . -13263 . -13264 . -13265 . -13266 . -13267 . -13268 . -13269 . -1326A . -1326B . -1326C . -1326D . -1326E . -1326F . -13270 . -13271 . -13272 . -13273 . -13274 . -13275 . -13276 . -13277 . -13278 . -13279 . -1327A . -1327B . -1327C . -1327D . -1327E . -1327F . -13280 . -13281 . -13282 . -13283 . -13284 . -13285 . -13286 . -13287 . -13288 . -13289 . -1328A . -1328B . -1328C . -1328D . -1328E . -1328F . -13290 . -13291 . -13292 . -13293 . -13294 . -13295 . -13296 . -13297 . -13298 . -13299 . -1329A . -1329B . -1329C . -1329D . -1329E . -1329F . -132A0 . -132A1 . -132A2 . -132A3 . -132A4 . -132A5 . -132A6 . -132A7 . -132A8 . -132A9 . -132AA . -132AB . -132AC . -132AD . -132AE . -132AF . -132B0 . -132B1 . -132B2 . -132B3 . -132B4 . -132B5 . -132B6 . -132B7 . -132B8 . -132B9 . -132BA . -132BB . -132BC . -132BD . -132BE . -132BF . -132C0 . -132C1 . -132C2 . -132C3 . -132C4 . -132C5 . -132C6 . -132C7 . -132C8 . -132C9 . -132CA . -132CB . -132CC . -132CD . -132CE . -132CF . -132D0 . -132D1 . -132D2 . -132D3 . -132D4 . -132D5 . -132D6 . -132D7 . -132D8 . -132D9 . -132DA . -132DB . -132DC . -132DD . -132DE . -132DF . -132E0 . -132E1 . -132E2 . -132E3 . -132E4 . -132E5 . -132E6 . -132E7 . -132E8 . -132E9 . -132EA . -132EB . -132EC . -132ED . -132EE . -132EF . -132F0 . -132F1 . -132F2 . -132F3 . -132F4 . -132F5 . -132F6 . -132F7 . -132F8 . -132F9 . -132FA . -132FB . -132FC . -132FD . -132FE . -132FF . -13300 . -13301 . -13302 . -13303 . -13304 . -13305 . -13306 . -13307 . -13308 . -13309 . -1330A . -1330B . -1330C . -1330D . -1330E . -1330F . -13310 . -13311 . -13312 . -13313 . -13314 . -13315 . -13316 . -13317 . -13318 . -13319 . -1331A . -1331B . -1331C . -1331D . -1331E . -1331F . -13320 . -13321 . -13322 . -13323 . -13324 . -13325 . -13326 . -13327 . -13328 . -13329 . -1332A . -1332B . -1332C . -1332D . -1332E . -1332F . -13330 . -13331 . -13332 . -13333 . -13334 . -13335 . -13336 . -13337 . -13338 . -13339 . -1333A . -1333B . -1333C . -1333D . -1333E . -1333F . -13340 . -13341 . -13342 . -13343 . -13344 . -13345 . -13346 . -13347 . -13348 . -13349 . -1334A . -1334B . -1334C . -1334D . -1334E . -1334F . -13350 . -13351 . -13352 . -13353 . -13354 . -13355 . -13356 . -13357 . -13358 . -13359 . -1335A . -1335B . -1335C . -1335D . -1335E . -1335F . -13360 . -13361 . -13362 . -13363 . -13364 . -13365 . -13366 . -13367 . -13368 . -13369 . -1336A . -1336B . -1336C . -1336D . -1336E . -1336F . -13370 . -13371 . -13372 . -13373 . -13374 . -13375 . -13376 . -13377 . -13378 . -13379 . -1337A . -1337B . -1337C . -1337D . -1337E . -1337F . -13380 . -13381 . -13382 . -13383 . -13384 . -13385 . -13386 . -13387 . -13388 . -13389 . -1338A . -1338B . -1338C . -1338D . -1338E . -1338F . -13390 . -13391 . -13392 . -13393 . -13394 . -13395 . -13396 . -13397 . -13398 . -13399 . -1339A . -1339B . -1339C . -1339D . -1339E . -1339F . -133A0 . -133A1 . -133A2 . -133A3 . -133A4 . -133A5 . -133A6 . -133A7 . -133A8 . -133A9 . -133AA . -133AB . -133AC . -133AD . -133AE . -133AF . -133B0 . -133B1 . -133B2 . -133B3 . -133B4 . -133B5 . -133B6 . -133B7 . -133B8 . -133B9 . -133BA . -133BB . -133BC . -133BD . -133BE . -133BF . -133C0 . -133C1 . -133C2 . -133C3 . -133C4 . -133C5 . -133C6 . -133C7 . -133C8 . -133C9 . -133CA . -133CB . -133CC . -133CD . -133CE . -133CF . -133D0 . -133D1 . -133D2 . -133D3 . -133D4 . -133D5 . -133D6 . -133D7 . -133D8 . -133D9 . -133DA . -133DB . -133DC . -133DD . -133DE . -133DF . -133E0 . -133E1 . -133E2 . -133E3 . -133E4 . -133E5 . -133E6 . -133E7 . -133E8 . -133E9 . -133EA . -133EB . -133EC . -133ED . -133EE . -133EF . -133F0 . -133F1 . -133F2 . -133F3 . -133F4 . -133F5 . -133F6 . -133F7 . -133F8 . -133F9 . -133FA . -133FB . -133FC . -133FD . -133FE . -133FF . -13400 . -13401 . -13402 . -13403 . -13404 . -13405 . -13406 . -13407 . -13408 . -13409 . -1340A . -1340B . -1340C . -1340D . -1340E . -1340F . -13410 . -13411 . -13412 . -13413 . -13414 . -13415 . -13416 . -13417 . -13418 . -13419 . -1341A . -1341B . -1341C . -1341D . -1341E . -1341F . -13420 . -13421 . -13422 . -13423 . -13424 . -13425 . -13426 . -13427 . -13428 . -13429 . -1342A . -1342B . -1342C . -1342D . -1342E . -16800 . -16801 . -16802 . -16803 . -16804 . -16805 . -16806 . -16807 . -16808 . -16809 . -1680A . -1680B . -1680C . -1680D . -1680E . -1680F . -16810 . -16811 . -16812 . -16813 . -16814 . -16815 . -16816 . -16817 . -16818 . -16819 . -1681A . -1681B . -1681C . -1681D . -1681E . -1681F . -16820 . -16821 . -16822 . -16823 . -16824 . -16825 . -16826 . -16827 . -16828 . -16829 . -1682A . -1682B . -1682C . -1682D . -1682E . -1682F . -16830 . -16831 . -16832 . -16833 . -16834 . -16835 . -16836 . -16837 . -16838 . -16839 . -1683A . -1683B . -1683C . -1683D . -1683E . -1683F . -16840 . -16841 . -16842 . -16843 . -16844 . -16845 . -16846 . -16847 . -16848 . -16849 . -1684A . -1684B . -1684C . -1684D . -1684E . -1684F . -16850 . -16851 . -16852 . -16853 . -16854 . -16855 . -16856 . -16857 . -16858 . -16859 . -1685A . -1685B . -1685C . -1685D . -1685E . -1685F . -16860 . -16861 . -16862 . -16863 . -16864 . -16865 . -16866 . -16867 . -16868 . -16869 . -1686A . -1686B . -1686C . -1686D . -1686E . -1686F . -16870 . -16871 . -16872 . -16873 . -16874 . -16875 . -16876 . -16877 . -16878 . -16879 . -1687A . -1687B . -1687C . -1687D . -1687E . -1687F . -16880 . -16881 . -16882 . -16883 . -16884 . -16885 . -16886 . -16887 . -16888 . -16889 . -1688A . -1688B . -1688C . -1688D . -1688E . -1688F . -16890 . -16891 . -16892 . -16893 . -16894 . -16895 . -16896 . -16897 . -16898 . -16899 . -1689A . -1689B . -1689C . -1689D . -1689E . -1689F . -168A0 . -168A1 . -168A2 . -168A3 . -168A4 . -168A5 . -168A6 . -168A7 . -168A8 . -168A9 . -168AA . -168AB . -168AC . -168AD . -168AE . -168AF . -168B0 . -168B1 . -168B2 . -168B3 . -168B4 . -168B5 . -168B6 . -168B7 . -168B8 . -168B9 . -168BA . -168BB . -168BC . -168BD . -168BE . -168BF . -168C0 . -168C1 . -168C2 . -168C3 . -168C4 . -168C5 . -168C6 . -168C7 . -168C8 . -168C9 . -168CA . -168CB . -168CC . -168CD . -168CE . -168CF . -168D0 . -168D1 . -168D2 . -168D3 . -168D4 . -168D5 . -168D6 . -168D7 . -168D8 . -168D9 . -168DA . -168DB . -168DC . -168DD . -168DE . -168DF . -168E0 . -168E1 . -168E2 . -168E3 . -168E4 . -168E5 . -168E6 . -168E7 . -168E8 . -168E9 . -168EA . -168EB . -168EC . -168ED . -168EE . -168EF . -168F0 . -168F1 . -168F2 . -168F3 . -168F4 . -168F5 . -168F6 . -168F7 . -168F8 . -168F9 . -168FA . -168FB . -168FC . -168FD . -168FE . -168FF . -16900 . -16901 . -16902 . -16903 . -16904 . -16905 . -16906 . -16907 . -16908 . -16909 . -1690A . -1690B . -1690C . -1690D . -1690E . -1690F . -16910 . -16911 . -16912 . -16913 . -16914 . -16915 . -16916 . -16917 . -16918 . -16919 . -1691A . -1691B . -1691C . -1691D . -1691E . -1691F . -16920 . -16921 . -16922 . -16923 . -16924 . -16925 . -16926 . -16927 . -16928 . -16929 . -1692A . -1692B . -1692C . -1692D . -1692E . -1692F . -16930 . -16931 . -16932 . -16933 . -16934 . -16935 . -16936 . -16937 . -16938 . -16939 . -1693A . -1693B . -1693C . -1693D . -1693E . -1693F . -16940 . -16941 . -16942 . -16943 . -16944 . -16945 . -16946 . -16947 . -16948 . -16949 . -1694A . -1694B . -1694C . -1694D . -1694E . -1694F . -16950 . -16951 . -16952 . -16953 . -16954 . -16955 . -16956 . -16957 . -16958 . -16959 . -1695A . -1695B . -1695C . -1695D . -1695E . -1695F . -16960 . -16961 . -16962 . -16963 . -16964 . -16965 . -16966 . -16967 . -16968 . -16969 . -1696A . -1696B . -1696C . -1696D . -1696E . -1696F . -16970 . -16971 . -16972 . -16973 . -16974 . -16975 . -16976 . -16977 . -16978 . -16979 . -1697A . -1697B . -1697C . -1697D . -1697E . -1697F . -16980 . -16981 . -16982 . -16983 . -16984 . -16985 . -16986 . -16987 . -16988 . -16989 . -1698A . -1698B . -1698C . -1698D . -1698E . -1698F . -16990 . -16991 . -16992 . -16993 . -16994 . -16995 . -16996 . -16997 . -16998 . -16999 . -1699A . -1699B . -1699C . -1699D . -1699E . -1699F . -169A0 . -169A1 . -169A2 . -169A3 . -169A4 . -169A5 . -169A6 . -169A7 . -169A8 . -169A9 . -169AA . -169AB . -169AC . -169AD . -169AE . -169AF . -169B0 . -169B1 . -169B2 . -169B3 . -169B4 . -169B5 . -169B6 . -169B7 . -169B8 . -169B9 . -169BA . -169BB . -169BC . -169BD . -169BE . -169BF . -169C0 . -169C1 . -169C2 . -169C3 . -169C4 . -169C5 . -169C6 . -169C7 . -169C8 . -169C9 . -169CA . -169CB . -169CC . -169CD . -169CE . -169CF . -169D0 . -169D1 . -169D2 . -169D3 . -169D4 . -169D5 . -169D6 . -169D7 . -169D8 . -169D9 . -169DA . -169DB . -169DC . -169DD . -169DE . -169DF . -169E0 . -169E1 . -169E2 . -169E3 . -169E4 . -169E5 . -169E6 . -169E7 . -169E8 . -169E9 . -169EA . -169EB . -169EC . -169ED . -169EE . -169EF . -169F0 . -169F1 . -169F2 . -169F3 . -169F4 . -169F5 . -169F6 . -169F7 . -169F8 . -169F9 . -169FA . -169FB . -169FC . -169FD . -169FE . -169FF . -16A00 . -16A01 . -16A02 . -16A03 . -16A04 . -16A05 . -16A06 . -16A07 . -16A08 . -16A09 . -16A0A . -16A0B . -16A0C . -16A0D . -16A0E . -16A0F . -16A10 . -16A11 . -16A12 . -16A13 . -16A14 . -16A15 . -16A16 . -16A17 . -16A18 . -16A19 . -16A1A . -16A1B . -16A1C . -16A1D . -16A1E . -16A1F . -16A20 . -16A21 . -16A22 . -16A23 . -16A24 . -16A25 . -16A26 . -16A27 . -16A28 . -16A29 . -16A2A . -16A2B . -16A2C . -16A2D . -16A2E . -16A2F . -16A30 . -16A31 . -16A32 . -16A33 . -16A34 . -16A35 . -16A36 . -16A37 . -16A38 . -16F00 . -16F01 . -16F02 . -16F03 . -16F04 . -16F05 . -16F06 . -16F07 . -16F08 . -16F09 . -16F0A . -16F0B . -16F0C . -16F0D . -16F0E . -16F0F . -16F10 . -16F11 . -16F12 . -16F13 . -16F14 . -16F15 . -16F16 . -16F17 . -16F18 . -16F19 . -16F1A . -16F1B . -16F1C . -16F1D . -16F1E . -16F1F . -16F20 . -16F21 . -16F22 . -16F23 . -16F24 . -16F25 . -16F26 . -16F27 . -16F28 . -16F29 . -16F2A . -16F2B . -16F2C . -16F2D . -16F2E . -16F2F . -16F30 . -16F31 . -16F32 . -16F33 . -16F34 . -16F35 . -16F36 . -16F37 . -16F38 . -16F39 . -16F3A . -16F3B . -16F3C . -16F3D . -16F3E . -16F3F . -16F40 . -16F41 . -16F42 . -16F43 . -16F44 . -16F50 . -16F93 . -16F94 . -16F95 . -16F96 . -16F97 . -16F98 . -16F99 . -16F9A . -16F9B . -16F9C . -16F9D . -16F9E . -16F9F . -1B000 . -1B001 . -1D400 . -1D401 . -1D402 . -1D403 . -1D404 . -1D405 . -1D406 . -1D407 . -1D408 . -1D409 . -1D40A . -1D40B . -1D40C . -1D40D . -1D40E . -1D40F . -1D410 . -1D411 . -1D412 . -1D413 . -1D414 . -1D415 . -1D416 . -1D417 . -1D418 . -1D419 . -1D41A . -1D41B . -1D41C . -1D41D . -1D41E . -1D41F . -1D420 . -1D421 . -1D422 . -1D423 . -1D424 . -1D425 . -1D426 . -1D427 . -1D428 . -1D429 . -1D42A . -1D42B . -1D42C . -1D42D . -1D42E . -1D42F . -1D430 . -1D431 . -1D432 . -1D433 . -1D434 . -1D435 . -1D436 . -1D437 . -1D438 . -1D439 . -1D43A . -1D43B . -1D43C . -1D43D . -1D43E . -1D43F . -1D440 . -1D441 . -1D442 . -1D443 . -1D444 . -1D445 . -1D446 . -1D447 . -1D448 . -1D449 . -1D44A . -1D44B . -1D44C . -1D44D . -1D44E . -1D44F . -1D450 . -1D451 . -1D452 . -1D453 . -1D454 . -1D456 . -1D457 . -1D458 . -1D459 . -1D45A . -1D45B . -1D45C . -1D45D . -1D45E . -1D45F . -1D460 . -1D461 . -1D462 . -1D463 . -1D464 . -1D465 . -1D466 . -1D467 . -1D468 . -1D469 . -1D46A . -1D46B . -1D46C . -1D46D . -1D46E . -1D46F . -1D470 . -1D471 . -1D472 . -1D473 . -1D474 . -1D475 . -1D476 . -1D477 . -1D478 . -1D479 . -1D47A . -1D47B . -1D47C . -1D47D . -1D47E . -1D47F . -1D480 . -1D481 . -1D482 . -1D483 . -1D484 . -1D485 . -1D486 . -1D487 . -1D488 . -1D489 . -1D48A . -1D48B . -1D48C . -1D48D . -1D48E . -1D48F . -1D490 . -1D491 . -1D492 . -1D493 . -1D494 . -1D495 . -1D496 . -1D497 . -1D498 . -1D499 . -1D49A . -1D49B . -1D49C . -1D49E . -1D49F . -1D4A2 . -1D4A5 . -1D4A6 . -1D4A9 . -1D4AA . -1D4AB . -1D4AC . -1D4AE . -1D4AF . -1D4B0 . -1D4B1 . -1D4B2 . -1D4B3 . -1D4B4 . -1D4B5 . -1D4B6 . -1D4B7 . -1D4B8 . -1D4B9 . -1D4BB . -1D4BD . -1D4BE . -1D4BF . -1D4C0 . -1D4C1 . -1D4C2 . -1D4C3 . -1D4C5 . -1D4C6 . -1D4C7 . -1D4C8 . -1D4C9 . -1D4CA . -1D4CB . -1D4CC . -1D4CD . -1D4CE . -1D4CF . -1D4D0 . -1D4D1 . -1D4D2 . -1D4D3 . -1D4D4 . -1D4D5 . -1D4D6 . -1D4D7 . -1D4D8 . -1D4D9 . -1D4DA . -1D4DB . -1D4DC . -1D4DD . -1D4DE . -1D4DF . -1D4E0 . -1D4E1 . -1D4E2 . -1D4E3 . -1D4E4 . -1D4E5 . -1D4E6 . -1D4E7 . -1D4E8 . -1D4E9 . -1D4EA . -1D4EB . -1D4EC . -1D4ED . -1D4EE . -1D4EF . -1D4F0 . -1D4F1 . -1D4F2 . -1D4F3 . -1D4F4 . -1D4F5 . -1D4F6 . -1D4F7 . -1D4F8 . -1D4F9 . -1D4FA . -1D4FB . -1D4FC . -1D4FD . -1D4FE . -1D4FF . -1D500 . -1D501 . -1D502 . -1D503 . -1D504 . -1D505 . -1D507 . -1D508 . -1D509 . -1D50A . -1D50D . -1D50E . -1D50F . -1D510 . -1D511 . -1D512 . -1D513 . -1D514 . -1D516 . -1D517 . -1D518 . -1D519 . -1D51A . -1D51B . -1D51C . -1D51E . -1D51F . -1D520 . -1D521 . -1D522 . -1D523 . -1D524 . -1D525 . -1D526 . -1D527 . -1D528 . -1D529 . -1D52A . -1D52B . -1D52C . -1D52D . -1D52E . -1D52F . -1D530 . -1D531 . -1D532 . -1D533 . -1D534 . -1D535 . -1D536 . -1D537 . -1D538 . -1D539 . -1D53B . -1D53C . -1D53D . -1D53E . -1D540 . -1D541 . -1D542 . -1D543 . -1D544 . -1D546 . -1D54A . -1D54B . -1D54C . -1D54D . -1D54E . -1D54F . -1D550 . -1D552 . -1D553 . -1D554 . -1D555 . -1D556 . -1D557 . -1D558 . -1D559 . -1D55A . -1D55B . -1D55C . -1D55D . -1D55E . -1D55F . -1D560 . -1D561 . -1D562 . -1D563 . -1D564 . -1D565 . -1D566 . -1D567 . -1D568 . -1D569 . -1D56A . -1D56B . -1D56C . -1D56D . -1D56E . -1D56F . -1D570 . -1D571 . -1D572 . -1D573 . -1D574 . -1D575 . -1D576 . -1D577 . -1D578 . -1D579 . -1D57A . -1D57B . -1D57C . -1D57D . -1D57E . -1D57F . -1D580 . -1D581 . -1D582 . -1D583 . -1D584 . -1D585 . -1D586 . -1D587 . -1D588 . -1D589 . -1D58A . -1D58B . -1D58C . -1D58D . -1D58E . -1D58F . -1D590 . -1D591 . -1D592 . -1D593 . -1D594 . -1D595 . -1D596 . -1D597 . -1D598 . -1D599 . -1D59A . -1D59B . -1D59C . -1D59D . -1D59E . -1D59F . -1D5A0 . -1D5A1 . -1D5A2 . -1D5A3 . -1D5A4 . -1D5A5 . -1D5A6 . -1D5A7 . -1D5A8 . -1D5A9 . -1D5AA . -1D5AB . -1D5AC . -1D5AD . -1D5AE . -1D5AF . -1D5B0 . -1D5B1 . -1D5B2 . -1D5B3 . -1D5B4 . -1D5B5 . -1D5B6 . -1D5B7 . -1D5B8 . -1D5B9 . -1D5BA . -1D5BB . -1D5BC . -1D5BD . -1D5BE . -1D5BF . -1D5C0 . -1D5C1 . -1D5C2 . -1D5C3 . -1D5C4 . -1D5C5 . -1D5C6 . -1D5C7 . -1D5C8 . -1D5C9 . -1D5CA . -1D5CB . -1D5CC . -1D5CD . -1D5CE . -1D5CF . -1D5D0 . -1D5D1 . -1D5D2 . -1D5D3 . -1D5D4 . -1D5D5 . -1D5D6 . -1D5D7 . -1D5D8 . -1D5D9 . -1D5DA . -1D5DB . -1D5DC . -1D5DD . -1D5DE . -1D5DF . -1D5E0 . -1D5E1 . -1D5E2 . -1D5E3 . -1D5E4 . -1D5E5 . -1D5E6 . -1D5E7 . -1D5E8 . -1D5E9 . -1D5EA . -1D5EB . -1D5EC . -1D5ED . -1D5EE . -1D5EF . -1D5F0 . -1D5F1 . -1D5F2 . -1D5F3 . -1D5F4 . -1D5F5 . -1D5F6 . -1D5F7 . -1D5F8 . -1D5F9 . -1D5FA . -1D5FB . -1D5FC . -1D5FD . -1D5FE . -1D5FF . -1D600 . -1D601 . -1D602 . -1D603 . -1D604 . -1D605 . -1D606 . -1D607 . -1D608 . -1D609 . -1D60A . -1D60B . -1D60C . -1D60D . -1D60E . -1D60F . -1D610 . -1D611 . -1D612 . -1D613 . -1D614 . -1D615 . -1D616 . -1D617 . -1D618 . -1D619 . -1D61A . -1D61B . -1D61C . -1D61D . -1D61E . -1D61F . -1D620 . -1D621 . -1D622 . -1D623 . -1D624 . -1D625 . -1D626 . -1D627 . -1D628 . -1D629 . -1D62A . -1D62B . -1D62C . -1D62D . -1D62E . -1D62F . -1D630 . -1D631 . -1D632 . -1D633 . -1D634 . -1D635 . -1D636 . -1D637 . -1D638 . -1D639 . -1D63A . -1D63B . -1D63C . -1D63D . -1D63E . -1D63F . -1D640 . -1D641 . -1D642 . -1D643 . -1D644 . -1D645 . -1D646 . -1D647 . -1D648 . -1D649 . -1D64A . -1D64B . -1D64C . -1D64D . -1D64E . -1D64F . -1D650 . -1D651 . -1D652 . -1D653 . -1D654 . -1D655 . -1D656 . -1D657 . -1D658 . -1D659 . -1D65A . -1D65B . -1D65C . -1D65D . -1D65E . -1D65F . -1D660 . -1D661 . -1D662 . -1D663 . -1D664 . -1D665 . -1D666 . -1D667 . -1D668 . -1D669 . -1D66A . -1D66B . -1D66C . -1D66D . -1D66E . -1D66F . -1D670 . -1D671 . -1D672 . -1D673 . -1D674 . -1D675 . -1D676 . -1D677 . -1D678 . -1D679 . -1D67A . -1D67B . -1D67C . -1D67D . -1D67E . -1D67F . -1D680 . -1D681 . -1D682 . -1D683 . -1D684 . -1D685 . -1D686 . -1D687 . -1D688 . -1D689 . -1D68A . -1D68B . -1D68C . -1D68D . -1D68E . -1D68F . -1D690 . -1D691 . -1D692 . -1D693 . -1D694 . -1D695 . -1D696 . -1D697 . -1D698 . -1D699 . -1D69A . -1D69B . -1D69C . -1D69D . -1D69E . -1D69F . -1D6A0 . -1D6A1 . -1D6A2 . -1D6A3 . -1D6A4 . -1D6A5 . -1D6A8 . -1D6A9 . -1D6AA . -1D6AB . -1D6AC . -1D6AD . -1D6AE . -1D6AF . -1D6B0 . -1D6B1 . -1D6B2 . -1D6B3 . -1D6B4 . -1D6B5 . -1D6B6 . -1D6B7 . -1D6B8 . -1D6B9 . -1D6BA . -1D6BB . -1D6BC . -1D6BD . -1D6BE . -1D6BF . -1D6C0 . -1D6C2 . -1D6C3 . -1D6C4 . -1D6C5 . -1D6C6 . -1D6C7 . -1D6C8 . -1D6C9 . -1D6CA . -1D6CB . -1D6CC . -1D6CD . -1D6CE . -1D6CF . -1D6D0 . -1D6D1 . -1D6D2 . -1D6D3 . -1D6D4 . -1D6D5 . -1D6D6 . -1D6D7 . -1D6D8 . -1D6D9 . -1D6DA . -1D6DC . -1D6DD . -1D6DE . -1D6DF . -1D6E0 . -1D6E1 . -1D6E2 . -1D6E3 . -1D6E4 . -1D6E5 . -1D6E6 . -1D6E7 . -1D6E8 . -1D6E9 . -1D6EA . -1D6EB . -1D6EC . -1D6ED . -1D6EE . -1D6EF . -1D6F0 . -1D6F1 . -1D6F2 . -1D6F3 . -1D6F4 . -1D6F5 . -1D6F6 . -1D6F7 . -1D6F8 . -1D6F9 . -1D6FA . -1D6FC . -1D6FD . -1D6FE . -1D6FF . -1D700 . -1D701 . -1D702 . -1D703 . -1D704 . -1D705 . -1D706 . -1D707 . -1D708 . -1D709 . -1D70A . -1D70B . -1D70C . -1D70D . -1D70E . -1D70F . -1D710 . -1D711 . -1D712 . -1D713 . -1D714 . -1D716 . -1D717 . -1D718 . -1D719 . -1D71A . -1D71B . -1D71C . -1D71D . -1D71E . -1D71F . -1D720 . -1D721 . -1D722 . -1D723 . -1D724 . -1D725 . -1D726 . -1D727 . -1D728 . -1D729 . -1D72A . -1D72B . -1D72C . -1D72D . -1D72E . -1D72F . -1D730 . -1D731 . -1D732 . -1D733 . -1D734 . -1D736 . -1D737 . -1D738 . -1D739 . -1D73A . -1D73B . -1D73C . -1D73D . -1D73E . -1D73F . -1D740 . -1D741 . -1D742 . -1D743 . -1D744 . -1D745 . -1D746 . -1D747 . -1D748 . -1D749 . -1D74A . -1D74B . -1D74C . -1D74D . -1D74E . -1D750 . -1D751 . -1D752 . -1D753 . -1D754 . -1D755 . -1D756 . -1D757 . -1D758 . -1D759 . -1D75A . -1D75B . -1D75C . -1D75D . -1D75E . -1D75F . -1D760 . -1D761 . -1D762 . -1D763 . -1D764 . -1D765 . -1D766 . -1D767 . -1D768 . -1D769 . -1D76A . -1D76B . -1D76C . -1D76D . -1D76E . -1D770 . -1D771 . -1D772 . -1D773 . -1D774 . -1D775 . -1D776 . -1D777 . -1D778 . -1D779 . -1D77A . -1D77B . -1D77C . -1D77D . -1D77E . -1D77F . -1D780 . -1D781 . -1D782 . -1D783 . -1D784 . -1D785 . -1D786 . -1D787 . -1D788 . -1D78A . -1D78B . -1D78C . -1D78D . -1D78E . -1D78F . -1D790 . -1D791 . -1D792 . -1D793 . -1D794 . -1D795 . -1D796 . -1D797 . -1D798 . -1D799 . -1D79A . -1D79B . -1D79C . -1D79D . -1D79E . -1D79F . -1D7A0 . -1D7A1 . -1D7A2 . -1D7A3 . -1D7A4 . -1D7A5 . -1D7A6 . -1D7A7 . -1D7A8 . -1D7AA . -1D7AB . -1D7AC . -1D7AD . -1D7AE . -1D7AF . -1D7B0 . -1D7B1 . -1D7B2 . -1D7B3 . -1D7B4 . -1D7B5 . -1D7B6 . -1D7B7 . -1D7B8 . -1D7B9 . -1D7BA . -1D7BB . -1D7BC . -1D7BD . -1D7BE . -1D7BF . -1D7C0 . -1D7C1 . -1D7C2 . -1D7C4 . -1D7C5 . -1D7C6 . -1D7C7 . -1D7C8 . -1D7C9 . -1D7CA . -1D7CB . -1EE00 . -1EE01 . -1EE02 . -1EE03 . -1EE05 . -1EE06 . -1EE07 . -1EE08 . -1EE09 . -1EE0A . -1EE0B . -1EE0C . -1EE0D . -1EE0E . -1EE0F . -1EE10 . -1EE11 . -1EE12 . -1EE13 . -1EE14 . -1EE15 . -1EE16 . -1EE17 . -1EE18 . -1EE19 . -1EE1A . -1EE1B . -1EE1C . -1EE1D . -1EE1E . -1EE1F . -1EE21 . -1EE22 . -1EE24 . -1EE27 . -1EE29 . -1EE2A . -1EE2B . -1EE2C . -1EE2D . -1EE2E . -1EE2F . -1EE30 . -1EE31 . -1EE32 . -1EE34 . -1EE35 . -1EE36 . -1EE37 . -1EE39 . -1EE3B . -1EE42 . -1EE47 . -1EE49 . -1EE4B . -1EE4D . -1EE4E . -1EE4F . -1EE51 . -1EE52 . -1EE54 . -1EE57 . -1EE59 . -1EE5B . -1EE5D . -1EE5F . -1EE61 . -1EE62 . -1EE64 . -1EE67 . -1EE68 . -1EE69 . -1EE6A . -1EE6C . -1EE6D . -1EE6E . -1EE6F . -1EE70 . -1EE71 . -1EE72 . -1EE74 . -1EE75 . -1EE76 . -1EE77 . -1EE79 . -1EE7A . -1EE7B . -1EE7C . -1EE7E . -1EE80 . -1EE81 . -1EE82 . -1EE83 . -1EE84 . -1EE85 . -1EE86 . -1EE87 . -1EE88 . -1EE89 . -1EE8B . -1EE8C . -1EE8D . -1EE8E . -1EE8F . -1EE90 . -1EE91 . -1EE92 . -1EE93 . -1EE94 . -1EE95 . -1EE96 . -1EE97 . -1EE98 . -1EE99 . -1EE9A . -1EE9B . -1EEA1 . -1EEA2 . -1EEA3 . -1EEA5 . -1EEA6 . -1EEA7 . -1EEA8 . -1EEA9 . -1EEAB . -1EEAC . -1EEAD . -1EEAE . -1EEAF . -1EEB0 . -1EEB1 . -1EEB2 . -1EEB3 . -1EEB4 . -1EEB5 . -1EEB6 . -1EEB7 . -1EEB8 . -1EEB9 . -1EEBA . -1EEBB . -2F800 . -2F801 . -2F802 . -2F803 . -2F804 . -2F805 . -2F806 . -2F807 . -2F808 . -2F809 . -2F80A . -2F80B . -2F80C . -2F80D . -2F80E . -2F80F . -2F810 . -2F811 . -2F812 . -2F813 . -2F814 . -2F815 . -2F816 . -2F817 . -2F818 . -2F819 . -2F81A . -2F81B . -2F81C . -2F81D . -2F81E . -2F81F . -2F820 . -2F821 . -2F822 . -2F823 . -2F824 . -2F825 . -2F826 . -2F827 . -2F828 . -2F829 . -2F82A . -2F82B . -2F82C . -2F82D . -2F82E . -2F82F . -2F830 . -2F831 . -2F832 . -2F833 . -2F834 . -2F835 . -2F836 . -2F837 . -2F838 . -2F839 . -2F83A . -2F83B . -2F83C . -2F83D . -2F83E . -2F83F . -2F840 . -2F841 . -2F842 . -2F843 . -2F844 . -2F845 . -2F846 . -2F847 . -2F848 . -2F849 . -2F84A . -2F84B . -2F84C . -2F84D . -2F84E . -2F84F . -2F850 . -2F851 . -2F852 . -2F853 . -2F854 . -2F855 . -2F856 . -2F857 . -2F858 . -2F859 . -2F85A . -2F85B . -2F85C . -2F85D . -2F85E . -2F85F . -2F860 . -2F861 . -2F862 . -2F863 . -2F864 . -2F865 . -2F866 . -2F867 . -2F868 . -2F869 . -2F86A . -2F86B . -2F86C . -2F86D . -2F86E . -2F86F . -2F870 . -2F871 . -2F872 . -2F873 . -2F874 . -2F875 . -2F876 . -2F877 . -2F878 . -2F879 . -2F87A . -2F87B . -2F87C . -2F87D . -2F87E . -2F87F . -2F880 . -2F881 . -2F882 . -2F883 . -2F884 . -2F885 . -2F886 . -2F887 . -2F888 . -2F889 . -2F88A . -2F88B . -2F88C . -2F88D . -2F88E . -2F88F . -2F890 . -2F891 . -2F892 . -2F893 . -2F894 . -2F895 . -2F896 . -2F897 . -2F898 . -2F899 . -2F89A . -2F89B . -2F89C . -2F89D . -2F89E . -2F89F . -2F8A0 . -2F8A1 . -2F8A2 . -2F8A3 . -2F8A4 . -2F8A5 . -2F8A6 . -2F8A7 . -2F8A8 . -2F8A9 . -2F8AA . -2F8AB . -2F8AC . -2F8AD . -2F8AE . -2F8AF . -2F8B0 . -2F8B1 . -2F8B2 . -2F8B3 . -2F8B4 . -2F8B5 . -2F8B6 . -2F8B7 . -2F8B8 . -2F8B9 . -2F8BA . -2F8BB . -2F8BC . -2F8BD . -2F8BE . -2F8BF . -2F8C0 . -2F8C1 . -2F8C2 . -2F8C3 . -2F8C4 . -2F8C5 . -2F8C6 . -2F8C7 . -2F8C8 . -2F8C9 . -2F8CA . -2F8CB . -2F8CC . -2F8CD . -2F8CE . -2F8CF . -2F8D0 . -2F8D1 . -2F8D2 . -2F8D3 . -2F8D4 . -2F8D5 . -2F8D6 . -2F8D7 . -2F8D8 . -2F8D9 . -2F8DA . -2F8DB . -2F8DC . -2F8DD . -2F8DE . -2F8DF . -2F8E0 . -2F8E1 . -2F8E2 . -2F8E3 . -2F8E4 . -2F8E5 . -2F8E6 . -2F8E7 . -2F8E8 . -2F8E9 . -2F8EA . -2F8EB . -2F8EC . -2F8ED . -2F8EE . -2F8EF . -2F8F0 . -2F8F1 . -2F8F2 . -2F8F3 . -2F8F4 . -2F8F5 . -2F8F6 . -2F8F7 . -2F8F8 . -2F8F9 . -2F8FA . -2F8FB . -2F8FC . -2F8FD . -2F8FE . -2F8FF . -2F900 . -2F901 . -2F902 . -2F903 . -2F904 . -2F905 . -2F906 . -2F907 . -2F908 . -2F909 . -2F90A . -2F90B . -2F90C . -2F90D . -2F90E . -2F90F . -2F910 . -2F911 . -2F912 . -2F913 . -2F914 . -2F915 . -2F916 . -2F917 . -2F918 . -2F919 . -2F91A . -2F91B . -2F91C . -2F91D . -2F91E . -2F91F . -2F920 . -2F921 . -2F922 . -2F923 . -2F924 . -2F925 . -2F926 . -2F927 . -2F928 . -2F929 . -2F92A . -2F92B . -2F92C . -2F92D . -2F92E . -2F92F . -2F930 . -2F931 . -2F932 . -2F933 . -2F934 . -2F935 . -2F936 . -2F937 . -2F938 . -2F939 . -2F93A . -2F93B . -2F93C . -2F93D . -2F93E . -2F93F . -2F940 . -2F941 . -2F942 . -2F943 . -2F944 . -2F945 . -2F946 . -2F947 . -2F948 . -2F949 . -2F94A . -2F94B . -2F94C . -2F94D . -2F94E . -2F94F . -2F950 . -2F951 . -2F952 . -2F953 . -2F954 . -2F955 . -2F956 . -2F957 . -2F958 . -2F959 . -2F95A . -2F95B . -2F95C . -2F95D . -2F95E . -2F95F . -2F960 . -2F961 . -2F962 . -2F963 . -2F964 . -2F965 . -2F966 . -2F967 . -2F968 . -2F969 . -2F96A . -2F96B . -2F96C . -2F96D . -2F96E . -2F96F . -2F970 . -2F971 . -2F972 . -2F973 . -2F974 . -2F975 . -2F976 . -2F977 . -2F978 . -2F979 . -2F97A . -2F97B . -2F97C . -2F97D . -2F97E . -2F97F . -2F980 . -2F981 . -2F982 . -2F983 . -2F984 . -2F985 . -2F986 . -2F987 . -2F988 . -2F989 . -2F98A . -2F98B . -2F98C . -2F98D . -2F98E . -2F98F . -2F990 . -2F991 . -2F992 . -2F993 . -2F994 . -2F995 . -2F996 . -2F997 . -2F998 . -2F999 . -2F99A . -2F99B . -2F99C . -2F99D . -2F99E . -2F99F . -2F9A0 . -2F9A1 . -2F9A2 . -2F9A3 . -2F9A4 . -2F9A5 . -2F9A6 . -2F9A7 . -2F9A8 . -2F9A9 . -2F9AA . -2F9AB . -2F9AC . -2F9AD . -2F9AE . -2F9AF . -2F9B0 . -2F9B1 . -2F9B2 . -2F9B3 . -2F9B4 . -2F9B5 . -2F9B6 . -2F9B7 . -2F9B8 . -2F9B9 . -2F9BA . -2F9BB . -2F9BC . -2F9BD . -2F9BE . -2F9BF . -2F9C0 . -2F9C1 . -2F9C2 . -2F9C3 . -2F9C4 . -2F9C5 . -2F9C6 . -2F9C7 . -2F9C8 . -2F9C9 . -2F9CA . -2F9CB . -2F9CC . -2F9CD . -2F9CE . -2F9CF . -2F9D0 . -2F9D1 . -2F9D2 . -2F9D3 . -2F9D4 . -2F9D5 . -2F9D6 . -2F9D7 . -2F9D8 . -2F9D9 . -2F9DA . -2F9DB . -2F9DC . -2F9DD . -2F9DE . -2F9DF . -2F9E0 . -2F9E1 . -2F9E2 . -2F9E3 . -2F9E4 . -2F9E5 . -2F9E6 . -2F9E7 . -2F9E8 . -2F9E9 . -2F9EA . -2F9EB . -2F9EC . -2F9ED . -2F9EE . -2F9EF . -2F9F0 . -2F9F1 . -2F9F2 . -2F9F3 . -2F9F4 . -2F9F5 . -2F9F6 . -2F9F7 . -2F9F8 . -2F9F9 . -2F9FA . -2F9FB . -2F9FC . -2F9FD . -2F9FE . -2F9FF . -2FA00 . -2FA01 . -2FA02 . -2FA03 . -2FA04 . -2FA05 . -2FA06 . -2FA07 . -2FA08 . -2FA09 . -2FA0A . -2FA0B . -2FA0C . -2FA0D . -2FA0E . -2FA0F . -2FA10 . -2FA11 . -2FA12 . -2FA13 . -2FA14 . -2FA15 . -2FA16 . -2FA17 . -2FA18 . -2FA19 . -2FA1A . -2FA1B . -2FA1C . -2FA1D . -2170 2160 -2171 2161 -2172 2162 -2173 2163 -2174 2164 -2175 2165 -2176 2166 -2177 2167 -2178 2168 -2179 2169 -217A 216A -217B 216B -217C 216C -217D 216D -217E 216E -217F 216F -24D0 24B6 -24D1 24B7 -24D2 24B8 -24D3 24B9 -24D4 24BA -24D5 24BB -24D6 24BC -24D7 24BD -24D8 24BE -24D9 24BF -24DA 24C0 -24DB 24C1 -24DC 24C2 -24DD 24C3 -24DE 24C4 -24DF 24C5 -24E0 24C6 -24E1 24C7 -24E2 24C8 -24E3 24C9 -24E4 24CA -24E5 24CB -24E6 24CC -24E7 24CD -24E8 24CE -24E9 24CF -0300 . -0301 . -0302 . -0303 . -0304 . -0305 . -0306 . -0307 . -0308 . -0309 . -030A . -030B . -030C . -030D . -030E . -030F . -0310 . -0311 . -0312 . -0313 . -0314 . -0315 . -0316 . -0317 . -0318 . -0319 . -031A . -031B . -031C . -031D . -031E . -031F . -0320 . -0321 . -0322 . -0323 . -0324 . -0325 . -0326 . -0327 . -0328 . -0329 . -032A . -032B . -032C . -032D . -032E . -032F . -0330 . -0331 . -0332 . -0333 . -0334 . -0335 . -0336 . -0337 . -0338 . -0339 . -033A . -033B . -033C . -033D . -033E . -033F . -0340 . -0341 . -0342 . -0343 . -0344 . -0345 . -0346 . -0347 . -0348 . -0349 . -034A . -034B . -034C . -034D . -034E . -034F . -0350 . -0351 . -0352 . -0353 . -0354 . -0355 . -0356 . -0357 . -0358 . -0359 . -035A . -035B . -035C . -035D . -035E . -035F . -0360 . -0361 . -0362 . -0363 . -0364 . -0365 . -0366 . -0367 . -0368 . -0369 . -036A . -036B . -036C . -036D . -036E . -036F . -0483 . -0484 . -0485 . -0486 . -0487 . -0488 . -0489 . -0591 . -0592 . -0593 . -0594 . -0595 . -0596 . -0597 . -0598 . -0599 . -059A . -059B . -059C . -059D . -059E . -059F . -05A0 . -05A1 . -05A2 . -05A3 . -05A4 . -05A5 . -05A6 . -05A7 . -05A8 . -05A9 . -05AA . -05AB . -05AC . -05AD . -05AE . -05AF . -05B0 . -05B1 . -05B2 . -05B3 . -05B4 . -05B5 . -05B6 . -05B7 . -05B8 . -05B9 . -05BA . -05BB . -05BC . -05BD . -05BF . -05C1 . -05C2 . -05C4 . -05C5 . -05C7 . -0610 . -0611 . -0612 . -0613 . -0614 . -0615 . -0616 . -0617 . -0618 . -0619 . -061A . -064B . -064C . -064D . -064E . -064F . -0650 . -0651 . -0652 . -0653 . -0654 . -0655 . -0656 . -0657 . -0658 . -0659 . -065A . -065B . -065C . -065D . -065E . -065F . -0670 . -06D6 . -06D7 . -06D8 . -06D9 . -06DA . -06DB . -06DC . -06DF . -06E0 . -06E1 . -06E2 . -06E3 . -06E4 . -06E7 . -06E8 . -06EA . -06EB . -06EC . -06ED . -0711 . -0730 . -0731 . -0732 . -0733 . -0734 . -0735 . -0736 . -0737 . -0738 . -0739 . -073A . -073B . -073C . -073D . -073E . -073F . -0740 . -0741 . -0742 . -0743 . -0744 . -0745 . -0746 . -0747 . -0748 . -0749 . -074A . -07A6 . -07A7 . -07A8 . -07A9 . -07AA . -07AB . -07AC . -07AD . -07AE . -07AF . -07B0 . -07EB . -07EC . -07ED . -07EE . -07EF . -07F0 . -07F1 . -07F2 . -07F3 . -0816 . -0817 . -0818 . -0819 . -081B . -081C . -081D . -081E . -081F . -0820 . -0821 . -0822 . -0823 . -0825 . -0826 . -0827 . -0829 . -082A . -082B . -082C . -082D . -0859 . -085A . -085B . -08E4 . -08E5 . -08E6 . -08E7 . -08E8 . -08E9 . -08EA . -08EB . -08EC . -08ED . -08EE . -08EF . -08F0 . -08F1 . -08F2 . -08F3 . -08F4 . -08F5 . -08F6 . -08F7 . -08F8 . -08F9 . -08FA . -08FB . -08FC . -08FD . -08FE . -0900 . -0901 . -0902 . -0903 . -093A . -093B . -093C . -093E . -093F . -0940 . -0941 . -0942 . -0943 . -0944 . -0945 . -0946 . -0947 . -0948 . -0949 . -094A . -094B . -094C . -094D . -094E . -094F . -0951 . -0952 . -0953 . -0954 . -0955 . -0956 . -0957 . -0962 . -0963 . -0981 . -0982 . -0983 . -09BC . -09BE . -09BF . -09C0 . -09C1 . -09C2 . -09C3 . -09C4 . -09C7 . -09C8 . -09CB . -09CC . -09CD . -09D7 . -09E2 . -09E3 . -0A01 . -0A02 . -0A03 . -0A3C . -0A3E . -0A3F . -0A40 . -0A41 . -0A42 . -0A47 . -0A48 . -0A4B . -0A4C . -0A4D . -0A51 . -0A70 . -0A71 . -0A75 . -0A81 . -0A82 . -0A83 . -0ABC . -0ABE . -0ABF . -0AC0 . -0AC1 . -0AC2 . -0AC3 . -0AC4 . -0AC5 . -0AC7 . -0AC8 . -0AC9 . -0ACB . -0ACC . -0ACD . -0AE2 . -0AE3 . -0B01 . -0B02 . -0B03 . -0B3C . -0B3E . -0B3F . -0B40 . -0B41 . -0B42 . -0B43 . -0B44 . -0B47 . -0B48 . -0B4B . -0B4C . -0B4D . -0B56 . -0B57 . -0B62 . -0B63 . -0B82 . -0BBE . -0BBF . -0BC0 . -0BC1 . -0BC2 . -0BC6 . -0BC7 . -0BC8 . -0BCA . -0BCB . -0BCC . -0BCD . -0BD7 . -0C01 . -0C02 . -0C03 . -0C3E . -0C3F . -0C40 . -0C41 . -0C42 . -0C43 . -0C44 . -0C46 . -0C47 . -0C48 . -0C4A . -0C4B . -0C4C . -0C4D . -0C55 . -0C56 . -0C62 . -0C63 . -0C82 . -0C83 . -0CBC . -0CBE . -0CBF . -0CC0 . -0CC1 . -0CC2 . -0CC3 . -0CC4 . -0CC6 . -0CC7 . -0CC8 . -0CCA . -0CCB . -0CCC . -0CCD . -0CD5 . -0CD6 . -0CE2 . -0CE3 . -0D02 . -0D03 . -0D3E . -0D3F . -0D40 . -0D41 . -0D42 . -0D43 . -0D44 . -0D46 . -0D47 . -0D48 . -0D4A . -0D4B . -0D4C . -0D4D . -0D57 . -0D62 . -0D63 . -0D82 . -0D83 . -0DCA . -0DCF . -0DD0 . -0DD1 . -0DD2 . -0DD3 . -0DD4 . -0DD6 . -0DD8 . -0DD9 . -0DDA . -0DDB . -0DDC . -0DDD . -0DDE . -0DDF . -0DF2 . -0DF3 . -0E31 . -0E34 . -0E35 . -0E36 . -0E37 . -0E38 . -0E39 . -0E3A . -0E47 . -0E48 . -0E49 . -0E4A . -0E4B . -0E4C . -0E4D . -0E4E . -0EB1 . -0EB4 . -0EB5 . -0EB6 . -0EB7 . -0EB8 . -0EB9 . -0EBB . -0EBC . -0EC8 . -0EC9 . -0ECA . -0ECB . -0ECC . -0ECD . -0F18 . -0F19 . -0F35 . -0F37 . -0F39 . -0F3E . -0F3F . -0F71 . -0F72 . -0F73 . -0F74 . -0F75 . -0F76 . -0F77 . -0F78 . -0F79 . -0F7A . -0F7B . -0F7C . -0F7D . -0F7E . -0F7F . -0F80 . -0F81 . -0F82 . -0F83 . -0F84 . -0F86 . -0F87 . -0F8D . -0F8E . -0F8F . -0F90 . -0F91 . -0F92 . -0F93 . -0F94 . -0F95 . -0F96 . -0F97 . -0F99 . -0F9A . -0F9B . -0F9C . -0F9D . -0F9E . -0F9F . -0FA0 . -0FA1 . -0FA2 . -0FA3 . -0FA4 . -0FA5 . -0FA6 . -0FA7 . -0FA8 . -0FA9 . -0FAA . -0FAB . -0FAC . -0FAD . -0FAE . -0FAF . -0FB0 . -0FB1 . -0FB2 . -0FB3 . -0FB4 . -0FB5 . -0FB6 . -0FB7 . -0FB8 . -0FB9 . -0FBA . -0FBB . -0FBC . -0FC6 . -102B . -102C . -102D . -102E . -102F . -1030 . -1031 . -1032 . -1033 . -1034 . -1035 . -1036 . -1037 . -1038 . -1039 . -103A . -103B . -103C . -103D . -103E . -1056 . -1057 . -1058 . -1059 . -105E . -105F . -1060 . -1062 . -1063 . -1064 . -1067 . -1068 . -1069 . -106A . -106B . -106C . -106D . -1071 . -1072 . -1073 . -1074 . -1082 . -1083 . -1084 . -1085 . -1086 . -1087 . -1088 . -1089 . -108A . -108B . -108C . -108D . -108F . -109A . -109B . -109C . -109D . -135D . -135E . -135F . -1712 . -1713 . -1714 . -1732 . -1733 . -1734 . -1752 . -1753 . -1772 . -1773 . -17B4 . -17B5 . -17B6 . -17B7 . -17B8 . -17B9 . -17BA . -17BB . -17BC . -17BD . -17BE . -17BF . -17C0 . -17C1 . -17C2 . -17C3 . -17C4 . -17C5 . -17C6 . -17C7 . -17C8 . -17C9 . -17CA . -17CB . -17CC . -17CD . -17CE . -17CF . -17D0 . -17D1 . -17D2 . -17D3 . -17DD . -180B . -180C . -180D . -18A9 . -1920 . -1921 . -1922 . -1923 . -1924 . -1925 . -1926 . -1927 . -1928 . -1929 . -192A . -192B . -1930 . -1931 . -1932 . -1933 . -1934 . -1935 . -1936 . -1937 . -1938 . -1939 . -193A . -193B . -19B0 . -19B1 . -19B2 . -19B3 . -19B4 . -19B5 . -19B6 . -19B7 . -19B8 . -19B9 . -19BA . -19BB . -19BC . -19BD . -19BE . -19BF . -19C0 . -19C8 . -19C9 . -1A17 . -1A18 . -1A19 . -1A1A . -1A1B . -1A55 . -1A56 . -1A57 . -1A58 . -1A59 . -1A5A . -1A5B . -1A5C . -1A5D . -1A5E . -1A60 . -1A61 . -1A62 . -1A63 . -1A64 . -1A65 . -1A66 . -1A67 . -1A68 . -1A69 . -1A6A . -1A6B . -1A6C . -1A6D . -1A6E . -1A6F . -1A70 . -1A71 . -1A72 . -1A73 . -1A74 . -1A75 . -1A76 . -1A77 . -1A78 . -1A79 . -1A7A . -1A7B . -1A7C . -1A7F . -1B00 . -1B01 . -1B02 . -1B03 . -1B04 . -1B34 . -1B35 . -1B36 . -1B37 . -1B38 . -1B39 . -1B3A . -1B3B . -1B3C . -1B3D . -1B3E . -1B3F . -1B40 . -1B41 . -1B42 . -1B43 . -1B44 . -1B6B . -1B6C . -1B6D . -1B6E . -1B6F . -1B70 . -1B71 . -1B72 . -1B73 . -1B80 . -1B81 . -1B82 . -1BA1 . -1BA2 . -1BA3 . -1BA4 . -1BA5 . -1BA6 . -1BA7 . -1BA8 . -1BA9 . -1BAA . -1BAB . -1BAC . -1BAD . -1BE6 . -1BE7 . -1BE8 . -1BE9 . -1BEA . -1BEB . -1BEC . -1BED . -1BEE . -1BEF . -1BF0 . -1BF1 . -1BF2 . -1BF3 . -1C24 . -1C25 . -1C26 . -1C27 . -1C28 . -1C29 . -1C2A . -1C2B . -1C2C . -1C2D . -1C2E . -1C2F . -1C30 . -1C31 . -1C32 . -1C33 . -1C34 . -1C35 . -1C36 . -1C37 . -1CD0 . -1CD1 . -1CD2 . -1CD4 . -1CD5 . -1CD6 . -1CD7 . -1CD8 . -1CD9 . -1CDA . -1CDB . -1CDC . -1CDD . -1CDE . -1CDF . -1CE0 . -1CE1 . -1CE2 . -1CE3 . -1CE4 . -1CE5 . -1CE6 . -1CE7 . -1CE8 . -1CED . -1CF2 . -1CF3 . -1CF4 . -1DC0 . -1DC1 . -1DC2 . -1DC3 . -1DC4 . -1DC5 . -1DC6 . -1DC7 . -1DC8 . -1DC9 . -1DCA . -1DCB . -1DCC . -1DCD . -1DCE . -1DCF . -1DD0 . -1DD1 . -1DD2 . -1DD3 . -1DD4 . -1DD5 . -1DD6 . -1DD7 . -1DD8 . -1DD9 . -1DDA . -1DDB . -1DDC . -1DDD . -1DDE . -1DDF . -1DE0 . -1DE1 . -1DE2 . -1DE3 . -1DE4 . -1DE5 . -1DE6 . -1DFC . -1DFD . -1DFE . -1DFF . -20D0 . -20D1 . -20D2 . -20D3 . -20D4 . -20D5 . -20D6 . -20D7 . -20D8 . -20D9 . -20DA . -20DB . -20DC . -20DD . -20DE . -20DF . -20E0 . -20E1 . -20E2 . -20E3 . -20E4 . -20E5 . -20E6 . -20E7 . -20E8 . -20E9 . -20EA . -20EB . -20EC . -20ED . -20EE . -20EF . -20F0 . -2CEF . -2CF0 . -2CF1 . -2D7F . -2DE0 . -2DE1 . -2DE2 . -2DE3 . -2DE4 . -2DE5 . -2DE6 . -2DE7 . -2DE8 . -2DE9 . -2DEA . -2DEB . -2DEC . -2DED . -2DEE . -2DEF . -2DF0 . -2DF1 . -2DF2 . -2DF3 . -2DF4 . -2DF5 . -2DF6 . -2DF7 . -2DF8 . -2DF9 . -2DFA . -2DFB . -2DFC . -2DFD . -2DFE . -2DFF . -302A . -302B . -302C . -302D . -302E . -302F . -3099 . -309A . -A66F . -A670 . -A671 . -A672 . -A674 . -A675 . -A676 . -A677 . -A678 . -A679 . -A67A . -A67B . -A67C . -A67D . -A69F . -A6F0 . -A6F1 . -A802 . -A806 . -A80B . -A823 . -A824 . -A825 . -A826 . -A827 . -A880 . -A881 . -A8B4 . -A8B5 . -A8B6 . -A8B7 . -A8B8 . -A8B9 . -A8BA . -A8BB . -A8BC . -A8BD . -A8BE . -A8BF . -A8C0 . -A8C1 . -A8C2 . -A8C3 . -A8C4 . -A8E0 . -A8E1 . -A8E2 . -A8E3 . -A8E4 . -A8E5 . -A8E6 . -A8E7 . -A8E8 . -A8E9 . -A8EA . -A8EB . -A8EC . -A8ED . -A8EE . -A8EF . -A8F0 . -A8F1 . -A926 . -A927 . -A928 . -A929 . -A92A . -A92B . -A92C . -A92D . -A947 . -A948 . -A949 . -A94A . -A94B . -A94C . -A94D . -A94E . -A94F . -A950 . -A951 . -A952 . -A953 . -A980 . -A981 . -A982 . -A983 . -A9B3 . -A9B4 . -A9B5 . -A9B6 . -A9B7 . -A9B8 . -A9B9 . -A9BA . -A9BB . -A9BC . -A9BD . -A9BE . -A9BF . -A9C0 . -AA29 . -AA2A . -AA2B . -AA2C . -AA2D . -AA2E . -AA2F . -AA30 . -AA31 . -AA32 . -AA33 . -AA34 . -AA35 . -AA36 . -AA43 . -AA4C . -AA4D . -AA7B . -AAB0 . -AAB2 . -AAB3 . -AAB4 . -AAB7 . -AAB8 . -AABE . -AABF . -AAC1 . -AAEB . -AAEC . -AAED . -AAEE . -AAEF . -AAF5 . -AAF6 . -ABE3 . -ABE4 . -ABE5 . -ABE6 . -ABE7 . -ABE8 . -ABE9 . -ABEA . -ABEC . -ABED . -FB1E . -FE00 . -FE01 . -FE02 . -FE03 . -FE04 . -FE05 . -FE06 . -FE07 . -FE08 . -FE09 . -FE0A . -FE0B . -FE0C . -FE0D . -FE0E . -FE0F . -FE20 . -FE21 . -FE22 . -FE23 . -FE24 . -FE25 . -FE26 . -101FD . -10A01 . -10A02 . -10A03 . -10A05 . -10A06 . -10A0C . -10A0D . -10A0E . -10A0F . -10A38 . -10A39 . -10A3A . -10A3F . -11000 . -11001 . -11002 . -11038 . -11039 . -1103A . -1103B . -1103C . -1103D . -1103E . -1103F . -11040 . -11041 . -11042 . -11043 . -11044 . -11045 . -11046 . -11080 . -11081 . -11082 . -110B0 . -110B1 . -110B2 . -110B3 . -110B4 . -110B5 . -110B6 . -110B7 . -110B8 . -110B9 . -110BA . -11100 . -11101 . -11102 . -11127 . -11128 . -11129 . -1112A . -1112B . -1112C . -1112D . -1112E . -1112F . -11130 . -11131 . -11132 . -11133 . -11134 . -11180 . -11181 . -11182 . -111B3 . -111B4 . -111B5 . -111B6 . -111B7 . -111B8 . -111B9 . -111BA . -111BB . -111BC . -111BD . -111BE . -111BF . -111C0 . -116AB . -116AC . -116AD . -116AE . -116AF . -116B0 . -116B1 . -116B2 . -116B3 . -116B4 . -116B5 . -116B6 . -116B7 . -16F51 . -16F52 . -16F53 . -16F54 . -16F55 . -16F56 . -16F57 . -16F58 . -16F59 . -16F5A . -16F5B . -16F5C . -16F5D . -16F5E . -16F5F . -16F60 . -16F61 . -16F62 . -16F63 . -16F64 . -16F65 . -16F66 . -16F67 . -16F68 . -16F69 . -16F6A . -16F6B . -16F6C . -16F6D . -16F6E . -16F6F . -16F70 . -16F71 . -16F72 . -16F73 . -16F74 . -16F75 . -16F76 . -16F77 . -16F78 . -16F79 . -16F7A . -16F7B . -16F7C . -16F7D . -16F7E . -16F8F . -16F90 . -16F91 . -16F92 . -1D165 . -1D166 . -1D167 . -1D168 . -1D169 . -1D16D . -1D16E . -1D16F . -1D170 . -1D171 . -1D172 . -1D17B . -1D17C . -1D17D . -1D17E . -1D17F . -1D180 . -1D181 . -1D182 . -1D185 . -1D186 . -1D187 . -1D188 . -1D189 . -1D18A . -1D18B . -1D1AA . -1D1AB . -1D1AC . -1D1AD . -1D242 . -1D243 . -1D244 . -E0100 . -E0101 . -E0102 . -E0103 . -E0104 . -E0105 . -E0106 . -E0107 . -E0108 . -E0109 . -E010A . -E010B . -E010C . -E010D . -E010E . -E010F . -E0110 . -E0111 . -E0112 . -E0113 . -E0114 . -E0115 . -E0116 . -E0117 . -E0118 . -E0119 . -E011A . -E011B . -E011C . -E011D . -E011E . -E011F . -E0120 . -E0121 . -E0122 . -E0123 . -E0124 . -E0125 . -E0126 . -E0127 . -E0128 . -E0129 . -E012A . -E012B . -E012C . -E012D . -E012E . -E012F . -E0130 . -E0131 . -E0132 . -E0133 . -E0134 . -E0135 . -E0136 . -E0137 . -E0138 . -E0139 . -E013A . -E013B . -E013C . -E013D . -E013E . -E013F . -E0140 . -E0141 . -E0142 . -E0143 . -E0144 . -E0145 . -E0146 . -E0147 . -E0148 . -E0149 . -E014A . -E014B . -E014C . -E014D . -E014E . -E014F . -E0150 . -E0151 . -E0152 . -E0153 . -E0154 . -E0155 . -E0156 . -E0157 . -E0158 . -E0159 . -E015A . -E015B . -E015C . -E015D . -E015E . -E015F . -E0160 . -E0161 . -E0162 . -E0163 . -E0164 . -E0165 . -E0166 . -E0167 . -E0168 . -E0169 . -E016A . -E016B . -E016C . -E016D . -E016E . -E016F . -E0170 . -E0171 . -E0172 . -E0173 . -E0174 . -E0175 . -E0176 . -E0177 . -E0178 . -E0179 . -E017A . -E017B . -E017C . -E017D . -E017E . -E017F . -E0180 . -E0181 . -E0182 . -E0183 . -E0184 . -E0185 . -E0186 . -E0187 . -E0188 . -E0189 . -E018A . -E018B . -E018C . -E018D . -E018E . -E018F . -E0190 . -E0191 . -E0192 . -E0193 . -E0194 . -E0195 . -E0196 . -E0197 . -E0198 . -E0199 . -E019A . -E019B . -E019C . -E019D . -E019E . -E019F . -E01A0 . -E01A1 . -E01A2 . -E01A3 . -E01A4 . -E01A5 . -E01A6 . -E01A7 . -E01A8 . -E01A9 . -E01AA . -E01AB . -E01AC . -E01AD . -E01AE . -E01AF . -E01B0 . -E01B1 . -E01B2 . -E01B3 . -E01B4 . -E01B5 . -E01B6 . -E01B7 . -E01B8 . -E01B9 . -E01BA . -E01BB . -E01BC . -E01BD . -E01BE . -E01BF . -E01C0 . -E01C1 . -E01C2 . -E01C3 . -E01C4 . -E01C5 . -E01C6 . -E01C7 . -E01C8 . -E01C9 . -E01CA . -E01CB . -E01CC . -E01CD . -E01CE . -E01CF . -E01D0 . -E01D1 . -E01D2 . -E01D3 . -E01D4 . -E01D5 . -E01D6 . -E01D7 . -E01D8 . -E01D9 . -E01DA . -E01DB . -E01DC . -E01DD . -E01DE . -E01DF . -E01E0 . -E01E1 . -E01E2 . -E01E3 . -E01E4 . -E01E5 . -E01E6 . -E01E7 . -E01E8 . -E01E9 . -E01EA . -E01EB . -E01EC . -E01ED . -E01EE . -E01EF . -{} {} \_relax -\_def\_tmp #1 #2 {\_lccode"#2="#1 \_uccode"#2="#2 } -\_tmp 0069 0130 -\_tmp 03B8 03F4 -\_tmp 00DF 1E9E -\_tmp 03C9 2126 -\_tmp 006B 212A -\_tmp 00E5 212B -\_def\_tmp #1 #2 {\_lccode"#1="#1 \_uccode"#1="#2 } -\_tmp 0131 0049 -\_tmp 017F 0053 -\_tmp 03BC 039C -\_tmp 03C2 03A3 -\_tmp 03D0 0392 -\_tmp 03D1 0398 -\_tmp 03D5 03A6 -\_tmp 03D6 03A0 -\_tmp 03F0 039A -\_tmp 03F1 03A1 -\_tmp 03F5 0395 -\_tmp 1E9B 1E60 -\_tmp 1FBE 0399 -% end of file -\_endcode - -All codes in unicode table keep information about pairs lowecase-uppercase -letters or single letter. We need to read such information and set -appropriate `\lccode` and `\uccode`. The `\catcode` above the code 127 -is not set, i.\,e.\ the `\catcode`=12 for all codes above 127. - -The file `uni-lcuc.opm` does this work. It is not much interesting file, only -first few lines from 15928 lines in total is shown here. - -{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip}\ttline=-1 -\def\docfile{uni-lcuc.opm} -\verbinput (3-30) uni-lcuc.opm -\vskip-\medskipamount -\noindent\typosize[8/]\dots etc. (see {\tt\Brown\docfile}) -} diff --git a/macros/luatex/optex/base/unimath-codes.opm b/macros/luatex/optex/base/unimath-codes.opm deleted file mode 100644 index 6e83ab94ad..0000000000 --- a/macros/luatex/optex/base/unimath-codes.opm +++ /dev/null @@ -1,439 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \_ncharrmA {Uni math codes <2021-03-11>} % preloaded on demand by \loadmath - - \_doc ----------------------------- - The control sequences for `\alpha`, `\beta` etc are redefined here. - The `\alpha` expands to the character with Unicode `"03B1`, this is a normal - character $α$. You can type it directly in your editor if you know how - to do this. - \_cod ----------------------------- - -\_umathnumB="0391 -\_greekdef \Alpha \Beta \Gamma \Delta \Epsilon \Zeta \Eta \Theta \Iota \Kappa - \Lambda \Mu \Nu \Xi \Omicron \Pi \Rho \varTheta \Sigma \Tau \Upsilon \Phi - \Chi \Psi \Omega \_relax - -\_umathnumB="03B1 -\_greekdef \alpha \beta \gamma \delta \varepsilon \zeta \eta \theta \iota \kappa - \lambda \mu \nu \xi \omicron \pi \rho \varsigma \sigma \tau \upsilon - \varphi \chi \psi \omega \vardelta \epsilon \vartheta \varkappa \phi - \varrho \varpi \_relax - - \_doc ----------------------------- - The math alphabets are declared here using the - \^`\_umathrange {<range>}<class><family><starting-code>` macro. - \_cod ----------------------------- - -\_chardef\_ncharrmA=`A \_chardef\_ncharrma=`a -\_chardef\_ncharbfA="1D400 \_chardef\_ncharbfa="1D41A -\_chardef\_ncharitA="1D434 \_chardef\_ncharita="1D44E -\_chardef\_ncharbiA="1D468 \_chardef\_ncharbia="1D482 -\_chardef\_ncharclA="1D49C \_chardef\_ncharcla="1D4B6 -\_chardef\_ncharbcA="1D4D0 \_chardef\_ncharbca="1D4EA -\_chardef\_ncharfrA="1D504 \_chardef\_ncharfra="1D51E -\_chardef\_ncharbrA="1D56C \_chardef\_ncharbra="1D586 -\_chardef\_ncharbbA="1D538 \_chardef\_ncharbba="1D552 -\_chardef\_ncharsnA="1D5A0 \_chardef\_ncharsna="1D5BA -\_chardef\_ncharbsA="1D5D4 \_chardef\_ncharbsa="1D5EE -\_chardef\_ncharsiA="1D608 \_chardef\_ncharsia="1D622 -\_chardef\_ncharsxA="1D63C \_chardef\_ncharsxa="1D656 -\_chardef\_ncharttA="1D670 \_chardef\_nchartta="1D68A - -\_protected\_def\_rmvariables {\_umathrange{A-Z}71\_ncharrmA \_umathrange{a-z}71\_ncharrma} -\_protected\_def\_bfvariables {\_umathrange{A-Z}71\_ncharbfA \_umathrange{a-z}71\_ncharbfa} -\_protected\_def\_itvariables {\_umathrange{A-Z}71\_ncharitA \_umathrange{a-z}71\_ncharita} -\_protected\_def\_bivariables {\_umathrange{A-Z}71\_ncharbiA \_umathrange{a-z}71\_ncharbia} -\_protected\_def\_calvariables {\_umathrange{A-Z}71\_ncharclA \_umathrange{a-z}71\_ncharcla} -\_protected\_def\_bcalvariables {\_umathrange{A-Z}71\_ncharbcA \_umathrange{a-z}71\_ncharbca} -\_protected\_def\_frakvariables {\_umathrange{A-Z}71\_ncharfrA \_umathrange{a-z}71\_ncharfra} -\_protected\_def\_bfrakvariables {\_umathrange{A-Z}71\_ncharbrA \_umathrange{a-z}71\_ncharbra} -\_protected\_def\_bbvariables {\_umathrange{A-Z}71\_ncharbbA \_umathrange{a-z}71\_ncharbba} -\_protected\_def\_sansvariables {\_umathrange{A-Z}71\_ncharsnA \_umathrange{a-z}71\_ncharsna} -\_protected\_def\_bsansvariables {\_umathrange{A-Z}71\_ncharbsA \_umathrange{a-z}71\_ncharbsa} -\_protected\_def\_isansvariables {\_umathrange{A-Z}71\_ncharsiA \_umathrange{a-z}71\_ncharsia} -\_protected\_def\_bisansvariables {\_umathrange{A-Z}71\_ncharsxA \_umathrange{a-z}71\_ncharsxa} -\_protected\_def\_ttvariables {\_umathrange{A-Z}71\_ncharttA \_umathrange{a-z}71\_nchartta} - -\_chardef\_greekrmA="0391 \_chardef\_greekrma="03B1 -\_chardef\_greekbfA="1D6A8 \_chardef\_greekbfa="1D6C2 -\_chardef\_greekitA="1D6E2 \_chardef\_greekita="1D6FC -\_chardef\_greekbiA="1D71C \_chardef\_greekbia="1D736 -\_chardef\_greeksnA="1D756 \_chardef\_greeksna="1D770 -\_chardef\_greeksiA="1D790 \_chardef\_greeksia="1D7AA - -\_protected\_def\_itgreek {\_umathrangegreek71\_greekita} -\_protected\_def\_rmgreek {\_umathrangegreek71\_greekrma} -\_protected\_def\_bfgreek {\_umathrangegreek71\_greekbfa} -\_protected\_def\_bigreek {\_umathrangegreek71\_greekbia} -\_protected\_def\_bsansgreek {\_umathrangegreek71\_greeksna} -\_protected\_def\_bisansgreek{\_umathrangegreek71\_greeksia} -\_protected\_def\_itGreek {\_umathrangeGREEK71\_greekitA} -\_protected\_def\_rmGreek {\_umathrangeGREEK71\_greekrmA} -\_protected\_def\_bfGreek {\_umathrangeGREEK71\_greekbfA} -\_protected\_def\_biGreek {\_umathrangeGREEK71\_greekbiA} -\_protected\_def\_bsansGreek {\_umathrangeGREEK71\_greeksnA} -\_protected\_def\_bisansGreek{\_umathrangeGREEK71\_greeksiA} - -\_chardef\_digitrmO=`0 -\_chardef\_digitbfO="1D7CE -\_chardef\_digitbbO="1D7D8 -\_chardef\_digitsnO="1D7E2 -\_chardef\_digitbsO="1D7EC -\_chardef\_digitttO="1D7F6 - -\_protected\_def\_rmdigits {\_umathrange{0-9}71\_digitrmO} -\_protected\_def\_bfdigits {\_umathrange{0-9}71\_digitbfO} -\_protected\_def\_bbdigits {\_umathrange{0-9}71\_digitbbO} -\_protected\_def\_sansdigits {\_umathrange{0-9}71\_digitsnO} -\_protected\_def\_bsansdigits {\_umathrange{0-9}71\_digitbsO} -\_protected\_def\_ttdigits {\_umathrange{0-9}71\_digitttO} - - \_doc ----------------------------- - The \`\cal`, \`\bbchar`, \`\frak`, \`\script` - and - the \`\rm`, \`\bf`, \`\it`, \`\bi`, \`\tt` are defined here. - Their \"8bit definitions" from the file `math-preload.opm` - (section~\ref[math-preload]) are removed.\nl - You can redefine them again if you need different behavior (for example - you don't want to use sans serif bold in math). What to do: - \begtt \advance\hsize by2em - \_protected\_def\_bf - {\_tryloadbf\_tenbf \_inmath{\_bfvariables\_bfgreek\_bfGreek\_bfdigits}} - \_protected\_def\_bi - {\_tryloadbi\_tenbi \_inmath{\_bivariables\_bigreek\_bfGreek\_bfdigits}} - \_public \bf \bi ; - \endtt - \`\_inmath` `{<cmds>}` applies `<cmds>` only in math mode. - \_cod ----------------------------- - -\_protected\_def\_inmath#1{\_relax \_ifmmode#1\_fi} % to keep off \loop processing in text mode - -% You can redefine these macros to follow your wishes. -% For example, you need upright lowercase greek letters, you don't need -% \bf and \bi behave as sans serif in math, ... - -\_protected\_def\_rm {\_tryloadrm \_tenrm \_inmath{\_rmvariables \_rmdigits}} -\_protected\_def\_it {\_tryloadit \_tenit \_inmath{\_itvariables}} -\_protected\_def\_bf - {\_tryloadbf \_tenbf \_inmath{\_bsansvariables \_bsansgreek \_bsansGreek \_bsansdigits}} -\_protected\_def\_bi - {\_tryloadbi \_tenbi \_inmath{\_bisansvariables \_bisansgreek \_bsansGreek \_bsansdigits}} -\_protected\_def\_tt {\_tryloadtt \_tentt \_inmath{\_ttvariables \_ttdigits}} -\_protected\_def\_bbchar {\_bbvariables \_bbdigits} -\_protected\_def\_cal {\_calvariables} -\_protected\_def\_frak {\_frakvariables} -\_protected\_def\_misans {\_isansvariables \_sansdigits} -\_protected\_def\_mbisans {\_bisansvariables \_bisansgreek \_bsansGreek \_bsansdigits} -\_protected\_def\_script {\_rmvariables \_fam4 } -\_protected\_def\_mit {\_itvariables \_rmdigits \_itgreek \_rmGreek } - -\_public \rm \it \bf \bi \tt \bbchar \cal \frak \misans \mbisans \script \mit ; - - \_doc ----------------------------- - Each Unicode slot carries information about math type. This is saved in - the file `mathclass.txt` which is copied to `mathclass.opm` The file - has the following format: - {\vitt{mathclass.opm}\verbinput (70-85) mathclass.opm } - We have to read this information and convert it to the `\Umathcode`s. - \_cod ----------------------------- - -\_begingroup % \input mathclass.opm (which is a copy of MathClass.txt): - \_def\_p#1;#2{\_edef\_tmp{\_pB#2}\_ifx\_tmp\_empty \_else\_pA#1....\_end#2\_fi} - \_def\_pA#1..#2..#3\_end#4{% - \_ifx\_relax#2\_relax \_pset{"#1}{#4}\_else - \_umathnumA="#1 - \_loop - \_pset{\_umathnumA}{#4}% - \_ifnum\_umathnumA<"#2 \_advance\_umathnumA by1 - \_repeat - \_fi - } - \_def\_pB#1{\_if#1L1\_fi \_if#1B2\_fi \_if#1V2\_fi \_if#1R3\_fi \_if#1N0\_fi \_if#1U0\_fi - \_if#1F0\_fi \_if#1O4\_fi \_if#1C5\_fi \_if#1P6\_fi \_if#1A7\_fi} - \_def\_pset#1#2{\_global\_Umathcode#1=\_tmp\_space 1 #1\_relax - \_if#2O\_global\_Udelcode#1=1 #1\_relax\_fi - \_if#2C\_global\_Udelcode#1=1 #1\_relax\_fi - \_if#2F\_global\_Udelcode#1=1 #1\_relax\_fi - } - \_catcode`#=14 - \_everypar={\_setbox0=\_lastbox \_par \_p} - \_setbox0=\_vbox{\_input mathclass.opm } -\_endgroup - - \_doc ----------------------------- - Each math symbol has its declaration in the file `unicode-math-table.tex` - which is copied to `unimath-table.opm`. The file has the following format: - {\vitt{unimath-table.opm}\verbinput (70-85) unimath-table.opm } - We have to read this information and convert it to the Unicode math codes. - \_cod ----------------------------- - -\_begingroup % \input unimath-table.opm (it is a copy of unicode-math-table.tex): - \_def\UnicodeMathSymbol #1#2#3#4{% - \_ifnum#1=\_Umathcodenum#1 % the code isn't set by mathclass.opm - \_global\_Umathchardef#2=0 1 #1 \_global\_Umathcode#1=0 1 #1 - \_else \_global\_Umathcharnumdef#2=\_Umathcodenum#1 \_fi - \_ifx#3\_mathopen \_gdef#2{\_Udelimiter 4 1 #1 }\_fi - \_ifx#3\_mathclose \_gdef#2{\_Udelimiter 5 1 #1 }\_fi - \_ifx#3\_mathaccent \_gdef#2{\_Umathaccent fixed 7 1 #1 }\_fi - } - \_input unimath-table.opm -\_endgroup - - \_doc ----------------------------- - Many special characters must be declared with care... - \_cod ----------------------------- - -\_global\_Udelcode`<=1 "027E8 % these characters have different meaning -\_global\_Udelcode`>=1 "027E9 % as normal and as delimeter - -\_mit % default math alphabets setting - -% hyphen character is transformed to minus: -\_Umathcode `- = 2 1 "2212 - -% mathclass defines : as Punct, plain.tex as Rel, we keep mathclass, -% i.e. there is difference from plain.tex, you can use $f:A\to B$. - -\_let\{=\lbrace \_let\}=\rbrace - -% mathclas defines ! as Ord, plain.tex as Close -\_Umathcode `! = 5 1 `! % keep plain.tex declaration -\_Umathchardef \mathexclam = 5 1 `! -% mathclas defines ? as Punct, plain.tex as Close -\_Umathcode `? = 5 1 `? % keep plain.tex declaration -\_Umathchardef \mathquestion = 5 1 `? - -\_Umathcode `* = 2 1 "02217 % equivalent to \ast, like in plain TeX - -\_protected\_def \_sqrt {\_Uradical 1 "0221A } -\_protected\_def \_cuberoot {\_Uradical 1 "0221B } -\_protected\_def \_fourthroot {\_Uradical 1 "0221C } - -\_public \sqrt \cuberoot \fourthroot ; - -\_def\_intwithnolimits#1#2 {\_ifx#1\_relax \_else - \_ea\_let\_csname\_csstring#1op\_endcsname=#1% - \_ea\_def\_ea #1\_ea{\_csname\_csstring#1op\_endcsname \_nolimits}% - \_bgroup \_lccode`\~=#2 \_lowercase{\_egroup \_mathcode`~="8000 \_let ~=#1}% - \_ea \_intwithnolimits \_fi -} -\_intwithnolimits \int "0222B \iint "0222C \iiint "0222D - \oint "0222E \oiint "0222F \oiiint "02230 - \intclockwise "02231 \varointclockwise "02232 \ointctrclockwise "02233 - \sumint "02A0B \iiiint "02A0C \intbar "02A0D \intBar "02A0E \fint "02A0F - \pointint "02A15 \sqint "02A16 \intlarhk "02A17 \intx "02A18 - \intcap "02A19 \intcup "02A1A \upint "02A1B \lowint "02A1C \_relax "0 - -\_protected\_def \vert {\_Udelimiter 0 1 "07C } -\_protected\_def \Vert {\_Udelimiter 0 1 "02016 } -\_protected\_def \Vvert {\_Udelimiter 0 1 "02980 } - -\_protected\_def \_overbrace #1{\mathop {\Umathaccent 7 1 "023DE{#1}}\limits} -\_protected\_def \_underbrace #1{\mathop {\Umathaccent bottom 7 1 "023DF{#1}}\limits} -\_protected\_def \_overparen #1{\mathop {\Umathaccent 7 1 "023DC{#1}}\limits} -\_protected\_def \_underparen #1{\mathop {\Umathaccent bottom 7 1 "023DD{#1}}\limits} -\_protected\_def \_overbracket #1{\mathop {\Umathaccent 7 1 "023B4{#1}}\limits} -\_protected\_def \_underbracket #1{\mathop {\Umathaccent bottom 7 1 "023B5{#1}}\limits} - -\_public \overbrace \underbrace \overparen \underparen \overbracket \underbracket ; - -\_protected\def \widehat {\Umathaccent 7 1 "00302 } -\_protected\def \widetilde {\Umathaccent 7 1 "00303 } -\_protected\def \overleftharpoon {\Umathaccent 7 1 "020D0 } -\_protected\def \overrightharpoon {\Umathaccent 7 1 "020D1 } -\_protected\def \overleftarrow {\Umathaccent 7 1 "020D6 } -\_protected\def \overrightarrow {\Umathaccent 7 1 "020D7 } -\_protected\def \overleftrightarrow {\Umathaccent 7 1 "020E1 } - -\_mathchardef\ldotp="612E -\_let\|=\Vert -\_mathcode`\_="8000 - -\_global\_Umathcode "22EF = 0 1 "22EF % mathclass says that it is Rel -\_global\_Umathcode "002E = 0 1 "002E % mathclass says that dot is Punct -\_global\_Umathchardef \unicodecdots = 0 1 "22EF - -\_global\_Umathcode `/ = 0 1 `/ % mathclass says that / is Bin, Plain TeX says that it is Ord. - -% compressed dots in S and SS styles (usable in \matrix when it is in T, S and SS style) -\_protected\_def \vdots {\_relax \_ifnum \_mathstyle>3 \_unicodevdots \_else \_vdots \_fi} -\_protected\_def \ddots {\_relax \_ifnum \_mathstyle>3 \_unicodeddots \_else \_ddots \_fi} -\_protected\_def \adots {\_relax \_ifnum \_mathstyle>3 \_unicodeadots \_else \_adots \_fi} - -% Unicode superscripts (²) and subscripts as simple macros with \mathcode"8000 -\_bgroup - \_def\_tmp#1#2{\_global\_mathcode#1="8000 \_lccode`\~=#1 \_lowercase{\_gdef~}{#2}} - \_fornum 0..1 \_do {\_tmp{"207#1}{{^#1}}} - \_tmp{"B2}{{^2}}\_tmp{"B3}{{^3}} - \_fornum 4..9 \_do {\_tmp{"207#1}{{^#1}}} - \_fornum 0..9 \_do {\_tmp{"208#1}{{_#1}}} -\_egroup - - \_doc ----------------------------- - Aliases are declared here. They are names not mentioned in the `unimath-table.opm` file - but commonly used in \TeX. - \_cod ----------------------------- - -\_let \setminus=\smallsetminus -\_let \diamond=\smwhtdiamond -\_let \colon=\mathcolon -\_let \bullet=\smblkcircle -\_let \circ=\vysmwhtcircle -\_let \bigcirc=\mdlgwhtcircle -\_let \to=\rightarrow -\_let \le=\leq -\_let \ge=\geq -\_let \neq=\ne -\_protected\_def \triangle {\mathord{\bigtriangleup}} -\_let \emptyset=\varnothing -\_let \hbar=\hslash -\_let \land=\wedge -\_let \lor=\vee -\_let \owns=\ni -\_let \gets=\leftarrow -\_let \mathring=\ocirc -\_let \lnot=\neg -\_let \longdivisionsign=\longdivision -\_let \backepsilon=\upbackepsilon -\_let \eth=\matheth -\_let \dbkarow=\dbkarrow -\_let \drbkarow=\drbkarrow -\_let \hksearow=\hksearrow -\_let \hkswarow=\hkswarrow - -\_let \upalpha=\mupalpha -\_let \upbeta=\mupbeta -\_let \upgamma=\mupgamma -\_let \updelta=\mupdelta -\_let \upepsilon=\mupvarepsilon -\_let \upvarepsilon=\mupvarepsilon -\_let \upzeta=\mupzeta -\_let \upeta=\mupeta -\_let \uptheta=\muptheta -\_let \upiota=\mupiota -\_let \upkappa=\mupkappa -\_let \uplambda=\muplambda -\_let \upmu=\mupmu -\_let \upnu=\mupnu -\_let \upxi=\mupxi -\_let \upomicron=\mupomicron -\_let \uppi=\muppi -\_let \uprho=\muprho -\_let \upvarrho=\mupvarrho -\_let \upvarsigma=\mupvarsigma -\_let \upsigma=\mupsigma -\_let \uptau=\muptau -\_let \upupsilon=\mupupsilon -\_let \upvarphi=\mupvarphi -\_let \upchi=\mupchi -\_let \uppsi=\muppsi -\_let \upomega=\mupomega -\_let \upvartheta=\mupvartheta -\_let \upphi=\mupphi -\_let \upvarpi=\mupvarpi - - \_doc ----------------------------- - The \`\not` macro is redefined here. If the `\_not!<char>` is defined - (by \`\_negationof`) - then this macro is used. Else centered / is printed over the <char>. - \_cod ----------------------------- - -\_protected\_def\_not#1{% - \_trycs{_not!\_csstring#1}{\_mathrel\_mathstyles{% - \_setbox0=\_hbox{\_math$\_currstyle#1$}% - \_hbox to\_wd0{\_hss$\_currstyle/$\_hss}\_kern-\_wd0 \_box0 -}}} -\_def\_negationof #1#2{\_ea\_let \_csname _not!\_csstring#1\_endcsname =#2} - -\_negationof = \neq -\_negationof < \nless -\_negationof > \ngtr -\_negationof \gets \nleftarrow -\_negationof \simeq \nsime -\_negationof \equal \ne -\_negationof \le \nleq -\_negationof \ge \ngeq -\_negationof \greater \ngtr -\_negationof \forksnot \forks -\_negationof \in \notin -\_negationof \mid \nmid -\_negationof \cong \ncong -\_negationof \leftarrow \nleftarrow -\_negationof \rightarrow \nrightarrow -\_negationof \leftrightarrow \nleftrightarrow -\_negationof \Leftarrow \nLeftarrow -\_negationof \Leftrightarrow \nLeftrightarrow -\_negationof \Rightarrow \nRightarrow -\_negationof \exists \nexists -\_negationof \ni \nni -\_negationof \paralel \nparalel -\_negationof \sim \nsim -\_negationof \approx \napprox -\_negationof \equiv \nequiv -\_negationof \asymp \nasymp -\_negationof \lesssim \nlesssim -\_negationof \ngtrsim \ngtrsim -\_negationof \lessgtr \nlessgtr -\_negationof \gtrless \ngtrless -\_negationof \prec \nprec -\_negationof \succ \nsucc -\_negationof \subset \nsubset -\_negationof \supset \nsupset -\_negationof \subseteq \nsubseteq -\_negationof \supseteq \nsupseteq -\_negationof \vdash \nvdash -\_negationof \vDash \nvDash -\_negationof \Vdash \nVdash -\_negationof \VDash \nVDash -\_negationof \preccurlyeq \npreccurlyeq -\_negationof \succcurlyeq \nsucccurlyeq -\_negationof \sqsubseteq \nsqsubseteq -\_negationof \sqsupseteq \nsqsupseteq -\_negationof \vartriangleleft \nvartriangleleft -\_negationof \vartriangleright \nvartriangleright -\_negationof \trianglelefteq \ntrianglelefteq -\_negationof \trianglerighteq \ntrianglerighteq -\_negationof \vinfty \nvinfty - -\_public \not ; - - \_doc ----------------------------- - Newly declared public control sequences are used in internal macros by - \OpTeX/. We need to get new meanings for these control sequences in - the private namespace. - \_cod ----------------------------- - -\_private - \ldotp \cdotp \bullet \triangleleft \trianglerigt \mapstochar \rightarrow - \prime \lhook \rightarrow \leftarrow \rhook \triangleright \triangleleft - \Relbar \Rightarrow \relbar \rightarrow \Leftarrow \mapstochar - \longrightarrow \Longleftrightarrow \unicodevdots \unicodeddots \unicodeadots ; - -\_endcode - -\secc More Unicode-math examples - -Example of using additional math font is in section 5.3 in the -\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf]{\tt optex-math.pdf} documentation - -You can combine more Unicode math fonts in single formula simply -by the `\addUmathfont` macro, see -\ulink[http://petr.olsak.net/optex/optex-tricks.html#addumathfont]{\OpTeX/ trick 0030}. - -See \url{http://tex.stackexchange.com/questions/308749} -for technical details about Unicode-math. - -\_endinput - -History: -2021-03-11 Umathcode `* declaed as \ast -2021-02-03 Unicode superscripts, subscripts declared -2021-01-31 Mathcode of ! ? set to Close, codes undeclared in mathclass set correctly -2021-01-23 Compressed \vdots, \ddots, \adots in script(script)style. -2020-11-13 Bug fix: \colon declared -2020-06-13 Umathcode of / declared as in Plain TeX -2020-06-07 \_itgreek \_itGreek, \_rmgreek \_rmGreek etc. introduced, names changed -2020-06-03 \not\mid = \nmid added, \not corrected -2020-04-30 Bug fix: \phi, \varpi etc. were bad encoded -2020-04-09 Bug fix: \Udelcode`<, \Udelcode`> added diff --git a/macros/luatex/optex/base/unimath-table.opm b/macros/luatex/optex/base/unimath-table.opm deleted file mode 100644 index 252c1fc26a..0000000000 --- a/macros/luatex/optex/base/unimath-table.opm +++ /dev/null @@ -1,2471 +0,0 @@ -%%^^A%% unicode-math-table.tex -- part of UNICODE-MATH <wspr.io/unicode-math> -%%^^A%% Source file of the math symbols. - -% Only \ddots, \adots and \vdots are called differently: -% \unicodeddots, \unicodeadots and \unicodevdots -% \mathquestion: Ord -> Close (because plain.tex declares it as Close) - -\UnicodeMathSymbol{"00021}{\mathexclam }{\mathclose}{exclamation mark}% -\UnicodeMathSymbol{"00023}{\mathoctothorpe }{\mathord}{number sign}% -\UnicodeMathSymbol{"00024}{\mathdollar }{\mathord}{dollar sign}% -\UnicodeMathSymbol{"00025}{\mathpercent }{\mathord}{percent sign}% -\UnicodeMathSymbol{"00026}{\mathampersand }{\mathord}{ampersand}% -\UnicodeMathSymbol{"00028}{\lparen }{\mathopen}{left parenthesis}% -\UnicodeMathSymbol{"00029}{\rparen }{\mathclose}{right parenthesis}% -\UnicodeMathSymbol{"0002B}{\mathplus }{\mathbin}{plus sign b:}% -\UnicodeMathSymbol{"0002C}{\mathcomma }{\mathpunct}{comma}% -\UnicodeMathSymbol{"0002E}{\mathperiod }{\mathord}{full stop, period}% -\UnicodeMathSymbol{"0002F}{\mathslash }{\mathord}{solidus}% -\UnicodeMathSymbol{"0003A}{\mathcolon }{\mathpunct}{colon}% -\UnicodeMathSymbol{"0003B}{\mathsemicolon }{\mathpunct}{semicolon p:}% -\UnicodeMathSymbol{"0003C}{\less }{\mathrel}{less-than sign r:}% -\UnicodeMathSymbol{"0003D}{\equal }{\mathrel}{equals sign r:}% -\UnicodeMathSymbol{"0003E}{\greater }{\mathrel}{greater-than sign r:}% -\UnicodeMathSymbol{"0003F}{\mathquestion }{\mathclose}{question mark}% -\UnicodeMathSymbol{"00040}{\mathatsign }{\mathord}{commercial at}% -\UnicodeMathSymbol{"0005B}{\lbrack }{\mathopen}{left square bracket}% -\UnicodeMathSymbol{"0005C}{\backslash }{\mathord}{reverse solidus}% -\UnicodeMathSymbol{"0005D}{\rbrack }{\mathclose}{right square bracket}% -\UnicodeMathSymbol{"0007B}{\lbrace }{\mathopen}{left curly bracket}% -\UnicodeMathSymbol{"0007C}{\vert }{\mathfence}{vertical bar}% -\UnicodeMathSymbol{"0007D}{\rbrace }{\mathclose}{right curly bracket}% -\UnicodeMathSymbol{"000A3}{\mathsterling }{\mathord}{pound sign}% -\UnicodeMathSymbol{"000A5}{\mathyen }{\mathord}{yen sign}% -\UnicodeMathSymbol{"000A7}{\mathsection }{\mathord}{section symbol}% -\UnicodeMathSymbol{"000AC}{\neg }{\mathord}{/neg /lnot not sign}% -\UnicodeMathSymbol{"000B1}{\pm }{\mathbin}{plus-or-minus sign}% -\UnicodeMathSymbol{"000B6}{\mathparagraph }{\mathord}{paragraph symbol}% -\UnicodeMathSymbol{"000B7}{\cdotp }{\mathbin}{/centerdot b: middle dot}% -\UnicodeMathSymbol{"000D7}{\times }{\mathbin}{multiply sign}% -\UnicodeMathSymbol{"000F0}{\matheth }{\mathalpha}{eth}% -\UnicodeMathSymbol{"000F7}{\div }{\mathbin}{divide sign}% -\UnicodeMathSymbol{"001B5}{\Zbar }{\mathord}{impedance (latin capital letter z with stroke)}% -\UnicodeMathSymbol{"00300}{\grave }{\mathaccent}{grave accent}% -\UnicodeMathSymbol{"00301}{\acute }{\mathaccent}{acute accent}% -\UnicodeMathSymbol{"00302}{\hat }{\mathaccent}{circumflex accent}% -\UnicodeMathSymbol{"00302}{\widehat }{\mathaccentwide}{circumflex accent}% -\UnicodeMathSymbol{"00303}{\tilde }{\mathaccent}{tilde}% -\UnicodeMathSymbol{"00303}{\widetilde }{\mathaccentwide}{tilde}% -\UnicodeMathSymbol{"00304}{\bar }{\mathaccent}{macron}% -\UnicodeMathSymbol{"00305}{\overbar }{\mathaccent}{overbar embellishment}% -\UnicodeMathSymbol{"00305}{\wideoverbar }{\mathaccentwide}{stretchy overbar embellishment}% -\UnicodeMathSymbol{"00306}{\breve }{\mathaccent}{breve}% -\UnicodeMathSymbol{"00306}{\widebreve }{\mathaccentwide}{stretchy breve}% -\UnicodeMathSymbol{"00307}{\dot }{\mathaccent}{dot above}% -\UnicodeMathSymbol{"00308}{\ddot }{\mathaccent}{dieresis}% -\UnicodeMathSymbol{"00309}{\ovhook }{\mathaccent}{combining hook above}% -\UnicodeMathSymbol{"0030A}{\ocirc }{\mathaccent}{ring}% -\UnicodeMathSymbol{"0030C}{\check }{\mathaccent}{caron}% -\UnicodeMathSymbol{"0030C}{\widecheck }{\mathaccentwide}{stretchy caron}% -\UnicodeMathSymbol{"00310}{\candra }{\mathaccent}{candrabindu (non-spacing)}% -\UnicodeMathSymbol{"00312}{\oturnedcomma }{\mathaccent}{combining turned comma above}% -\UnicodeMathSymbol{"00315}{\ocommatopright }{\mathaccent}{combining comma above right}% -\UnicodeMathSymbol{"0031A}{\droang }{\mathaccent}{left angle above (non-spacing)}% -\UnicodeMathSymbol{"00330}{\wideutilde }{\mathbotaccentwide}{under tilde accent (multiple characters and non-spacing)}% -\UnicodeMathSymbol{"00332}{\mathunderbar }{\mathbotaccentwide}{combining low line}% -\UnicodeMathSymbol{"00338}{\notaccent }{\mathaccentoverlay}{combining long solidus overlay}% -\UnicodeMathSymbol{"0034D}{\underleftrightarrow }{\mathbotaccentwide}{underleftrightarrow accent}% -\UnicodeMathSymbol{"00391}{\mupAlpha }{\mathalpha}{capital alpha, greek}% -\UnicodeMathSymbol{"00392}{\mupBeta }{\mathalpha}{capital beta, greek}% -\UnicodeMathSymbol{"00393}{\mupGamma }{\mathalpha}{capital gamma, greek}% -\UnicodeMathSymbol{"00394}{\mupDelta }{\mathalpha}{capital delta, greek}% -\UnicodeMathSymbol{"00395}{\mupEpsilon }{\mathalpha}{capital epsilon, greek}% -\UnicodeMathSymbol{"00396}{\mupZeta }{\mathalpha}{capital zeta, greek}% -\UnicodeMathSymbol{"00397}{\mupEta }{\mathalpha}{capital eta, greek}% -\UnicodeMathSymbol{"00398}{\mupTheta }{\mathalpha}{capital theta, greek}% -\UnicodeMathSymbol{"00399}{\mupIota }{\mathalpha}{capital iota, greek}% -\UnicodeMathSymbol{"0039A}{\mupKappa }{\mathalpha}{capital kappa, greek}% -\UnicodeMathSymbol{"0039B}{\mupLambda }{\mathalpha}{capital lambda, greek}% -\UnicodeMathSymbol{"0039C}{\mupMu }{\mathalpha}{capital mu, greek}% -\UnicodeMathSymbol{"0039D}{\mupNu }{\mathalpha}{capital nu, greek}% -\UnicodeMathSymbol{"0039E}{\mupXi }{\mathalpha}{capital xi, greek}% -\UnicodeMathSymbol{"0039F}{\mupOmicron }{\mathalpha}{capital omicron, greek}% -\UnicodeMathSymbol{"003A0}{\mupPi }{\mathalpha}{capital pi, greek}% -\UnicodeMathSymbol{"003A1}{\mupRho }{\mathalpha}{capital rho, greek}% -\UnicodeMathSymbol{"003A3}{\mupSigma }{\mathalpha}{capital sigma, greek}% -\UnicodeMathSymbol{"003A4}{\mupTau }{\mathalpha}{capital tau, greek}% -\UnicodeMathSymbol{"003A5}{\mupUpsilon }{\mathalpha}{capital upsilon, greek}% -\UnicodeMathSymbol{"003A6}{\mupPhi }{\mathalpha}{capital phi, greek}% -\UnicodeMathSymbol{"003A7}{\mupChi }{\mathalpha}{capital chi, greek}% -\UnicodeMathSymbol{"003A8}{\mupPsi }{\mathalpha}{capital psi, greek}% -\UnicodeMathSymbol{"003A9}{\mupOmega }{\mathalpha}{capital omega, greek}% -\UnicodeMathSymbol{"003B1}{\mupalpha }{\mathalpha}{small alpha, greek}% -\UnicodeMathSymbol{"003B2}{\mupbeta }{\mathalpha}{small beta, greek}% -\UnicodeMathSymbol{"003B3}{\mupgamma }{\mathalpha}{small gamma, greek}% -\UnicodeMathSymbol{"003B4}{\mupdelta }{\mathalpha}{small delta, greek}% -\UnicodeMathSymbol{"003B5}{\mupvarepsilon }{\mathalpha}{rounded small varepsilon, greek}% -\UnicodeMathSymbol{"003B6}{\mupzeta }{\mathalpha}{small zeta, greek}% -\UnicodeMathSymbol{"003B7}{\mupeta }{\mathalpha}{small eta, greek}% -\UnicodeMathSymbol{"003B8}{\muptheta }{\mathalpha}{straight theta, small theta, greek}% -\UnicodeMathSymbol{"003B9}{\mupiota }{\mathalpha}{small iota, greek}% -\UnicodeMathSymbol{"003BA}{\mupkappa }{\mathalpha}{small kappa, greek}% -\UnicodeMathSymbol{"003BB}{\muplambda }{\mathalpha}{small lambda, greek}% -\UnicodeMathSymbol{"003BC}{\mupmu }{\mathalpha}{small mu, greek}% -\UnicodeMathSymbol{"003BD}{\mupnu }{\mathalpha}{small nu, greek}% -\UnicodeMathSymbol{"003BE}{\mupxi }{\mathalpha}{small xi, greek}% -\UnicodeMathSymbol{"003BF}{\mupomicron }{\mathalpha}{small omicron, greek}% -\UnicodeMathSymbol{"003C0}{\muppi }{\mathalpha}{small pi, greek}% -\UnicodeMathSymbol{"003C1}{\muprho }{\mathalpha}{small rho, greek}% -\UnicodeMathSymbol{"003C2}{\mupvarsigma }{\mathalpha}{terminal sigma, greek}% -\UnicodeMathSymbol{"003C3}{\mupsigma }{\mathalpha}{small sigma, greek}% -\UnicodeMathSymbol{"003C4}{\muptau }{\mathalpha}{small tau, greek}% -\UnicodeMathSymbol{"003C5}{\mupupsilon }{\mathalpha}{small upsilon, greek}% -\UnicodeMathSymbol{"003C6}{\mupvarphi }{\mathalpha}{curly or open small phi, greek}% -\UnicodeMathSymbol{"003C7}{\mupchi }{\mathalpha}{small chi, greek}% -\UnicodeMathSymbol{"003C8}{\muppsi }{\mathalpha}{small psi, greek}% -\UnicodeMathSymbol{"003C9}{\mupomega }{\mathalpha}{small omega, greek}% -\UnicodeMathSymbol{"003D1}{\mupvartheta }{\mathalpha}{/vartheta - curly or open theta}% -\UnicodeMathSymbol{"003D5}{\mupphi }{\mathalpha}{/straightphi - small phi, greek}% -\UnicodeMathSymbol{"003D6}{\mupvarpi }{\mathalpha}{rounded small pi (pomega), greek}% -\UnicodeMathSymbol{"003DC}{\upDigamma }{\mathalpha}{capital digamma}% -\UnicodeMathSymbol{"003DD}{\updigamma }{\mathalpha}{old greek small letter digamma}% -\UnicodeMathSymbol{"003F0}{\mupvarkappa }{\mathalpha}{rounded small kappa, greek}% -\UnicodeMathSymbol{"003F1}{\mupvarrho }{\mathalpha}{rounded small rho, greek}% -\UnicodeMathSymbol{"003F4}{\mupvarTheta }{\mathalpha}{greek capital theta symbol}% -\UnicodeMathSymbol{"003F5}{\mupepsilon }{\mathalpha}{greek lunate varepsilon symbol}% -\UnicodeMathSymbol{"003F6}{\upbackepsilon }{\mathord}{greek reversed lunate epsilon symbol}% -\UnicodeMathSymbol{"02010}{\mathhyphen }{\mathalpha}{hyphen}% -\UnicodeMathSymbol{"02015}{\horizbar }{\mathord}{horizontal bar}% -\UnicodeMathSymbol{"02016}{\Vert }{\mathfence}{double vertical bar}% -\UnicodeMathSymbol{"02017}{\twolowline }{\mathord}{double low line (spacing)}% -\UnicodeMathSymbol{"02020}{\dagger }{\mathbin}{dagger relation}% -\UnicodeMathSymbol{"02021}{\ddagger }{\mathbin}{double dagger relation}% -\UnicodeMathSymbol{"02022}{\smblkcircle }{\mathbin}{/bullet b: round bullet, filled}% -\UnicodeMathSymbol{"02025}{\enleadertwodots }{\mathord}{double baseline dot (en leader)}% -\UnicodeMathSymbol{"02026}{\unicodeellipsis }{\mathord}{ellipsis (horizontal)}% -\UnicodeMathSymbol{"02032}{\prime }{\mathord}{prime or minute, not superscripted}% -\UnicodeMathSymbol{"02033}{\dprime }{\mathord}{double prime or second, not superscripted}% -\UnicodeMathSymbol{"02034}{\trprime }{\mathord}{triple prime (not superscripted)}% -\UnicodeMathSymbol{"02035}{\backprime }{\mathord}{reverse prime, not superscripted}% -\UnicodeMathSymbol{"02036}{\backdprime }{\mathord}{double reverse prime, not superscripted}% -\UnicodeMathSymbol{"02037}{\backtrprime }{\mathord}{triple reverse prime, not superscripted}% -\UnicodeMathSymbol{"02038}{\caretinsert }{\mathord}{caret (insertion mark)}% -\UnicodeMathSymbol{"0203C}{\Exclam }{\mathord}{double exclamation mark}% -\UnicodeMathSymbol{"02040}{\tieconcat }{\mathbin}{character tie, z notation sequence concatenation}% -\UnicodeMathSymbol{"02043}{\hyphenbullet }{\mathord}{rectangle, filled (hyphen bullet)}% -\UnicodeMathSymbol{"02044}{\fracslash }{\mathbin}{fraction slash}% -\UnicodeMathSymbol{"02047}{\Question }{\mathord}{double question mark}% -\UnicodeMathSymbol{"02050}{\closure }{\mathrel}{close up}% -\UnicodeMathSymbol{"02057}{\qprime }{\mathord}{quadruple prime, not superscripted}% -\UnicodeMathSymbol{"020AC}{\euro }{\mathord}{euro sign}% -\UnicodeMathSymbol{"020D0}{\leftharpoonaccent }{\mathaccent}{combining left harpoon above}% -\UnicodeMathSymbol{"020D0}{\overleftharpoon }{\mathaccentwide}{combining left harpoon above}% -\UnicodeMathSymbol{"020D1}{\rightharpoonaccent }{\mathaccent}{combining right harpoon above}% -\UnicodeMathSymbol{"020D1}{\overrightharpoon }{\mathaccentwide}{combining right harpoon above}% -\UnicodeMathSymbol{"020D2}{\vertoverlay }{\mathaccent}{combining long vertical line overlay}% -\UnicodeMathSymbol{"020D6}{\overleftarrow }{\mathaccentwide}{combining left arrow above}% -\UnicodeMathSymbol{"020D7}{\overrightarrow }{\mathaccentwide}{combining left arrow above}% -\UnicodeMathSymbol{"020D7}{\vec }{\mathaccent}{combining right arrow above}% -\UnicodeMathSymbol{"020DB}{\dddot }{\mathaccent}{combining three dots above}% -\UnicodeMathSymbol{"020DC}{\ddddot }{\mathaccent}{combining four dots above}% -\UnicodeMathSymbol{"020DD}{\enclosecircle }{\mathord}{combining enclosing circle}% -\UnicodeMathSymbol{"020DE}{\enclosesquare }{\mathord}{combining enclosing square}% -\UnicodeMathSymbol{"020DF}{\enclosediamond }{\mathord}{combining enclosing diamond}% -\UnicodeMathSymbol{"020E1}{\overleftrightarrow }{\mathaccentwide}{combining left right arrow above}% -\UnicodeMathSymbol{"020E4}{\enclosetriangle }{\mathord}{combining enclosing upward pointing triangle}% -\UnicodeMathSymbol{"020E7}{\annuity }{\mathaccent}{combining annuity symbol}% -\UnicodeMathSymbol{"020E8}{\threeunderdot }{\mathbotaccent}{combining triple underdot}% -\UnicodeMathSymbol{"020E9}{\widebridgeabove }{\mathaccent}{combining wide bridge above}% -\UnicodeMathSymbol{"020EC}{\underrightharpoondown }{\mathbotaccentwide}{combining rightwards harpoon with barb downwards}% -\UnicodeMathSymbol{"020ED}{\underleftharpoondown }{\mathbotaccentwide}{combining leftwards harpoon with barb downwards}% -\UnicodeMathSymbol{"020EE}{\underleftarrow }{\mathbotaccentwide}{combining left arrow below}% -\UnicodeMathSymbol{"020EF}{\underrightarrow }{\mathbotaccentwide}{combining right arrow below}% -\UnicodeMathSymbol{"020F0}{\asteraccent }{\mathaccent}{combining asterisk above}% -\UnicodeMathSymbol{"02102}{\BbbC }{\mathalpha}{/bbb c, open face c}% -\UnicodeMathSymbol{"02107}{\Eulerconst }{\mathord}{euler constant}% -\UnicodeMathSymbol{"0210A}{\mscrg }{\mathalpha}{/scr g, script letter g}% -\UnicodeMathSymbol{"0210B}{\mscrH }{\mathalpha}{hamiltonian (script capital h)}% -\UnicodeMathSymbol{"0210C}{\mfrakH }{\mathalpha}{/frak h, upper case h}% -\UnicodeMathSymbol{"0210D}{\BbbH }{\mathalpha}{/bbb h, open face h}% -\UnicodeMathSymbol{"0210E}{\Planckconst }{\mathord}{planck constant}% -\UnicodeMathSymbol{"0210F}{\hslash }{\mathalpha}{/hslash - variant planck's over 2pi}% -\UnicodeMathSymbol{"02110}{\mscrI }{\mathalpha}{/scr i, script letter i}% -\UnicodeMathSymbol{"02111}{\Im }{\mathalpha}{imaginary part}% -\UnicodeMathSymbol{"02112}{\mscrL }{\mathalpha}{lagrangian (script capital l)}% -\UnicodeMathSymbol{"02113}{\ell }{\mathalpha}{cursive small l}% -\UnicodeMathSymbol{"02115}{\BbbN }{\mathalpha}{/bbb n, open face n}% -\UnicodeMathSymbol{"02118}{\wp }{\mathalpha}{weierstrass p}% -\UnicodeMathSymbol{"02119}{\BbbP }{\mathalpha}{/bbb p, open face p}% -\UnicodeMathSymbol{"0211A}{\BbbQ }{\mathalpha}{/bbb q, open face q}% -\UnicodeMathSymbol{"0211B}{\mscrR }{\mathalpha}{/scr r, script letter r}% -\UnicodeMathSymbol{"0211C}{\Re }{\mathalpha}{real part}% -\UnicodeMathSymbol{"0211D}{\BbbR }{\mathalpha}{/bbb r, open face r}% -\UnicodeMathSymbol{"02124}{\BbbZ }{\mathalpha}{/bbb z, open face z}% -\UnicodeMathSymbol{"02127}{\mho }{\mathord}{conductance}% -\UnicodeMathSymbol{"02128}{\mfrakZ }{\mathalpha}{/frak z, upper case z}% -\UnicodeMathSymbol{"02129}{\turnediota }{\mathalpha}{turned iota}% -\UnicodeMathSymbol{"0212B}{\Angstrom }{\mathalpha}{angstrom capital a, ring}% -\UnicodeMathSymbol{"0212C}{\mscrB }{\mathalpha}{bernoulli function (script capital b)}% -\UnicodeMathSymbol{"0212D}{\mfrakC }{\mathalpha}{black-letter capital c}% -\UnicodeMathSymbol{"0212F}{\mscre }{\mathalpha}{/scr e, script letter e}% -\UnicodeMathSymbol{"02130}{\mscrE }{\mathalpha}{/scr e, script letter e}% -\UnicodeMathSymbol{"02131}{\mscrF }{\mathalpha}{/scr f, script letter f}% -\UnicodeMathSymbol{"02132}{\Finv }{\mathord}{turned capital f}% -\UnicodeMathSymbol{"02133}{\mscrM }{\mathalpha}{physics m-matrix (script capital m)}% -\UnicodeMathSymbol{"02134}{\mscro }{\mathalpha}{order of (script small o)}% -\UnicodeMathSymbol{"02135}{\aleph }{\mathalpha}{aleph, hebrew}% -\UnicodeMathSymbol{"02136}{\beth }{\mathalpha}{beth, hebrew}% -\UnicodeMathSymbol{"02137}{\gimel }{\mathalpha}{gimel, hebrew}% -\UnicodeMathSymbol{"02138}{\daleth }{\mathalpha}{daleth, hebrew}% -\UnicodeMathSymbol{"0213C}{\Bbbpi }{\mathord}{double-struck small pi}% -\UnicodeMathSymbol{"0213D}{\Bbbgamma }{\mathalpha}{double-struck small gamma}% -\UnicodeMathSymbol{"0213E}{\BbbGamma }{\mathalpha}{double-struck capital gamma}% -\UnicodeMathSymbol{"0213F}{\BbbPi }{\mathalpha}{double-struck capital pi}% -\UnicodeMathSymbol{"02140}{\Bbbsum }{\mathop}{double-struck n-ary summation}% -\UnicodeMathSymbol{"02141}{\Game }{\mathord}{turned sans-serif capital g}% -\UnicodeMathSymbol{"02142}{\sansLturned }{\mathord}{turned sans-serif capital l}% -\UnicodeMathSymbol{"02143}{\sansLmirrored }{\mathord}{reversed sans-serif capital l}% -\UnicodeMathSymbol{"02144}{\Yup }{\mathord}{turned sans-serif capital y}% -\UnicodeMathSymbol{"02145}{\mitBbbD }{\mathord}{double-struck italic capital d}% -\UnicodeMathSymbol{"02146}{\mitBbbd }{\mathord}{double-struck italic small d}% -\UnicodeMathSymbol{"02147}{\mitBbbe }{\mathord}{double-struck italic small e}% -\UnicodeMathSymbol{"02148}{\mitBbbi }{\mathord}{double-struck italic small i}% -\UnicodeMathSymbol{"02149}{\mitBbbj }{\mathord}{double-struck italic small j}% -\UnicodeMathSymbol{"0214A}{\PropertyLine }{\mathord}{property line}% -\UnicodeMathSymbol{"0214B}{\upand }{\mathbin}{turned ampersand}% -\UnicodeMathSymbol{"02190}{\leftarrow }{\mathrel}{/leftarrow /gets a: leftward arrow}% -\UnicodeMathSymbol{"02191}{\uparrow }{\mathrel}{upward arrow}% -\UnicodeMathSymbol{"02192}{\rightarrow }{\mathrel}{/rightarrow /to a: rightward arrow}% -\UnicodeMathSymbol{"02193}{\downarrow }{\mathrel}{downward arrow}% -\UnicodeMathSymbol{"02194}{\leftrightarrow }{\mathrel}{left and right arrow}% -\UnicodeMathSymbol{"02195}{\updownarrow }{\mathrel}{up and down arrow}% -\UnicodeMathSymbol{"02196}{\nwarrow }{\mathrel}{nw pointing arrow}% -\UnicodeMathSymbol{"02197}{\nearrow }{\mathrel}{ne pointing arrow}% -\UnicodeMathSymbol{"02198}{\searrow }{\mathrel}{se pointing arrow}% -\UnicodeMathSymbol{"02199}{\swarrow }{\mathrel}{sw pointing arrow}% -\UnicodeMathSymbol{"0219A}{\nleftarrow }{\mathrel}{not left arrow}% -\UnicodeMathSymbol{"0219B}{\nrightarrow }{\mathrel}{not right arrow}% -\UnicodeMathSymbol{"0219C}{\leftwavearrow }{\mathrel}{left arrow-wavy}% -\UnicodeMathSymbol{"0219D}{\rightwavearrow }{\mathrel}{right arrow-wavy}% -\UnicodeMathSymbol{"0219E}{\twoheadleftarrow }{\mathrel}{left two-headed arrow}% -\UnicodeMathSymbol{"0219F}{\twoheaduparrow }{\mathrel}{up two-headed arrow}% -\UnicodeMathSymbol{"021A0}{\twoheadrightarrow }{\mathrel}{right two-headed arrow}% -\UnicodeMathSymbol{"021A1}{\twoheaddownarrow }{\mathrel}{down two-headed arrow}% -\UnicodeMathSymbol{"021A2}{\leftarrowtail }{\mathrel}{left arrow-tailed}% -\UnicodeMathSymbol{"021A3}{\rightarrowtail }{\mathrel}{right arrow-tailed}% -\UnicodeMathSymbol{"021A4}{\mapsfrom }{\mathrel}{maps to, leftward}% -\UnicodeMathSymbol{"021A5}{\mapsup }{\mathrel}{maps to, upward}% -\UnicodeMathSymbol{"021A6}{\mapsto }{\mathrel}{maps to, rightward}% -\UnicodeMathSymbol{"021A7}{\mapsdown }{\mathrel}{maps to, downward}% -\UnicodeMathSymbol{"021A8}{\updownarrowbar }{\mathord}{up down arrow with base (perpendicular)}% -\UnicodeMathSymbol{"021A9}{\hookleftarrow }{\mathrel}{left arrow-hooked}% -\UnicodeMathSymbol{"021AA}{\hookrightarrow }{\mathrel}{right arrow-hooked}% -\UnicodeMathSymbol{"021AB}{\looparrowleft }{\mathrel}{left arrow-looped}% -\UnicodeMathSymbol{"021AC}{\looparrowright }{\mathrel}{right arrow-looped}% -\UnicodeMathSymbol{"021AD}{\leftrightsquigarrow }{\mathrel}{left and right arr-wavy}% -\UnicodeMathSymbol{"021AE}{\nleftrightarrow }{\mathrel}{not left and right arrow}% -\UnicodeMathSymbol{"021AF}{\downzigzagarrow }{\mathrel}{downwards zigzag arrow}% -\UnicodeMathSymbol{"021B0}{\Lsh }{\mathrel}{/lsh a:}% -\UnicodeMathSymbol{"021B1}{\Rsh }{\mathrel}{/rsh a:}% -\UnicodeMathSymbol{"021B2}{\Ldsh }{\mathrel}{left down angled arrow}% -\UnicodeMathSymbol{"021B3}{\Rdsh }{\mathrel}{right down angled arrow}% -\UnicodeMathSymbol{"021B4}{\linefeed }{\mathord}{rightwards arrow with corner downwards}% -\UnicodeMathSymbol{"021B5}{\carriagereturn }{\mathord}{downwards arrow with corner leftward = carriage return}% -\UnicodeMathSymbol{"021B6}{\curvearrowleft }{\mathrel}{left curved arrow}% -\UnicodeMathSymbol{"021B7}{\curvearrowright }{\mathrel}{right curved arrow}% -\UnicodeMathSymbol{"021B8}{\barovernorthwestarrow }{\mathord}{north west arrow to long bar}% -\UnicodeMathSymbol{"021B9}{\barleftarrowrightarrowbar}{\mathord}{leftwards arrow to bar over rightwards arrow to bar}% -\UnicodeMathSymbol{"021BA}{\acwopencirclearrow }{\mathord}{anticlockwise open circle arrow}% -\UnicodeMathSymbol{"021BB}{\cwopencirclearrow }{\mathord}{clockwise open circle arrow}% -\UnicodeMathSymbol{"021BC}{\leftharpoonup }{\mathrel}{left harpoon-up}% -\UnicodeMathSymbol{"021BD}{\leftharpoondown }{\mathrel}{left harpoon-down}% -\UnicodeMathSymbol{"021BE}{\upharpoonright }{\mathrel}{/upharpoonright /restriction a: up harpoon-right}% -\UnicodeMathSymbol{"021BF}{\upharpoonleft }{\mathrel}{up harpoon-left}% -\UnicodeMathSymbol{"021C0}{\rightharpoonup }{\mathrel}{right harpoon-up}% -\UnicodeMathSymbol{"021C1}{\rightharpoondown }{\mathrel}{right harpoon-down}% -\UnicodeMathSymbol{"021C2}{\downharpoonright }{\mathrel}{down harpoon-right}% -\UnicodeMathSymbol{"021C3}{\downharpoonleft }{\mathrel}{down harpoon-left}% -\UnicodeMathSymbol{"021C4}{\rightleftarrows }{\mathrel}{right arrow over left arrow}% -\UnicodeMathSymbol{"021C5}{\updownarrows }{\mathrel}{up arrow, down arrow}% -\UnicodeMathSymbol{"021C6}{\leftrightarrows }{\mathrel}{left arrow over right arrow}% -\UnicodeMathSymbol{"021C7}{\leftleftarrows }{\mathrel}{two left arrows}% -\UnicodeMathSymbol{"021C8}{\upuparrows }{\mathrel}{two up arrows}% -\UnicodeMathSymbol{"021C9}{\rightrightarrows }{\mathrel}{two right arrows}% -\UnicodeMathSymbol{"021CA}{\downdownarrows }{\mathrel}{two down arrows}% -\UnicodeMathSymbol{"021CB}{\leftrightharpoons }{\mathrel}{left harpoon over right}% -\UnicodeMathSymbol{"021CC}{\rightleftharpoons }{\mathrel}{right harpoon over left}% -\UnicodeMathSymbol{"021CD}{\nLeftarrow }{\mathrel}{not implied by}% -\UnicodeMathSymbol{"021CE}{\nLeftrightarrow }{\mathrel}{not left and right double arrows}% -\UnicodeMathSymbol{"021CF}{\nRightarrow }{\mathrel}{not implies}% -\UnicodeMathSymbol{"021D0}{\Leftarrow }{\mathrel}{is implied by}% -\UnicodeMathSymbol{"021D1}{\Uparrow }{\mathrel}{up double arrow}% -\UnicodeMathSymbol{"021D2}{\Rightarrow }{\mathrel}{implies}% -\UnicodeMathSymbol{"021D3}{\Downarrow }{\mathrel}{down double arrow}% -\UnicodeMathSymbol{"021D4}{\Leftrightarrow }{\mathrel}{left and right double arrow}% -\UnicodeMathSymbol{"021D5}{\Updownarrow }{\mathrel}{up and down double arrow}% -\UnicodeMathSymbol{"021D6}{\Nwarrow }{\mathrel}{nw pointing double arrow}% -\UnicodeMathSymbol{"021D7}{\Nearrow }{\mathrel}{ne pointing double arrow}% -\UnicodeMathSymbol{"021D8}{\Searrow }{\mathrel}{se pointing double arrow}% -\UnicodeMathSymbol{"021D9}{\Swarrow }{\mathrel}{sw pointing double arrow}% -\UnicodeMathSymbol{"021DA}{\Lleftarrow }{\mathrel}{left triple arrow}% -\UnicodeMathSymbol{"021DB}{\Rrightarrow }{\mathrel}{right triple arrow}% -\UnicodeMathSymbol{"021DC}{\leftsquigarrow }{\mathrel}{leftwards squiggle arrow}% -\UnicodeMathSymbol{"021DD}{\rightsquigarrow }{\mathrel}{rightwards squiggle arrow}% -\UnicodeMathSymbol{"021DE}{\nHuparrow }{\mathord}{upwards arrow with double stroke}% -\UnicodeMathSymbol{"021DF}{\nHdownarrow }{\mathord}{downwards arrow with double stroke}% -\UnicodeMathSymbol{"021E0}{\leftdasharrow }{\mathord}{leftwards dashed arrow}% -\UnicodeMathSymbol{"021E1}{\updasharrow }{\mathord}{upwards dashed arrow}% -\UnicodeMathSymbol{"021E2}{\rightdasharrow }{\mathord}{rightwards dashed arrow}% -\UnicodeMathSymbol{"021E3}{\downdasharrow }{\mathord}{downwards dashed arrow}% -\UnicodeMathSymbol{"021E4}{\barleftarrow }{\mathrel}{leftwards arrow to bar}% -\UnicodeMathSymbol{"021E5}{\rightarrowbar }{\mathrel}{rightwards arrow to bar}% -\UnicodeMathSymbol{"021E6}{\leftwhitearrow }{\mathord}{leftwards white arrow}% -\UnicodeMathSymbol{"021E7}{\upwhitearrow }{\mathord}{upwards white arrow}% -\UnicodeMathSymbol{"021E8}{\rightwhitearrow }{\mathord}{rightwards white arrow}% -\UnicodeMathSymbol{"021E9}{\downwhitearrow }{\mathord}{downwards white arrow}% -\UnicodeMathSymbol{"021EA}{\whitearrowupfrombar }{\mathord}{upwards white arrow from bar}% -\UnicodeMathSymbol{"021F4}{\circleonrightarrow }{\mathrel}{right arrow with small circle}% -\UnicodeMathSymbol{"021F5}{\downuparrows }{\mathrel}{downwards arrow leftwards of upwards arrow}% -\UnicodeMathSymbol{"021F6}{\rightthreearrows }{\mathrel}{three rightwards arrows}% -\UnicodeMathSymbol{"021F7}{\nvleftarrow }{\mathrel}{leftwards arrow with vertical stroke}% -\UnicodeMathSymbol{"021F8}{\nvrightarrow }{\mathrel}{rightwards arrow with vertical stroke}% -\UnicodeMathSymbol{"021F9}{\nvleftrightarrow }{\mathrel}{left right arrow with vertical stroke}% -\UnicodeMathSymbol{"021FA}{\nVleftarrow }{\mathrel}{leftwards arrow with double vertical stroke}% -\UnicodeMathSymbol{"021FB}{\nVrightarrow }{\mathrel}{rightwards arrow with double vertical stroke}% -\UnicodeMathSymbol{"021FC}{\nVleftrightarrow }{\mathrel}{left right arrow with double vertical stroke}% -\UnicodeMathSymbol{"021FD}{\leftarrowtriangle }{\mathrel}{leftwards open-headed arrow}% -\UnicodeMathSymbol{"021FE}{\rightarrowtriangle }{\mathrel}{rightwards open-headed arrow}% -\UnicodeMathSymbol{"021FF}{\leftrightarrowtriangle }{\mathrel}{left right open-headed arrow}% -\UnicodeMathSymbol{"02200}{\forall }{\mathord}{for all}% -\UnicodeMathSymbol{"02201}{\complement }{\mathord}{complement sign}% -\UnicodeMathSymbol{"02202}{\partial }{\mathalpha}{partial differential}% -\UnicodeMathSymbol{"02203}{\exists }{\mathord}{at least one exists}% -\UnicodeMathSymbol{"02204}{\nexists }{\mathord}{negated exists}% -\UnicodeMathSymbol{"02205}{\varnothing }{\mathord}{circle, slash}% -\UnicodeMathSymbol{"02206}{\increment }{\mathord}{laplacian (delta; nabla\string^2)}% -\UnicodeMathSymbol{"02207}{\nabla }{\mathalpha}{nabla, del, hamilton operator}% -\UnicodeMathSymbol{"02208}{\in }{\mathrel}{set membership, variant}% -\UnicodeMathSymbol{"02209}{\notin }{\mathrel}{negated set membership}% -\UnicodeMathSymbol{"0220A}{\smallin }{\mathrel}{set membership (small set membership)}% -\UnicodeMathSymbol{"0220B}{\ni }{\mathrel}{contains, variant}% -\UnicodeMathSymbol{"0220C}{\nni }{\mathrel}{negated contains, variant}% -\UnicodeMathSymbol{"0220D}{\smallni }{\mathrel}{/ni /owns r: contains (small contains as member)}% -\UnicodeMathSymbol{"0220E}{\QED }{\mathord}{end of proof}% -\UnicodeMathSymbol{"0220F}{\prod }{\mathop}{product operator}% -\UnicodeMathSymbol{"02210}{\coprod }{\mathop}{coproduct operator}% -\UnicodeMathSymbol{"02211}{\sum }{\mathop}{summation operator}% -\UnicodeMathSymbol{"02212}{\minus }{\mathbin}{minus sign}% -\UnicodeMathSymbol{"02213}{\mp }{\mathbin}{minus-or-plus sign}% -\UnicodeMathSymbol{"02214}{\dotplus }{\mathbin}{plus sign, dot above}% -\UnicodeMathSymbol{"02215}{\divslash }{\mathbin}{division slash}% -\UnicodeMathSymbol{"02216}{\smallsetminus }{\mathbin}{small set minus (cf. reverse solidus)}% -\UnicodeMathSymbol{"02217}{\ast }{\mathbin}{centered asterisk}% -\UnicodeMathSymbol{"02218}{\vysmwhtcircle }{\mathbin}{composite function (small circle)}% -\UnicodeMathSymbol{"02219}{\vysmblkcircle }{\mathbin}{bullet operator}% -\UnicodeMathSymbol{"0221A}{\sqrt }{\mathopen}{radical}% -\UnicodeMathSymbol{"0221A}{\surd }{\mathord}{radical}% -\UnicodeMathSymbol{"0221B}{\cuberoot }{\mathopen}{cube root}% -\UnicodeMathSymbol{"0221C}{\fourthroot }{\mathopen}{fourth root}% -\UnicodeMathSymbol{"0221D}{\propto }{\mathrel}{is proportional to}% -\UnicodeMathSymbol{"0221E}{\infty }{\mathord}{infinity}% -\UnicodeMathSymbol{"0221F}{\rightangle }{\mathord}{right (90 degree) angle}% -\UnicodeMathSymbol{"02220}{\angle }{\mathord}{angle}% -\UnicodeMathSymbol{"02221}{\measuredangle }{\mathord}{angle-measured}% -\UnicodeMathSymbol{"02222}{\sphericalangle }{\mathord}{angle-spherical}% -\UnicodeMathSymbol{"02223}{\mid }{\mathrel}{/mid r:}% -\UnicodeMathSymbol{"02224}{\nmid }{\mathrel}{negated mid}% -\UnicodeMathSymbol{"02225}{\parallel }{\mathrel}{parallel}% -\UnicodeMathSymbol{"02226}{\nparallel }{\mathrel}{not parallel}% -\UnicodeMathSymbol{"02227}{\wedge }{\mathbin}{/wedge /land b: logical and}% -\UnicodeMathSymbol{"02228}{\vee }{\mathbin}{/vee /lor b: logical or}% -\UnicodeMathSymbol{"02229}{\cap }{\mathbin}{intersection}% -\UnicodeMathSymbol{"0222A}{\cup }{\mathbin}{union or logical sum}% -\UnicodeMathSymbol{"0222B}{\int }{\mathop}{integral operator}% -\UnicodeMathSymbol{"0222C}{\iint }{\mathop}{double integral operator}% -\UnicodeMathSymbol{"0222D}{\iiint }{\mathop}{triple integral operator}% -\UnicodeMathSymbol{"0222E}{\oint }{\mathop}{contour integral operator}% -\UnicodeMathSymbol{"0222F}{\oiint }{\mathop}{double contour integral operator}% -\UnicodeMathSymbol{"02230}{\oiiint }{\mathop}{triple contour integral operator}% -\UnicodeMathSymbol{"02231}{\intclockwise }{\mathop}{clockwise integral}% -\UnicodeMathSymbol{"02232}{\varointclockwise }{\mathop}{contour integral, clockwise}% -\UnicodeMathSymbol{"02233}{\ointctrclockwise }{\mathop}{contour integral, anticlockwise}% -\UnicodeMathSymbol{"02234}{\therefore }{\mathord}{therefore}% -\UnicodeMathSymbol{"02235}{\because }{\mathord}{because}% -\UnicodeMathSymbol{"02236}{\mathratio }{\mathrel}{ratio}% -\UnicodeMathSymbol{"02237}{\Colon }{\mathrel}{two colons}% -\UnicodeMathSymbol{"02238}{\dotminus }{\mathbin}{minus sign, dot above}% -\UnicodeMathSymbol{"02239}{\dashcolon }{\mathrel}{excess (-:)}% -\UnicodeMathSymbol{"0223A}{\dotsminusdots }{\mathrel}{minus with four dots, geometric properties}% -\UnicodeMathSymbol{"0223B}{\kernelcontraction }{\mathrel}{homothetic}% -\UnicodeMathSymbol{"0223C}{\sim }{\mathrel}{similar}% -\UnicodeMathSymbol{"0223D}{\backsim }{\mathrel}{reverse similar}% -\UnicodeMathSymbol{"0223E}{\invlazys }{\mathbin}{most positive [inverted lazy s]}% -\UnicodeMathSymbol{"0223F}{\sinewave }{\mathord}{sine wave}% -\UnicodeMathSymbol{"02240}{\wr }{\mathbin}{wreath product}% -\UnicodeMathSymbol{"02241}{\nsim }{\mathrel}{not similar}% -\UnicodeMathSymbol{"02242}{\eqsim }{\mathrel}{equals, similar}% -\UnicodeMathSymbol{"02243}{\simeq }{\mathrel}{similar, equals}% -\UnicodeMathSymbol{"02244}{\nsime }{\mathrel}{not similar, equals}% -\UnicodeMathSymbol{"02243}{\sime }{\mathrel}{similar, equals (alias)}% -\UnicodeMathSymbol{"02244}{\nsimeq }{\mathrel}{not similar, equals (alias)}% -\UnicodeMathSymbol{"02245}{\cong }{\mathrel}{congruent with}% -\UnicodeMathSymbol{"02246}{\simneqq }{\mathrel}{similar, not equals [vert only for 9573 entity]}% -\UnicodeMathSymbol{"02247}{\ncong }{\mathrel}{not congruent with}% -\UnicodeMathSymbol{"02248}{\approx }{\mathrel}{approximate}% -\UnicodeMathSymbol{"02249}{\napprox }{\mathrel}{not approximate}% -\UnicodeMathSymbol{"0224A}{\approxeq }{\mathrel}{approximate, equals}% -\UnicodeMathSymbol{"0224B}{\approxident }{\mathrel}{approximately identical to}% -\UnicodeMathSymbol{"0224C}{\backcong }{\mathrel}{all equal to}% -\UnicodeMathSymbol{"0224D}{\asymp }{\mathrel}{asymptotically equal to}% -\UnicodeMathSymbol{"0224E}{\Bumpeq }{\mathrel}{bumpy equals}% -\UnicodeMathSymbol{"0224F}{\bumpeq }{\mathrel}{bumpy equals, equals}% -\UnicodeMathSymbol{"02250}{\doteq }{\mathrel}{equals, single dot above}% -\UnicodeMathSymbol{"02251}{\Doteq }{\mathrel}{/doteqdot /doteq r: equals, even dots}% -\UnicodeMathSymbol{"02252}{\fallingdotseq }{\mathrel}{equals, falling dots}% -\UnicodeMathSymbol{"02253}{\risingdotseq }{\mathrel}{equals, rising dots}% -\UnicodeMathSymbol{"02254}{\coloneq }{\mathrel}{colon, equals}% -\UnicodeMathSymbol{"02255}{\eqcolon }{\mathrel}{equals, colon}% -\UnicodeMathSymbol{"02256}{\eqcirc }{\mathrel}{circle on equals sign}% -\UnicodeMathSymbol{"02257}{\circeq }{\mathrel}{circle, equals}% -\UnicodeMathSymbol{"02258}{\arceq }{\mathrel}{arc, equals; corresponds to}% -\UnicodeMathSymbol{"02259}{\wedgeq }{\mathrel}{corresponds to (wedge, equals)}% -\UnicodeMathSymbol{"0225A}{\veeeq }{\mathrel}{logical or, equals}% -\UnicodeMathSymbol{"0225B}{\stareq }{\mathrel}{star equals}% -\UnicodeMathSymbol{"0225C}{\triangleq }{\mathrel}{triangle, equals}% -\UnicodeMathSymbol{"0225D}{\eqdef }{\mathrel}{equals by definition}% -\UnicodeMathSymbol{"0225E}{\measeq }{\mathrel}{measured by (m over equals)}% -\UnicodeMathSymbol{"0225F}{\questeq }{\mathrel}{equal with questionmark}% -\UnicodeMathSymbol{"02260}{\ne }{\mathrel}{/ne /neq r: not equal}% -\UnicodeMathSymbol{"02261}{\equiv }{\mathrel}{identical with}% -\UnicodeMathSymbol{"02262}{\nequiv }{\mathrel}{not identical with}% -\UnicodeMathSymbol{"02263}{\Equiv }{\mathrel}{strict equivalence (4 lines)}% -\UnicodeMathSymbol{"02264}{\leq }{\mathrel}{/leq /le r: less-than-or-equal}% -\UnicodeMathSymbol{"02265}{\geq }{\mathrel}{/geq /ge r: greater-than-or-equal}% -\UnicodeMathSymbol{"02266}{\leqq }{\mathrel}{less, double equals}% -\UnicodeMathSymbol{"02267}{\geqq }{\mathrel}{greater, double equals}% -\UnicodeMathSymbol{"02268}{\lneqq }{\mathrel}{less, not double equals}% -\UnicodeMathSymbol{"02269}{\gneqq }{\mathrel}{greater, not double equals}% -\UnicodeMathSymbol{"0226A}{\ll }{\mathrel}{much less than, type 2}% -\UnicodeMathSymbol{"0226B}{\gg }{\mathrel}{much greater than, type 2}% -\UnicodeMathSymbol{"0226C}{\between }{\mathrel}{between}% -\UnicodeMathSymbol{"0226D}{\nasymp }{\mathrel}{not asymptotically equal to}% -\UnicodeMathSymbol{"0226E}{\nless }{\mathrel}{not less-than}% -\UnicodeMathSymbol{"0226F}{\ngtr }{\mathrel}{not greater-than}% -\UnicodeMathSymbol{"02270}{\nleq }{\mathrel}{not less-than-or-equal}% -\UnicodeMathSymbol{"02271}{\ngeq }{\mathrel}{not greater-than-or-equal}% -\UnicodeMathSymbol{"02272}{\lesssim }{\mathrel}{less, similar}% -\UnicodeMathSymbol{"02273}{\gtrsim }{\mathrel}{greater, similar}% -\UnicodeMathSymbol{"02274}{\nlesssim }{\mathrel}{not less, similar}% -\UnicodeMathSymbol{"02275}{\ngtrsim }{\mathrel}{not greater, similar}% -\UnicodeMathSymbol{"02276}{\lessgtr }{\mathrel}{less, greater}% -\UnicodeMathSymbol{"02277}{\gtrless }{\mathrel}{greater, less}% -\UnicodeMathSymbol{"02278}{\nlessgtr }{\mathrel}{not less, greater}% -\UnicodeMathSymbol{"02279}{\ngtrless }{\mathrel}{not greater, less}% -\UnicodeMathSymbol{"0227A}{\prec }{\mathrel}{precedes}% -\UnicodeMathSymbol{"0227B}{\succ }{\mathrel}{succeeds}% -\UnicodeMathSymbol{"0227C}{\preccurlyeq }{\mathrel}{precedes, curly equals}% -\UnicodeMathSymbol{"0227D}{\succcurlyeq }{\mathrel}{succeeds, curly equals}% -\UnicodeMathSymbol{"0227E}{\precsim }{\mathrel}{precedes, similar}% -\UnicodeMathSymbol{"0227F}{\succsim }{\mathrel}{succeeds, similar}% -\UnicodeMathSymbol{"02280}{\nprec }{\mathrel}{not precedes}% -\UnicodeMathSymbol{"02281}{\nsucc }{\mathrel}{not succeeds}% -\UnicodeMathSymbol{"02282}{\subset }{\mathrel}{subset or is implied by}% -\UnicodeMathSymbol{"02283}{\supset }{\mathrel}{superset or implies}% -\UnicodeMathSymbol{"02284}{\nsubset }{\mathrel}{not subset, variant [slash negation]}% -\UnicodeMathSymbol{"02285}{\nsupset }{\mathrel}{not superset, variant [slash negation]}% -\UnicodeMathSymbol{"02286}{\subseteq }{\mathrel}{subset, equals}% -\UnicodeMathSymbol{"02287}{\supseteq }{\mathrel}{superset, equals}% -\UnicodeMathSymbol{"02288}{\nsubseteq }{\mathrel}{not subset, equals}% -\UnicodeMathSymbol{"02289}{\nsupseteq }{\mathrel}{not superset, equals}% -\UnicodeMathSymbol{"0228A}{\subsetneq }{\mathrel}{subset, not equals}% -\UnicodeMathSymbol{"0228B}{\supsetneq }{\mathrel}{superset, not equals}% -\UnicodeMathSymbol{"0228C}{\cupleftarrow }{\mathbin}{multiset}% -\UnicodeMathSymbol{"0228D}{\cupdot }{\mathbin}{union, with dot}% -\UnicodeMathSymbol{"0228E}{\uplus }{\mathbin}{plus sign in union}% -\UnicodeMathSymbol{"0228F}{\sqsubset }{\mathrel}{square subset}% -\UnicodeMathSymbol{"02290}{\sqsupset }{\mathrel}{square superset}% -\UnicodeMathSymbol{"02291}{\sqsubseteq }{\mathrel}{square subset, equals}% -\UnicodeMathSymbol{"02292}{\sqsupseteq }{\mathrel}{square superset, equals}% -\UnicodeMathSymbol{"02293}{\sqcap }{\mathbin}{square intersection}% -\UnicodeMathSymbol{"02294}{\sqcup }{\mathbin}{square union}% -\UnicodeMathSymbol{"02295}{\oplus }{\mathbin}{plus sign in circle}% -\UnicodeMathSymbol{"02296}{\ominus }{\mathbin}{minus sign in circle}% -\UnicodeMathSymbol{"02297}{\otimes }{\mathbin}{multiply sign in circle}% -\UnicodeMathSymbol{"02298}{\oslash }{\mathbin}{solidus in circle}% -\UnicodeMathSymbol{"02299}{\odot }{\mathbin}{middle dot in circle}% -\UnicodeMathSymbol{"0229A}{\circledcirc }{\mathbin}{small circle in circle}% -\UnicodeMathSymbol{"0229B}{\circledast }{\mathbin}{asterisk in circle}% -\UnicodeMathSymbol{"0229C}{\circledequal }{\mathbin}{equal in circle}% -\UnicodeMathSymbol{"0229D}{\circleddash }{\mathbin}{hyphen in circle}% -\UnicodeMathSymbol{"0229E}{\boxplus }{\mathbin}{plus sign in box}% -\UnicodeMathSymbol{"0229F}{\boxminus }{\mathbin}{minus sign in box}% -\UnicodeMathSymbol{"022A0}{\boxtimes }{\mathbin}{multiply sign in box}% -\UnicodeMathSymbol{"022A1}{\boxdot }{\mathbin}{/dotsquare /boxdot b: small dot in box}% -\UnicodeMathSymbol{"022A2}{\vdash }{\mathrel}{vertical, dash}% -\UnicodeMathSymbol{"022A3}{\dashv }{\mathrel}{dash, vertical}% -\UnicodeMathSymbol{"022A4}{\top }{\mathord}{top}% -\UnicodeMathSymbol{"022A5}{\bot }{\mathord}{bottom}% -\UnicodeMathSymbol{"022A6}{\assert }{\mathrel}{assertion (vertical, short dash)}% -\UnicodeMathSymbol{"022A7}{\models }{\mathrel}{models (vertical, short double dash)}% -\UnicodeMathSymbol{"022A8}{\vDash }{\mathrel}{vertical, double dash}% -\UnicodeMathSymbol{"022A9}{\Vdash }{\mathrel}{double vertical, dash}% -\UnicodeMathSymbol{"022AA}{\Vvdash }{\mathrel}{triple vertical, dash}% -\UnicodeMathSymbol{"022AB}{\VDash }{\mathrel}{double vert, double dash}% -\UnicodeMathSymbol{"022AC}{\nvdash }{\mathrel}{not vertical, dash}% -\UnicodeMathSymbol{"022AD}{\nvDash }{\mathrel}{not vertical, double dash}% -\UnicodeMathSymbol{"022AE}{\nVdash }{\mathrel}{not double vertical, dash}% -\UnicodeMathSymbol{"022AF}{\nVDash }{\mathrel}{not double vert, double dash}% -\UnicodeMathSymbol{"022B0}{\prurel }{\mathrel}{element precedes under relation}% -\UnicodeMathSymbol{"022B1}{\scurel }{\mathrel}{succeeds under relation}% -\UnicodeMathSymbol{"022B2}{\vartriangleleft }{\mathrel}{left triangle, open, variant}% -\UnicodeMathSymbol{"022B3}{\vartriangleright }{\mathrel}{right triangle, open, variant}% -\UnicodeMathSymbol{"022B4}{\trianglelefteq }{\mathrel}{left triangle, equals}% -\UnicodeMathSymbol{"022B5}{\trianglerighteq }{\mathrel}{right triangle, equals}% -\UnicodeMathSymbol{"022B6}{\origof }{\mathrel}{original of}% -\UnicodeMathSymbol{"022B7}{\imageof }{\mathrel}{image of}% -\UnicodeMathSymbol{"022B8}{\multimap }{\mathrel}{/multimap a:}% -\UnicodeMathSymbol{"022B9}{\hermitmatrix }{\mathord}{hermitian conjugate matrix}% -\UnicodeMathSymbol{"022BA}{\intercal }{\mathbin}{intercal}% -\UnicodeMathSymbol{"022BB}{\veebar }{\mathbin}{logical or, bar below (large vee); exclusive disjunction}% -\UnicodeMathSymbol{"022BC}{\barwedge }{\mathbin}{bar, wedge (large wedge)}% -\UnicodeMathSymbol{"022BD}{\barvee }{\mathbin}{bar, vee (large vee)}% -\UnicodeMathSymbol{"022BE}{\measuredrightangle }{\mathord}{right angle-measured [with arc]}% -\UnicodeMathSymbol{"022BF}{\varlrtriangle }{\mathord}{right triangle}% -\UnicodeMathSymbol{"022C0}{\bigwedge }{\mathop}{logical and operator}% -\UnicodeMathSymbol{"022C1}{\bigvee }{\mathop}{logical or operator}% -\UnicodeMathSymbol{"022C2}{\bigcap }{\mathop}{intersection operator}% -\UnicodeMathSymbol{"022C3}{\bigcup }{\mathop}{union operator}% -\UnicodeMathSymbol{"022C4}{\smwhtdiamond }{\mathbin}{white diamond}% -\UnicodeMathSymbol{"022C5}{\cdot }{\mathbin}{small middle dot}% -\UnicodeMathSymbol{"022C6}{\star }{\mathbin}{small star, filled, low}% -\UnicodeMathSymbol{"022C7}{\divideontimes }{\mathbin}{division on times}% -\UnicodeMathSymbol{"022C8}{\bowtie }{\mathrel}{bowtie}% -\UnicodeMathSymbol{"022C9}{\ltimes }{\mathbin}{times sign, left closed}% -\UnicodeMathSymbol{"022CA}{\rtimes }{\mathbin}{times sign, right closed}% -\UnicodeMathSymbol{"022CB}{\leftthreetimes }{\mathbin}{left semidirect product}% -\UnicodeMathSymbol{"022CC}{\rightthreetimes }{\mathbin}{right semidirect product}% -\UnicodeMathSymbol{"022CD}{\backsimeq }{\mathrel}{reverse similar, equals}% -\UnicodeMathSymbol{"022CE}{\curlyvee }{\mathbin}{curly logical or}% -\UnicodeMathSymbol{"022CF}{\curlywedge }{\mathbin}{curly logical and}% -\UnicodeMathSymbol{"022D0}{\Subset }{\mathrel}{double subset}% -\UnicodeMathSymbol{"022D1}{\Supset }{\mathrel}{double superset}% -\UnicodeMathSymbol{"022D2}{\Cap }{\mathbin}{/cap /doublecap b: double intersection}% -\UnicodeMathSymbol{"022D3}{\Cup }{\mathbin}{/cup /doublecup b: double union}% -\UnicodeMathSymbol{"022D4}{\pitchfork }{\mathrel}{pitchfork}% -\UnicodeMathSymbol{"022D5}{\equalparallel }{\mathrel}{parallel, equal; equal or parallel}% -\UnicodeMathSymbol{"022D6}{\lessdot }{\mathrel}{less than, with dot}% -\UnicodeMathSymbol{"022D7}{\gtrdot }{\mathrel}{greater than, with dot}% -\UnicodeMathSymbol{"022D8}{\lll }{\mathrel}{/ll /lll /llless r: triple less-than}% -\UnicodeMathSymbol{"022D9}{\ggg }{\mathrel}{/ggg /gg /gggtr r: triple greater-than}% -\UnicodeMathSymbol{"022DA}{\lesseqgtr }{\mathrel}{less, equals, greater}% -\UnicodeMathSymbol{"022DB}{\gtreqless }{\mathrel}{greater, equals, less}% -\UnicodeMathSymbol{"022DC}{\eqless }{\mathrel}{equal-or-less}% -\UnicodeMathSymbol{"022DD}{\eqgtr }{\mathrel}{equal-or-greater}% -\UnicodeMathSymbol{"022DE}{\curlyeqprec }{\mathrel}{curly equals, precedes}% -\UnicodeMathSymbol{"022DF}{\curlyeqsucc }{\mathrel}{curly equals, succeeds}% -\UnicodeMathSymbol{"022E0}{\npreccurlyeq }{\mathrel}{not precedes, curly equals}% -\UnicodeMathSymbol{"022E1}{\nsucccurlyeq }{\mathrel}{not succeeds, curly equals}% -\UnicodeMathSymbol{"022E2}{\nsqsubseteq }{\mathrel}{not, square subset, equals}% -\UnicodeMathSymbol{"022E3}{\nsqsupseteq }{\mathrel}{not, square superset, equals}% -\UnicodeMathSymbol{"022E4}{\sqsubsetneq }{\mathrel}{square subset, not equals}% -\UnicodeMathSymbol{"022E5}{\sqsupsetneq }{\mathrel}{square superset, not equals}% -\UnicodeMathSymbol{"022E6}{\lnsim }{\mathrel}{less, not similar}% -\UnicodeMathSymbol{"022E7}{\gnsim }{\mathrel}{greater, not similar}% -\UnicodeMathSymbol{"022E8}{\precnsim }{\mathrel}{precedes, not similar}% -\UnicodeMathSymbol{"022E9}{\succnsim }{\mathrel}{succeeds, not similar}% -\UnicodeMathSymbol{"022EA}{\nvartriangleleft }{\mathrel}{not left triangle}% -\UnicodeMathSymbol{"022EB}{\nvartriangleright }{\mathrel}{not right triangle}% -\UnicodeMathSymbol{"022EC}{\ntrianglelefteq }{\mathrel}{not left triangle, equals}% -\UnicodeMathSymbol{"022ED}{\ntrianglerighteq }{\mathrel}{not right triangle, equals}% -\UnicodeMathSymbol{"022EE}{\unicodevdots }{\mathrel}{vertical ellipsis}% -\UnicodeMathSymbol{"022EF}{\unicodecdots }{\mathord}{three dots, centered}% -\UnicodeMathSymbol{"022F0}{\unicodeadots }{\mathrel}{three dots, ascending}% -\UnicodeMathSymbol{"022F1}{\unicodeddots }{\mathrel}{three dots, descending}% -\UnicodeMathSymbol{"022F2}{\disin }{\mathrel}{element of with long horizontal stroke}% -\UnicodeMathSymbol{"022F3}{\varisins }{\mathrel}{element of with vertical bar at end of horizontal stroke}% -\UnicodeMathSymbol{"022F4}{\isins }{\mathrel}{small element of with vertical bar at end of horizontal stroke}% -\UnicodeMathSymbol{"022F5}{\isindot }{\mathrel}{element of with dot above}% -\UnicodeMathSymbol{"022F6}{\varisinobar }{\mathrel}{element of with overbar}% -\UnicodeMathSymbol{"022F7}{\isinobar }{\mathrel}{small element of with overbar}% -\UnicodeMathSymbol{"022F8}{\isinvb }{\mathrel}{element of with underbar}% -\UnicodeMathSymbol{"022F9}{\isinE }{\mathrel}{element of with two horizontal strokes}% -\UnicodeMathSymbol{"022FA}{\nisd }{\mathrel}{contains with long horizontal stroke}% -\UnicodeMathSymbol{"022FB}{\varnis }{\mathrel}{contains with vertical bar at end of horizontal stroke}% -\UnicodeMathSymbol{"022FC}{\nis }{\mathrel}{small contains with vertical bar at end of horizontal stroke}% -\UnicodeMathSymbol{"022FD}{\varniobar }{\mathrel}{contains with overbar}% -\UnicodeMathSymbol{"022FE}{\niobar }{\mathrel}{small contains with overbar}% -\UnicodeMathSymbol{"022FF}{\bagmember }{\mathrel}{z notation bag membership}% -\UnicodeMathSymbol{"02300}{\diameter }{\mathord}{diameter sign}% -\UnicodeMathSymbol{"02302}{\house }{\mathord}{house}% -\UnicodeMathSymbol{"02305}{\varbarwedge }{\mathbin}{/barwedge b: logical and, bar above [projective (bar over small wedge)]}% -\UnicodeMathSymbol{"02306}{\vardoublebarwedge }{\mathbin}{/doublebarwedge b: logical and, double bar above [perspective (double bar over small wedge)]}% -\UnicodeMathSymbol{"02308}{\lceil }{\mathopen}{left ceiling}% -\UnicodeMathSymbol{"02309}{\rceil }{\mathclose}{right ceiling}% -\UnicodeMathSymbol{"0230A}{\lfloor }{\mathopen}{left floor}% -\UnicodeMathSymbol{"0230B}{\rfloor }{\mathclose}{right floor}% -\UnicodeMathSymbol{"02310}{\invnot }{\mathord}{reverse not}% -\UnicodeMathSymbol{"02311}{\sqlozenge }{\mathord}{square lozenge}% -\UnicodeMathSymbol{"02312}{\profline }{\mathord}{profile of a line}% -\UnicodeMathSymbol{"02313}{\profsurf }{\mathord}{profile of a surface}% -\UnicodeMathSymbol{"02317}{\viewdata }{\mathord}{viewdata square}% -\UnicodeMathSymbol{"02319}{\turnednot }{\mathord}{turned not sign}% -\UnicodeMathSymbol{"0231C}{\ulcorner }{\mathopen}{upper left corner}% -\UnicodeMathSymbol{"0231D}{\urcorner }{\mathclose}{upper right corner}% -\UnicodeMathSymbol{"0231E}{\llcorner }{\mathopen}{lower left corner}% -\UnicodeMathSymbol{"0231F}{\lrcorner }{\mathclose}{lower right corner}% -\UnicodeMathSymbol{"02320}{\inttop }{\mathord}{top half integral}% -\UnicodeMathSymbol{"02321}{\intbottom }{\mathord}{bottom half integral}% -\UnicodeMathSymbol{"02322}{\frown }{\mathrel}{down curve}% -\UnicodeMathSymbol{"02323}{\smile }{\mathrel}{up curve}% -\UnicodeMathSymbol{"0232C}{\varhexagonlrbonds }{\mathord}{six carbon ring, corner down, double bonds lower right etc}% -\UnicodeMathSymbol{"02332}{\conictaper }{\mathord}{conical taper }% -\UnicodeMathSymbol{"02336}{\topbot }{\mathord}{top and bottom}% -\UnicodeMathSymbol{"0233D}{\obar }{\mathbin}{circle with vertical bar}% -\UnicodeMathSymbol{"0233F}{\APLnotslash }{\mathrel}{solidus, bar through (apl functional symbol slash bar)}% -\UnicodeMathSymbol{"02340}{\APLnotbackslash }{\mathord}{apl functional symbol backslash bar}% -\UnicodeMathSymbol{"02353}{\APLboxupcaret }{\mathord}{boxed up caret}% -\UnicodeMathSymbol{"02370}{\APLboxquestion }{\mathord}{boxed question mark}% -\UnicodeMathSymbol{"0237C}{\rangledownzigzagarrow }{\mathord}{right angle with downwards zigzag arrow}% -\UnicodeMathSymbol{"02394}{\hexagon }{\mathord}{horizontal benzene ring [hexagon flat open]}% -\UnicodeMathSymbol{"0239B}{\lparenuend }{\mathord}{left parenthesis upper hook}% -\UnicodeMathSymbol{"0239C}{\lparenextender }{\mathord}{left parenthesis extension}% -\UnicodeMathSymbol{"0239D}{\lparenlend }{\mathord}{left parenthesis lower hook}% -\UnicodeMathSymbol{"0239E}{\rparenuend }{\mathord}{right parenthesis upper hook}% -\UnicodeMathSymbol{"0239F}{\rparenextender }{\mathord}{right parenthesis extension}% -\UnicodeMathSymbol{"023A0}{\rparenlend }{\mathord}{right parenthesis lower hook}% -\UnicodeMathSymbol{"023A1}{\lbrackuend }{\mathord}{left square bracket upper corner}% -\UnicodeMathSymbol{"023A2}{\lbrackextender }{\mathord}{left square bracket extension}% -\UnicodeMathSymbol{"023A3}{\lbracklend }{\mathord}{left square bracket lower corner}% -\UnicodeMathSymbol{"023A4}{\rbrackuend }{\mathord}{right square bracket upper corner}% -\UnicodeMathSymbol{"023A5}{\rbrackextender }{\mathord}{right square bracket extension}% -\UnicodeMathSymbol{"023A6}{\rbracklend }{\mathord}{right square bracket lower corner}% -\UnicodeMathSymbol{"023A7}{\lbraceuend }{\mathord}{left curly bracket upper hook}% -\UnicodeMathSymbol{"023A8}{\lbracemid }{\mathord}{left curly bracket middle piece}% -\UnicodeMathSymbol{"023A9}{\lbracelend }{\mathord}{left curly bracket lower hook}% -\UnicodeMathSymbol{"023AA}{\vbraceextender }{\mathord}{curly bracket extension}% -\UnicodeMathSymbol{"023AB}{\rbraceuend }{\mathord}{right curly bracket upper hook}% -\UnicodeMathSymbol{"023AC}{\rbracemid }{\mathord}{right curly bracket middle piece}% -\UnicodeMathSymbol{"023AD}{\rbracelend }{\mathord}{right curly bracket lower hook}% -\UnicodeMathSymbol{"023AE}{\intextender }{\mathord}{integral extension}% -\UnicodeMathSymbol{"023AF}{\harrowextender }{\mathord}{horizontal line extension (used to extend arrows)}% -\UnicodeMathSymbol{"023B0}{\lmoustache }{\mathopen}{upper left or lower right curly bracket section}% -\UnicodeMathSymbol{"023B1}{\rmoustache }{\mathclose}{upper right or lower left curly bracket section}% -\UnicodeMathSymbol{"023B2}{\sumtop }{\mathord}{summation top}% -\UnicodeMathSymbol{"023B3}{\sumbottom }{\mathord}{summation bottom}% -\UnicodeMathSymbol{"023B4}{\overbracket }{\mathover}{top square bracket}% -\UnicodeMathSymbol{"023B5}{\underbracket }{\mathunder}{bottom square bracket}% -\UnicodeMathSymbol{"023B6}{\bbrktbrk }{\mathord}{bottom square bracket over top square bracket}% -\UnicodeMathSymbol{"023B7}{\sqrtbottom }{\mathord}{radical symbol bottom}% -\UnicodeMathSymbol{"023B8}{\lvboxline }{\mathord}{left vertical box line}% -\UnicodeMathSymbol{"023B9}{\rvboxline }{\mathord}{right vertical box line}% -\UnicodeMathSymbol{"023CE}{\varcarriagereturn }{\mathord}{return symbol}% -\UnicodeMathSymbol{"023DC}{\overparen }{\mathover}{top parenthesis (mathematical use)}% -\UnicodeMathSymbol{"023DD}{\underparen }{\mathunder}{bottom parenthesis (mathematical use)}% -\UnicodeMathSymbol{"023DE}{\overbrace }{\mathover}{top curly bracket (mathematical use)}% -\UnicodeMathSymbol{"023DF}{\underbrace }{\mathunder}{bottom curly bracket (mathematical use)}% -\UnicodeMathSymbol{"023E0}{\obrbrak }{\mathord}{top tortoise shell bracket (mathematical use)}% -\UnicodeMathSymbol{"023E1}{\ubrbrak }{\mathord}{bottom tortoise shell bracket (mathematical use)}% -\UnicodeMathSymbol{"023E2}{\trapezium }{\mathord}{white trapezium}% -\UnicodeMathSymbol{"023E3}{\benzenr }{\mathord}{benzene ring with circle}% -\UnicodeMathSymbol{"023E4}{\strns }{\mathord}{straightness}% -\UnicodeMathSymbol{"023E5}{\fltns }{\mathord}{flatness}% -\UnicodeMathSymbol{"023E6}{\accurrent }{\mathord}{ac current}% -\UnicodeMathSymbol{"023E7}{\elinters }{\mathord}{electrical intersection}% -\UnicodeMathSymbol{"02422}{\blanksymbol }{\mathord}{blank symbol}% -\UnicodeMathSymbol{"02423}{\mathvisiblespace }{\mathord}{open box}% -\UnicodeMathSymbol{"02506}{\bdtriplevdash }{\mathord}{doubly broken vert}% -\UnicodeMathSymbol{"02580}{\blockuphalf }{\mathord}{upper half block}% -\UnicodeMathSymbol{"02584}{\blocklowhalf }{\mathord}{lower half block}% -\UnicodeMathSymbol{"02588}{\blockfull }{\mathord}{full block}% -\UnicodeMathSymbol{"0258C}{\blocklefthalf }{\mathord}{left half block}% -\UnicodeMathSymbol{"02590}{\blockrighthalf }{\mathord}{right half block}% -\UnicodeMathSymbol{"02591}{\blockqtrshaded }{\mathord}{25\% shaded block}% -\UnicodeMathSymbol{"02592}{\blockhalfshaded }{\mathord}{50\% shaded block}% -\UnicodeMathSymbol{"02593}{\blockthreeqtrshaded }{\mathord}{75\% shaded block}% -\UnicodeMathSymbol{"025A0}{\mdlgblksquare }{\mathord}{square, filled}% -\UnicodeMathSymbol{"025A1}{\mdlgwhtsquare }{\mathord}{square, open}% -\UnicodeMathSymbol{"025A2}{\squoval }{\mathord}{white square with rounded corners}% -\UnicodeMathSymbol{"025A3}{\blackinwhitesquare }{\mathord}{white square containing black small square}% -\UnicodeMathSymbol{"025A4}{\squarehfill }{\mathord}{square, horizontal rule filled}% -\UnicodeMathSymbol{"025A5}{\squarevfill }{\mathord}{square, vertical rule filled}% -\UnicodeMathSymbol{"025A6}{\squarehvfill }{\mathord}{square with orthogonal crosshatch fill}% -\UnicodeMathSymbol{"025A7}{\squarenwsefill }{\mathord}{square, nw-to-se rule filled}% -\UnicodeMathSymbol{"025A8}{\squareneswfill }{\mathord}{square, ne-to-sw rule filled}% -\UnicodeMathSymbol{"025A9}{\squarecrossfill }{\mathord}{square with diagonal crosshatch fill}% -\UnicodeMathSymbol{"025AA}{\smblksquare }{\mathord}{/blacksquare - sq bullet, filled}% -\UnicodeMathSymbol{"025AB}{\smwhtsquare }{\mathord}{white small square}% -\UnicodeMathSymbol{"025AC}{\hrectangleblack }{\mathord}{black rectangle}% -\UnicodeMathSymbol{"025AD}{\hrectangle }{\mathord}{horizontal rectangle, open}% -\UnicodeMathSymbol{"025AE}{\vrectangleblack }{\mathord}{black vertical rectangle}% -\UnicodeMathSymbol{"025AF}{\vrectangle }{\mathord}{rectangle, white (vertical)}% -\UnicodeMathSymbol{"025B0}{\parallelogramblack }{\mathord}{black parallelogram}% -\UnicodeMathSymbol{"025B1}{\parallelogram }{\mathord}{parallelogram, open}% -\UnicodeMathSymbol{"025B2}{\bigblacktriangleup }{\mathord}{black up-pointing triangle}% -\UnicodeMathSymbol{"025B3}{\bigtriangleup }{\mathbin}{big up triangle, open}% -\UnicodeMathSymbol{"025B4}{\blacktriangle }{\mathord}{up triangle, filled}% -\UnicodeMathSymbol{"025B5}{\vartriangle }{\mathrel}{/triangle - up triangle, open}% -\UnicodeMathSymbol{"025B6}{\blacktriangleright }{\mathord}{(large) right triangle, filled}% -\UnicodeMathSymbol{"025B7}{\triangleright }{\mathbin}{(large) right triangle, open; z notation range restriction}% -\UnicodeMathSymbol{"025B8}{\smallblacktriangleright }{\mathord}{right triangle, filled}% -\UnicodeMathSymbol{"025B9}{\smalltriangleright }{\mathord}{right triangle, open}% -\UnicodeMathSymbol{"025BA}{\blackpointerright }{\mathord}{black right-pointing pointer}% -\UnicodeMathSymbol{"025BB}{\whitepointerright }{\mathord}{white right-pointing pointer}% -\UnicodeMathSymbol{"025BC}{\bigblacktriangledown }{\mathord}{big down triangle, filled}% -\UnicodeMathSymbol{"025BD}{\bigtriangledown }{\mathord}{big down triangle, open}% -\UnicodeMathSymbol{"025BE}{\blacktriangledown }{\mathord}{down triangle, filled}% -\UnicodeMathSymbol{"025BF}{\triangledown }{\mathord}{down triangle, open}% -\UnicodeMathSymbol{"025C0}{\blacktriangleleft }{\mathord}{(large) left triangle, filled}% -\UnicodeMathSymbol{"025C1}{\triangleleft }{\mathbin}{(large) left triangle, open; z notation domain restriction}% -\UnicodeMathSymbol{"025C2}{\smallblacktriangleleft }{\mathord}{left triangle, filled}% -\UnicodeMathSymbol{"025C3}{\smalltriangleleft }{\mathord}{left triangle, open}% -\UnicodeMathSymbol{"025C4}{\blackpointerleft }{\mathord}{black left-pointing pointer}% -\UnicodeMathSymbol{"025C5}{\whitepointerleft }{\mathord}{white left-pointing pointer}% -\UnicodeMathSymbol{"025C6}{\mdlgblkdiamond }{\mathord}{black diamond}% -\UnicodeMathSymbol{"025C7}{\mdlgwhtdiamond }{\mathord}{white diamond; diamond, open}% -\UnicodeMathSymbol{"025C8}{\blackinwhitediamond }{\mathord}{white diamond containing black small diamond}% -\UnicodeMathSymbol{"025C9}{\fisheye }{\mathord}{fisheye}% -\UnicodeMathSymbol{"025CA}{\mdlgwhtlozenge }{\mathord}{lozenge or total mark}% -\UnicodeMathSymbol{"025CB}{\mdlgwhtcircle }{\mathbin}{medium large circle}% -\UnicodeMathSymbol{"025CC}{\dottedcircle }{\mathord}{dotted circle}% -\UnicodeMathSymbol{"025CD}{\circlevertfill }{\mathord}{circle with vertical fill}% -\UnicodeMathSymbol{"025CE}{\bullseye }{\mathord}{bullseye}% -\UnicodeMathSymbol{"025CF}{\mdlgblkcircle }{\mathord}{circle, filled}% -\UnicodeMathSymbol{"025D0}{\circlelefthalfblack }{\mathord}{circle, filled left half [harvey ball]}% -\UnicodeMathSymbol{"025D1}{\circlerighthalfblack }{\mathord}{circle, filled right half}% -\UnicodeMathSymbol{"025D2}{\circlebottomhalfblack }{\mathord}{circle, filled bottom half}% -\UnicodeMathSymbol{"025D3}{\circletophalfblack }{\mathord}{circle, filled top half}% -\UnicodeMathSymbol{"025D4}{\circleurquadblack }{\mathord}{circle with upper right quadrant black}% -\UnicodeMathSymbol{"025D5}{\blackcircleulquadwhite }{\mathord}{circle with all but upper left quadrant black}% -\UnicodeMathSymbol{"025D6}{\blacklefthalfcircle }{\mathord}{left half black circle}% -\UnicodeMathSymbol{"025D7}{\blackrighthalfcircle }{\mathord}{right half black circle}% -\UnicodeMathSymbol{"025D8}{\inversebullet }{\mathord}{inverse bullet }% -\UnicodeMathSymbol{"025D9}{\inversewhitecircle }{\mathord}{inverse white circle}% -\UnicodeMathSymbol{"025DA}{\invwhiteupperhalfcircle }{\mathord}{upper half inverse white circle}% -\UnicodeMathSymbol{"025DB}{\invwhitelowerhalfcircle }{\mathord}{lower half inverse white circle}% -\UnicodeMathSymbol{"025DC}{\ularc }{\mathord}{upper left quadrant circular arc}% -\UnicodeMathSymbol{"025DD}{\urarc }{\mathord}{upper right quadrant circular arc}% -\UnicodeMathSymbol{"025DE}{\lrarc }{\mathord}{lower right quadrant circular arc}% -\UnicodeMathSymbol{"025DF}{\llarc }{\mathord}{lower left quadrant circular arc}% -\UnicodeMathSymbol{"025E0}{\topsemicircle }{\mathord}{upper half circle}% -\UnicodeMathSymbol{"025E1}{\botsemicircle }{\mathord}{lower half circle}% -\UnicodeMathSymbol{"025E2}{\lrblacktriangle }{\mathord}{lower right triangle, filled}% -\UnicodeMathSymbol{"025E3}{\llblacktriangle }{\mathord}{lower left triangle, filled}% -\UnicodeMathSymbol{"025E4}{\ulblacktriangle }{\mathord}{upper left triangle, filled}% -\UnicodeMathSymbol{"025E5}{\urblacktriangle }{\mathord}{upper right triangle, filled}% -\UnicodeMathSymbol{"025E6}{\smwhtcircle }{\mathord}{white bullet}% -\UnicodeMathSymbol{"025E7}{\squareleftblack }{\mathord}{square, filled left half}% -\UnicodeMathSymbol{"025E8}{\squarerightblack }{\mathord}{square, filled right half}% -\UnicodeMathSymbol{"025E9}{\squareulblack }{\mathord}{square, filled top left corner}% -\UnicodeMathSymbol{"025EA}{\squarelrblack }{\mathord}{square, filled bottom right corner}% -\UnicodeMathSymbol{"025EB}{\boxbar }{\mathbin}{vertical bar in box}% -\UnicodeMathSymbol{"025EC}{\trianglecdot }{\mathord}{triangle with centered dot}% -\UnicodeMathSymbol{"025ED}{\triangleleftblack }{\mathord}{up-pointing triangle with left half black}% -\UnicodeMathSymbol{"025EE}{\trianglerightblack }{\mathord}{up-pointing triangle with right half black}% -\UnicodeMathSymbol{"025EF}{\lgwhtcircle }{\mathord}{large circle}% -\UnicodeMathSymbol{"025F0}{\squareulquad }{\mathord}{white square with upper left quadrant}% -\UnicodeMathSymbol{"025F1}{\squarellquad }{\mathord}{white square with lower left quadrant}% -\UnicodeMathSymbol{"025F2}{\squarelrquad }{\mathord}{white square with lower right quadrant}% -\UnicodeMathSymbol{"025F3}{\squareurquad }{\mathord}{white square with upper right quadrant}% -\UnicodeMathSymbol{"025F4}{\circleulquad }{\mathord}{white circle with upper left quadrant}% -\UnicodeMathSymbol{"025F5}{\circlellquad }{\mathord}{white circle with lower left quadrant}% -\UnicodeMathSymbol{"025F6}{\circlelrquad }{\mathord}{white circle with lower right quadrant}% -\UnicodeMathSymbol{"025F7}{\circleurquad }{\mathord}{white circle with upper right quadrant}% -\UnicodeMathSymbol{"025F8}{\ultriangle }{\mathord}{upper left triangle}% -\UnicodeMathSymbol{"025F9}{\urtriangle }{\mathord}{upper right triangle}% -\UnicodeMathSymbol{"025FA}{\lltriangle }{\mathord}{lower left triangle}% -\UnicodeMathSymbol{"025FB}{\mdwhtsquare }{\mathord}{white medium square}% -\UnicodeMathSymbol{"025FC}{\mdblksquare }{\mathord}{black medium square}% -\UnicodeMathSymbol{"025FD}{\mdsmwhtsquare }{\mathord}{white medium small square}% -\UnicodeMathSymbol{"025FE}{\mdsmblksquare }{\mathord}{black medium small square}% -\UnicodeMathSymbol{"025FF}{\lrtriangle }{\mathord}{lower right triangle}% -\UnicodeMathSymbol{"02605}{\bigstar }{\mathord}{star, filled}% -\UnicodeMathSymbol{"02606}{\bigwhitestar }{\mathord}{star, open}% -\UnicodeMathSymbol{"02609}{\astrosun }{\mathord}{sun}% -\UnicodeMathSymbol{"02621}{\danger }{\mathord}{dangerous bend (caution sign)}% -\UnicodeMathSymbol{"0263B}{\blacksmiley }{\mathord}{black smiling face}% -\UnicodeMathSymbol{"0263C}{\sun }{\mathord}{white sun with rays}% -\UnicodeMathSymbol{"0263D}{\rightmoon }{\mathord}{first quarter moon}% -\UnicodeMathSymbol{"0263E}{\leftmoon }{\mathord}{last quarter moon}% -\UnicodeMathSymbol{"02640}{\female }{\mathord}{venus, female}% -\UnicodeMathSymbol{"02642}{\male }{\mathord}{mars, male}% -\UnicodeMathSymbol{"02660}{\spadesuit }{\mathord}{spades suit symbol}% -\UnicodeMathSymbol{"02661}{\heartsuit }{\mathord}{heart suit symbol}% -\UnicodeMathSymbol{"02662}{\diamondsuit }{\mathord}{diamond suit symbol}% -\UnicodeMathSymbol{"02663}{\clubsuit }{\mathord}{club suit symbol}% -\UnicodeMathSymbol{"02664}{\varspadesuit }{\mathord}{spade, white (card suit)}% -\UnicodeMathSymbol{"02665}{\varheartsuit }{\mathord}{filled heart (card suit)}% -\UnicodeMathSymbol{"02666}{\vardiamondsuit }{\mathord}{filled diamond (card suit)}% -\UnicodeMathSymbol{"02667}{\varclubsuit }{\mathord}{club, white (card suit)}% -\UnicodeMathSymbol{"02669}{\quarternote }{\mathord}{music note (sung text sign)}% -\UnicodeMathSymbol{"0266A}{\eighthnote }{\mathord}{eighth note}% -\UnicodeMathSymbol{"0266B}{\twonotes }{\mathord}{beamed eighth notes}% -\UnicodeMathSymbol{"0266D}{\flat }{\mathord}{musical flat}% -\UnicodeMathSymbol{"0266E}{\natural }{\mathord}{music natural}% -\UnicodeMathSymbol{"0266F}{\sharp }{\mathord}{musical sharp}% -\UnicodeMathSymbol{"0267E}{\acidfree }{\mathord}{permanent paper sign}% -\UnicodeMathSymbol{"02680}{\dicei }{\mathord}{die face-1}% -\UnicodeMathSymbol{"02681}{\diceii }{\mathord}{die face-2}% -\UnicodeMathSymbol{"02682}{\diceiii }{\mathord}{die face-3}% -\UnicodeMathSymbol{"02683}{\diceiv }{\mathord}{die face-4}% -\UnicodeMathSymbol{"02684}{\dicev }{\mathord}{die face-5}% -\UnicodeMathSymbol{"02685}{\dicevi }{\mathord}{die face-6}% -\UnicodeMathSymbol{"02686}{\circledrightdot }{\mathord}{white circle with dot right}% -\UnicodeMathSymbol{"02687}{\circledtwodots }{\mathord}{white circle with two dots}% -\UnicodeMathSymbol{"02688}{\blackcircledrightdot }{\mathord}{black circle with white dot right}% -\UnicodeMathSymbol{"02689}{\blackcircledtwodots }{\mathord}{black circle with two white dots}% -\UnicodeMathSymbol{"026A5}{\Hermaphrodite }{\mathord}{male and female sign}% -\UnicodeMathSymbol{"026AA}{\mdwhtcircle }{\mathord}{medium white circle}% -\UnicodeMathSymbol{"026AB}{\mdblkcircle }{\mathord}{medium black circle}% -\UnicodeMathSymbol{"026AC}{\mdsmwhtcircle }{\mathord}{medium small white circle}% -\UnicodeMathSymbol{"026B2}{\neuter }{\mathord}{neuter}% -\UnicodeMathSymbol{"02713}{\checkmark }{\mathord}{tick, check mark}% -\UnicodeMathSymbol{"02720}{\maltese }{\mathord}{maltese cross}% -\UnicodeMathSymbol{"0272A}{\circledstar }{\mathord}{circled white star}% -\UnicodeMathSymbol{"02736}{\varstar }{\mathord}{six pointed black star}% -\UnicodeMathSymbol{"0273D}{\dingasterisk }{\mathord}{heavy teardrop-spoked asterisk}% -\UnicodeMathSymbol{"02772}{\lbrbrak }{\mathopen}{light left tortoise shell bracket ornament}% -\UnicodeMathSymbol{"02773}{\rbrbrak }{\mathclose}{light right tortoise shell bracket ornament}% -\UnicodeMathSymbol{"0279B}{\draftingarrow }{\mathord}{right arrow with bold head (drafting)}% -\UnicodeMathSymbol{"027C0}{\threedangle }{\mathord}{three dimensional angle}% -\UnicodeMathSymbol{"027C1}{\whiteinwhitetriangle }{\mathord}{white triangle containing small white triangle}% -\UnicodeMathSymbol{"027C2}{\perp }{\mathrel}{perpendicular}% -\UnicodeMathSymbol{"027C3}{\subsetcirc }{\mathord}{open subset}% -\UnicodeMathSymbol{"027C4}{\supsetcirc }{\mathord}{open superset}% -\UnicodeMathSymbol{"027C5}{\lbag }{\mathopen}{left s-shaped bag delimiter}% -\UnicodeMathSymbol{"027C6}{\rbag }{\mathclose}{right s-shaped bag delimiter}% -\UnicodeMathSymbol{"027C7}{\veedot }{\mathbin}{or with dot inside}% -\UnicodeMathSymbol{"027C8}{\bsolhsub }{\mathrel}{reverse solidus preceding subset}% -\UnicodeMathSymbol{"027C9}{\suphsol }{\mathrel}{superset preceding solidus}% -\UnicodeMathSymbol{"027CC}{\longdivision }{\mathopen}{long division}% -\UnicodeMathSymbol{"027D0}{\diamondcdot }{\mathord}{white diamond with centred dot}% -\UnicodeMathSymbol{"027D1}{\wedgedot }{\mathbin}{and with dot}% -\UnicodeMathSymbol{"027D2}{\upin }{\mathrel}{element of opening upwards}% -\UnicodeMathSymbol{"027D3}{\pullback }{\mathrel}{lower right corner with dot}% -\UnicodeMathSymbol{"027D4}{\pushout }{\mathrel}{upper left corner with dot}% -\UnicodeMathSymbol{"027D5}{\leftouterjoin }{\mathop}{left outer join}% -\UnicodeMathSymbol{"027D6}{\rightouterjoin }{\mathop}{right outer join}% -\UnicodeMathSymbol{"027D7}{\fullouterjoin }{\mathop}{full outer join}% -\UnicodeMathSymbol{"027D8}{\bigbot }{\mathop}{large up tack}% -\UnicodeMathSymbol{"027D9}{\bigtop }{\mathop}{large down tack}% -\UnicodeMathSymbol{"027DA}{\DashVDash }{\mathrel}{left and right double turnstile}% -\UnicodeMathSymbol{"027DB}{\dashVdash }{\mathrel}{left and right tack}% -\UnicodeMathSymbol{"027DC}{\multimapinv }{\mathrel}{left multimap}% -\UnicodeMathSymbol{"027DD}{\vlongdash }{\mathrel}{long left tack}% -\UnicodeMathSymbol{"027DE}{\longdashv }{\mathrel}{long right tack}% -\UnicodeMathSymbol{"027DF}{\cirbot }{\mathrel}{up tack with circle above}% -\UnicodeMathSymbol{"027E0}{\lozengeminus }{\mathbin}{lozenge divided by horizontal rule}% -\UnicodeMathSymbol{"027E1}{\concavediamond }{\mathbin}{white concave-sided diamond}% -\UnicodeMathSymbol{"027E2}{\concavediamondtickleft }{\mathbin}{white concave-sided diamond with leftwards tick}% -\UnicodeMathSymbol{"027E3}{\concavediamondtickright }{\mathbin}{white concave-sided diamond with rightwards tick}% -\UnicodeMathSymbol{"027E4}{\whitesquaretickleft }{\mathbin}{white square with leftwards tick}% -\UnicodeMathSymbol{"027E5}{\whitesquaretickright }{\mathbin}{white square with rightwards tick}% -\UnicodeMathSymbol{"027E6}{\lBrack }{\mathopen}{mathematical left white square bracket}% -\UnicodeMathSymbol{"027E7}{\rBrack }{\mathclose}{mathematical right white square bracket}% -\UnicodeMathSymbol{"027E8}{\langle }{\mathopen}{mathematical left angle bracket}% -\UnicodeMathSymbol{"027E9}{\rangle }{\mathclose}{mathematical right angle bracket}% -\UnicodeMathSymbol{"027EA}{\lAngle }{\mathopen}{mathematical left double angle bracket}% -\UnicodeMathSymbol{"027EB}{\rAngle }{\mathclose}{mathematical right double angle bracket}% -\UnicodeMathSymbol{"027EC}{\Lbrbrak }{\mathopen}{mathematical left white tortoise shell bracket}% -\UnicodeMathSymbol{"027ED}{\Rbrbrak }{\mathclose}{mathematical right white tortoise shell bracket}% -\UnicodeMathSymbol{"027EE}{\lgroup }{\mathopen}{mathematical left flattened parenthesis}% -\UnicodeMathSymbol{"027EF}{\rgroup }{\mathclose}{mathematical right flattened parenthesis}% -\UnicodeMathSymbol{"027F0}{\UUparrow }{\mathrel}{upwards quadruple arrow}% -\UnicodeMathSymbol{"027F1}{\DDownarrow }{\mathrel}{downwards quadruple arrow}% -\UnicodeMathSymbol{"027F2}{\acwgapcirclearrow }{\mathrel}{anticlockwise gapped circle arrow}% -\UnicodeMathSymbol{"027F3}{\cwgapcirclearrow }{\mathrel}{clockwise gapped circle arrow}% -\UnicodeMathSymbol{"027F4}{\rightarrowonoplus }{\mathrel}{right arrow with circled plus}% -\UnicodeMathSymbol{"027F5}{\longleftarrow }{\mathrel}{long leftwards arrow}% -\UnicodeMathSymbol{"027F6}{\longrightarrow }{\mathrel}{long rightwards arrow}% -\UnicodeMathSymbol{"027F7}{\longleftrightarrow }{\mathrel}{long left right arrow}% -\UnicodeMathSymbol{"027F8}{\Longleftarrow }{\mathrel}{long leftwards double arrow}% -\UnicodeMathSymbol{"027F9}{\Longrightarrow }{\mathrel}{long rightwards double arrow}% -\UnicodeMathSymbol{"027FA}{\Longleftrightarrow }{\mathrel}{long left right double arrow}% -\UnicodeMathSymbol{"027FB}{\longmapsfrom }{\mathrel}{long leftwards arrow from bar}% -\UnicodeMathSymbol{"027FC}{\longmapsto }{\mathrel}{long rightwards arrow from bar}% -\UnicodeMathSymbol{"027FD}{\Longmapsfrom }{\mathrel}{long leftwards double arrow from bar}% -\UnicodeMathSymbol{"027FE}{\Longmapsto }{\mathrel}{long rightwards double arrow from bar}% -\UnicodeMathSymbol{"027FF}{\longrightsquigarrow }{\mathrel}{long rightwards squiggle arrow}% -\UnicodeMathSymbol{"02900}{\nvtwoheadrightarrow }{\mathrel}{rightwards two-headed arrow with vertical stroke}% -\UnicodeMathSymbol{"02901}{\nVtwoheadrightarrow }{\mathrel}{rightwards two-headed arrow with double vertical stroke}% -\UnicodeMathSymbol{"02902}{\nvLeftarrow }{\mathrel}{leftwards double arrow with vertical stroke}% -\UnicodeMathSymbol{"02903}{\nvRightarrow }{\mathrel}{rightwards double arrow with vertical stroke}% -\UnicodeMathSymbol{"02904}{\nvLeftrightarrow }{\mathrel}{left right double arrow with vertical stroke}% -\UnicodeMathSymbol{"02905}{\twoheadmapsto }{\mathrel}{rightwards two-headed arrow from bar}% -\UnicodeMathSymbol{"02906}{\Mapsfrom }{\mathrel}{leftwards double arrow from bar}% -\UnicodeMathSymbol{"02907}{\Mapsto }{\mathrel}{rightwards double arrow from bar}% -\UnicodeMathSymbol{"02908}{\downarrowbarred }{\mathrel}{downwards arrow with horizontal stroke}% -\UnicodeMathSymbol{"02909}{\uparrowbarred }{\mathrel}{upwards arrow with horizontal stroke}% -\UnicodeMathSymbol{"0290A}{\Uuparrow }{\mathrel}{upwards triple arrow}% -\UnicodeMathSymbol{"0290B}{\Ddownarrow }{\mathrel}{downwards triple arrow}% -\UnicodeMathSymbol{"0290C}{\leftbkarrow }{\mathrel}{leftwards double dash arrow}% -\UnicodeMathSymbol{"0290D}{\rightbkarrow }{\mathrel}{rightwards double dash arrow}% -\UnicodeMathSymbol{"0290E}{\leftdbkarrow }{\mathrel}{leftwards triple dash arrow}% -\UnicodeMathSymbol{"0290F}{\dbkarrow }{\mathrel}{rightwards triple dash arrow}% -\UnicodeMathSymbol{"02910}{\drbkarrow }{\mathrel}{rightwards two-headed triple dash arrow}% -\UnicodeMathSymbol{"02911}{\rightdotarrow }{\mathrel}{rightwards arrow with dotted stem}% -\UnicodeMathSymbol{"02912}{\baruparrow }{\mathrel}{upwards arrow to bar}% -\UnicodeMathSymbol{"02913}{\downarrowbar }{\mathrel}{downwards arrow to bar}% -\UnicodeMathSymbol{"02914}{\nvrightarrowtail }{\mathrel}{rightwards arrow with tail with vertical stroke}% -\UnicodeMathSymbol{"02915}{\nVrightarrowtail }{\mathrel}{rightwards arrow with tail with double vertical stroke}% -\UnicodeMathSymbol{"02916}{\twoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail}% -\UnicodeMathSymbol{"02917}{\nvtwoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail with vertical stroke}% -\UnicodeMathSymbol{"02918}{\nVtwoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail with double vertical stroke}% -\UnicodeMathSymbol{"02919}{\lefttail }{\mathrel}{leftwards arrow-tail}% -\UnicodeMathSymbol{"0291A}{\righttail }{\mathrel}{rightwards arrow-tail}% -\UnicodeMathSymbol{"0291B}{\leftdbltail }{\mathrel}{leftwards double arrow-tail}% -\UnicodeMathSymbol{"0291C}{\rightdbltail }{\mathrel}{rightwards double arrow-tail}% -\UnicodeMathSymbol{"0291D}{\diamondleftarrow }{\mathrel}{leftwards arrow to black diamond}% -\UnicodeMathSymbol{"0291E}{\rightarrowdiamond }{\mathrel}{rightwards arrow to black diamond}% -\UnicodeMathSymbol{"0291F}{\diamondleftarrowbar }{\mathrel}{leftwards arrow from bar to black diamond}% -\UnicodeMathSymbol{"02920}{\barrightarrowdiamond }{\mathrel}{rightwards arrow from bar to black diamond}% -\UnicodeMathSymbol{"02921}{\nwsearrow }{\mathrel}{north west and south east arrow}% -\UnicodeMathSymbol{"02922}{\neswarrow }{\mathrel}{north east and south west arrow}% -\UnicodeMathSymbol{"02923}{\hknwarrow }{\mathrel}{north west arrow with hook}% -\UnicodeMathSymbol{"02924}{\hknearrow }{\mathrel}{north east arrow with hook}% -\UnicodeMathSymbol{"02925}{\hksearrow }{\mathrel}{south east arrow with hook}% -\UnicodeMathSymbol{"02926}{\hkswarrow }{\mathrel}{south west arrow with hook}% -\UnicodeMathSymbol{"02927}{\tona }{\mathrel}{north west arrow and north east arrow}% -\UnicodeMathSymbol{"02928}{\toea }{\mathrel}{north east arrow and south east arrow}% -\UnicodeMathSymbol{"02929}{\tosa }{\mathrel}{south east arrow and south west arrow}% -\UnicodeMathSymbol{"0292A}{\towa }{\mathrel}{south west arrow and north west arrow}% -\UnicodeMathSymbol{"0292B}{\rdiagovfdiag }{\mathord}{rising diagonal crossing falling diagonal}% -\UnicodeMathSymbol{"0292C}{\fdiagovrdiag }{\mathord}{falling diagonal crossing rising diagonal}% -\UnicodeMathSymbol{"0292D}{\seovnearrow }{\mathord}{south east arrow crossing north east arrow}% -\UnicodeMathSymbol{"0292E}{\neovsearrow }{\mathord}{north east arrow crossing south east arrow}% -\UnicodeMathSymbol{"0292F}{\fdiagovnearrow }{\mathord}{falling diagonal crossing north east arrow}% -\UnicodeMathSymbol{"02930}{\rdiagovsearrow }{\mathord}{rising diagonal crossing south east arrow}% -\UnicodeMathSymbol{"02931}{\neovnwarrow }{\mathord}{north east arrow crossing north west arrow}% -\UnicodeMathSymbol{"02932}{\nwovnearrow }{\mathord}{north west arrow crossing north east arrow}% -\UnicodeMathSymbol{"02933}{\rightcurvedarrow }{\mathrel}{wave arrow pointing directly right}% -\UnicodeMathSymbol{"02934}{\uprightcurvearrow }{\mathord}{arrow pointing rightwards then curving upwards}% -\UnicodeMathSymbol{"02935}{\downrightcurvedarrow }{\mathord}{arrow pointing rightwards then curving downwards}% -\UnicodeMathSymbol{"02936}{\leftdowncurvedarrow }{\mathrel}{arrow pointing downwards then curving leftwards}% -\UnicodeMathSymbol{"02937}{\rightdowncurvedarrow }{\mathrel}{arrow pointing downwards then curving rightwards}% -\UnicodeMathSymbol{"02938}{\cwrightarcarrow }{\mathrel}{right-side arc clockwise arrow}% -\UnicodeMathSymbol{"02939}{\acwleftarcarrow }{\mathrel}{left-side arc anticlockwise arrow}% -\UnicodeMathSymbol{"0293A}{\acwoverarcarrow }{\mathrel}{top arc anticlockwise arrow}% -\UnicodeMathSymbol{"0293B}{\acwunderarcarrow }{\mathrel}{bottom arc anticlockwise arrow}% -\UnicodeMathSymbol{"0293C}{\curvearrowrightminus }{\mathrel}{top arc clockwise arrow with minus}% -\UnicodeMathSymbol{"0293D}{\curvearrowleftplus }{\mathrel}{top arc anticlockwise arrow with plus}% -\UnicodeMathSymbol{"0293E}{\cwundercurvearrow }{\mathrel}{lower right semicircular clockwise arrow}% -\UnicodeMathSymbol{"0293F}{\ccwundercurvearrow }{\mathrel}{lower left semicircular anticlockwise arrow}% -\UnicodeMathSymbol{"02940}{\acwcirclearrow }{\mathrel}{anticlockwise closed circle arrow}% -\UnicodeMathSymbol{"02941}{\cwcirclearrow }{\mathrel}{clockwise closed circle arrow}% -\UnicodeMathSymbol{"02942}{\rightarrowshortleftarrow }{\mathrel}{rightwards arrow above short leftwards arrow}% -\UnicodeMathSymbol{"02943}{\leftarrowshortrightarrow }{\mathrel}{leftwards arrow above short rightwards arrow}% -\UnicodeMathSymbol{"02944}{\shortrightarrowleftarrow }{\mathrel}{short rightwards arrow above leftwards arrow}% -\UnicodeMathSymbol{"02945}{\rightarrowplus }{\mathrel}{rightwards arrow with plus below}% -\UnicodeMathSymbol{"02946}{\leftarrowplus }{\mathrel}{leftwards arrow with plus below}% -\UnicodeMathSymbol{"02947}{\rightarrowx }{\mathrel}{rightwards arrow through x}% -\UnicodeMathSymbol{"02948}{\leftrightarrowcircle }{\mathrel}{left right arrow through small circle}% -\UnicodeMathSymbol{"02949}{\twoheaduparrowcircle }{\mathrel}{upwards two-headed arrow from small circle}% -\UnicodeMathSymbol{"0294A}{\leftrightharpoonupdown }{\mathrel}{left barb up right barb down harpoon}% -\UnicodeMathSymbol{"0294B}{\leftrightharpoondownup }{\mathrel}{left barb down right barb up harpoon}% -\UnicodeMathSymbol{"0294C}{\updownharpoonrightleft }{\mathrel}{up barb right down barb left harpoon}% -\UnicodeMathSymbol{"0294D}{\updownharpoonleftright }{\mathrel}{up barb left down barb right harpoon}% -\UnicodeMathSymbol{"0294E}{\leftrightharpoonupup }{\mathrel}{left barb up right barb up harpoon}% -\UnicodeMathSymbol{"0294F}{\updownharpoonrightright }{\mathrel}{up barb right down barb right harpoon}% -\UnicodeMathSymbol{"02950}{\leftrightharpoondowndown }{\mathrel}{left barb down right barb down harpoon}% -\UnicodeMathSymbol{"02951}{\updownharpoonleftleft }{\mathrel}{up barb left down barb left harpoon}% -\UnicodeMathSymbol{"02952}{\barleftharpoonup }{\mathrel}{leftwards harpoon with barb up to bar}% -\UnicodeMathSymbol{"02953}{\rightharpoonupbar }{\mathrel}{rightwards harpoon with barb up to bar}% -\UnicodeMathSymbol{"02954}{\barupharpoonright }{\mathrel}{upwards harpoon with barb right to bar}% -\UnicodeMathSymbol{"02955}{\downharpoonrightbar }{\mathrel}{downwards harpoon with barb right to bar}% -\UnicodeMathSymbol{"02956}{\barleftharpoondown }{\mathrel}{leftwards harpoon with barb down to bar}% -\UnicodeMathSymbol{"02957}{\rightharpoondownbar }{\mathrel}{rightwards harpoon with barb down to bar}% -\UnicodeMathSymbol{"02958}{\barupharpoonleft }{\mathrel}{upwards harpoon with barb left to bar}% -\UnicodeMathSymbol{"02959}{\downharpoonleftbar }{\mathrel}{downwards harpoon with barb left to bar}% -\UnicodeMathSymbol{"0295A}{\leftharpoonupbar }{\mathrel}{leftwards harpoon with barb up from bar}% -\UnicodeMathSymbol{"0295B}{\barrightharpoonup }{\mathrel}{rightwards harpoon with barb up from bar}% -\UnicodeMathSymbol{"0295C}{\upharpoonrightbar }{\mathrel}{upwards harpoon with barb right from bar}% -\UnicodeMathSymbol{"0295D}{\bardownharpoonright }{\mathrel}{downwards harpoon with barb right from bar}% -\UnicodeMathSymbol{"0295E}{\leftharpoondownbar }{\mathrel}{leftwards harpoon with barb down from bar}% -\UnicodeMathSymbol{"0295F}{\barrightharpoondown }{\mathrel}{rightwards harpoon with barb down from bar}% -\UnicodeMathSymbol{"02960}{\upharpoonleftbar }{\mathrel}{upwards harpoon with barb left from bar}% -\UnicodeMathSymbol{"02961}{\bardownharpoonleft }{\mathrel}{downwards harpoon with barb left from bar}% -\UnicodeMathSymbol{"02962}{\leftharpoonsupdown }{\mathrel}{leftwards harpoon with barb up above leftwards harpoon with barb down}% -\UnicodeMathSymbol{"02963}{\upharpoonsleftright }{\mathrel}{upwards harpoon with barb left beside upwards harpoon with barb right}% -\UnicodeMathSymbol{"02964}{\rightharpoonsupdown }{\mathrel}{rightwards harpoon with barb up above rightwards harpoon with barb down}% -\UnicodeMathSymbol{"02965}{\downharpoonsleftright }{\mathrel}{downwards harpoon with barb left beside downwards harpoon with barb right}% -\UnicodeMathSymbol{"02966}{\leftrightharpoonsup }{\mathrel}{leftwards harpoon with barb up above rightwards harpoon with barb up}% -\UnicodeMathSymbol{"02967}{\leftrightharpoonsdown }{\mathrel}{leftwards harpoon with barb down above rightwards harpoon with barb down}% -\UnicodeMathSymbol{"02968}{\rightleftharpoonsup }{\mathrel}{rightwards harpoon with barb up above leftwards harpoon with barb up}% -\UnicodeMathSymbol{"02969}{\rightleftharpoonsdown }{\mathrel}{rightwards harpoon with barb down above leftwards harpoon with barb down}% -\UnicodeMathSymbol{"0296A}{\leftharpoonupdash }{\mathrel}{leftwards harpoon with barb up above long dash}% -\UnicodeMathSymbol{"0296B}{\dashleftharpoondown }{\mathrel}{leftwards harpoon with barb down below long dash}% -\UnicodeMathSymbol{"0296C}{\rightharpoonupdash }{\mathrel}{rightwards harpoon with barb up above long dash}% -\UnicodeMathSymbol{"0296D}{\dashrightharpoondown }{\mathrel}{rightwards harpoon with barb down below long dash}% -\UnicodeMathSymbol{"0296E}{\updownharpoonsleftright }{\mathrel}{upwards harpoon with barb left beside downwards harpoon with barb right}% -\UnicodeMathSymbol{"0296F}{\downupharpoonsleftright }{\mathrel}{downwards harpoon with barb left beside upwards harpoon with barb right}% -\UnicodeMathSymbol{"02970}{\rightimply }{\mathrel}{right double arrow with rounded head}% -\UnicodeMathSymbol{"02971}{\equalrightarrow }{\mathrel}{equals sign above rightwards arrow}% -\UnicodeMathSymbol{"02972}{\similarrightarrow }{\mathrel}{tilde operator above rightwards arrow}% -\UnicodeMathSymbol{"02973}{\leftarrowsimilar }{\mathrel}{leftwards arrow above tilde operator}% -\UnicodeMathSymbol{"02974}{\rightarrowsimilar }{\mathrel}{rightwards arrow above tilde operator}% -\UnicodeMathSymbol{"02975}{\rightarrowapprox }{\mathrel}{rightwards arrow above almost equal to}% -\UnicodeMathSymbol{"02976}{\ltlarr }{\mathrel}{less-than above leftwards arrow}% -\UnicodeMathSymbol{"02977}{\leftarrowless }{\mathrel}{leftwards arrow through less-than}% -\UnicodeMathSymbol{"02978}{\gtrarr }{\mathrel}{greater-than above rightwards arrow}% -\UnicodeMathSymbol{"02979}{\subrarr }{\mathrel}{subset above rightwards arrow}% -\UnicodeMathSymbol{"0297A}{\leftarrowsubset }{\mathrel}{leftwards arrow through subset}% -\UnicodeMathSymbol{"0297B}{\suplarr }{\mathrel}{superset above leftwards arrow}% -\UnicodeMathSymbol{"0297C}{\leftfishtail }{\mathrel}{left fish tail}% -\UnicodeMathSymbol{"0297D}{\rightfishtail }{\mathrel}{right fish tail}% -\UnicodeMathSymbol{"0297E}{\upfishtail }{\mathrel}{up fish tail}% -\UnicodeMathSymbol{"0297F}{\downfishtail }{\mathrel}{down fish tail}% -\UnicodeMathSymbol{"02980}{\Vvert }{\mathfence}{triple vertical bar delimiter}% -\UnicodeMathSymbol{"02981}{\mdsmblkcircle }{\mathord}{z notation spot}% -\UnicodeMathSymbol{"02982}{\typecolon }{\mathrel}{z notation type colon}% -\UnicodeMathSymbol{"02983}{\lBrace }{\mathopen}{left white curly bracket}% -\UnicodeMathSymbol{"02984}{\rBrace }{\mathclose}{right white curly bracket}% -\UnicodeMathSymbol{"02985}{\lParen }{\mathopen}{left white parenthesis}% -\UnicodeMathSymbol{"02986}{\rParen }{\mathclose}{right white parenthesis}% -\UnicodeMathSymbol{"02987}{\llparenthesis }{\mathopen}{z notation left image bracket}% -\UnicodeMathSymbol{"02988}{\rrparenthesis }{\mathclose}{z notation right image bracket}% -\UnicodeMathSymbol{"02989}{\llangle }{\mathopen}{z notation left binding bracket}% -\UnicodeMathSymbol{"0298A}{\rrangle }{\mathclose}{z notation right binding bracket}% -\UnicodeMathSymbol{"0298B}{\lbrackubar }{\mathopen}{left square bracket with underbar}% -\UnicodeMathSymbol{"0298C}{\rbrackubar }{\mathclose}{right square bracket with underbar}% -\UnicodeMathSymbol{"0298D}{\lbrackultick }{\mathopen}{left square bracket with tick in top corner}% -\UnicodeMathSymbol{"0298E}{\rbracklrtick }{\mathclose}{right square bracket with tick in bottom corner}% -\UnicodeMathSymbol{"0298F}{\lbracklltick }{\mathopen}{left square bracket with tick in bottom corner}% -\UnicodeMathSymbol{"02990}{\rbrackurtick }{\mathclose}{right square bracket with tick in top corner}% -\UnicodeMathSymbol{"02991}{\langledot }{\mathopen}{left angle bracket with dot}% -\UnicodeMathSymbol{"02992}{\rangledot }{\mathclose}{right angle bracket with dot}% -\UnicodeMathSymbol{"02993}{\lparenless }{\mathopen}{left arc less-than bracket}% -\UnicodeMathSymbol{"02994}{\rparengtr }{\mathclose}{right arc greater-than bracket}% -\UnicodeMathSymbol{"02995}{\Lparengtr }{\mathopen}{double left arc greater-than bracket}% -\UnicodeMathSymbol{"02996}{\Rparenless }{\mathclose}{double right arc less-than bracket}% -\UnicodeMathSymbol{"02997}{\lblkbrbrak }{\mathopen}{left black tortoise shell bracket}% -\UnicodeMathSymbol{"02998}{\rblkbrbrak }{\mathclose}{right black tortoise shell bracket}% -\UnicodeMathSymbol{"02999}{\fourvdots }{\mathord}{dotted fence}% -\UnicodeMathSymbol{"0299A}{\vzigzag }{\mathord}{vertical zigzag line}% -\UnicodeMathSymbol{"0299B}{\measuredangleleft }{\mathord}{measured angle opening left}% -\UnicodeMathSymbol{"0299C}{\rightanglesqr }{\mathord}{right angle variant with square}% -\UnicodeMathSymbol{"0299D}{\rightanglemdot }{\mathord}{measured right angle with dot}% -\UnicodeMathSymbol{"0299E}{\angles }{\mathord}{angle with s inside}% -\UnicodeMathSymbol{"0299F}{\angdnr }{\mathord}{acute angle}% -\UnicodeMathSymbol{"029A0}{\gtlpar }{\mathord}{spherical angle opening left}% -\UnicodeMathSymbol{"029A1}{\sphericalangleup }{\mathord}{spherical angle opening up}% -\UnicodeMathSymbol{"029A2}{\turnangle }{\mathord}{turned angle}% -\UnicodeMathSymbol{"029A3}{\revangle }{\mathord}{reversed angle}% -\UnicodeMathSymbol{"029A4}{\angleubar }{\mathord}{angle with underbar}% -\UnicodeMathSymbol{"029A5}{\revangleubar }{\mathord}{reversed angle with underbar}% -\UnicodeMathSymbol{"029A6}{\wideangledown }{\mathord}{oblique angle opening up}% -\UnicodeMathSymbol{"029A7}{\wideangleup }{\mathord}{oblique angle opening down}% -\UnicodeMathSymbol{"029A8}{\measanglerutone }{\mathord}{measured angle with open arm ending in arrow pointing up and right}% -\UnicodeMathSymbol{"029A9}{\measanglelutonw }{\mathord}{measured angle with open arm ending in arrow pointing up and left}% -\UnicodeMathSymbol{"029AA}{\measanglerdtose }{\mathord}{measured angle with open arm ending in arrow pointing down and right}% -\UnicodeMathSymbol{"029AB}{\measangleldtosw }{\mathord}{measured angle with open arm ending in arrow pointing down and left}% -\UnicodeMathSymbol{"029AC}{\measangleurtone }{\mathord}{measured angle with open arm ending in arrow pointing right and up}% -\UnicodeMathSymbol{"029AD}{\measangleultonw }{\mathord}{measured angle with open arm ending in arrow pointing left and up}% -\UnicodeMathSymbol{"029AE}{\measangledrtose }{\mathord}{measured angle with open arm ending in arrow pointing right and down}% -\UnicodeMathSymbol{"029AF}{\measangledltosw }{\mathord}{measured angle with open arm ending in arrow pointing left and down}% -\UnicodeMathSymbol{"029B0}{\revemptyset }{\mathord}{reversed empty set}% -\UnicodeMathSymbol{"029B1}{\emptysetobar }{\mathord}{empty set with overbar}% -\UnicodeMathSymbol{"029B2}{\emptysetocirc }{\mathord}{empty set with small circle above}% -\UnicodeMathSymbol{"029B3}{\emptysetoarr }{\mathord}{empty set with right arrow above}% -\UnicodeMathSymbol{"029B4}{\emptysetoarrl }{\mathord}{empty set with left arrow above}% -\UnicodeMathSymbol{"029B5}{\circlehbar }{\mathbin}{circle with horizontal bar}% -\UnicodeMathSymbol{"029B6}{\circledvert }{\mathbin}{circled vertical bar}% -\UnicodeMathSymbol{"029B7}{\circledparallel }{\mathbin}{circled parallel}% -\UnicodeMathSymbol{"029B8}{\obslash }{\mathbin}{circled reverse solidus}% -\UnicodeMathSymbol{"029B9}{\operp }{\mathbin}{circled perpendicular}% -\UnicodeMathSymbol{"029BA}{\obot }{\mathord}{circle divided by horizontal bar and top half divided by vertical bar}% -\UnicodeMathSymbol{"029BB}{\olcross }{\mathord}{circle with superimposed x}% -\UnicodeMathSymbol{"029BC}{\odotslashdot }{\mathord}{circled anticlockwise-rotated division sign}% -\UnicodeMathSymbol{"029BD}{\uparrowoncircle }{\mathord}{up arrow through circle}% -\UnicodeMathSymbol{"029BE}{\circledwhitebullet }{\mathord}{circled white bullet}% -\UnicodeMathSymbol{"029BF}{\circledbullet }{\mathord}{circled bullet}% -\UnicodeMathSymbol{"029C0}{\olessthan }{\mathbin}{circled less-than}% -\UnicodeMathSymbol{"029C1}{\ogreaterthan }{\mathbin}{circled greater-than}% -\UnicodeMathSymbol{"029C2}{\cirscir }{\mathord}{circle with small circle to the right}% -\UnicodeMathSymbol{"029C3}{\cirE }{\mathord}{circle with two horizontal strokes to the right}% -\UnicodeMathSymbol{"029C4}{\boxdiag }{\mathbin}{squared rising diagonal slash}% -\UnicodeMathSymbol{"029C5}{\boxbslash }{\mathbin}{squared falling diagonal slash}% -\UnicodeMathSymbol{"029C6}{\boxast }{\mathbin}{squared asterisk}% -\UnicodeMathSymbol{"029C7}{\boxcircle }{\mathbin}{squared small circle}% -\UnicodeMathSymbol{"029C8}{\boxbox }{\mathbin}{squared square}% -\UnicodeMathSymbol{"029C9}{\boxonbox }{\mathord}{two joined squares}% -\UnicodeMathSymbol{"029CA}{\triangleodot }{\mathord}{triangle with dot above}% -\UnicodeMathSymbol{"029CB}{\triangleubar }{\mathord}{triangle with underbar}% -\UnicodeMathSymbol{"029CC}{\triangles }{\mathord}{s in triangle}% -\UnicodeMathSymbol{"029CD}{\triangleserifs }{\mathbin}{triangle with serifs at bottom}% -\UnicodeMathSymbol{"029CE}{\rtriltri }{\mathrel}{right triangle above left triangle}% -\UnicodeMathSymbol{"029CF}{\ltrivb }{\mathrel}{left triangle beside vertical bar}% -\UnicodeMathSymbol{"029D0}{\vbrtri }{\mathrel}{vertical bar beside right triangle}% -\UnicodeMathSymbol{"029D1}{\lfbowtie }{\mathrel}{left black bowtie}% -\UnicodeMathSymbol{"029D2}{\rfbowtie }{\mathrel}{right black bowtie}% -\UnicodeMathSymbol{"029D3}{\fbowtie }{\mathrel}{black bowtie}% -\UnicodeMathSymbol{"029D4}{\lftimes }{\mathrel}{left black times}% -\UnicodeMathSymbol{"029D5}{\rftimes }{\mathrel}{right black times}% -\UnicodeMathSymbol{"029D6}{\hourglass }{\mathbin}{white hourglass}% -\UnicodeMathSymbol{"029D7}{\blackhourglass }{\mathbin}{black hourglass}% -\UnicodeMathSymbol{"029D8}{\lvzigzag }{\mathopen}{left wiggly fence}% -\UnicodeMathSymbol{"029D9}{\rvzigzag }{\mathclose}{right wiggly fence}% -\UnicodeMathSymbol{"029DA}{\Lvzigzag }{\mathopen}{left double wiggly fence}% -\UnicodeMathSymbol{"029DB}{\Rvzigzag }{\mathclose}{right double wiggly fence}% -\UnicodeMathSymbol{"029DC}{\iinfin }{\mathord}{incomplete infinity}% -\UnicodeMathSymbol{"029DD}{\tieinfty }{\mathord}{tie over infinity}% -\UnicodeMathSymbol{"029DE}{\nvinfty }{\mathord}{infinity negated with vertical bar}% -\UnicodeMathSymbol{"029DF}{\dualmap }{\mathrel}{double-ended multimap}% -\UnicodeMathSymbol{"029E0}{\laplac }{\mathord}{square with contoured outline}% -\UnicodeMathSymbol{"029E1}{\lrtriangleeq }{\mathrel}{increases as}% -\UnicodeMathSymbol{"029E2}{\shuffle }{\mathbin}{shuffle product}% -\UnicodeMathSymbol{"029E3}{\eparsl }{\mathrel}{equals sign and slanted parallel}% -\UnicodeMathSymbol{"029E4}{\smeparsl }{\mathrel}{equals sign and slanted parallel with tilde above}% -\UnicodeMathSymbol{"029E5}{\eqvparsl }{\mathrel}{identical to and slanted parallel}% -\UnicodeMathSymbol{"029E6}{\gleichstark }{\mathrel}{gleich stark}% -\UnicodeMathSymbol{"029E7}{\thermod }{\mathord}{thermodynamic}% -\UnicodeMathSymbol{"029E8}{\downtriangleleftblack }{\mathord}{down-pointing triangle with left half black}% -\UnicodeMathSymbol{"029E9}{\downtrianglerightblack }{\mathord}{down-pointing triangle with right half black}% -\UnicodeMathSymbol{"029EA}{\blackdiamonddownarrow }{\mathord}{black diamond with down arrow}% -\UnicodeMathSymbol{"029EB}{\mdlgblklozenge }{\mathbin}{black lozenge}% -\UnicodeMathSymbol{"029EC}{\circledownarrow }{\mathord}{white circle with down arrow}% -\UnicodeMathSymbol{"029ED}{\blackcircledownarrow }{\mathord}{black circle with down arrow}% -\UnicodeMathSymbol{"029EE}{\errbarsquare }{\mathord}{error-barred white square}% -\UnicodeMathSymbol{"029EF}{\errbarblacksquare }{\mathord}{error-barred black square}% -\UnicodeMathSymbol{"029F0}{\errbardiamond }{\mathord}{error-barred white diamond}% -\UnicodeMathSymbol{"029F1}{\errbarblackdiamond }{\mathord}{error-barred black diamond}% -\UnicodeMathSymbol{"029F2}{\errbarcircle }{\mathord}{error-barred white circle}% -\UnicodeMathSymbol{"029F3}{\errbarblackcircle }{\mathord}{error-barred black circle}% -\UnicodeMathSymbol{"029F4}{\ruledelayed }{\mathrel}{rule-delayed}% -\UnicodeMathSymbol{"029F5}{\setminus }{\mathbin}{reverse solidus operator}% -\UnicodeMathSymbol{"029F6}{\dsol }{\mathbin}{solidus with overbar}% -\UnicodeMathSymbol{"029F7}{\rsolbar }{\mathbin}{reverse solidus with horizontal stroke}% -\UnicodeMathSymbol{"029F8}{\xsol }{\mathop}{big solidus}% -\UnicodeMathSymbol{"029F9}{\xbsol }{\mathop}{big reverse solidus}% -\UnicodeMathSymbol{"029FA}{\doubleplus }{\mathbin}{double plus}% -\UnicodeMathSymbol{"029FB}{\tripleplus }{\mathbin}{triple plus}% -\UnicodeMathSymbol{"029FC}{\lcurvyangle }{\mathopen}{left pointing curved angle bracket}% -\UnicodeMathSymbol{"029FD}{\rcurvyangle }{\mathclose}{right pointing curved angle bracket}% -\UnicodeMathSymbol{"029FE}{\tplus }{\mathbin}{tiny}% -\UnicodeMathSymbol{"029FF}{\tminus }{\mathbin}{miny}% -\UnicodeMathSymbol{"02A00}{\bigodot }{\mathop}{n-ary circled dot operator}% -\UnicodeMathSymbol{"02A01}{\bigoplus }{\mathop}{n-ary circled plus operator}% -\UnicodeMathSymbol{"02A02}{\bigotimes }{\mathop}{n-ary circled times operator}% -\UnicodeMathSymbol{"02A03}{\bigcupdot }{\mathop}{n-ary union operator with dot}% -\UnicodeMathSymbol{"02A04}{\biguplus }{\mathop}{n-ary union operator with plus}% -\UnicodeMathSymbol{"02A05}{\bigsqcap }{\mathop}{n-ary square intersection operator}% -\UnicodeMathSymbol{"02A06}{\bigsqcup }{\mathop}{n-ary square union operator}% -\UnicodeMathSymbol{"02A07}{\conjquant }{\mathop}{two logical and operator}% -\UnicodeMathSymbol{"02A08}{\disjquant }{\mathop}{two logical or operator}% -\UnicodeMathSymbol{"02A09}{\bigtimes }{\mathop}{n-ary times operator}% -\UnicodeMathSymbol{"02A0A}{\modtwosum }{\mathop}{modulo two sum}% -\UnicodeMathSymbol{"02A0B}{\sumint }{\mathop}{summation with integral}% -\UnicodeMathSymbol{"02A0C}{\iiiint }{\mathop}{quadruple integral operator}% -\UnicodeMathSymbol{"02A0D}{\intbar }{\mathop}{finite part integral}% -\UnicodeMathSymbol{"02A0E}{\intBar }{\mathop}{integral with double stroke}% -\UnicodeMathSymbol{"02A0F}{\fint }{\mathop}{integral average with slash}% -\UnicodeMathSymbol{"02A10}{\cirfnint }{\mathop}{circulation function}% -\UnicodeMathSymbol{"02A11}{\awint }{\mathop}{anticlockwise integration}% -\UnicodeMathSymbol{"02A12}{\rppolint }{\mathop}{line integration with rectangular path around pole}% -\UnicodeMathSymbol{"02A13}{\scpolint }{\mathop}{line integration with semicircular path around pole}% -\UnicodeMathSymbol{"02A14}{\npolint }{\mathop}{line integration not including the pole}% -\UnicodeMathSymbol{"02A15}{\pointint }{\mathop}{integral around a point operator}% -\UnicodeMathSymbol{"02A16}{\sqint }{\mathop}{quaternion integral operator}% -\UnicodeMathSymbol{"02A17}{\intlarhk }{\mathop}{integral with leftwards arrow with hook}% -\UnicodeMathSymbol{"02A18}{\intx }{\mathop}{integral with times sign}% -\UnicodeMathSymbol{"02A19}{\intcap }{\mathop}{integral with intersection}% -\UnicodeMathSymbol{"02A1A}{\intcup }{\mathop}{integral with union}% -\UnicodeMathSymbol{"02A1B}{\upint }{\mathop}{integral with overbar}% -\UnicodeMathSymbol{"02A1C}{\lowint }{\mathop}{integral with underbar}% -\UnicodeMathSymbol{"02A1D}{\Join }{\mathop}{join}% -\UnicodeMathSymbol{"02A1E}{\bigtriangleleft }{\mathop}{large left triangle operator}% -\UnicodeMathSymbol{"02A1F}{\zcmp }{\mathop}{z notation schema composition}% -\UnicodeMathSymbol{"02A20}{\zpipe }{\mathop}{z notation schema piping}% -\UnicodeMathSymbol{"02A21}{\zproject }{\mathop}{z notation schema projection}% -\UnicodeMathSymbol{"02A22}{\ringplus }{\mathbin}{plus sign with small circle above}% -\UnicodeMathSymbol{"02A23}{\plushat }{\mathbin}{plus sign with circumflex accent above}% -\UnicodeMathSymbol{"02A24}{\simplus }{\mathbin}{plus sign with tilde above}% -\UnicodeMathSymbol{"02A25}{\plusdot }{\mathbin}{plus sign with dot below}% -\UnicodeMathSymbol{"02A26}{\plussim }{\mathbin}{plus sign with tilde below}% -\UnicodeMathSymbol{"02A27}{\plussubtwo }{\mathbin}{plus sign with subscript two}% -\UnicodeMathSymbol{"02A28}{\plustrif }{\mathbin}{plus sign with black triangle}% -\UnicodeMathSymbol{"02A29}{\commaminus }{\mathbin}{minus sign with comma above}% -\UnicodeMathSymbol{"02A2A}{\minusdot }{\mathbin}{minus sign with dot below}% -\UnicodeMathSymbol{"02A2B}{\minusfdots }{\mathbin}{minus sign with falling dots}% -\UnicodeMathSymbol{"02A2C}{\minusrdots }{\mathbin}{minus sign with rising dots}% -\UnicodeMathSymbol{"02A2D}{\opluslhrim }{\mathbin}{plus sign in left half circle}% -\UnicodeMathSymbol{"02A2E}{\oplusrhrim }{\mathbin}{plus sign in right half circle}% -\UnicodeMathSymbol{"02A2F}{\vectimes }{\mathbin}{vector or cross product}% -\UnicodeMathSymbol{"02A30}{\dottimes }{\mathbin}{multiplication sign with dot above}% -\UnicodeMathSymbol{"02A31}{\timesbar }{\mathbin}{multiplication sign with underbar}% -\UnicodeMathSymbol{"02A32}{\btimes }{\mathbin}{semidirect product with bottom closed}% -\UnicodeMathSymbol{"02A33}{\smashtimes }{\mathbin}{smash product}% -\UnicodeMathSymbol{"02A34}{\otimeslhrim }{\mathbin}{multiplication sign in left half circle}% -\UnicodeMathSymbol{"02A35}{\otimesrhrim }{\mathbin}{multiplication sign in right half circle}% -\UnicodeMathSymbol{"02A36}{\otimeshat }{\mathbin}{circled multiplication sign with circumflex accent}% -\UnicodeMathSymbol{"02A37}{\Otimes }{\mathbin}{multiplication sign in double circle}% -\UnicodeMathSymbol{"02A38}{\odiv }{\mathbin}{circled division sign}% -\UnicodeMathSymbol{"02A39}{\triangleplus }{\mathbin}{plus sign in triangle}% -\UnicodeMathSymbol{"02A3A}{\triangleminus }{\mathbin}{minus sign in triangle}% -\UnicodeMathSymbol{"02A3B}{\triangletimes }{\mathbin}{multiplication sign in triangle}% -\UnicodeMathSymbol{"02A3C}{\intprod }{\mathbin}{interior product}% -\UnicodeMathSymbol{"02A3D}{\intprodr }{\mathbin}{righthand interior product}% -\UnicodeMathSymbol{"02A3E}{\fcmp }{\mathbin}{z notation relational composition}% -\UnicodeMathSymbol{"02A3F}{\amalg }{\mathbin}{amalgamation or coproduct}% -\UnicodeMathSymbol{"02A40}{\capdot }{\mathbin}{intersection with dot}% -\UnicodeMathSymbol{"02A41}{\uminus }{\mathbin}{union with minus sign}% -\UnicodeMathSymbol{"02A42}{\barcup }{\mathbin}{union with overbar}% -\UnicodeMathSymbol{"02A43}{\barcap }{\mathbin}{intersection with overbar}% -\UnicodeMathSymbol{"02A44}{\capwedge }{\mathbin}{intersection with logical and}% -\UnicodeMathSymbol{"02A45}{\cupvee }{\mathbin}{union with logical or}% -\UnicodeMathSymbol{"02A46}{\cupovercap }{\mathbin}{union above intersection}% -\UnicodeMathSymbol{"02A47}{\capovercup }{\mathbin}{intersection above union}% -\UnicodeMathSymbol{"02A48}{\cupbarcap }{\mathbin}{union above bar above intersection}% -\UnicodeMathSymbol{"02A49}{\capbarcup }{\mathbin}{intersection above bar above union}% -\UnicodeMathSymbol{"02A4A}{\twocups }{\mathbin}{union beside and joined with union}% -\UnicodeMathSymbol{"02A4B}{\twocaps }{\mathbin}{intersection beside and joined with intersection}% -\UnicodeMathSymbol{"02A4C}{\closedvarcup }{\mathbin}{closed union with serifs}% -\UnicodeMathSymbol{"02A4D}{\closedvarcap }{\mathbin}{closed intersection with serifs}% -\UnicodeMathSymbol{"02A4E}{\Sqcap }{\mathbin}{double square intersection}% -\UnicodeMathSymbol{"02A4F}{\Sqcup }{\mathbin}{double square union}% -\UnicodeMathSymbol{"02A50}{\closedvarcupsmashprod }{\mathbin}{closed union with serifs and smash product}% -\UnicodeMathSymbol{"02A51}{\wedgeodot }{\mathbin}{logical and with dot above}% -\UnicodeMathSymbol{"02A52}{\veeodot }{\mathbin}{logical or with dot above}% -\UnicodeMathSymbol{"02A53}{\Wedge }{\mathbin}{double logical and}% -\UnicodeMathSymbol{"02A54}{\Vee }{\mathbin}{double logical or}% -\UnicodeMathSymbol{"02A55}{\wedgeonwedge }{\mathbin}{two intersecting logical and}% -\UnicodeMathSymbol{"02A56}{\veeonvee }{\mathbin}{two intersecting logical or}% -\UnicodeMathSymbol{"02A57}{\bigslopedvee }{\mathbin}{sloping large or}% -\UnicodeMathSymbol{"02A58}{\bigslopedwedge }{\mathbin}{sloping large and}% -\UnicodeMathSymbol{"02A59}{\veeonwedge }{\mathrel}{logical or overlapping logical and}% -\UnicodeMathSymbol{"02A5A}{\wedgemidvert }{\mathbin}{logical and with middle stem}% -\UnicodeMathSymbol{"02A5B}{\veemidvert }{\mathbin}{logical or with middle stem}% -\UnicodeMathSymbol{"02A5C}{\midbarwedge }{\mathbin}{ogical and with horizontal dash}% -\UnicodeMathSymbol{"02A5D}{\midbarvee }{\mathbin}{logical or with horizontal dash}% -\UnicodeMathSymbol{"02A5E}{\doublebarwedge }{\mathbin}{logical and with double overbar}% -\UnicodeMathSymbol{"02A5F}{\wedgebar }{\mathbin}{logical and with underbar}% -\UnicodeMathSymbol{"02A60}{\wedgedoublebar }{\mathbin}{logical and with double underbar}% -\UnicodeMathSymbol{"02A61}{\varveebar }{\mathbin}{small vee with underbar}% -\UnicodeMathSymbol{"02A62}{\doublebarvee }{\mathbin}{logical or with double overbar}% -\UnicodeMathSymbol{"02A63}{\veedoublebar }{\mathbin}{logical or with double underbar}% -\UnicodeMathSymbol{"02A64}{\dsub }{\mathbin}{z notation domain antirestriction}% -\UnicodeMathSymbol{"02A65}{\rsub }{\mathbin}{z notation range antirestriction}% -\UnicodeMathSymbol{"02A66}{\eqdot }{\mathrel}{equals sign with dot below}% -\UnicodeMathSymbol{"02A67}{\dotequiv }{\mathrel}{identical with dot above}% -\UnicodeMathSymbol{"02A68}{\equivVert }{\mathrel}{triple horizontal bar with double vertical stroke}% -\UnicodeMathSymbol{"02A69}{\equivVvert }{\mathrel}{triple horizontal bar with triple vertical stroke}% -\UnicodeMathSymbol{"02A6A}{\dotsim }{\mathrel}{tilde operator with dot above}% -\UnicodeMathSymbol{"02A6B}{\simrdots }{\mathrel}{tilde operator with rising dots}% -\UnicodeMathSymbol{"02A6C}{\simminussim }{\mathrel}{similar minus similar}% -\UnicodeMathSymbol{"02A6D}{\congdot }{\mathrel}{congruent with dot above}% -\UnicodeMathSymbol{"02A6E}{\asteq }{\mathrel}{equals with asterisk}% -\UnicodeMathSymbol{"02A6F}{\hatapprox }{\mathrel}{almost equal to with circumflex accent}% -\UnicodeMathSymbol{"02A70}{\approxeqq }{\mathrel}{approximately equal or equal to}% -\UnicodeMathSymbol{"02A71}{\eqqplus }{\mathbin}{equals sign above plus sign}% -\UnicodeMathSymbol{"02A72}{\pluseqq }{\mathbin}{plus sign above equals sign}% -\UnicodeMathSymbol{"02A73}{\eqqsim }{\mathrel}{equals sign above tilde operator}% -\UnicodeMathSymbol{"02A74}{\Coloneq }{\mathrel}{double colon equal}% -\UnicodeMathSymbol{"02A75}{\eqeq }{\mathrel}{two consecutive equals signs}% -\UnicodeMathSymbol{"02A76}{\eqeqeq }{\mathrel}{three consecutive equals signs}% -\UnicodeMathSymbol{"02A77}{\ddotseq }{\mathrel}{equals sign with two dots above and two dots below}% -\UnicodeMathSymbol{"02A78}{\equivDD }{\mathrel}{equivalent with four dots above}% -\UnicodeMathSymbol{"02A79}{\ltcir }{\mathrel}{less-than with circle inside}% -\UnicodeMathSymbol{"02A7A}{\gtcir }{\mathrel}{greater-than with circle inside}% -\UnicodeMathSymbol{"02A7B}{\ltquest }{\mathrel}{less-than with question mark above}% -\UnicodeMathSymbol{"02A7C}{\gtquest }{\mathrel}{greater-than with question mark above}% -\UnicodeMathSymbol{"02A7D}{\leqslant }{\mathrel}{less-than or slanted equal to}% -\UnicodeMathSymbol{"02A7E}{\geqslant }{\mathrel}{greater-than or slanted equal to}% -\UnicodeMathSymbol{"02A7F}{\lesdot }{\mathrel}{less-than or slanted equal to with dot inside}% -\UnicodeMathSymbol{"02A80}{\gesdot }{\mathrel}{greater-than or slanted equal to with dot inside}% -\UnicodeMathSymbol{"02A81}{\lesdoto }{\mathrel}{less-than or slanted equal to with dot above}% -\UnicodeMathSymbol{"02A82}{\gesdoto }{\mathrel}{greater-than or slanted equal to with dot above}% -\UnicodeMathSymbol{"02A83}{\lesdotor }{\mathrel}{less-than or slanted equal to with dot above right}% -\UnicodeMathSymbol{"02A84}{\gesdotol }{\mathrel}{greater-than or slanted equal to with dot above left}% -\UnicodeMathSymbol{"02A85}{\lessapprox }{\mathrel}{less-than or approximate}% -\UnicodeMathSymbol{"02A86}{\gtrapprox }{\mathrel}{greater-than or approximate}% -\UnicodeMathSymbol{"02A87}{\lneq }{\mathrel}{less-than and single-line not equal to}% -\UnicodeMathSymbol{"02A88}{\gneq }{\mathrel}{greater-than and single-line not equal to}% -\UnicodeMathSymbol{"02A89}{\lnapprox }{\mathrel}{less-than and not approximate}% -\UnicodeMathSymbol{"02A8A}{\gnapprox }{\mathrel}{greater-than and not approximate}% -\UnicodeMathSymbol{"02A8B}{\lesseqqgtr }{\mathrel}{less-than above double-line equal above greater-than}% -\UnicodeMathSymbol{"02A8C}{\gtreqqless }{\mathrel}{greater-than above double-line equal above less-than}% -\UnicodeMathSymbol{"02A8D}{\lsime }{\mathrel}{less-than above similar or equal}% -\UnicodeMathSymbol{"02A8E}{\gsime }{\mathrel}{greater-than above similar or equal}% -\UnicodeMathSymbol{"02A8F}{\lsimg }{\mathrel}{less-than above similar above greater-than}% -\UnicodeMathSymbol{"02A90}{\gsiml }{\mathrel}{greater-than above similar above less-than}% -\UnicodeMathSymbol{"02A91}{\lgE }{\mathrel}{less-than above greater-than above double-line equal}% -\UnicodeMathSymbol{"02A92}{\glE }{\mathrel}{greater-than above less-than above double-line equal}% -\UnicodeMathSymbol{"02A93}{\lesges }{\mathrel}{less-than above slanted equal above greater-than above slanted equal}% -\UnicodeMathSymbol{"02A94}{\gesles }{\mathrel}{greater-than above slanted equal above less-than above slanted equal}% -\UnicodeMathSymbol{"02A95}{\eqslantless }{\mathrel}{slanted equal to or less-than}% -\UnicodeMathSymbol{"02A96}{\eqslantgtr }{\mathrel}{slanted equal to or greater-than}% -\UnicodeMathSymbol{"02A97}{\elsdot }{\mathrel}{slanted equal to or less-than with dot inside}% -\UnicodeMathSymbol{"02A98}{\egsdot }{\mathrel}{slanted equal to or greater-than with dot inside}% -\UnicodeMathSymbol{"02A99}{\eqqless }{\mathrel}{double-line equal to or less-than}% -\UnicodeMathSymbol{"02A9A}{\eqqgtr }{\mathrel}{double-line equal to or greater-than}% -\UnicodeMathSymbol{"02A9B}{\eqqslantless }{\mathrel}{double-line slanted equal to or less-than}% -\UnicodeMathSymbol{"02A9C}{\eqqslantgtr }{\mathrel}{double-line slanted equal to or greater-than}% -\UnicodeMathSymbol{"02A9D}{\simless }{\mathrel}{similar or less-than}% -\UnicodeMathSymbol{"02A9E}{\simgtr }{\mathrel}{similar or greater-than}% -\UnicodeMathSymbol{"02A9F}{\simlE }{\mathrel}{similar above less-than above equals sign}% -\UnicodeMathSymbol{"02AA0}{\simgE }{\mathrel}{similar above greater-than above equals sign}% -\UnicodeMathSymbol{"02AA1}{\Lt }{\mathrel}{double nested less-than}% -\UnicodeMathSymbol{"02AA2}{\Gt }{\mathrel}{double nested greater-than}% -\UnicodeMathSymbol{"02AA3}{\partialmeetcontraction }{\mathrel}{double less-than with underbar}% -\UnicodeMathSymbol{"02AA4}{\glj }{\mathrel}{greater-than overlapping less-than}% -\UnicodeMathSymbol{"02AA5}{\gla }{\mathrel}{greater-than beside less-than}% -\UnicodeMathSymbol{"02AA6}{\ltcc }{\mathrel}{less-than closed by curve}% -\UnicodeMathSymbol{"02AA7}{\gtcc }{\mathrel}{greater-than closed by curve}% -\UnicodeMathSymbol{"02AA8}{\lescc }{\mathrel}{less-than closed by curve above slanted equal}% -\UnicodeMathSymbol{"02AA9}{\gescc }{\mathrel}{greater-than closed by curve above slanted equal}% -\UnicodeMathSymbol{"02AAA}{\smt }{\mathrel}{smaller than}% -\UnicodeMathSymbol{"02AAB}{\lat }{\mathrel}{larger than}% -\UnicodeMathSymbol{"02AAC}{\smte }{\mathrel}{smaller than or equal to}% -\UnicodeMathSymbol{"02AAD}{\late }{\mathrel}{larger than or equal to}% -\UnicodeMathSymbol{"02AAE}{\bumpeqq }{\mathrel}{equals sign with bumpy above}% -\UnicodeMathSymbol{"02AAF}{\preceq }{\mathrel}{precedes above single-line equals sign}% -\UnicodeMathSymbol{"02AB0}{\succeq }{\mathrel}{succeeds above single-line equals sign}% -\UnicodeMathSymbol{"02AB1}{\precneq }{\mathrel}{precedes above single-line not equal to}% -\UnicodeMathSymbol{"02AB2}{\succneq }{\mathrel}{succeeds above single-line not equal to}% -\UnicodeMathSymbol{"02AB3}{\preceqq }{\mathrel}{precedes above equals sign}% -\UnicodeMathSymbol{"02AB4}{\succeqq }{\mathrel}{succeeds above equals sign}% -\UnicodeMathSymbol{"02AB5}{\precneqq }{\mathrel}{precedes above not equal to}% -\UnicodeMathSymbol{"02AB6}{\succneqq }{\mathrel}{succeeds above not equal to}% -\UnicodeMathSymbol{"02AB7}{\precapprox }{\mathrel}{precedes above almost equal to}% -\UnicodeMathSymbol{"02AB8}{\succapprox }{\mathrel}{succeeds above almost equal to}% -\UnicodeMathSymbol{"02AB9}{\precnapprox }{\mathrel}{precedes above not almost equal to}% -\UnicodeMathSymbol{"02ABA}{\succnapprox }{\mathrel}{succeeds above not almost equal to}% -\UnicodeMathSymbol{"02ABB}{\Prec }{\mathrel}{double precedes}% -\UnicodeMathSymbol{"02ABC}{\Succ }{\mathrel}{double succeeds}% -\UnicodeMathSymbol{"02ABD}{\subsetdot }{\mathrel}{subset with dot}% -\UnicodeMathSymbol{"02ABE}{\supsetdot }{\mathrel}{superset with dot}% -\UnicodeMathSymbol{"02ABF}{\subsetplus }{\mathrel}{subset with plus sign below}% -\UnicodeMathSymbol{"02AC0}{\supsetplus }{\mathrel}{superset with plus sign below}% -\UnicodeMathSymbol{"02AC1}{\submult }{\mathrel}{subset with multiplication sign below}% -\UnicodeMathSymbol{"02AC2}{\supmult }{\mathrel}{superset with multiplication sign below}% -\UnicodeMathSymbol{"02AC3}{\subedot }{\mathrel}{subset of or equal to with dot above}% -\UnicodeMathSymbol{"02AC4}{\supedot }{\mathrel}{superset of or equal to with dot above}% -\UnicodeMathSymbol{"02AC5}{\subseteqq }{\mathrel}{subset of above equals sign}% -\UnicodeMathSymbol{"02AC6}{\supseteqq }{\mathrel}{superset of above equals sign}% -\UnicodeMathSymbol{"02AC7}{\subsim }{\mathrel}{subset of above tilde operator}% -\UnicodeMathSymbol{"02AC8}{\supsim }{\mathrel}{superset of above tilde operator}% -\UnicodeMathSymbol{"02AC9}{\subsetapprox }{\mathrel}{subset of above almost equal to}% -\UnicodeMathSymbol{"02ACA}{\supsetapprox }{\mathrel}{superset of above almost equal to}% -\UnicodeMathSymbol{"02ACB}{\subsetneqq }{\mathrel}{subset of above not equal to}% -\UnicodeMathSymbol{"02ACC}{\supsetneqq }{\mathrel}{superset of above not equal to}% -\UnicodeMathSymbol{"02ACD}{\lsqhook }{\mathrel}{square left open box operator}% -\UnicodeMathSymbol{"02ACE}{\rsqhook }{\mathrel}{square right open box operator}% -\UnicodeMathSymbol{"02ACF}{\csub }{\mathrel}{closed subset}% -\UnicodeMathSymbol{"02AD0}{\csup }{\mathrel}{closed superset}% -\UnicodeMathSymbol{"02AD1}{\csube }{\mathrel}{closed subset or equal to}% -\UnicodeMathSymbol{"02AD2}{\csupe }{\mathrel}{closed superset or equal to}% -\UnicodeMathSymbol{"02AD3}{\subsup }{\mathrel}{subset above superset}% -\UnicodeMathSymbol{"02AD4}{\supsub }{\mathrel}{superset above subset}% -\UnicodeMathSymbol{"02AD5}{\subsub }{\mathrel}{subset above subset}% -\UnicodeMathSymbol{"02AD6}{\supsup }{\mathrel}{superset above superset}% -\UnicodeMathSymbol{"02AD7}{\suphsub }{\mathrel}{superset beside subset}% -\UnicodeMathSymbol{"02AD8}{\supdsub }{\mathrel}{superset beside and joined by dash with subset}% -\UnicodeMathSymbol{"02AD9}{\forkv }{\mathrel}{element of opening downwards}% -\UnicodeMathSymbol{"02ADA}{\topfork }{\mathrel}{pitchfork with tee top}% -\UnicodeMathSymbol{"02ADB}{\mlcp }{\mathrel}{transversal intersection}% -\UnicodeMathSymbol{"02ADC}{\forks }{\mathrel}{forking}% -\UnicodeMathSymbol{"02ADD}{\forksnot }{\mathrel}{nonforking}% -\UnicodeMathSymbol{"02ADE}{\shortlefttack }{\mathrel}{short left tack}% -\UnicodeMathSymbol{"02ADF}{\shortdowntack }{\mathrel}{short down tack}% -\UnicodeMathSymbol{"02AE0}{\shortuptack }{\mathrel}{short up tack}% -\UnicodeMathSymbol{"02AE1}{\perps }{\mathord}{perpendicular with s}% -\UnicodeMathSymbol{"02AE2}{\vDdash }{\mathrel}{vertical bar triple right turnstile}% -\UnicodeMathSymbol{"02AE3}{\dashV }{\mathrel}{double vertical bar left turnstile}% -\UnicodeMathSymbol{"02AE4}{\Dashv }{\mathrel}{vertical bar double left turnstile}% -\UnicodeMathSymbol{"02AE5}{\DashV }{\mathrel}{double vertical bar double left turnstile}% -\UnicodeMathSymbol{"02AE6}{\varVdash }{\mathrel}{long dash from left member of double vertical}% -\UnicodeMathSymbol{"02AE7}{\Barv }{\mathrel}{short down tack with overbar}% -\UnicodeMathSymbol{"02AE8}{\vBar }{\mathrel}{short up tack with underbar}% -\UnicodeMathSymbol{"02AE9}{\vBarv }{\mathrel}{short up tack above short down tack}% -\UnicodeMathSymbol{"02AEA}{\barV }{\mathrel}{double down tack}% -\UnicodeMathSymbol{"02AEB}{\Vbar }{\mathrel}{double up tack}% -\UnicodeMathSymbol{"02AEC}{\Not }{\mathrel}{double stroke not sign}% -\UnicodeMathSymbol{"02AED}{\bNot }{\mathrel}{reversed double stroke not sign}% -\UnicodeMathSymbol{"02AEE}{\revnmid }{\mathrel}{does not divide with reversed negation slash}% -\UnicodeMathSymbol{"02AEF}{\cirmid }{\mathrel}{vertical line with circle above}% -\UnicodeMathSymbol{"02AF0}{\midcir }{\mathrel}{vertical line with circle below}% -\UnicodeMathSymbol{"02AF1}{\topcir }{\mathord}{down tack with circle below}% -\UnicodeMathSymbol{"02AF2}{\nhpar }{\mathrel}{parallel with horizontal stroke}% -\UnicodeMathSymbol{"02AF3}{\parsim }{\mathrel}{parallel with tilde operator}% -\UnicodeMathSymbol{"02AF4}{\interleave }{\mathbin}{triple vertical bar binary relation}% -\UnicodeMathSymbol{"02AF5}{\nhVvert }{\mathbin}{triple vertical bar with horizontal stroke}% -\UnicodeMathSymbol{"02AF6}{\threedotcolon }{\mathbin}{triple colon operator}% -\UnicodeMathSymbol{"02AF7}{\lllnest }{\mathrel}{stacked very much less-than}% -\UnicodeMathSymbol{"02AF8}{\gggnest }{\mathrel}{stacked very much greater-than}% -\UnicodeMathSymbol{"02AF9}{\leqqslant }{\mathrel}{double-line slanted less-than or equal to}% -\UnicodeMathSymbol{"02AFA}{\geqqslant }{\mathrel}{double-line slanted greater-than or equal to}% -\UnicodeMathSymbol{"02AFB}{\trslash }{\mathbin}{triple solidus binary relation}% -\UnicodeMathSymbol{"02AFC}{\biginterleave }{\mathop}{large triple vertical bar operator}% -\UnicodeMathSymbol{"02AFD}{\sslash }{\mathbin}{double solidus operator}% -\UnicodeMathSymbol{"02AFE}{\talloblong }{\mathbin}{white vertical bar}% -\UnicodeMathSymbol{"02AFF}{\bigtalloblong }{\mathop}{n-ary white vertical bar}% -\UnicodeMathSymbol{"02B12}{\squaretopblack }{\mathord}{square with top half black}% -\UnicodeMathSymbol{"02B13}{\squarebotblack }{\mathord}{square with bottom half black}% -\UnicodeMathSymbol{"02B14}{\squareurblack }{\mathord}{square with upper right diagonal half black}% -\UnicodeMathSymbol{"02B15}{\squarellblack }{\mathord}{square with lower left diagonal half black}% -\UnicodeMathSymbol{"02B16}{\diamondleftblack }{\mathord}{diamond with left half black}% -\UnicodeMathSymbol{"02B17}{\diamondrightblack }{\mathord}{diamond with right half black}% -\UnicodeMathSymbol{"02B18}{\diamondtopblack }{\mathord}{diamond with top half black}% -\UnicodeMathSymbol{"02B19}{\diamondbotblack }{\mathord}{diamond with bottom half black}% -\UnicodeMathSymbol{"02B1A}{\dottedsquare }{\mathord}{dotted square}% -\UnicodeMathSymbol{"02B1B}{\lgblksquare }{\mathord}{black large square}% -\UnicodeMathSymbol{"02B1C}{\lgwhtsquare }{\mathord}{white large square}% -\UnicodeMathSymbol{"02B1D}{\vysmblksquare }{\mathord}{black very small square}% -\UnicodeMathSymbol{"02B1E}{\vysmwhtsquare }{\mathord}{white very small square}% -\UnicodeMathSymbol{"02B1F}{\pentagonblack }{\mathord}{black pentagon}% -\UnicodeMathSymbol{"02B20}{\pentagon }{\mathord}{white pentagon}% -\UnicodeMathSymbol{"02B21}{\varhexagon }{\mathord}{white hexagon}% -\UnicodeMathSymbol{"02B22}{\varhexagonblack }{\mathord}{black hexagon}% -\UnicodeMathSymbol{"02B23}{\hexagonblack }{\mathord}{horizontal black hexagon}% -\UnicodeMathSymbol{"02B24}{\lgblkcircle }{\mathord}{black large circle}% -\UnicodeMathSymbol{"02B25}{\mdblkdiamond }{\mathord}{black medium diamond}% -\UnicodeMathSymbol{"02B26}{\mdwhtdiamond }{\mathord}{white medium diamond}% -\UnicodeMathSymbol{"02B27}{\mdblklozenge }{\mathord}{black medium lozenge}% -\UnicodeMathSymbol{"02B28}{\mdwhtlozenge }{\mathord}{white medium lozenge}% -\UnicodeMathSymbol{"02B29}{\smblkdiamond }{\mathord}{black small diamond}% -\UnicodeMathSymbol{"02B2A}{\smblklozenge }{\mathord}{black small lozenge}% -\UnicodeMathSymbol{"02B2B}{\smwhtlozenge }{\mathord}{white small lozenge}% -\UnicodeMathSymbol{"02B2C}{\blkhorzoval }{\mathord}{black horizontal ellipse}% -\UnicodeMathSymbol{"02B2D}{\whthorzoval }{\mathord}{white horizontal ellipse}% -\UnicodeMathSymbol{"02B2E}{\blkvertoval }{\mathord}{black vertical ellipse}% -\UnicodeMathSymbol{"02B2F}{\whtvertoval }{\mathord}{white vertical ellipse}% -\UnicodeMathSymbol{"02B30}{\circleonleftarrow }{\mathrel}{left arrow with small circle}% -\UnicodeMathSymbol{"02B31}{\leftthreearrows }{\mathrel}{three leftwards arrows}% -\UnicodeMathSymbol{"02B32}{\leftarrowonoplus }{\mathrel}{left arrow with circled plus}% -\UnicodeMathSymbol{"02B33}{\longleftsquigarrow }{\mathrel}{long leftwards squiggle arrow}% -\UnicodeMathSymbol{"02B34}{\nvtwoheadleftarrow }{\mathrel}{leftwards two-headed arrow with vertical stroke}% -\UnicodeMathSymbol{"02B35}{\nVtwoheadleftarrow }{\mathrel}{leftwards two-headed arrow with double vertical stroke}% -\UnicodeMathSymbol{"02B36}{\twoheadmapsfrom }{\mathrel}{leftwards two-headed arrow from bar}% -\UnicodeMathSymbol{"02B37}{\twoheadleftdbkarrow }{\mathrel}{leftwards two-headed triple-dash arrow}% -\UnicodeMathSymbol{"02B38}{\leftdotarrow }{\mathrel}{leftwards arrow with dotted stem}% -\UnicodeMathSymbol{"02B39}{\nvleftarrowtail }{\mathrel}{leftwards arrow with tail with vertical stroke}% -\UnicodeMathSymbol{"02B3A}{\nVleftarrowtail }{\mathrel}{leftwards arrow with tail with double vertical stroke}% -\UnicodeMathSymbol{"02B3B}{\twoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail}% -\UnicodeMathSymbol{"02B3C}{\nvtwoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail with vertical stroke}% -\UnicodeMathSymbol{"02B3D}{\nVtwoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail with double vertical stroke}% -\UnicodeMathSymbol{"02B3E}{\leftarrowx }{\mathrel}{leftwards arrow through x}% -\UnicodeMathSymbol{"02B3F}{\leftcurvedarrow }{\mathrel}{wave arrow pointing directly left}% -\UnicodeMathSymbol{"02B40}{\equalleftarrow }{\mathrel}{equals sign above leftwards arrow}% -\UnicodeMathSymbol{"02B41}{\bsimilarleftarrow }{\mathrel}{reverse tilde operator above leftwards arrow}% -\UnicodeMathSymbol{"02B42}{\leftarrowbackapprox }{\mathrel}{leftwards arrow above reverse almost equal to}% -\UnicodeMathSymbol{"02B43}{\rightarrowgtr }{\mathrel}{rightwards arrow through greater-than}% -\UnicodeMathSymbol{"02B44}{\rightarrowsupset }{\mathrel}{rightwards arrow through subset}% -\UnicodeMathSymbol{"02B45}{\LLeftarrow }{\mathrel}{leftwards quadruple arrow}% -\UnicodeMathSymbol{"02B46}{\RRightarrow }{\mathrel}{rightwards quadruple arrow}% -\UnicodeMathSymbol{"02B47}{\bsimilarrightarrow }{\mathrel}{reverse tilde operator above rightwards arrow}% -\UnicodeMathSymbol{"02B48}{\rightarrowbackapprox }{\mathrel}{rightwards arrow above reverse almost equal to}% -\UnicodeMathSymbol{"02B49}{\similarleftarrow }{\mathrel}{tilde operator above leftwards arrow}% -\UnicodeMathSymbol{"02B4A}{\leftarrowapprox }{\mathrel}{leftwards arrow above almost equal to}% -\UnicodeMathSymbol{"02B4B}{\leftarrowbsimilar }{\mathrel}{leftwards arrow above reverse tilde operator}% -\UnicodeMathSymbol{"02B4C}{\rightarrowbsimilar }{\mathrel}{righttwards arrow above reverse tilde operator}% -\UnicodeMathSymbol{"02B50}{\medwhitestar }{\mathord}{white medium star}% -\UnicodeMathSymbol{"02B51}{\medblackstar }{\mathord}{black medium star}% -\UnicodeMathSymbol{"02B52}{\smwhitestar }{\mathord}{white small star}% -\UnicodeMathSymbol{"02B53}{\rightpentagonblack }{\mathord}{black right-pointing pentagon}% -\UnicodeMathSymbol{"02B54}{\rightpentagon }{\mathord}{white right-pointing pentagon}% -\UnicodeMathSymbol{"03012}{\postalmark }{\mathord}{postal mark}% -\UnicodeMathSymbol{"03030}{\hzigzag }{\mathord}{zigzag}% -\UnicodeMathSymbol{"1D400}{\mbfA }{\mathalpha}{mathematical bold capital a}% -\UnicodeMathSymbol{"1D401}{\mbfB }{\mathalpha}{mathematical bold capital b}% -\UnicodeMathSymbol{"1D402}{\mbfC }{\mathalpha}{mathematical bold capital c}% -\UnicodeMathSymbol{"1D403}{\mbfD }{\mathalpha}{mathematical bold capital d}% -\UnicodeMathSymbol{"1D404}{\mbfE }{\mathalpha}{mathematical bold capital e}% -\UnicodeMathSymbol{"1D405}{\mbfF }{\mathalpha}{mathematical bold capital f}% -\UnicodeMathSymbol{"1D406}{\mbfG }{\mathalpha}{mathematical bold capital g}% -\UnicodeMathSymbol{"1D407}{\mbfH }{\mathalpha}{mathematical bold capital h}% -\UnicodeMathSymbol{"1D408}{\mbfI }{\mathalpha}{mathematical bold capital i}% -\UnicodeMathSymbol{"1D409}{\mbfJ }{\mathalpha}{mathematical bold capital j}% -\UnicodeMathSymbol{"1D40A}{\mbfK }{\mathalpha}{mathematical bold capital k}% -\UnicodeMathSymbol{"1D40B}{\mbfL }{\mathalpha}{mathematical bold capital l}% -\UnicodeMathSymbol{"1D40C}{\mbfM }{\mathalpha}{mathematical bold capital m}% -\UnicodeMathSymbol{"1D40D}{\mbfN }{\mathalpha}{mathematical bold capital n}% -\UnicodeMathSymbol{"1D40E}{\mbfO }{\mathalpha}{mathematical bold capital o}% -\UnicodeMathSymbol{"1D40F}{\mbfP }{\mathalpha}{mathematical bold capital p}% -\UnicodeMathSymbol{"1D410}{\mbfQ }{\mathalpha}{mathematical bold capital q}% -\UnicodeMathSymbol{"1D411}{\mbfR }{\mathalpha}{mathematical bold capital r}% -\UnicodeMathSymbol{"1D412}{\mbfS }{\mathalpha}{mathematical bold capital s}% -\UnicodeMathSymbol{"1D413}{\mbfT }{\mathalpha}{mathematical bold capital t}% -\UnicodeMathSymbol{"1D414}{\mbfU }{\mathalpha}{mathematical bold capital u}% -\UnicodeMathSymbol{"1D415}{\mbfV }{\mathalpha}{mathematical bold capital v}% -\UnicodeMathSymbol{"1D416}{\mbfW }{\mathalpha}{mathematical bold capital w}% -\UnicodeMathSymbol{"1D417}{\mbfX }{\mathalpha}{mathematical bold capital x}% -\UnicodeMathSymbol{"1D418}{\mbfY }{\mathalpha}{mathematical bold capital y}% -\UnicodeMathSymbol{"1D419}{\mbfZ }{\mathalpha}{mathematical bold capital z}% -\UnicodeMathSymbol{"1D41A}{\mbfa }{\mathalpha}{mathematical bold small a}% -\UnicodeMathSymbol{"1D41B}{\mbfb }{\mathalpha}{mathematical bold small b}% -\UnicodeMathSymbol{"1D41C}{\mbfc }{\mathalpha}{mathematical bold small c}% -\UnicodeMathSymbol{"1D41D}{\mbfd }{\mathalpha}{mathematical bold small d}% -\UnicodeMathSymbol{"1D41E}{\mbfe }{\mathalpha}{mathematical bold small e}% -\UnicodeMathSymbol{"1D41F}{\mbff }{\mathalpha}{mathematical bold small f}% -\UnicodeMathSymbol{"1D420}{\mbfg }{\mathalpha}{mathematical bold small g}% -\UnicodeMathSymbol{"1D421}{\mbfh }{\mathalpha}{mathematical bold small h}% -\UnicodeMathSymbol{"1D422}{\mbfi }{\mathalpha}{mathematical bold small i}% -\UnicodeMathSymbol{"1D423}{\mbfj }{\mathalpha}{mathematical bold small j}% -\UnicodeMathSymbol{"1D424}{\mbfk }{\mathalpha}{mathematical bold small k}% -\UnicodeMathSymbol{"1D425}{\mbfl }{\mathalpha}{mathematical bold small l}% -\UnicodeMathSymbol{"1D426}{\mbfm }{\mathalpha}{mathematical bold small m}% -\UnicodeMathSymbol{"1D427}{\mbfn }{\mathalpha}{mathematical bold small n}% -\UnicodeMathSymbol{"1D428}{\mbfo }{\mathalpha}{mathematical bold small o}% -\UnicodeMathSymbol{"1D429}{\mbfp }{\mathalpha}{mathematical bold small p}% -\UnicodeMathSymbol{"1D42A}{\mbfq }{\mathalpha}{mathematical bold small q}% -\UnicodeMathSymbol{"1D42B}{\mbfr }{\mathalpha}{mathematical bold small r}% -\UnicodeMathSymbol{"1D42C}{\mbfs }{\mathalpha}{mathematical bold small s}% -\UnicodeMathSymbol{"1D42D}{\mbft }{\mathalpha}{mathematical bold small t}% -\UnicodeMathSymbol{"1D42E}{\mbfu }{\mathalpha}{mathematical bold small u}% -\UnicodeMathSymbol{"1D42F}{\mbfv }{\mathalpha}{mathematical bold small v}% -\UnicodeMathSymbol{"1D430}{\mbfw }{\mathalpha}{mathematical bold small w}% -\UnicodeMathSymbol{"1D431}{\mbfx }{\mathalpha}{mathematical bold small x}% -\UnicodeMathSymbol{"1D432}{\mbfy }{\mathalpha}{mathematical bold small y}% -\UnicodeMathSymbol{"1D433}{\mbfz }{\mathalpha}{mathematical bold small z}% -\UnicodeMathSymbol{"1D434}{\mitA }{\mathalpha}{mathematical italic capital a}% -\UnicodeMathSymbol{"1D435}{\mitB }{\mathalpha}{mathematical italic capital b}% -\UnicodeMathSymbol{"1D436}{\mitC }{\mathalpha}{mathematical italic capital c}% -\UnicodeMathSymbol{"1D437}{\mitD }{\mathalpha}{mathematical italic capital d}% -\UnicodeMathSymbol{"1D438}{\mitE }{\mathalpha}{mathematical italic capital e}% -\UnicodeMathSymbol{"1D439}{\mitF }{\mathalpha}{mathematical italic capital f}% -\UnicodeMathSymbol{"1D43A}{\mitG }{\mathalpha}{mathematical italic capital g}% -\UnicodeMathSymbol{"1D43B}{\mitH }{\mathalpha}{mathematical italic capital h}% -\UnicodeMathSymbol{"1D43C}{\mitI }{\mathalpha}{mathematical italic capital i}% -\UnicodeMathSymbol{"1D43D}{\mitJ }{\mathalpha}{mathematical italic capital j}% -\UnicodeMathSymbol{"1D43E}{\mitK }{\mathalpha}{mathematical italic capital k}% -\UnicodeMathSymbol{"1D43F}{\mitL }{\mathalpha}{mathematical italic capital l}% -\UnicodeMathSymbol{"1D440}{\mitM }{\mathalpha}{mathematical italic capital m}% -\UnicodeMathSymbol{"1D441}{\mitN }{\mathalpha}{mathematical italic capital n}% -\UnicodeMathSymbol{"1D442}{\mitO }{\mathalpha}{mathematical italic capital o}% -\UnicodeMathSymbol{"1D443}{\mitP }{\mathalpha}{mathematical italic capital p}% -\UnicodeMathSymbol{"1D444}{\mitQ }{\mathalpha}{mathematical italic capital q}% -\UnicodeMathSymbol{"1D445}{\mitR }{\mathalpha}{mathematical italic capital r}% -\UnicodeMathSymbol{"1D446}{\mitS }{\mathalpha}{mathematical italic capital s}% -\UnicodeMathSymbol{"1D447}{\mitT }{\mathalpha}{mathematical italic capital t}% -\UnicodeMathSymbol{"1D448}{\mitU }{\mathalpha}{mathematical italic capital u}% -\UnicodeMathSymbol{"1D449}{\mitV }{\mathalpha}{mathematical italic capital v}% -\UnicodeMathSymbol{"1D44A}{\mitW }{\mathalpha}{mathematical italic capital w}% -\UnicodeMathSymbol{"1D44B}{\mitX }{\mathalpha}{mathematical italic capital x}% -\UnicodeMathSymbol{"1D44C}{\mitY }{\mathalpha}{mathematical italic capital y}% -\UnicodeMathSymbol{"1D44D}{\mitZ }{\mathalpha}{mathematical italic capital z}% -\UnicodeMathSymbol{"1D44E}{\mita }{\mathalpha}{mathematical italic small a}% -\UnicodeMathSymbol{"1D44F}{\mitb }{\mathalpha}{mathematical italic small b}% -\UnicodeMathSymbol{"1D450}{\mitc }{\mathalpha}{mathematical italic small c}% -\UnicodeMathSymbol{"1D451}{\mitd }{\mathalpha}{mathematical italic small d}% -\UnicodeMathSymbol{"1D452}{\mite }{\mathalpha}{mathematical italic small e}% -\UnicodeMathSymbol{"1D453}{\mitf }{\mathalpha}{mathematical italic small f}% -\UnicodeMathSymbol{"1D454}{\mitg }{\mathalpha}{mathematical italic small g}% -\UnicodeMathSymbol{"1D456}{\miti }{\mathalpha}{mathematical italic small i}% -\UnicodeMathSymbol{"1D457}{\mitj }{\mathalpha}{mathematical italic small j}% -\UnicodeMathSymbol{"1D458}{\mitk }{\mathalpha}{mathematical italic small k}% -\UnicodeMathSymbol{"1D459}{\mitl }{\mathalpha}{mathematical italic small l}% -\UnicodeMathSymbol{"1D45A}{\mitm }{\mathalpha}{mathematical italic small m}% -\UnicodeMathSymbol{"1D45B}{\mitn }{\mathalpha}{mathematical italic small n}% -\UnicodeMathSymbol{"1D45C}{\mito }{\mathalpha}{mathematical italic small o}% -\UnicodeMathSymbol{"1D45D}{\mitp }{\mathalpha}{mathematical italic small p}% -\UnicodeMathSymbol{"1D45E}{\mitq }{\mathalpha}{mathematical italic small q}% -\UnicodeMathSymbol{"1D45F}{\mitr }{\mathalpha}{mathematical italic small r}% -\UnicodeMathSymbol{"1D460}{\mits }{\mathalpha}{mathematical italic small s}% -\UnicodeMathSymbol{"1D461}{\mitt }{\mathalpha}{mathematical italic small t}% -\UnicodeMathSymbol{"1D462}{\mitu }{\mathalpha}{mathematical italic small u}% -\UnicodeMathSymbol{"1D463}{\mitv }{\mathalpha}{mathematical italic small v}% -\UnicodeMathSymbol{"1D464}{\mitw }{\mathalpha}{mathematical italic small w}% -\UnicodeMathSymbol{"1D465}{\mitx }{\mathalpha}{mathematical italic small x}% -\UnicodeMathSymbol{"1D466}{\mity }{\mathalpha}{mathematical italic small y}% -\UnicodeMathSymbol{"1D467}{\mitz }{\mathalpha}{mathematical italic small z}% -\UnicodeMathSymbol{"1D468}{\mbfitA }{\mathalpha}{mathematical bold italic capital a}% -\UnicodeMathSymbol{"1D469}{\mbfitB }{\mathalpha}{mathematical bold italic capital b}% -\UnicodeMathSymbol{"1D46A}{\mbfitC }{\mathalpha}{mathematical bold italic capital c}% -\UnicodeMathSymbol{"1D46B}{\mbfitD }{\mathalpha}{mathematical bold italic capital d}% -\UnicodeMathSymbol{"1D46C}{\mbfitE }{\mathalpha}{mathematical bold italic capital e}% -\UnicodeMathSymbol{"1D46D}{\mbfitF }{\mathalpha}{mathematical bold italic capital f}% -\UnicodeMathSymbol{"1D46E}{\mbfitG }{\mathalpha}{mathematical bold italic capital g}% -\UnicodeMathSymbol{"1D46F}{\mbfitH }{\mathalpha}{mathematical bold italic capital h}% -\UnicodeMathSymbol{"1D470}{\mbfitI }{\mathalpha}{mathematical bold italic capital i}% -\UnicodeMathSymbol{"1D471}{\mbfitJ }{\mathalpha}{mathematical bold italic capital j}% -\UnicodeMathSymbol{"1D472}{\mbfitK }{\mathalpha}{mathematical bold italic capital k}% -\UnicodeMathSymbol{"1D473}{\mbfitL }{\mathalpha}{mathematical bold italic capital l}% -\UnicodeMathSymbol{"1D474}{\mbfitM }{\mathalpha}{mathematical bold italic capital m}% -\UnicodeMathSymbol{"1D475}{\mbfitN }{\mathalpha}{mathematical bold italic capital n}% -\UnicodeMathSymbol{"1D476}{\mbfitO }{\mathalpha}{mathematical bold italic capital o}% -\UnicodeMathSymbol{"1D477}{\mbfitP }{\mathalpha}{mathematical bold italic capital p}% -\UnicodeMathSymbol{"1D478}{\mbfitQ }{\mathalpha}{mathematical bold italic capital q}% -\UnicodeMathSymbol{"1D479}{\mbfitR }{\mathalpha}{mathematical bold italic capital r}% -\UnicodeMathSymbol{"1D47A}{\mbfitS }{\mathalpha}{mathematical bold italic capital s}% -\UnicodeMathSymbol{"1D47B}{\mbfitT }{\mathalpha}{mathematical bold italic capital t}% -\UnicodeMathSymbol{"1D47C}{\mbfitU }{\mathalpha}{mathematical bold italic capital u}% -\UnicodeMathSymbol{"1D47D}{\mbfitV }{\mathalpha}{mathematical bold italic capital v}% -\UnicodeMathSymbol{"1D47E}{\mbfitW }{\mathalpha}{mathematical bold italic capital w}% -\UnicodeMathSymbol{"1D47F}{\mbfitX }{\mathalpha}{mathematical bold italic capital x}% -\UnicodeMathSymbol{"1D480}{\mbfitY }{\mathalpha}{mathematical bold italic capital y}% -\UnicodeMathSymbol{"1D481}{\mbfitZ }{\mathalpha}{mathematical bold italic capital z}% -\UnicodeMathSymbol{"1D482}{\mbfita }{\mathalpha}{mathematical bold italic small a}% -\UnicodeMathSymbol{"1D483}{\mbfitb }{\mathalpha}{mathematical bold italic small b}% -\UnicodeMathSymbol{"1D484}{\mbfitc }{\mathalpha}{mathematical bold italic small c}% -\UnicodeMathSymbol{"1D485}{\mbfitd }{\mathalpha}{mathematical bold italic small d}% -\UnicodeMathSymbol{"1D486}{\mbfite }{\mathalpha}{mathematical bold italic small e}% -\UnicodeMathSymbol{"1D487}{\mbfitf }{\mathalpha}{mathematical bold italic small f}% -\UnicodeMathSymbol{"1D488}{\mbfitg }{\mathalpha}{mathematical bold italic small g}% -\UnicodeMathSymbol{"1D489}{\mbfith }{\mathalpha}{mathematical bold italic small h}% -\UnicodeMathSymbol{"1D48A}{\mbfiti }{\mathalpha}{mathematical bold italic small i}% -\UnicodeMathSymbol{"1D48B}{\mbfitj }{\mathalpha}{mathematical bold italic small j}% -\UnicodeMathSymbol{"1D48C}{\mbfitk }{\mathalpha}{mathematical bold italic small k}% -\UnicodeMathSymbol{"1D48D}{\mbfitl }{\mathalpha}{mathematical bold italic small l}% -\UnicodeMathSymbol{"1D48E}{\mbfitm }{\mathalpha}{mathematical bold italic small m}% -\UnicodeMathSymbol{"1D48F}{\mbfitn }{\mathalpha}{mathematical bold italic small n}% -\UnicodeMathSymbol{"1D490}{\mbfito }{\mathalpha}{mathematical bold italic small o}% -\UnicodeMathSymbol{"1D491}{\mbfitp }{\mathalpha}{mathematical bold italic small p}% -\UnicodeMathSymbol{"1D492}{\mbfitq }{\mathalpha}{mathematical bold italic small q}% -\UnicodeMathSymbol{"1D493}{\mbfitr }{\mathalpha}{mathematical bold italic small r}% -\UnicodeMathSymbol{"1D494}{\mbfits }{\mathalpha}{mathematical bold italic small s}% -\UnicodeMathSymbol{"1D495}{\mbfitt }{\mathalpha}{mathematical bold italic small t}% -\UnicodeMathSymbol{"1D496}{\mbfitu }{\mathalpha}{mathematical bold italic small u}% -\UnicodeMathSymbol{"1D497}{\mbfitv }{\mathalpha}{mathematical bold italic small v}% -\UnicodeMathSymbol{"1D498}{\mbfitw }{\mathalpha}{mathematical bold italic small w}% -\UnicodeMathSymbol{"1D499}{\mbfitx }{\mathalpha}{mathematical bold italic small x}% -\UnicodeMathSymbol{"1D49A}{\mbfity }{\mathalpha}{mathematical bold italic small y}% -\UnicodeMathSymbol{"1D49B}{\mbfitz }{\mathalpha}{mathematical bold italic small z}% -\UnicodeMathSymbol{"1D49C}{\mscrA }{\mathalpha}{mathematical script capital a}% -\UnicodeMathSymbol{"1D49E}{\mscrC }{\mathalpha}{mathematical script capital c}% -\UnicodeMathSymbol{"1D49F}{\mscrD }{\mathalpha}{mathematical script capital d}% -\UnicodeMathSymbol{"1D4A2}{\mscrG }{\mathalpha}{mathematical script capital g}% -\UnicodeMathSymbol{"1D4A5}{\mscrJ }{\mathalpha}{mathematical script capital j}% -\UnicodeMathSymbol{"1D4A6}{\mscrK }{\mathalpha}{mathematical script capital k}% -\UnicodeMathSymbol{"1D4A9}{\mscrN }{\mathalpha}{mathematical script capital n}% -\UnicodeMathSymbol{"1D4AA}{\mscrO }{\mathalpha}{mathematical script capital o}% -\UnicodeMathSymbol{"1D4AB}{\mscrP }{\mathalpha}{mathematical script capital p}% -\UnicodeMathSymbol{"1D4AC}{\mscrQ }{\mathalpha}{mathematical script capital q}% -\UnicodeMathSymbol{"1D4AE}{\mscrS }{\mathalpha}{mathematical script capital s}% -\UnicodeMathSymbol{"1D4AF}{\mscrT }{\mathalpha}{mathematical script capital t}% -\UnicodeMathSymbol{"1D4B0}{\mscrU }{\mathalpha}{mathematical script capital u}% -\UnicodeMathSymbol{"1D4B1}{\mscrV }{\mathalpha}{mathematical script capital v}% -\UnicodeMathSymbol{"1D4B2}{\mscrW }{\mathalpha}{mathematical script capital w}% -\UnicodeMathSymbol{"1D4B3}{\mscrX }{\mathalpha}{mathematical script capital x}% -\UnicodeMathSymbol{"1D4B4}{\mscrY }{\mathalpha}{mathematical script capital y}% -\UnicodeMathSymbol{"1D4B5}{\mscrZ }{\mathalpha}{mathematical script capital z}% -\UnicodeMathSymbol{"1D4B6}{\mscra }{\mathalpha}{mathematical script small a}% -\UnicodeMathSymbol{"1D4B7}{\mscrb }{\mathalpha}{mathematical script small b}% -\UnicodeMathSymbol{"1D4B8}{\mscrc }{\mathalpha}{mathematical script small c}% -\UnicodeMathSymbol{"1D4B9}{\mscrd }{\mathalpha}{mathematical script small d}% -\UnicodeMathSymbol{"1D4BB}{\mscrf }{\mathalpha}{mathematical script small f}% -\UnicodeMathSymbol{"1D4BD}{\mscrh }{\mathalpha}{mathematical script small h}% -\UnicodeMathSymbol{"1D4BE}{\mscri }{\mathalpha}{mathematical script small i}% -\UnicodeMathSymbol{"1D4BF}{\mscrj }{\mathalpha}{mathematical script small j}% -\UnicodeMathSymbol{"1D4C0}{\mscrk }{\mathalpha}{mathematical script small k}% -\UnicodeMathSymbol{"1D4C1}{\mscrl }{\mathalpha}{mathematical script small l}% -\UnicodeMathSymbol{"1D4C2}{\mscrm }{\mathalpha}{mathematical script small m}% -\UnicodeMathSymbol{"1D4C3}{\mscrn }{\mathalpha}{mathematical script small n}% -\UnicodeMathSymbol{"1D4C5}{\mscrp }{\mathalpha}{mathematical script small p}% -\UnicodeMathSymbol{"1D4C6}{\mscrq }{\mathalpha}{mathematical script small q}% -\UnicodeMathSymbol{"1D4C7}{\mscrr }{\mathalpha}{mathematical script small r}% -\UnicodeMathSymbol{"1D4C8}{\mscrs }{\mathalpha}{mathematical script small s}% -\UnicodeMathSymbol{"1D4C9}{\mscrt }{\mathalpha}{mathematical script small t}% -\UnicodeMathSymbol{"1D4CA}{\mscru }{\mathalpha}{mathematical script small u}% -\UnicodeMathSymbol{"1D4CB}{\mscrv }{\mathalpha}{mathematical script small v}% -\UnicodeMathSymbol{"1D4CC}{\mscrw }{\mathalpha}{mathematical script small w}% -\UnicodeMathSymbol{"1D4CD}{\mscrx }{\mathalpha}{mathematical script small x}% -\UnicodeMathSymbol{"1D4CE}{\mscry }{\mathalpha}{mathematical script small y}% -\UnicodeMathSymbol{"1D4CF}{\mscrz }{\mathalpha}{mathematical script small z}% -\UnicodeMathSymbol{"1D4D0}{\mbfscrA }{\mathalpha}{mathematical bold script capital a}% -\UnicodeMathSymbol{"1D4D1}{\mbfscrB }{\mathalpha}{mathematical bold script capital b}% -\UnicodeMathSymbol{"1D4D2}{\mbfscrC }{\mathalpha}{mathematical bold script capital c}% -\UnicodeMathSymbol{"1D4D3}{\mbfscrD }{\mathalpha}{mathematical bold script capital d}% -\UnicodeMathSymbol{"1D4D4}{\mbfscrE }{\mathalpha}{mathematical bold script capital e}% -\UnicodeMathSymbol{"1D4D5}{\mbfscrF }{\mathalpha}{mathematical bold script capital f}% -\UnicodeMathSymbol{"1D4D6}{\mbfscrG }{\mathalpha}{mathematical bold script capital g}% -\UnicodeMathSymbol{"1D4D7}{\mbfscrH }{\mathalpha}{mathematical bold script capital h}% -\UnicodeMathSymbol{"1D4D8}{\mbfscrI }{\mathalpha}{mathematical bold script capital i}% -\UnicodeMathSymbol{"1D4D9}{\mbfscrJ }{\mathalpha}{mathematical bold script capital j}% -\UnicodeMathSymbol{"1D4DA}{\mbfscrK }{\mathalpha}{mathematical bold script capital k}% -\UnicodeMathSymbol{"1D4DB}{\mbfscrL }{\mathalpha}{mathematical bold script capital l}% -\UnicodeMathSymbol{"1D4DC}{\mbfscrM }{\mathalpha}{mathematical bold script capital m}% -\UnicodeMathSymbol{"1D4DD}{\mbfscrN }{\mathalpha}{mathematical bold script capital n}% -\UnicodeMathSymbol{"1D4DE}{\mbfscrO }{\mathalpha}{mathematical bold script capital o}% -\UnicodeMathSymbol{"1D4DF}{\mbfscrP }{\mathalpha}{mathematical bold script capital p}% -\UnicodeMathSymbol{"1D4E0}{\mbfscrQ }{\mathalpha}{mathematical bold script capital q}% -\UnicodeMathSymbol{"1D4E1}{\mbfscrR }{\mathalpha}{mathematical bold script capital r}% -\UnicodeMathSymbol{"1D4E2}{\mbfscrS }{\mathalpha}{mathematical bold script capital s}% -\UnicodeMathSymbol{"1D4E3}{\mbfscrT }{\mathalpha}{mathematical bold script capital t}% -\UnicodeMathSymbol{"1D4E4}{\mbfscrU }{\mathalpha}{mathematical bold script capital u}% -\UnicodeMathSymbol{"1D4E5}{\mbfscrV }{\mathalpha}{mathematical bold script capital v}% -\UnicodeMathSymbol{"1D4E6}{\mbfscrW }{\mathalpha}{mathematical bold script capital w}% -\UnicodeMathSymbol{"1D4E7}{\mbfscrX }{\mathalpha}{mathematical bold script capital x}% -\UnicodeMathSymbol{"1D4E8}{\mbfscrY }{\mathalpha}{mathematical bold script capital y}% -\UnicodeMathSymbol{"1D4E9}{\mbfscrZ }{\mathalpha}{mathematical bold script capital z}% -\UnicodeMathSymbol{"1D4EA}{\mbfscra }{\mathalpha}{mathematical bold script small a}% -\UnicodeMathSymbol{"1D4EB}{\mbfscrb }{\mathalpha}{mathematical bold script small b}% -\UnicodeMathSymbol{"1D4EC}{\mbfscrc }{\mathalpha}{mathematical bold script small c}% -\UnicodeMathSymbol{"1D4ED}{\mbfscrd }{\mathalpha}{mathematical bold script small d}% -\UnicodeMathSymbol{"1D4EE}{\mbfscre }{\mathalpha}{mathematical bold script small e}% -\UnicodeMathSymbol{"1D4EF}{\mbfscrf }{\mathalpha}{mathematical bold script small f}% -\UnicodeMathSymbol{"1D4F0}{\mbfscrg }{\mathalpha}{mathematical bold script small g}% -\UnicodeMathSymbol{"1D4F1}{\mbfscrh }{\mathalpha}{mathematical bold script small h}% -\UnicodeMathSymbol{"1D4F2}{\mbfscri }{\mathalpha}{mathematical bold script small i}% -\UnicodeMathSymbol{"1D4F3}{\mbfscrj }{\mathalpha}{mathematical bold script small j}% -\UnicodeMathSymbol{"1D4F4}{\mbfscrk }{\mathalpha}{mathematical bold script small k}% -\UnicodeMathSymbol{"1D4F5}{\mbfscrl }{\mathalpha}{mathematical bold script small l}% -\UnicodeMathSymbol{"1D4F6}{\mbfscrm }{\mathalpha}{mathematical bold script small m}% -\UnicodeMathSymbol{"1D4F7}{\mbfscrn }{\mathalpha}{mathematical bold script small n}% -\UnicodeMathSymbol{"1D4F8}{\mbfscro }{\mathalpha}{mathematical bold script small o}% -\UnicodeMathSymbol{"1D4F9}{\mbfscrp }{\mathalpha}{mathematical bold script small p}% -\UnicodeMathSymbol{"1D4FA}{\mbfscrq }{\mathalpha}{mathematical bold script small q}% -\UnicodeMathSymbol{"1D4FB}{\mbfscrr }{\mathalpha}{mathematical bold script small r}% -\UnicodeMathSymbol{"1D4FC}{\mbfscrs }{\mathalpha}{mathematical bold script small s}% -\UnicodeMathSymbol{"1D4FD}{\mbfscrt }{\mathalpha}{mathematical bold script small t}% -\UnicodeMathSymbol{"1D4FE}{\mbfscru }{\mathalpha}{mathematical bold script small u}% -\UnicodeMathSymbol{"1D4FF}{\mbfscrv }{\mathalpha}{mathematical bold script small v}% -\UnicodeMathSymbol{"1D500}{\mbfscrw }{\mathalpha}{mathematical bold script small w}% -\UnicodeMathSymbol{"1D501}{\mbfscrx }{\mathalpha}{mathematical bold script small x}% -\UnicodeMathSymbol{"1D502}{\mbfscry }{\mathalpha}{mathematical bold script small y}% -\UnicodeMathSymbol{"1D503}{\mbfscrz }{\mathalpha}{mathematical bold script small z}% -\UnicodeMathSymbol{"1D504}{\mfrakA }{\mathalpha}{mathematical fraktur capital a}% -\UnicodeMathSymbol{"1D505}{\mfrakB }{\mathalpha}{mathematical fraktur capital b}% -\UnicodeMathSymbol{"1D507}{\mfrakD }{\mathalpha}{mathematical fraktur capital d}% -\UnicodeMathSymbol{"1D508}{\mfrakE }{\mathalpha}{mathematical fraktur capital e}% -\UnicodeMathSymbol{"1D509}{\mfrakF }{\mathalpha}{mathematical fraktur capital f}% -\UnicodeMathSymbol{"1D50A}{\mfrakG }{\mathalpha}{mathematical fraktur capital g}% -\UnicodeMathSymbol{"1D50D}{\mfrakJ }{\mathalpha}{mathematical fraktur capital j}% -\UnicodeMathSymbol{"1D50E}{\mfrakK }{\mathalpha}{mathematical fraktur capital k}% -\UnicodeMathSymbol{"1D50F}{\mfrakL }{\mathalpha}{mathematical fraktur capital l}% -\UnicodeMathSymbol{"1D510}{\mfrakM }{\mathalpha}{mathematical fraktur capital m}% -\UnicodeMathSymbol{"1D511}{\mfrakN }{\mathalpha}{mathematical fraktur capital n}% -\UnicodeMathSymbol{"1D512}{\mfrakO }{\mathalpha}{mathematical fraktur capital o}% -\UnicodeMathSymbol{"1D513}{\mfrakP }{\mathalpha}{mathematical fraktur capital p}% -\UnicodeMathSymbol{"1D514}{\mfrakQ }{\mathalpha}{mathematical fraktur capital q}% -\UnicodeMathSymbol{"1D516}{\mfrakS }{\mathalpha}{mathematical fraktur capital s}% -\UnicodeMathSymbol{"1D517}{\mfrakT }{\mathalpha}{mathematical fraktur capital t}% -\UnicodeMathSymbol{"1D518}{\mfrakU }{\mathalpha}{mathematical fraktur capital u}% -\UnicodeMathSymbol{"1D519}{\mfrakV }{\mathalpha}{mathematical fraktur capital v}% -\UnicodeMathSymbol{"1D51A}{\mfrakW }{\mathalpha}{mathematical fraktur capital w}% -\UnicodeMathSymbol{"1D51B}{\mfrakX }{\mathalpha}{mathematical fraktur capital x}% -\UnicodeMathSymbol{"1D51C}{\mfrakY }{\mathalpha}{mathematical fraktur capital y}% -\UnicodeMathSymbol{"1D51E}{\mfraka }{\mathalpha}{mathematical fraktur small a}% -\UnicodeMathSymbol{"1D51F}{\mfrakb }{\mathalpha}{mathematical fraktur small b}% -\UnicodeMathSymbol{"1D520}{\mfrakc }{\mathalpha}{mathematical fraktur small c}% -\UnicodeMathSymbol{"1D521}{\mfrakd }{\mathalpha}{mathematical fraktur small d}% -\UnicodeMathSymbol{"1D522}{\mfrake }{\mathalpha}{mathematical fraktur small e}% -\UnicodeMathSymbol{"1D523}{\mfrakf }{\mathalpha}{mathematical fraktur small f}% -\UnicodeMathSymbol{"1D524}{\mfrakg }{\mathalpha}{mathematical fraktur small g}% -\UnicodeMathSymbol{"1D525}{\mfrakh }{\mathalpha}{mathematical fraktur small h}% -\UnicodeMathSymbol{"1D526}{\mfraki }{\mathalpha}{mathematical fraktur small i}% -\UnicodeMathSymbol{"1D527}{\mfrakj }{\mathalpha}{mathematical fraktur small j}% -\UnicodeMathSymbol{"1D528}{\mfrakk }{\mathalpha}{mathematical fraktur small k}% -\UnicodeMathSymbol{"1D529}{\mfrakl }{\mathalpha}{mathematical fraktur small l}% -\UnicodeMathSymbol{"1D52A}{\mfrakm }{\mathalpha}{mathematical fraktur small m}% -\UnicodeMathSymbol{"1D52B}{\mfrakn }{\mathalpha}{mathematical fraktur small n}% -\UnicodeMathSymbol{"1D52C}{\mfrako }{\mathalpha}{mathematical fraktur small o}% -\UnicodeMathSymbol{"1D52D}{\mfrakp }{\mathalpha}{mathematical fraktur small p}% -\UnicodeMathSymbol{"1D52E}{\mfrakq }{\mathalpha}{mathematical fraktur small q}% -\UnicodeMathSymbol{"1D52F}{\mfrakr }{\mathalpha}{mathematical fraktur small r}% -\UnicodeMathSymbol{"1D530}{\mfraks }{\mathalpha}{mathematical fraktur small s}% -\UnicodeMathSymbol{"1D531}{\mfrakt }{\mathalpha}{mathematical fraktur small t}% -\UnicodeMathSymbol{"1D532}{\mfraku }{\mathalpha}{mathematical fraktur small u}% -\UnicodeMathSymbol{"1D533}{\mfrakv }{\mathalpha}{mathematical fraktur small v}% -\UnicodeMathSymbol{"1D534}{\mfrakw }{\mathalpha}{mathematical fraktur small w}% -\UnicodeMathSymbol{"1D535}{\mfrakx }{\mathalpha}{mathematical fraktur small x}% -\UnicodeMathSymbol{"1D536}{\mfraky }{\mathalpha}{mathematical fraktur small y}% -\UnicodeMathSymbol{"1D537}{\mfrakz }{\mathalpha}{mathematical fraktur small z}% -\UnicodeMathSymbol{"1D538}{\BbbA }{\mathalpha}{mathematical double-struck capital a}% -\UnicodeMathSymbol{"1D539}{\BbbB }{\mathalpha}{mathematical double-struck capital b}% -\UnicodeMathSymbol{"1D53B}{\BbbD }{\mathalpha}{mathematical double-struck capital d}% -\UnicodeMathSymbol{"1D53C}{\BbbE }{\mathalpha}{mathematical double-struck capital e}% -\UnicodeMathSymbol{"1D53D}{\BbbF }{\mathalpha}{mathematical double-struck capital f}% -\UnicodeMathSymbol{"1D53E}{\BbbG }{\mathalpha}{mathematical double-struck capital g}% -\UnicodeMathSymbol{"1D540}{\BbbI }{\mathalpha}{mathematical double-struck capital i}% -\UnicodeMathSymbol{"1D541}{\BbbJ }{\mathalpha}{mathematical double-struck capital j}% -\UnicodeMathSymbol{"1D542}{\BbbK }{\mathalpha}{mathematical double-struck capital k}% -\UnicodeMathSymbol{"1D543}{\BbbL }{\mathalpha}{mathematical double-struck capital l}% -\UnicodeMathSymbol{"1D544}{\BbbM }{\mathalpha}{mathematical double-struck capital m}% -\UnicodeMathSymbol{"1D546}{\BbbO }{\mathalpha}{mathematical double-struck capital o}% -\UnicodeMathSymbol{"1D54A}{\BbbS }{\mathalpha}{mathematical double-struck capital s}% -\UnicodeMathSymbol{"1D54B}{\BbbT }{\mathalpha}{mathematical double-struck capital t}% -\UnicodeMathSymbol{"1D54C}{\BbbU }{\mathalpha}{mathematical double-struck capital u}% -\UnicodeMathSymbol{"1D54D}{\BbbV }{\mathalpha}{mathematical double-struck capital v}% -\UnicodeMathSymbol{"1D54E}{\BbbW }{\mathalpha}{mathematical double-struck capital w}% -\UnicodeMathSymbol{"1D54F}{\BbbX }{\mathalpha}{mathematical double-struck capital x}% -\UnicodeMathSymbol{"1D550}{\BbbY }{\mathalpha}{mathematical double-struck capital y}% -\UnicodeMathSymbol{"1D552}{\Bbba }{\mathalpha}{mathematical double-struck small a}% -\UnicodeMathSymbol{"1D553}{\Bbbb }{\mathalpha}{mathematical double-struck small b}% -\UnicodeMathSymbol{"1D554}{\Bbbc }{\mathalpha}{mathematical double-struck small c}% -\UnicodeMathSymbol{"1D555}{\Bbbd }{\mathalpha}{mathematical double-struck small d}% -\UnicodeMathSymbol{"1D556}{\Bbbe }{\mathalpha}{mathematical double-struck small e}% -\UnicodeMathSymbol{"1D557}{\Bbbf }{\mathalpha}{mathematical double-struck small f}% -\UnicodeMathSymbol{"1D558}{\Bbbg }{\mathalpha}{mathematical double-struck small g}% -\UnicodeMathSymbol{"1D559}{\Bbbh }{\mathalpha}{mathematical double-struck small h}% -\UnicodeMathSymbol{"1D55A}{\Bbbi }{\mathalpha}{mathematical double-struck small i}% -\UnicodeMathSymbol{"1D55B}{\Bbbj }{\mathalpha}{mathematical double-struck small j}% -\UnicodeMathSymbol{"1D55C}{\Bbbk }{\mathalpha}{mathematical double-struck small k}% -\UnicodeMathSymbol{"1D55D}{\Bbbl }{\mathalpha}{mathematical double-struck small l}% -\UnicodeMathSymbol{"1D55E}{\Bbbm }{\mathalpha}{mathematical double-struck small m}% -\UnicodeMathSymbol{"1D55F}{\Bbbn }{\mathalpha}{mathematical double-struck small n}% -\UnicodeMathSymbol{"1D560}{\Bbbo }{\mathalpha}{mathematical double-struck small o}% -\UnicodeMathSymbol{"1D561}{\Bbbp }{\mathalpha}{mathematical double-struck small p}% -\UnicodeMathSymbol{"1D562}{\Bbbq }{\mathalpha}{mathematical double-struck small q}% -\UnicodeMathSymbol{"1D563}{\Bbbr }{\mathalpha}{mathematical double-struck small r}% -\UnicodeMathSymbol{"1D564}{\Bbbs }{\mathalpha}{mathematical double-struck small s}% -\UnicodeMathSymbol{"1D565}{\Bbbt }{\mathalpha}{mathematical double-struck small t}% -\UnicodeMathSymbol{"1D566}{\Bbbu }{\mathalpha}{mathematical double-struck small u}% -\UnicodeMathSymbol{"1D567}{\Bbbv }{\mathalpha}{mathematical double-struck small v}% -\UnicodeMathSymbol{"1D568}{\Bbbw }{\mathalpha}{mathematical double-struck small w}% -\UnicodeMathSymbol{"1D569}{\Bbbx }{\mathalpha}{mathematical double-struck small x}% -\UnicodeMathSymbol{"1D56A}{\Bbby }{\mathalpha}{mathematical double-struck small y}% -\UnicodeMathSymbol{"1D56B}{\Bbbz }{\mathalpha}{mathematical double-struck small z}% -\UnicodeMathSymbol{"1D56C}{\mbffrakA }{\mathalpha}{mathematical bold fraktur capital a}% -\UnicodeMathSymbol{"1D56D}{\mbffrakB }{\mathalpha}{mathematical bold fraktur capital b}% -\UnicodeMathSymbol{"1D56E}{\mbffrakC }{\mathalpha}{mathematical bold fraktur capital c}% -\UnicodeMathSymbol{"1D56F}{\mbffrakD }{\mathalpha}{mathematical bold fraktur capital d}% -\UnicodeMathSymbol{"1D570}{\mbffrakE }{\mathalpha}{mathematical bold fraktur capital e}% -\UnicodeMathSymbol{"1D571}{\mbffrakF }{\mathalpha}{mathematical bold fraktur capital f}% -\UnicodeMathSymbol{"1D572}{\mbffrakG }{\mathalpha}{mathematical bold fraktur capital g}% -\UnicodeMathSymbol{"1D573}{\mbffrakH }{\mathalpha}{mathematical bold fraktur capital h}% -\UnicodeMathSymbol{"1D574}{\mbffrakI }{\mathalpha}{mathematical bold fraktur capital i}% -\UnicodeMathSymbol{"1D575}{\mbffrakJ }{\mathalpha}{mathematical bold fraktur capital j}% -\UnicodeMathSymbol{"1D576}{\mbffrakK }{\mathalpha}{mathematical bold fraktur capital k}% -\UnicodeMathSymbol{"1D577}{\mbffrakL }{\mathalpha}{mathematical bold fraktur capital l}% -\UnicodeMathSymbol{"1D578}{\mbffrakM }{\mathalpha}{mathematical bold fraktur capital m}% -\UnicodeMathSymbol{"1D579}{\mbffrakN }{\mathalpha}{mathematical bold fraktur capital n}% -\UnicodeMathSymbol{"1D57A}{\mbffrakO }{\mathalpha}{mathematical bold fraktur capital o}% -\UnicodeMathSymbol{"1D57B}{\mbffrakP }{\mathalpha}{mathematical bold fraktur capital p}% -\UnicodeMathSymbol{"1D57C}{\mbffrakQ }{\mathalpha}{mathematical bold fraktur capital q}% -\UnicodeMathSymbol{"1D57D}{\mbffrakR }{\mathalpha}{mathematical bold fraktur capital r}% -\UnicodeMathSymbol{"1D57E}{\mbffrakS }{\mathalpha}{mathematical bold fraktur capital s}% -\UnicodeMathSymbol{"1D57F}{\mbffrakT }{\mathalpha}{mathematical bold fraktur capital t}% -\UnicodeMathSymbol{"1D580}{\mbffrakU }{\mathalpha}{mathematical bold fraktur capital u}% -\UnicodeMathSymbol{"1D581}{\mbffrakV }{\mathalpha}{mathematical bold fraktur capital v}% -\UnicodeMathSymbol{"1D582}{\mbffrakW }{\mathalpha}{mathematical bold fraktur capital w}% -\UnicodeMathSymbol{"1D583}{\mbffrakX }{\mathalpha}{mathematical bold fraktur capital x}% -\UnicodeMathSymbol{"1D584}{\mbffrakY }{\mathalpha}{mathematical bold fraktur capital y}% -\UnicodeMathSymbol{"1D585}{\mbffrakZ }{\mathalpha}{mathematical bold fraktur capital z}% -\UnicodeMathSymbol{"1D586}{\mbffraka }{\mathalpha}{mathematical bold fraktur small a}% -\UnicodeMathSymbol{"1D587}{\mbffrakb }{\mathalpha}{mathematical bold fraktur small b}% -\UnicodeMathSymbol{"1D588}{\mbffrakc }{\mathalpha}{mathematical bold fraktur small c}% -\UnicodeMathSymbol{"1D589}{\mbffrakd }{\mathalpha}{mathematical bold fraktur small d}% -\UnicodeMathSymbol{"1D58A}{\mbffrake }{\mathalpha}{mathematical bold fraktur small e}% -\UnicodeMathSymbol{"1D58B}{\mbffrakf }{\mathalpha}{mathematical bold fraktur small f}% -\UnicodeMathSymbol{"1D58C}{\mbffrakg }{\mathalpha}{mathematical bold fraktur small g}% -\UnicodeMathSymbol{"1D58D}{\mbffrakh }{\mathalpha}{mathematical bold fraktur small h}% -\UnicodeMathSymbol{"1D58E}{\mbffraki }{\mathalpha}{mathematical bold fraktur small i}% -\UnicodeMathSymbol{"1D58F}{\mbffrakj }{\mathalpha}{mathematical bold fraktur small j}% -\UnicodeMathSymbol{"1D590}{\mbffrakk }{\mathalpha}{mathematical bold fraktur small k}% -\UnicodeMathSymbol{"1D591}{\mbffrakl }{\mathalpha}{mathematical bold fraktur small l}% -\UnicodeMathSymbol{"1D592}{\mbffrakm }{\mathalpha}{mathematical bold fraktur small m}% -\UnicodeMathSymbol{"1D593}{\mbffrakn }{\mathalpha}{mathematical bold fraktur small n}% -\UnicodeMathSymbol{"1D594}{\mbffrako }{\mathalpha}{mathematical bold fraktur small o}% -\UnicodeMathSymbol{"1D595}{\mbffrakp }{\mathalpha}{mathematical bold fraktur small p}% -\UnicodeMathSymbol{"1D596}{\mbffrakq }{\mathalpha}{mathematical bold fraktur small q}% -\UnicodeMathSymbol{"1D597}{\mbffrakr }{\mathalpha}{mathematical bold fraktur small r}% -\UnicodeMathSymbol{"1D598}{\mbffraks }{\mathalpha}{mathematical bold fraktur small s}% -\UnicodeMathSymbol{"1D599}{\mbffrakt }{\mathalpha}{mathematical bold fraktur small t}% -\UnicodeMathSymbol{"1D59A}{\mbffraku }{\mathalpha}{mathematical bold fraktur small u}% -\UnicodeMathSymbol{"1D59B}{\mbffrakv }{\mathalpha}{mathematical bold fraktur small v}% -\UnicodeMathSymbol{"1D59C}{\mbffrakw }{\mathalpha}{mathematical bold fraktur small w}% -\UnicodeMathSymbol{"1D59D}{\mbffrakx }{\mathalpha}{mathematical bold fraktur small x}% -\UnicodeMathSymbol{"1D59E}{\mbffraky }{\mathalpha}{mathematical bold fraktur small y}% -\UnicodeMathSymbol{"1D59F}{\mbffrakz }{\mathalpha}{mathematical bold fraktur small z}% -\UnicodeMathSymbol{"1D5A0}{\msansA }{\mathalpha}{mathematical sans-serif capital a}% -\UnicodeMathSymbol{"1D5A1}{\msansB }{\mathalpha}{mathematical sans-serif capital b}% -\UnicodeMathSymbol{"1D5A2}{\msansC }{\mathalpha}{mathematical sans-serif capital c}% -\UnicodeMathSymbol{"1D5A3}{\msansD }{\mathalpha}{mathematical sans-serif capital d}% -\UnicodeMathSymbol{"1D5A4}{\msansE }{\mathalpha}{mathematical sans-serif capital e}% -\UnicodeMathSymbol{"1D5A5}{\msansF }{\mathalpha}{mathematical sans-serif capital f}% -\UnicodeMathSymbol{"1D5A6}{\msansG }{\mathalpha}{mathematical sans-serif capital g}% -\UnicodeMathSymbol{"1D5A7}{\msansH }{\mathalpha}{mathematical sans-serif capital h}% -\UnicodeMathSymbol{"1D5A8}{\msansI }{\mathalpha}{mathematical sans-serif capital i}% -\UnicodeMathSymbol{"1D5A9}{\msansJ }{\mathalpha}{mathematical sans-serif capital j}% -\UnicodeMathSymbol{"1D5AA}{\msansK }{\mathalpha}{mathematical sans-serif capital k}% -\UnicodeMathSymbol{"1D5AB}{\msansL }{\mathalpha}{mathematical sans-serif capital l}% -\UnicodeMathSymbol{"1D5AC}{\msansM }{\mathalpha}{mathematical sans-serif capital m}% -\UnicodeMathSymbol{"1D5AD}{\msansN }{\mathalpha}{mathematical sans-serif capital n}% -\UnicodeMathSymbol{"1D5AE}{\msansO }{\mathalpha}{mathematical sans-serif capital o}% -\UnicodeMathSymbol{"1D5AF}{\msansP }{\mathalpha}{mathematical sans-serif capital p}% -\UnicodeMathSymbol{"1D5B0}{\msansQ }{\mathalpha}{mathematical sans-serif capital q}% -\UnicodeMathSymbol{"1D5B1}{\msansR }{\mathalpha}{mathematical sans-serif capital r}% -\UnicodeMathSymbol{"1D5B2}{\msansS }{\mathalpha}{mathematical sans-serif capital s}% -\UnicodeMathSymbol{"1D5B3}{\msansT }{\mathalpha}{mathematical sans-serif capital t}% -\UnicodeMathSymbol{"1D5B4}{\msansU }{\mathalpha}{mathematical sans-serif capital u}% -\UnicodeMathSymbol{"1D5B5}{\msansV }{\mathalpha}{mathematical sans-serif capital v}% -\UnicodeMathSymbol{"1D5B6}{\msansW }{\mathalpha}{mathematical sans-serif capital w}% -\UnicodeMathSymbol{"1D5B7}{\msansX }{\mathalpha}{mathematical sans-serif capital x}% -\UnicodeMathSymbol{"1D5B8}{\msansY }{\mathalpha}{mathematical sans-serif capital y}% -\UnicodeMathSymbol{"1D5B9}{\msansZ }{\mathalpha}{mathematical sans-serif capital z}% -\UnicodeMathSymbol{"1D5BA}{\msansa }{\mathalpha}{mathematical sans-serif small a}% -\UnicodeMathSymbol{"1D5BB}{\msansb }{\mathalpha}{mathematical sans-serif small b}% -\UnicodeMathSymbol{"1D5BC}{\msansc }{\mathalpha}{mathematical sans-serif small c}% -\UnicodeMathSymbol{"1D5BD}{\msansd }{\mathalpha}{mathematical sans-serif small d}% -\UnicodeMathSymbol{"1D5BE}{\msanse }{\mathalpha}{mathematical sans-serif small e}% -\UnicodeMathSymbol{"1D5BF}{\msansf }{\mathalpha}{mathematical sans-serif small f}% -\UnicodeMathSymbol{"1D5C0}{\msansg }{\mathalpha}{mathematical sans-serif small g}% -\UnicodeMathSymbol{"1D5C1}{\msansh }{\mathalpha}{mathematical sans-serif small h}% -\UnicodeMathSymbol{"1D5C2}{\msansi }{\mathalpha}{mathematical sans-serif small i}% -\UnicodeMathSymbol{"1D5C3}{\msansj }{\mathalpha}{mathematical sans-serif small j}% -\UnicodeMathSymbol{"1D5C4}{\msansk }{\mathalpha}{mathematical sans-serif small k}% -\UnicodeMathSymbol{"1D5C5}{\msansl }{\mathalpha}{mathematical sans-serif small l}% -\UnicodeMathSymbol{"1D5C6}{\msansm }{\mathalpha}{mathematical sans-serif small m}% -\UnicodeMathSymbol{"1D5C7}{\msansn }{\mathalpha}{mathematical sans-serif small n}% -\UnicodeMathSymbol{"1D5C8}{\msanso }{\mathalpha}{mathematical sans-serif small o}% -\UnicodeMathSymbol{"1D5C9}{\msansp }{\mathalpha}{mathematical sans-serif small p}% -\UnicodeMathSymbol{"1D5CA}{\msansq }{\mathalpha}{mathematical sans-serif small q}% -\UnicodeMathSymbol{"1D5CB}{\msansr }{\mathalpha}{mathematical sans-serif small r}% -\UnicodeMathSymbol{"1D5CC}{\msanss }{\mathalpha}{mathematical sans-serif small s}% -\UnicodeMathSymbol{"1D5CD}{\msanst }{\mathalpha}{mathematical sans-serif small t}% -\UnicodeMathSymbol{"1D5CE}{\msansu }{\mathalpha}{mathematical sans-serif small u}% -\UnicodeMathSymbol{"1D5CF}{\msansv }{\mathalpha}{mathematical sans-serif small v}% -\UnicodeMathSymbol{"1D5D0}{\msansw }{\mathalpha}{mathematical sans-serif small w}% -\UnicodeMathSymbol{"1D5D1}{\msansx }{\mathalpha}{mathematical sans-serif small x}% -\UnicodeMathSymbol{"1D5D2}{\msansy }{\mathalpha}{mathematical sans-serif small y}% -\UnicodeMathSymbol{"1D5D3}{\msansz }{\mathalpha}{mathematical sans-serif small z}% -\UnicodeMathSymbol{"1D5D4}{\mbfsansA }{\mathalpha}{mathematical sans-serif bold capital a}% -\UnicodeMathSymbol{"1D5D5}{\mbfsansB }{\mathalpha}{mathematical sans-serif bold capital b}% -\UnicodeMathSymbol{"1D5D6}{\mbfsansC }{\mathalpha}{mathematical sans-serif bold capital c}% -\UnicodeMathSymbol{"1D5D7}{\mbfsansD }{\mathalpha}{mathematical sans-serif bold capital d}% -\UnicodeMathSymbol{"1D5D8}{\mbfsansE }{\mathalpha}{mathematical sans-serif bold capital e}% -\UnicodeMathSymbol{"1D5D9}{\mbfsansF }{\mathalpha}{mathematical sans-serif bold capital f}% -\UnicodeMathSymbol{"1D5DA}{\mbfsansG }{\mathalpha}{mathematical sans-serif bold capital g}% -\UnicodeMathSymbol{"1D5DB}{\mbfsansH }{\mathalpha}{mathematical sans-serif bold capital h}% -\UnicodeMathSymbol{"1D5DC}{\mbfsansI }{\mathalpha}{mathematical sans-serif bold capital i}% -\UnicodeMathSymbol{"1D5DD}{\mbfsansJ }{\mathalpha}{mathematical sans-serif bold capital j}% -\UnicodeMathSymbol{"1D5DE}{\mbfsansK }{\mathalpha}{mathematical sans-serif bold capital k}% -\UnicodeMathSymbol{"1D5DF}{\mbfsansL }{\mathalpha}{mathematical sans-serif bold capital l}% -\UnicodeMathSymbol{"1D5E0}{\mbfsansM }{\mathalpha}{mathematical sans-serif bold capital m}% -\UnicodeMathSymbol{"1D5E1}{\mbfsansN }{\mathalpha}{mathematical sans-serif bold capital n}% -\UnicodeMathSymbol{"1D5E2}{\mbfsansO }{\mathalpha}{mathematical sans-serif bold capital o}% -\UnicodeMathSymbol{"1D5E3}{\mbfsansP }{\mathalpha}{mathematical sans-serif bold capital p}% -\UnicodeMathSymbol{"1D5E4}{\mbfsansQ }{\mathalpha}{mathematical sans-serif bold capital q}% -\UnicodeMathSymbol{"1D5E5}{\mbfsansR }{\mathalpha}{mathematical sans-serif bold capital r}% -\UnicodeMathSymbol{"1D5E6}{\mbfsansS }{\mathalpha}{mathematical sans-serif bold capital s}% -\UnicodeMathSymbol{"1D5E7}{\mbfsansT }{\mathalpha}{mathematical sans-serif bold capital t}% -\UnicodeMathSymbol{"1D5E8}{\mbfsansU }{\mathalpha}{mathematical sans-serif bold capital u}% -\UnicodeMathSymbol{"1D5E9}{\mbfsansV }{\mathalpha}{mathematical sans-serif bold capital v}% -\UnicodeMathSymbol{"1D5EA}{\mbfsansW }{\mathalpha}{mathematical sans-serif bold capital w}% -\UnicodeMathSymbol{"1D5EB}{\mbfsansX }{\mathalpha}{mathematical sans-serif bold capital x}% -\UnicodeMathSymbol{"1D5EC}{\mbfsansY }{\mathalpha}{mathematical sans-serif bold capital y}% -\UnicodeMathSymbol{"1D5ED}{\mbfsansZ }{\mathalpha}{mathematical sans-serif bold capital z}% -\UnicodeMathSymbol{"1D5EE}{\mbfsansa }{\mathalpha}{mathematical sans-serif bold small a}% -\UnicodeMathSymbol{"1D5EF}{\mbfsansb }{\mathalpha}{mathematical sans-serif bold small b}% -\UnicodeMathSymbol{"1D5F0}{\mbfsansc }{\mathalpha}{mathematical sans-serif bold small c}% -\UnicodeMathSymbol{"1D5F1}{\mbfsansd }{\mathalpha}{mathematical sans-serif bold small d}% -\UnicodeMathSymbol{"1D5F2}{\mbfsanse }{\mathalpha}{mathematical sans-serif bold small e}% -\UnicodeMathSymbol{"1D5F3}{\mbfsansf }{\mathalpha}{mathematical sans-serif bold small f}% -\UnicodeMathSymbol{"1D5F4}{\mbfsansg }{\mathalpha}{mathematical sans-serif bold small g}% -\UnicodeMathSymbol{"1D5F5}{\mbfsansh }{\mathalpha}{mathematical sans-serif bold small h}% -\UnicodeMathSymbol{"1D5F6}{\mbfsansi }{\mathalpha}{mathematical sans-serif bold small i}% -\UnicodeMathSymbol{"1D5F7}{\mbfsansj }{\mathalpha}{mathematical sans-serif bold small j}% -\UnicodeMathSymbol{"1D5F8}{\mbfsansk }{\mathalpha}{mathematical sans-serif bold small k}% -\UnicodeMathSymbol{"1D5F9}{\mbfsansl }{\mathalpha}{mathematical sans-serif bold small l}% -\UnicodeMathSymbol{"1D5FA}{\mbfsansm }{\mathalpha}{mathematical sans-serif bold small m}% -\UnicodeMathSymbol{"1D5FB}{\mbfsansn }{\mathalpha}{mathematical sans-serif bold small n}% -\UnicodeMathSymbol{"1D5FC}{\mbfsanso }{\mathalpha}{mathematical sans-serif bold small o}% -\UnicodeMathSymbol{"1D5FD}{\mbfsansp }{\mathalpha}{mathematical sans-serif bold small p}% -\UnicodeMathSymbol{"1D5FE}{\mbfsansq }{\mathalpha}{mathematical sans-serif bold small q}% -\UnicodeMathSymbol{"1D5FF}{\mbfsansr }{\mathalpha}{mathematical sans-serif bold small r}% -\UnicodeMathSymbol{"1D600}{\mbfsanss }{\mathalpha}{mathematical sans-serif bold small s}% -\UnicodeMathSymbol{"1D601}{\mbfsanst }{\mathalpha}{mathematical sans-serif bold small t}% -\UnicodeMathSymbol{"1D602}{\mbfsansu }{\mathalpha}{mathematical sans-serif bold small u}% -\UnicodeMathSymbol{"1D603}{\mbfsansv }{\mathalpha}{mathematical sans-serif bold small v}% -\UnicodeMathSymbol{"1D604}{\mbfsansw }{\mathalpha}{mathematical sans-serif bold small w}% -\UnicodeMathSymbol{"1D605}{\mbfsansx }{\mathalpha}{mathematical sans-serif bold small x}% -\UnicodeMathSymbol{"1D606}{\mbfsansy }{\mathalpha}{mathematical sans-serif bold small y}% -\UnicodeMathSymbol{"1D607}{\mbfsansz }{\mathalpha}{mathematical sans-serif bold small z}% -\UnicodeMathSymbol{"1D608}{\mitsansA }{\mathalpha}{mathematical sans-serif italic capital a}% -\UnicodeMathSymbol{"1D609}{\mitsansB }{\mathalpha}{mathematical sans-serif italic capital b}% -\UnicodeMathSymbol{"1D60A}{\mitsansC }{\mathalpha}{mathematical sans-serif italic capital c}% -\UnicodeMathSymbol{"1D60B}{\mitsansD }{\mathalpha}{mathematical sans-serif italic capital d}% -\UnicodeMathSymbol{"1D60C}{\mitsansE }{\mathalpha}{mathematical sans-serif italic capital e}% -\UnicodeMathSymbol{"1D60D}{\mitsansF }{\mathalpha}{mathematical sans-serif italic capital f}% -\UnicodeMathSymbol{"1D60E}{\mitsansG }{\mathalpha}{mathematical sans-serif italic capital g}% -\UnicodeMathSymbol{"1D60F}{\mitsansH }{\mathalpha}{mathematical sans-serif italic capital h}% -\UnicodeMathSymbol{"1D610}{\mitsansI }{\mathalpha}{mathematical sans-serif italic capital i}% -\UnicodeMathSymbol{"1D611}{\mitsansJ }{\mathalpha}{mathematical sans-serif italic capital j}% -\UnicodeMathSymbol{"1D612}{\mitsansK }{\mathalpha}{mathematical sans-serif italic capital k}% -\UnicodeMathSymbol{"1D613}{\mitsansL }{\mathalpha}{mathematical sans-serif italic capital l}% -\UnicodeMathSymbol{"1D614}{\mitsansM }{\mathalpha}{mathematical sans-serif italic capital m}% -\UnicodeMathSymbol{"1D615}{\mitsansN }{\mathalpha}{mathematical sans-serif italic capital n}% -\UnicodeMathSymbol{"1D616}{\mitsansO }{\mathalpha}{mathematical sans-serif italic capital o}% -\UnicodeMathSymbol{"1D617}{\mitsansP }{\mathalpha}{mathematical sans-serif italic capital p}% -\UnicodeMathSymbol{"1D618}{\mitsansQ }{\mathalpha}{mathematical sans-serif italic capital q}% -\UnicodeMathSymbol{"1D619}{\mitsansR }{\mathalpha}{mathematical sans-serif italic capital r}% -\UnicodeMathSymbol{"1D61A}{\mitsansS }{\mathalpha}{mathematical sans-serif italic capital s}% -\UnicodeMathSymbol{"1D61B}{\mitsansT }{\mathalpha}{mathematical sans-serif italic capital t}% -\UnicodeMathSymbol{"1D61C}{\mitsansU }{\mathalpha}{mathematical sans-serif italic capital u}% -\UnicodeMathSymbol{"1D61D}{\mitsansV }{\mathalpha}{mathematical sans-serif italic capital v}% -\UnicodeMathSymbol{"1D61E}{\mitsansW }{\mathalpha}{mathematical sans-serif italic capital w}% -\UnicodeMathSymbol{"1D61F}{\mitsansX }{\mathalpha}{mathematical sans-serif italic capital x}% -\UnicodeMathSymbol{"1D620}{\mitsansY }{\mathalpha}{mathematical sans-serif italic capital y}% -\UnicodeMathSymbol{"1D621}{\mitsansZ }{\mathalpha}{mathematical sans-serif italic capital z}% -\UnicodeMathSymbol{"1D622}{\mitsansa }{\mathalpha}{mathematical sans-serif italic small a}% -\UnicodeMathSymbol{"1D623}{\mitsansb }{\mathalpha}{mathematical sans-serif italic small b}% -\UnicodeMathSymbol{"1D624}{\mitsansc }{\mathalpha}{mathematical sans-serif italic small c}% -\UnicodeMathSymbol{"1D625}{\mitsansd }{\mathalpha}{mathematical sans-serif italic small d}% -\UnicodeMathSymbol{"1D626}{\mitsanse }{\mathalpha}{mathematical sans-serif italic small e}% -\UnicodeMathSymbol{"1D627}{\mitsansf }{\mathalpha}{mathematical sans-serif italic small f}% -\UnicodeMathSymbol{"1D628}{\mitsansg }{\mathalpha}{mathematical sans-serif italic small g}% -\UnicodeMathSymbol{"1D629}{\mitsansh }{\mathalpha}{mathematical sans-serif italic small h}% -\UnicodeMathSymbol{"1D62A}{\mitsansi }{\mathalpha}{mathematical sans-serif italic small i}% -\UnicodeMathSymbol{"1D62B}{\mitsansj }{\mathalpha}{mathematical sans-serif italic small j}% -\UnicodeMathSymbol{"1D62C}{\mitsansk }{\mathalpha}{mathematical sans-serif italic small k}% -\UnicodeMathSymbol{"1D62D}{\mitsansl }{\mathalpha}{mathematical sans-serif italic small l}% -\UnicodeMathSymbol{"1D62E}{\mitsansm }{\mathalpha}{mathematical sans-serif italic small m}% -\UnicodeMathSymbol{"1D62F}{\mitsansn }{\mathalpha}{mathematical sans-serif italic small n}% -\UnicodeMathSymbol{"1D630}{\mitsanso }{\mathalpha}{mathematical sans-serif italic small o}% -\UnicodeMathSymbol{"1D631}{\mitsansp }{\mathalpha}{mathematical sans-serif italic small p}% -\UnicodeMathSymbol{"1D632}{\mitsansq }{\mathalpha}{mathematical sans-serif italic small q}% -\UnicodeMathSymbol{"1D633}{\mitsansr }{\mathalpha}{mathematical sans-serif italic small r}% -\UnicodeMathSymbol{"1D634}{\mitsanss }{\mathalpha}{mathematical sans-serif italic small s}% -\UnicodeMathSymbol{"1D635}{\mitsanst }{\mathalpha}{mathematical sans-serif italic small t}% -\UnicodeMathSymbol{"1D636}{\mitsansu }{\mathalpha}{mathematical sans-serif italic small u}% -\UnicodeMathSymbol{"1D637}{\mitsansv }{\mathalpha}{mathematical sans-serif italic small v}% -\UnicodeMathSymbol{"1D638}{\mitsansw }{\mathalpha}{mathematical sans-serif italic small w}% -\UnicodeMathSymbol{"1D639}{\mitsansx }{\mathalpha}{mathematical sans-serif italic small x}% -\UnicodeMathSymbol{"1D63A}{\mitsansy }{\mathalpha}{mathematical sans-serif italic small y}% -\UnicodeMathSymbol{"1D63B}{\mitsansz }{\mathalpha}{mathematical sans-serif italic small z}% -\UnicodeMathSymbol{"1D63C}{\mbfitsansA }{\mathalpha}{mathematical sans-serif bold italic capital a}% -\UnicodeMathSymbol{"1D63D}{\mbfitsansB }{\mathalpha}{mathematical sans-serif bold italic capital b}% -\UnicodeMathSymbol{"1D63E}{\mbfitsansC }{\mathalpha}{mathematical sans-serif bold italic capital c}% -\UnicodeMathSymbol{"1D63F}{\mbfitsansD }{\mathalpha}{mathematical sans-serif bold italic capital d}% -\UnicodeMathSymbol{"1D640}{\mbfitsansE }{\mathalpha}{mathematical sans-serif bold italic capital e}% -\UnicodeMathSymbol{"1D641}{\mbfitsansF }{\mathalpha}{mathematical sans-serif bold italic capital f}% -\UnicodeMathSymbol{"1D642}{\mbfitsansG }{\mathalpha}{mathematical sans-serif bold italic capital g}% -\UnicodeMathSymbol{"1D643}{\mbfitsansH }{\mathalpha}{mathematical sans-serif bold italic capital h}% -\UnicodeMathSymbol{"1D644}{\mbfitsansI }{\mathalpha}{mathematical sans-serif bold italic capital i}% -\UnicodeMathSymbol{"1D645}{\mbfitsansJ }{\mathalpha}{mathematical sans-serif bold italic capital j}% -\UnicodeMathSymbol{"1D646}{\mbfitsansK }{\mathalpha}{mathematical sans-serif bold italic capital k}% -\UnicodeMathSymbol{"1D647}{\mbfitsansL }{\mathalpha}{mathematical sans-serif bold italic capital l}% -\UnicodeMathSymbol{"1D648}{\mbfitsansM }{\mathalpha}{mathematical sans-serif bold italic capital m}% -\UnicodeMathSymbol{"1D649}{\mbfitsansN }{\mathalpha}{mathematical sans-serif bold italic capital n}% -\UnicodeMathSymbol{"1D64A}{\mbfitsansO }{\mathalpha}{mathematical sans-serif bold italic capital o}% -\UnicodeMathSymbol{"1D64B}{\mbfitsansP }{\mathalpha}{mathematical sans-serif bold italic capital p}% -\UnicodeMathSymbol{"1D64C}{\mbfitsansQ }{\mathalpha}{mathematical sans-serif bold italic capital q}% -\UnicodeMathSymbol{"1D64D}{\mbfitsansR }{\mathalpha}{mathematical sans-serif bold italic capital r}% -\UnicodeMathSymbol{"1D64E}{\mbfitsansS }{\mathalpha}{mathematical sans-serif bold italic capital s}% -\UnicodeMathSymbol{"1D64F}{\mbfitsansT }{\mathalpha}{mathematical sans-serif bold italic capital t}% -\UnicodeMathSymbol{"1D650}{\mbfitsansU }{\mathalpha}{mathematical sans-serif bold italic capital u}% -\UnicodeMathSymbol{"1D651}{\mbfitsansV }{\mathalpha}{mathematical sans-serif bold italic capital v}% -\UnicodeMathSymbol{"1D652}{\mbfitsansW }{\mathalpha}{mathematical sans-serif bold italic capital w}% -\UnicodeMathSymbol{"1D653}{\mbfitsansX }{\mathalpha}{mathematical sans-serif bold italic capital x}% -\UnicodeMathSymbol{"1D654}{\mbfitsansY }{\mathalpha}{mathematical sans-serif bold italic capital y}% -\UnicodeMathSymbol{"1D655}{\mbfitsansZ }{\mathalpha}{mathematical sans-serif bold italic capital z}% -\UnicodeMathSymbol{"1D656}{\mbfitsansa }{\mathalpha}{mathematical sans-serif bold italic small a}% -\UnicodeMathSymbol{"1D657}{\mbfitsansb }{\mathalpha}{mathematical sans-serif bold italic small b}% -\UnicodeMathSymbol{"1D658}{\mbfitsansc }{\mathalpha}{mathematical sans-serif bold italic small c}% -\UnicodeMathSymbol{"1D659}{\mbfitsansd }{\mathalpha}{mathematical sans-serif bold italic small d}% -\UnicodeMathSymbol{"1D65A}{\mbfitsanse }{\mathalpha}{mathematical sans-serif bold italic small e}% -\UnicodeMathSymbol{"1D65B}{\mbfitsansf }{\mathalpha}{mathematical sans-serif bold italic small f}% -\UnicodeMathSymbol{"1D65C}{\mbfitsansg }{\mathalpha}{mathematical sans-serif bold italic small g}% -\UnicodeMathSymbol{"1D65D}{\mbfitsansh }{\mathalpha}{mathematical sans-serif bold italic small h}% -\UnicodeMathSymbol{"1D65E}{\mbfitsansi }{\mathalpha}{mathematical sans-serif bold italic small i}% -\UnicodeMathSymbol{"1D65F}{\mbfitsansj }{\mathalpha}{mathematical sans-serif bold italic small j}% -\UnicodeMathSymbol{"1D660}{\mbfitsansk }{\mathalpha}{mathematical sans-serif bold italic small k}% -\UnicodeMathSymbol{"1D661}{\mbfitsansl }{\mathalpha}{mathematical sans-serif bold italic small l}% -\UnicodeMathSymbol{"1D662}{\mbfitsansm }{\mathalpha}{mathematical sans-serif bold italic small m}% -\UnicodeMathSymbol{"1D663}{\mbfitsansn }{\mathalpha}{mathematical sans-serif bold italic small n}% -\UnicodeMathSymbol{"1D664}{\mbfitsanso }{\mathalpha}{mathematical sans-serif bold italic small o}% -\UnicodeMathSymbol{"1D665}{\mbfitsansp }{\mathalpha}{mathematical sans-serif bold italic small p}% -\UnicodeMathSymbol{"1D666}{\mbfitsansq }{\mathalpha}{mathematical sans-serif bold italic small q}% -\UnicodeMathSymbol{"1D667}{\mbfitsansr }{\mathalpha}{mathematical sans-serif bold italic small r}% -\UnicodeMathSymbol{"1D668}{\mbfitsanss }{\mathalpha}{mathematical sans-serif bold italic small s}% -\UnicodeMathSymbol{"1D669}{\mbfitsanst }{\mathalpha}{mathematical sans-serif bold italic small t}% -\UnicodeMathSymbol{"1D66A}{\mbfitsansu }{\mathalpha}{mathematical sans-serif bold italic small u}% -\UnicodeMathSymbol{"1D66B}{\mbfitsansv }{\mathalpha}{mathematical sans-serif bold italic small v}% -\UnicodeMathSymbol{"1D66C}{\mbfitsansw }{\mathalpha}{mathematical sans-serif bold italic small w}% -\UnicodeMathSymbol{"1D66D}{\mbfitsansx }{\mathalpha}{mathematical sans-serif bold italic small x}% -\UnicodeMathSymbol{"1D66E}{\mbfitsansy }{\mathalpha}{mathematical sans-serif bold italic small y}% -\UnicodeMathSymbol{"1D66F}{\mbfitsansz }{\mathalpha}{mathematical sans-serif bold italic small z}% -\UnicodeMathSymbol{"1D670}{\mttA }{\mathalpha}{mathematical monospace capital a}% -\UnicodeMathSymbol{"1D671}{\mttB }{\mathalpha}{mathematical monospace capital b}% -\UnicodeMathSymbol{"1D672}{\mttC }{\mathalpha}{mathematical monospace capital c}% -\UnicodeMathSymbol{"1D673}{\mttD }{\mathalpha}{mathematical monospace capital d}% -\UnicodeMathSymbol{"1D674}{\mttE }{\mathalpha}{mathematical monospace capital e}% -\UnicodeMathSymbol{"1D675}{\mttF }{\mathalpha}{mathematical monospace capital f}% -\UnicodeMathSymbol{"1D676}{\mttG }{\mathalpha}{mathematical monospace capital g}% -\UnicodeMathSymbol{"1D677}{\mttH }{\mathalpha}{mathematical monospace capital h}% -\UnicodeMathSymbol{"1D678}{\mttI }{\mathalpha}{mathematical monospace capital i}% -\UnicodeMathSymbol{"1D679}{\mttJ }{\mathalpha}{mathematical monospace capital j}% -\UnicodeMathSymbol{"1D67A}{\mttK }{\mathalpha}{mathematical monospace capital k}% -\UnicodeMathSymbol{"1D67B}{\mttL }{\mathalpha}{mathematical monospace capital l}% -\UnicodeMathSymbol{"1D67C}{\mttM }{\mathalpha}{mathematical monospace capital m}% -\UnicodeMathSymbol{"1D67D}{\mttN }{\mathalpha}{mathematical monospace capital n}% -\UnicodeMathSymbol{"1D67E}{\mttO }{\mathalpha}{mathematical monospace capital o}% -\UnicodeMathSymbol{"1D67F}{\mttP }{\mathalpha}{mathematical monospace capital p}% -\UnicodeMathSymbol{"1D680}{\mttQ }{\mathalpha}{mathematical monospace capital q}% -\UnicodeMathSymbol{"1D681}{\mttR }{\mathalpha}{mathematical monospace capital r}% -\UnicodeMathSymbol{"1D682}{\mttS }{\mathalpha}{mathematical monospace capital s}% -\UnicodeMathSymbol{"1D683}{\mttT }{\mathalpha}{mathematical monospace capital t}% -\UnicodeMathSymbol{"1D684}{\mttU }{\mathalpha}{mathematical monospace capital u}% -\UnicodeMathSymbol{"1D685}{\mttV }{\mathalpha}{mathematical monospace capital v}% -\UnicodeMathSymbol{"1D686}{\mttW }{\mathalpha}{mathematical monospace capital w}% -\UnicodeMathSymbol{"1D687}{\mttX }{\mathalpha}{mathematical monospace capital x}% -\UnicodeMathSymbol{"1D688}{\mttY }{\mathalpha}{mathematical monospace capital y}% -\UnicodeMathSymbol{"1D689}{\mttZ }{\mathalpha}{mathematical monospace capital z}% -\UnicodeMathSymbol{"1D68A}{\mtta }{\mathalpha}{mathematical monospace small a}% -\UnicodeMathSymbol{"1D68B}{\mttb }{\mathalpha}{mathematical monospace small b}% -\UnicodeMathSymbol{"1D68C}{\mttc }{\mathalpha}{mathematical monospace small c}% -\UnicodeMathSymbol{"1D68D}{\mttd }{\mathalpha}{mathematical monospace small d}% -\UnicodeMathSymbol{"1D68E}{\mtte }{\mathalpha}{mathematical monospace small e}% -\UnicodeMathSymbol{"1D68F}{\mttf }{\mathalpha}{mathematical monospace small f}% -\UnicodeMathSymbol{"1D690}{\mttg }{\mathalpha}{mathematical monospace small g}% -\UnicodeMathSymbol{"1D691}{\mtth }{\mathalpha}{mathematical monospace small h}% -\UnicodeMathSymbol{"1D692}{\mtti }{\mathalpha}{mathematical monospace small i}% -\UnicodeMathSymbol{"1D693}{\mttj }{\mathalpha}{mathematical monospace small j}% -\UnicodeMathSymbol{"1D694}{\mttk }{\mathalpha}{mathematical monospace small k}% -\UnicodeMathSymbol{"1D695}{\mttl }{\mathalpha}{mathematical monospace small l}% -\UnicodeMathSymbol{"1D696}{\mttm }{\mathalpha}{mathematical monospace small m}% -\UnicodeMathSymbol{"1D697}{\mttn }{\mathalpha}{mathematical monospace small n}% -\UnicodeMathSymbol{"1D698}{\mtto }{\mathalpha}{mathematical monospace small o}% -\UnicodeMathSymbol{"1D699}{\mttp }{\mathalpha}{mathematical monospace small p}% -\UnicodeMathSymbol{"1D69A}{\mttq }{\mathalpha}{mathematical monospace small q}% -\UnicodeMathSymbol{"1D69B}{\mttr }{\mathalpha}{mathematical monospace small r}% -\UnicodeMathSymbol{"1D69C}{\mtts }{\mathalpha}{mathematical monospace small s}% -\UnicodeMathSymbol{"1D69D}{\mttt }{\mathalpha}{mathematical monospace small t}% -\UnicodeMathSymbol{"1D69E}{\mttu }{\mathalpha}{mathematical monospace small u}% -\UnicodeMathSymbol{"1D69F}{\mttv }{\mathalpha}{mathematical monospace small v}% -\UnicodeMathSymbol{"1D6A0}{\mttw }{\mathalpha}{mathematical monospace small w}% -\UnicodeMathSymbol{"1D6A1}{\mttx }{\mathalpha}{mathematical monospace small x}% -\UnicodeMathSymbol{"1D6A2}{\mtty }{\mathalpha}{mathematical monospace small y}% -\UnicodeMathSymbol{"1D6A3}{\mttz }{\mathalpha}{mathematical monospace small z}% -\UnicodeMathSymbol{"1D6A4}{\imath }{\mathalpha}{mathematical italic small dotless i}% -\UnicodeMathSymbol{"1D6A5}{\jmath }{\mathalpha}{mathematical italic small dotless j}% -\UnicodeMathSymbol{"1D6A8}{\mbfAlpha }{\mathalpha}{mathematical bold capital alpha}% -\UnicodeMathSymbol{"1D6A9}{\mbfBeta }{\mathalpha}{mathematical bold capital beta}% -\UnicodeMathSymbol{"1D6AA}{\mbfGamma }{\mathalpha}{mathematical bold capital gamma}% -\UnicodeMathSymbol{"1D6AB}{\mbfDelta }{\mathalpha}{mathematical bold capital delta}% -\UnicodeMathSymbol{"1D6AC}{\mbfEpsilon }{\mathalpha}{mathematical bold capital epsilon}% -\UnicodeMathSymbol{"1D6AD}{\mbfZeta }{\mathalpha}{mathematical bold capital zeta}% -\UnicodeMathSymbol{"1D6AE}{\mbfEta }{\mathalpha}{mathematical bold capital eta}% -\UnicodeMathSymbol{"1D6AF}{\mbfTheta }{\mathalpha}{mathematical bold capital theta}% -\UnicodeMathSymbol{"1D6B0}{\mbfIota }{\mathalpha}{mathematical bold capital iota}% -\UnicodeMathSymbol{"1D6B1}{\mbfKappa }{\mathalpha}{mathematical bold capital kappa}% -\UnicodeMathSymbol{"1D6B2}{\mbfLambda }{\mathalpha}{mathematical bold capital lambda}% -\UnicodeMathSymbol{"1D6B3}{\mbfMu }{\mathalpha}{mathematical bold capital mu}% -\UnicodeMathSymbol{"1D6B4}{\mbfNu }{\mathalpha}{mathematical bold capital nu}% -\UnicodeMathSymbol{"1D6B5}{\mbfXi }{\mathalpha}{mathematical bold capital xi}% -\UnicodeMathSymbol{"1D6B6}{\mbfOmicron }{\mathalpha}{mathematical bold capital omicron}% -\UnicodeMathSymbol{"1D6B7}{\mbfPi }{\mathalpha}{mathematical bold capital pi}% -\UnicodeMathSymbol{"1D6B8}{\mbfRho }{\mathalpha}{mathematical bold capital rho}% -\UnicodeMathSymbol{"1D6B9}{\mbfvarTheta }{\mathalpha}{mathematical bold capital theta symbol}% -\UnicodeMathSymbol{"1D6BA}{\mbfSigma }{\mathalpha}{mathematical bold capital sigma}% -\UnicodeMathSymbol{"1D6BB}{\mbfTau }{\mathalpha}{mathematical bold capital tau}% -\UnicodeMathSymbol{"1D6BC}{\mbfUpsilon }{\mathalpha}{mathematical bold capital upsilon}% -\UnicodeMathSymbol{"1D6BD}{\mbfPhi }{\mathalpha}{mathematical bold capital phi}% -\UnicodeMathSymbol{"1D6BE}{\mbfChi }{\mathalpha}{mathematical bold capital chi}% -\UnicodeMathSymbol{"1D6BF}{\mbfPsi }{\mathalpha}{mathematical bold capital psi}% -\UnicodeMathSymbol{"1D6C0}{\mbfOmega }{\mathalpha}{mathematical bold capital omega}% -\UnicodeMathSymbol{"1D6C1}{\mbfnabla }{\mathalpha}{mathematical bold nabla}% -\UnicodeMathSymbol{"1D6C2}{\mbfalpha }{\mathalpha}{mathematical bold small alpha}% -\UnicodeMathSymbol{"1D6C3}{\mbfbeta }{\mathalpha}{mathematical bold small beta}% -\UnicodeMathSymbol{"1D6C4}{\mbfgamma }{\mathalpha}{mathematical bold small gamma}% -\UnicodeMathSymbol{"1D6C5}{\mbfdelta }{\mathalpha}{mathematical bold small delta}% -\UnicodeMathSymbol{"1D6C6}{\mbfvarepsilon }{\mathalpha}{mathematical bold small varepsilon}% -\UnicodeMathSymbol{"1D6C7}{\mbfzeta }{\mathalpha}{mathematical bold small zeta}% -\UnicodeMathSymbol{"1D6C8}{\mbfeta }{\mathalpha}{mathematical bold small eta}% -\UnicodeMathSymbol{"1D6C9}{\mbftheta }{\mathalpha}{mathematical bold small theta}% -\UnicodeMathSymbol{"1D6CA}{\mbfiota }{\mathalpha}{mathematical bold small iota}% -\UnicodeMathSymbol{"1D6CB}{\mbfkappa }{\mathalpha}{mathematical bold small kappa}% -\UnicodeMathSymbol{"1D6CC}{\mbflambda }{\mathalpha}{mathematical bold small lambda}% -\UnicodeMathSymbol{"1D6CD}{\mbfmu }{\mathalpha}{mathematical bold small mu}% -\UnicodeMathSymbol{"1D6CE}{\mbfnu }{\mathalpha}{mathematical bold small nu}% -\UnicodeMathSymbol{"1D6CF}{\mbfxi }{\mathalpha}{mathematical bold small xi}% -\UnicodeMathSymbol{"1D6D0}{\mbfomicron }{\mathalpha}{mathematical bold small omicron}% -\UnicodeMathSymbol{"1D6D1}{\mbfpi }{\mathalpha}{mathematical bold small pi}% -\UnicodeMathSymbol{"1D6D2}{\mbfrho }{\mathalpha}{mathematical bold small rho}% -\UnicodeMathSymbol{"1D6D3}{\mbfvarsigma }{\mathalpha}{mathematical bold small final sigma}% -\UnicodeMathSymbol{"1D6D4}{\mbfsigma }{\mathalpha}{mathematical bold small sigma}% -\UnicodeMathSymbol{"1D6D5}{\mbftau }{\mathalpha}{mathematical bold small tau}% -\UnicodeMathSymbol{"1D6D6}{\mbfupsilon }{\mathalpha}{mathematical bold small upsilon}% -\UnicodeMathSymbol{"1D6D7}{\mbfvarphi }{\mathalpha}{mathematical bold small phi}% -\UnicodeMathSymbol{"1D6D8}{\mbfchi }{\mathalpha}{mathematical bold small chi}% -\UnicodeMathSymbol{"1D6D9}{\mbfpsi }{\mathalpha}{mathematical bold small psi}% -\UnicodeMathSymbol{"1D6DA}{\mbfomega }{\mathalpha}{mathematical bold small omega}% -\UnicodeMathSymbol{"1D6DB}{\mbfpartial }{\mathalpha}{mathematical bold partial differential}% -\UnicodeMathSymbol{"1D6DC}{\mbfepsilon }{\mathalpha}{mathematical bold varepsilon symbol}% -\UnicodeMathSymbol{"1D6DD}{\mbfvartheta }{\mathalpha}{mathematical bold theta symbol}% -\UnicodeMathSymbol{"1D6DE}{\mbfvarkappa }{\mathalpha}{mathematical bold kappa symbol}% -\UnicodeMathSymbol{"1D6DF}{\mbfphi }{\mathalpha}{mathematical bold phi symbol}% -\UnicodeMathSymbol{"1D6E0}{\mbfvarrho }{\mathalpha}{mathematical bold rho symbol}% -\UnicodeMathSymbol{"1D6E1}{\mbfvarpi }{\mathalpha}{mathematical bold pi symbol}% -\UnicodeMathSymbol{"1D6E2}{\mitAlpha }{\mathalpha}{mathematical italic capital alpha}% -\UnicodeMathSymbol{"1D6E3}{\mitBeta }{\mathalpha}{mathematical italic capital beta}% -\UnicodeMathSymbol{"1D6E4}{\mitGamma }{\mathalpha}{mathematical italic capital gamma}% -\UnicodeMathSymbol{"1D6E5}{\mitDelta }{\mathalpha}{mathematical italic capital delta}% -\UnicodeMathSymbol{"1D6E6}{\mitEpsilon }{\mathalpha}{mathematical italic capital epsilon}% -\UnicodeMathSymbol{"1D6E7}{\mitZeta }{\mathalpha}{mathematical italic capital zeta}% -\UnicodeMathSymbol{"1D6E8}{\mitEta }{\mathalpha}{mathematical italic capital eta}% -\UnicodeMathSymbol{"1D6E9}{\mitTheta }{\mathalpha}{mathematical italic capital theta}% -\UnicodeMathSymbol{"1D6EA}{\mitIota }{\mathalpha}{mathematical italic capital iota}% -\UnicodeMathSymbol{"1D6EB}{\mitKappa }{\mathalpha}{mathematical italic capital kappa}% -\UnicodeMathSymbol{"1D6EC}{\mitLambda }{\mathalpha}{mathematical italic capital lambda}% -\UnicodeMathSymbol{"1D6ED}{\mitMu }{\mathalpha}{mathematical italic capital mu}% -\UnicodeMathSymbol{"1D6EE}{\mitNu }{\mathalpha}{mathematical italic capital nu}% -\UnicodeMathSymbol{"1D6EF}{\mitXi }{\mathalpha}{mathematical italic capital xi}% -\UnicodeMathSymbol{"1D6F0}{\mitOmicron }{\mathalpha}{mathematical italic capital omicron}% -\UnicodeMathSymbol{"1D6F1}{\mitPi }{\mathalpha}{mathematical italic capital pi}% -\UnicodeMathSymbol{"1D6F2}{\mitRho }{\mathalpha}{mathematical italic capital rho}% -\UnicodeMathSymbol{"1D6F3}{\mitvarTheta }{\mathalpha}{mathematical italic capital theta symbol}% -\UnicodeMathSymbol{"1D6F4}{\mitSigma }{\mathalpha}{mathematical italic capital sigma}% -\UnicodeMathSymbol{"1D6F5}{\mitTau }{\mathalpha}{mathematical italic capital tau}% -\UnicodeMathSymbol{"1D6F6}{\mitUpsilon }{\mathalpha}{mathematical italic capital upsilon}% -\UnicodeMathSymbol{"1D6F7}{\mitPhi }{\mathalpha}{mathematical italic capital phi}% -\UnicodeMathSymbol{"1D6F8}{\mitChi }{\mathalpha}{mathematical italic capital chi}% -\UnicodeMathSymbol{"1D6F9}{\mitPsi }{\mathalpha}{mathematical italic capital psi}% -\UnicodeMathSymbol{"1D6FA}{\mitOmega }{\mathalpha}{mathematical italic capital omega}% -\UnicodeMathSymbol{"1D6FB}{\mitnabla }{\mathalpha}{mathematical italic nabla}% -\UnicodeMathSymbol{"1D6FC}{\mitalpha }{\mathalpha}{mathematical italic small alpha}% -\UnicodeMathSymbol{"1D6FD}{\mitbeta }{\mathalpha}{mathematical italic small beta}% -\UnicodeMathSymbol{"1D6FE}{\mitgamma }{\mathalpha}{mathematical italic small gamma}% -\UnicodeMathSymbol{"1D6FF}{\mitdelta }{\mathalpha}{mathematical italic small delta}% -\UnicodeMathSymbol{"1D700}{\mitvarepsilon }{\mathalpha}{mathematical italic small varepsilon}% -\UnicodeMathSymbol{"1D701}{\mitzeta }{\mathalpha}{mathematical italic small zeta}% -\UnicodeMathSymbol{"1D702}{\miteta }{\mathalpha}{mathematical italic small eta}% -\UnicodeMathSymbol{"1D703}{\mittheta }{\mathalpha}{mathematical italic small theta}% -\UnicodeMathSymbol{"1D704}{\mitiota }{\mathalpha}{mathematical italic small iota}% -\UnicodeMathSymbol{"1D705}{\mitkappa }{\mathalpha}{mathematical italic small kappa}% -\UnicodeMathSymbol{"1D706}{\mitlambda }{\mathalpha}{mathematical italic small lambda}% -\UnicodeMathSymbol{"1D707}{\mitmu }{\mathalpha}{mathematical italic small mu}% -\UnicodeMathSymbol{"1D708}{\mitnu }{\mathalpha}{mathematical italic small nu}% -\UnicodeMathSymbol{"1D709}{\mitxi }{\mathalpha}{mathematical italic small xi}% -\UnicodeMathSymbol{"1D70A}{\mitomicron }{\mathalpha}{mathematical italic small omicron}% -\UnicodeMathSymbol{"1D70B}{\mitpi }{\mathalpha}{mathematical italic small pi}% -\UnicodeMathSymbol{"1D70C}{\mitrho }{\mathalpha}{mathematical italic small rho}% -\UnicodeMathSymbol{"1D70D}{\mitvarsigma }{\mathalpha}{mathematical italic small final sigma}% -\UnicodeMathSymbol{"1D70E}{\mitsigma }{\mathalpha}{mathematical italic small sigma}% -\UnicodeMathSymbol{"1D70F}{\mittau }{\mathalpha}{mathematical italic small tau}% -\UnicodeMathSymbol{"1D710}{\mitupsilon }{\mathalpha}{mathematical italic small upsilon}% -\UnicodeMathSymbol{"1D711}{\mitvarphi }{\mathalpha}{mathematical italic small phi}% -\UnicodeMathSymbol{"1D712}{\mitchi }{\mathalpha}{mathematical italic small chi}% -\UnicodeMathSymbol{"1D713}{\mitpsi }{\mathalpha}{mathematical italic small psi}% -\UnicodeMathSymbol{"1D714}{\mitomega }{\mathalpha}{mathematical italic small omega}% -\UnicodeMathSymbol{"1D715}{\mitpartial }{\mathalpha}{mathematical italic partial differential}% -\UnicodeMathSymbol{"1D716}{\mitepsilon }{\mathalpha}{mathematical italic varepsilon symbol}% -\UnicodeMathSymbol{"1D717}{\mitvartheta }{\mathalpha}{mathematical italic theta symbol}% -\UnicodeMathSymbol{"1D718}{\mitvarkappa }{\mathalpha}{mathematical italic kappa symbol}% -\UnicodeMathSymbol{"1D719}{\mitphi }{\mathalpha}{mathematical italic phi symbol}% -\UnicodeMathSymbol{"1D71A}{\mitvarrho }{\mathalpha}{mathematical italic rho symbol}% -\UnicodeMathSymbol{"1D71B}{\mitvarpi }{\mathalpha}{mathematical italic pi symbol}% -\UnicodeMathSymbol{"1D71C}{\mbfitAlpha }{\mathalpha}{mathematical bold italic capital alpha}% -\UnicodeMathSymbol{"1D71D}{\mbfitBeta }{\mathalpha}{mathematical bold italic capital beta}% -\UnicodeMathSymbol{"1D71E}{\mbfitGamma }{\mathalpha}{mathematical bold italic capital gamma}% -\UnicodeMathSymbol{"1D71F}{\mbfitDelta }{\mathalpha}{mathematical bold italic capital delta}% -\UnicodeMathSymbol{"1D720}{\mbfitEpsilon }{\mathalpha}{mathematical bold italic capital epsilon}% -\UnicodeMathSymbol{"1D721}{\mbfitZeta }{\mathalpha}{mathematical bold italic capital zeta}% -\UnicodeMathSymbol{"1D722}{\mbfitEta }{\mathalpha}{mathematical bold italic capital eta}% -\UnicodeMathSymbol{"1D723}{\mbfitTheta }{\mathalpha}{mathematical bold italic capital theta}% -\UnicodeMathSymbol{"1D724}{\mbfitIota }{\mathalpha}{mathematical bold italic capital iota}% -\UnicodeMathSymbol{"1D725}{\mbfitKappa }{\mathalpha}{mathematical bold italic capital kappa}% -\UnicodeMathSymbol{"1D726}{\mbfitLambda }{\mathalpha}{mathematical bold italic capital lambda}% -\UnicodeMathSymbol{"1D727}{\mbfitMu }{\mathalpha}{mathematical bold italic capital mu}% -\UnicodeMathSymbol{"1D728}{\mbfitNu }{\mathalpha}{mathematical bold italic capital nu}% -\UnicodeMathSymbol{"1D729}{\mbfitXi }{\mathalpha}{mathematical bold italic capital xi}% -\UnicodeMathSymbol{"1D72A}{\mbfitOmicron }{\mathalpha}{mathematical bold italic capital omicron}% -\UnicodeMathSymbol{"1D72B}{\mbfitPi }{\mathalpha}{mathematical bold italic capital pi}% -\UnicodeMathSymbol{"1D72C}{\mbfitRho }{\mathalpha}{mathematical bold italic capital rho}% -\UnicodeMathSymbol{"1D72D}{\mbfitvarTheta }{\mathalpha}{mathematical bold italic capital theta symbol}% -\UnicodeMathSymbol{"1D72E}{\mbfitSigma }{\mathalpha}{mathematical bold italic capital sigma}% -\UnicodeMathSymbol{"1D72F}{\mbfitTau }{\mathalpha}{mathematical bold italic capital tau}% -\UnicodeMathSymbol{"1D730}{\mbfitUpsilon }{\mathalpha}{mathematical bold italic capital upsilon}% -\UnicodeMathSymbol{"1D731}{\mbfitPhi }{\mathalpha}{mathematical bold italic capital phi}% -\UnicodeMathSymbol{"1D732}{\mbfitChi }{\mathalpha}{mathematical bold italic capital chi}% -\UnicodeMathSymbol{"1D733}{\mbfitPsi }{\mathalpha}{mathematical bold italic capital psi}% -\UnicodeMathSymbol{"1D734}{\mbfitOmega }{\mathalpha}{mathematical bold italic capital omega}% -\UnicodeMathSymbol{"1D735}{\mbfitnabla }{\mathalpha}{mathematical bold italic nabla}% -\UnicodeMathSymbol{"1D736}{\mbfitalpha }{\mathalpha}{mathematical bold italic small alpha}% -\UnicodeMathSymbol{"1D737}{\mbfitbeta }{\mathalpha}{mathematical bold italic small beta}% -\UnicodeMathSymbol{"1D738}{\mbfitgamma }{\mathalpha}{mathematical bold italic small gamma}% -\UnicodeMathSymbol{"1D739}{\mbfitdelta }{\mathalpha}{mathematical bold italic small delta}% -\UnicodeMathSymbol{"1D73A}{\mbfitvarepsilon }{\mathalpha}{mathematical bold italic small varepsilon}% -\UnicodeMathSymbol{"1D73B}{\mbfitzeta }{\mathalpha}{mathematical bold italic small zeta}% -\UnicodeMathSymbol{"1D73C}{\mbfiteta }{\mathalpha}{mathematical bold italic small eta}% -\UnicodeMathSymbol{"1D73D}{\mbfittheta }{\mathalpha}{mathematical bold italic small theta}% -\UnicodeMathSymbol{"1D73E}{\mbfitiota }{\mathalpha}{mathematical bold italic small iota}% -\UnicodeMathSymbol{"1D73F}{\mbfitkappa }{\mathalpha}{mathematical bold italic small kappa}% -\UnicodeMathSymbol{"1D740}{\mbfitlambda }{\mathalpha}{mathematical bold italic small lambda}% -\UnicodeMathSymbol{"1D741}{\mbfitmu }{\mathalpha}{mathematical bold italic small mu}% -\UnicodeMathSymbol{"1D742}{\mbfitnu }{\mathalpha}{mathematical bold italic small nu}% -\UnicodeMathSymbol{"1D743}{\mbfitxi }{\mathalpha}{mathematical bold italic small xi}% -\UnicodeMathSymbol{"1D744}{\mbfitomicron }{\mathalpha}{mathematical bold italic small omicron}% -\UnicodeMathSymbol{"1D745}{\mbfitpi }{\mathalpha}{mathematical bold italic small pi}% -\UnicodeMathSymbol{"1D746}{\mbfitrho }{\mathalpha}{mathematical bold italic small rho}% -\UnicodeMathSymbol{"1D747}{\mbfitvarsigma }{\mathalpha}{mathematical bold italic small final sigma}% -\UnicodeMathSymbol{"1D748}{\mbfitsigma }{\mathalpha}{mathematical bold italic small sigma}% -\UnicodeMathSymbol{"1D749}{\mbfittau }{\mathalpha}{mathematical bold italic small tau}% -\UnicodeMathSymbol{"1D74A}{\mbfitupsilon }{\mathalpha}{mathematical bold italic small upsilon}% -\UnicodeMathSymbol{"1D74B}{\mbfitvarphi }{\mathalpha}{mathematical bold italic small phi}% -\UnicodeMathSymbol{"1D74C}{\mbfitchi }{\mathalpha}{mathematical bold italic small chi}% -\UnicodeMathSymbol{"1D74D}{\mbfitpsi }{\mathalpha}{mathematical bold italic small psi}% -\UnicodeMathSymbol{"1D74E}{\mbfitomega }{\mathalpha}{mathematical bold italic small omega}% -\UnicodeMathSymbol{"1D74F}{\mbfitpartial }{\mathalpha}{mathematical bold italic partial differential}% -\UnicodeMathSymbol{"1D750}{\mbfitepsilon }{\mathalpha}{mathematical bold italic varepsilon symbol}% -\UnicodeMathSymbol{"1D751}{\mbfitvartheta }{\mathalpha}{mathematical bold italic theta symbol}% -\UnicodeMathSymbol{"1D752}{\mbfitvarkappa }{\mathalpha}{mathematical bold italic kappa symbol}% -\UnicodeMathSymbol{"1D753}{\mbfitphi }{\mathalpha}{mathematical bold italic phi symbol}% -\UnicodeMathSymbol{"1D754}{\mbfitvarrho }{\mathalpha}{mathematical bold italic rho symbol}% -\UnicodeMathSymbol{"1D755}{\mbfitvarpi }{\mathalpha}{mathematical bold italic pi symbol}% -\UnicodeMathSymbol{"1D756}{\mbfsansAlpha }{\mathalpha}{mathematical sans-serif bold capital alpha}% -\UnicodeMathSymbol{"1D757}{\mbfsansBeta }{\mathalpha}{mathematical sans-serif bold capital beta}% -\UnicodeMathSymbol{"1D758}{\mbfsansGamma }{\mathalpha}{mathematical sans-serif bold capital gamma}% -\UnicodeMathSymbol{"1D759}{\mbfsansDelta }{\mathalpha}{mathematical sans-serif bold capital delta}% -\UnicodeMathSymbol{"1D75A}{\mbfsansEpsilon }{\mathalpha}{mathematical sans-serif bold capital epsilon}% -\UnicodeMathSymbol{"1D75B}{\mbfsansZeta }{\mathalpha}{mathematical sans-serif bold capital zeta}% -\UnicodeMathSymbol{"1D75C}{\mbfsansEta }{\mathalpha}{mathematical sans-serif bold capital eta}% -\UnicodeMathSymbol{"1D75D}{\mbfsansTheta }{\mathalpha}{mathematical sans-serif bold capital theta}% -\UnicodeMathSymbol{"1D75E}{\mbfsansIota }{\mathalpha}{mathematical sans-serif bold capital iota}% -\UnicodeMathSymbol{"1D75F}{\mbfsansKappa }{\mathalpha}{mathematical sans-serif bold capital kappa}% -\UnicodeMathSymbol{"1D760}{\mbfsansLambda }{\mathalpha}{mathematical sans-serif bold capital lambda}% -\UnicodeMathSymbol{"1D761}{\mbfsansMu }{\mathalpha}{mathematical sans-serif bold capital mu}% -\UnicodeMathSymbol{"1D762}{\mbfsansNu }{\mathalpha}{mathematical sans-serif bold capital nu}% -\UnicodeMathSymbol{"1D763}{\mbfsansXi }{\mathalpha}{mathematical sans-serif bold capital xi}% -\UnicodeMathSymbol{"1D764}{\mbfsansOmicron }{\mathalpha}{mathematical sans-serif bold capital omicron}% -\UnicodeMathSymbol{"1D765}{\mbfsansPi }{\mathalpha}{mathematical sans-serif bold capital pi}% -\UnicodeMathSymbol{"1D766}{\mbfsansRho }{\mathalpha}{mathematical sans-serif bold capital rho}% -\UnicodeMathSymbol{"1D767}{\mbfsansvarTheta }{\mathalpha}{mathematical sans-serif bold capital theta symbol}% -\UnicodeMathSymbol{"1D768}{\mbfsansSigma }{\mathalpha}{mathematical sans-serif bold capital sigma}% -\UnicodeMathSymbol{"1D769}{\mbfsansTau }{\mathalpha}{mathematical sans-serif bold capital tau}% -\UnicodeMathSymbol{"1D76A}{\mbfsansUpsilon }{\mathalpha}{mathematical sans-serif bold capital upsilon}% -\UnicodeMathSymbol{"1D76B}{\mbfsansPhi }{\mathalpha}{mathematical sans-serif bold capital phi}% -\UnicodeMathSymbol{"1D76C}{\mbfsansChi }{\mathalpha}{mathematical sans-serif bold capital chi}% -\UnicodeMathSymbol{"1D76D}{\mbfsansPsi }{\mathalpha}{mathematical sans-serif bold capital psi}% -\UnicodeMathSymbol{"1D76E}{\mbfsansOmega }{\mathalpha}{mathematical sans-serif bold capital omega}% -\UnicodeMathSymbol{"1D76F}{\mbfsansnabla }{\mathalpha}{mathematical sans-serif bold nabla}% -\UnicodeMathSymbol{"1D770}{\mbfsansalpha }{\mathalpha}{mathematical sans-serif bold small alpha}% -\UnicodeMathSymbol{"1D771}{\mbfsansbeta }{\mathalpha}{mathematical sans-serif bold small beta}% -\UnicodeMathSymbol{"1D772}{\mbfsansgamma }{\mathalpha}{mathematical sans-serif bold small gamma}% -\UnicodeMathSymbol{"1D773}{\mbfsansdelta }{\mathalpha}{mathematical sans-serif bold small delta}% -\UnicodeMathSymbol{"1D774}{\mbfsansvarepsilon }{\mathalpha}{mathematical sans-serif bold small varepsilon}% -\UnicodeMathSymbol{"1D775}{\mbfsanszeta }{\mathalpha}{mathematical sans-serif bold small zeta}% -\UnicodeMathSymbol{"1D776}{\mbfsanseta }{\mathalpha}{mathematical sans-serif bold small eta}% -\UnicodeMathSymbol{"1D777}{\mbfsanstheta }{\mathalpha}{mathematical sans-serif bold small theta}% -\UnicodeMathSymbol{"1D778}{\mbfsansiota }{\mathalpha}{mathematical sans-serif bold small iota}% -\UnicodeMathSymbol{"1D779}{\mbfsanskappa }{\mathalpha}{mathematical sans-serif bold small kappa}% -\UnicodeMathSymbol{"1D77A}{\mbfsanslambda }{\mathalpha}{mathematical sans-serif bold small lambda}% -\UnicodeMathSymbol{"1D77B}{\mbfsansmu }{\mathalpha}{mathematical sans-serif bold small mu}% -\UnicodeMathSymbol{"1D77C}{\mbfsansnu }{\mathalpha}{mathematical sans-serif bold small nu}% -\UnicodeMathSymbol{"1D77D}{\mbfsansxi }{\mathalpha}{mathematical sans-serif bold small xi}% -\UnicodeMathSymbol{"1D77E}{\mbfsansomicron }{\mathalpha}{mathematical sans-serif bold small omicron}% -\UnicodeMathSymbol{"1D77F}{\mbfsanspi }{\mathalpha}{mathematical sans-serif bold small pi}% -\UnicodeMathSymbol{"1D780}{\mbfsansrho }{\mathalpha}{mathematical sans-serif bold small rho}% -\UnicodeMathSymbol{"1D781}{\mbfsansvarsigma }{\mathalpha}{mathematical sans-serif bold small final sigma}% -\UnicodeMathSymbol{"1D782}{\mbfsanssigma }{\mathalpha}{mathematical sans-serif bold small sigma}% -\UnicodeMathSymbol{"1D783}{\mbfsanstau }{\mathalpha}{mathematical sans-serif bold small tau}% -\UnicodeMathSymbol{"1D784}{\mbfsansupsilon }{\mathalpha}{mathematical sans-serif bold small upsilon}% -\UnicodeMathSymbol{"1D785}{\mbfsansvarphi }{\mathalpha}{mathematical sans-serif bold small phi}% -\UnicodeMathSymbol{"1D786}{\mbfsanschi }{\mathalpha}{mathematical sans-serif bold small chi}% -\UnicodeMathSymbol{"1D787}{\mbfsanspsi }{\mathalpha}{mathematical sans-serif bold small psi}% -\UnicodeMathSymbol{"1D788}{\mbfsansomega }{\mathalpha}{mathematical sans-serif bold small omega}% -\UnicodeMathSymbol{"1D789}{\mbfsanspartial }{\mathalpha}{mathematical sans-serif bold partial differential}% -\UnicodeMathSymbol{"1D78A}{\mbfsansepsilon }{\mathalpha}{mathematical sans-serif bold varepsilon symbol}% -\UnicodeMathSymbol{"1D78B}{\mbfsansvartheta }{\mathalpha}{mathematical sans-serif bold theta symbol}% -\UnicodeMathSymbol{"1D78C}{\mbfsansvarkappa }{\mathalpha}{mathematical sans-serif bold kappa symbol}% -\UnicodeMathSymbol{"1D78D}{\mbfsansphi }{\mathalpha}{mathematical sans-serif bold phi symbol}% -\UnicodeMathSymbol{"1D78E}{\mbfsansvarrho }{\mathalpha}{mathematical sans-serif bold rho symbol}% -\UnicodeMathSymbol{"1D78F}{\mbfsansvarpi }{\mathalpha}{mathematical sans-serif bold pi symbol}% -\UnicodeMathSymbol{"1D790}{\mbfitsansAlpha }{\mathalpha}{mathematical sans-serif bold italic capital alpha}% -\UnicodeMathSymbol{"1D791}{\mbfitsansBeta }{\mathalpha}{mathematical sans-serif bold italic capital beta}% -\UnicodeMathSymbol{"1D792}{\mbfitsansGamma }{\mathalpha}{mathematical sans-serif bold italic capital gamma}% -\UnicodeMathSymbol{"1D793}{\mbfitsansDelta }{\mathalpha}{mathematical sans-serif bold italic capital delta}% -\UnicodeMathSymbol{"1D794}{\mbfitsansEpsilon }{\mathalpha}{mathematical sans-serif bold italic capital epsilon}% -\UnicodeMathSymbol{"1D795}{\mbfitsansZeta }{\mathalpha}{mathematical sans-serif bold italic capital zeta}% -\UnicodeMathSymbol{"1D796}{\mbfitsansEta }{\mathalpha}{mathematical sans-serif bold italic capital eta}% -\UnicodeMathSymbol{"1D797}{\mbfitsansTheta }{\mathalpha}{mathematical sans-serif bold italic capital theta}% -\UnicodeMathSymbol{"1D798}{\mbfitsansIota }{\mathalpha}{mathematical sans-serif bold italic capital iota}% -\UnicodeMathSymbol{"1D799}{\mbfitsansKappa }{\mathalpha}{mathematical sans-serif bold italic capital kappa}% -\UnicodeMathSymbol{"1D79A}{\mbfitsansLambda }{\mathalpha}{mathematical sans-serif bold italic capital lambda}% -\UnicodeMathSymbol{"1D79B}{\mbfitsansMu }{\mathalpha}{mathematical sans-serif bold italic capital mu}% -\UnicodeMathSymbol{"1D79C}{\mbfitsansNu }{\mathalpha}{mathematical sans-serif bold italic capital nu}% -\UnicodeMathSymbol{"1D79D}{\mbfitsansXi }{\mathalpha}{mathematical sans-serif bold italic capital xi}% -\UnicodeMathSymbol{"1D79E}{\mbfitsansOmicron }{\mathalpha}{mathematical sans-serif bold italic capital omicron}% -\UnicodeMathSymbol{"1D79F}{\mbfitsansPi }{\mathalpha}{mathematical sans-serif bold italic capital pi}% -\UnicodeMathSymbol{"1D7A0}{\mbfitsansRho }{\mathalpha}{mathematical sans-serif bold italic capital rho}% -\UnicodeMathSymbol{"1D7A1}{\mbfitsansvarTheta }{\mathalpha}{mathematical sans-serif bold italic capital theta symbol}% -\UnicodeMathSymbol{"1D7A2}{\mbfitsansSigma }{\mathalpha}{mathematical sans-serif bold italic capital sigma}% -\UnicodeMathSymbol{"1D7A3}{\mbfitsansTau }{\mathalpha}{mathematical sans-serif bold italic capital tau}% -\UnicodeMathSymbol{"1D7A4}{\mbfitsansUpsilon }{\mathalpha}{mathematical sans-serif bold italic capital upsilon}% -\UnicodeMathSymbol{"1D7A5}{\mbfitsansPhi }{\mathalpha}{mathematical sans-serif bold italic capital phi}% -\UnicodeMathSymbol{"1D7A6}{\mbfitsansChi }{\mathalpha}{mathematical sans-serif bold italic capital chi}% -\UnicodeMathSymbol{"1D7A7}{\mbfitsansPsi }{\mathalpha}{mathematical sans-serif bold italic capital psi}% -\UnicodeMathSymbol{"1D7A8}{\mbfitsansOmega }{\mathalpha}{mathematical sans-serif bold italic capital omega}% -\UnicodeMathSymbol{"1D7A9}{\mbfitsansnabla }{\mathalpha}{mathematical sans-serif bold italic nabla}% -\UnicodeMathSymbol{"1D7AA}{\mbfitsansalpha }{\mathalpha}{mathematical sans-serif bold italic small alpha}% -\UnicodeMathSymbol{"1D7AB}{\mbfitsansbeta }{\mathalpha}{mathematical sans-serif bold italic small beta}% -\UnicodeMathSymbol{"1D7AC}{\mbfitsansgamma }{\mathalpha}{mathematical sans-serif bold italic small gamma}% -\UnicodeMathSymbol{"1D7AD}{\mbfitsansdelta }{\mathalpha}{mathematical sans-serif bold italic small delta}% -\UnicodeMathSymbol{"1D7AE}{\mbfitsansvarepsilon }{\mathalpha}{mathematical sans-serif bold italic small varepsilon}% -\UnicodeMathSymbol{"1D7AF}{\mbfitsanszeta }{\mathalpha}{mathematical sans-serif bold italic small zeta}% -\UnicodeMathSymbol{"1D7B0}{\mbfitsanseta }{\mathalpha}{mathematical sans-serif bold italic small eta}% -\UnicodeMathSymbol{"1D7B1}{\mbfitsanstheta }{\mathalpha}{mathematical sans-serif bold italic small theta}% -\UnicodeMathSymbol{"1D7B2}{\mbfitsansiota }{\mathalpha}{mathematical sans-serif bold italic small iota}% -\UnicodeMathSymbol{"1D7B3}{\mbfitsanskappa }{\mathalpha}{mathematical sans-serif bold italic small kappa}% -\UnicodeMathSymbol{"1D7B4}{\mbfitsanslambda }{\mathalpha}{mathematical sans-serif bold italic small lambda}% -\UnicodeMathSymbol{"1D7B5}{\mbfitsansmu }{\mathalpha}{mathematical sans-serif bold italic small mu}% -\UnicodeMathSymbol{"1D7B6}{\mbfitsansnu }{\mathalpha}{mathematical sans-serif bold italic small nu}% -\UnicodeMathSymbol{"1D7B7}{\mbfitsansxi }{\mathalpha}{mathematical sans-serif bold italic small xi}% -\UnicodeMathSymbol{"1D7B8}{\mbfitsansomicron }{\mathalpha}{mathematical sans-serif bold italic small omicron}% -\UnicodeMathSymbol{"1D7B9}{\mbfitsanspi }{\mathalpha}{mathematical sans-serif bold italic small pi}% -\UnicodeMathSymbol{"1D7BA}{\mbfitsansrho }{\mathalpha}{mathematical sans-serif bold italic small rho}% -\UnicodeMathSymbol{"1D7BB}{\mbfitsansvarsigma }{\mathalpha}{mathematical sans-serif bold italic small final sigma}% -\UnicodeMathSymbol{"1D7BC}{\mbfitsanssigma }{\mathalpha}{mathematical sans-serif bold italic small sigma}% -\UnicodeMathSymbol{"1D7BD}{\mbfitsanstau }{\mathalpha}{mathematical sans-serif bold italic small tau}% -\UnicodeMathSymbol{"1D7BE}{\mbfitsansupsilon }{\mathalpha}{mathematical sans-serif bold italic small upsilon}% -\UnicodeMathSymbol{"1D7BF}{\mbfitsansvarphi }{\mathalpha}{mathematical sans-serif bold italic small phi}% -\UnicodeMathSymbol{"1D7C0}{\mbfitsanschi }{\mathalpha}{mathematical sans-serif bold italic small chi}% -\UnicodeMathSymbol{"1D7C1}{\mbfitsanspsi }{\mathalpha}{mathematical sans-serif bold italic small psi}% -\UnicodeMathSymbol{"1D7C2}{\mbfitsansomega }{\mathalpha}{mathematical sans-serif bold italic small omega}% -\UnicodeMathSymbol{"1D7C3}{\mbfitsanspartial }{\mathalpha}{mathematical sans-serif bold italic partial differential}% -\UnicodeMathSymbol{"1D7C4}{\mbfitsansepsilon }{\mathalpha}{mathematical sans-serif bold italic varepsilon symbol}% -\UnicodeMathSymbol{"1D7C5}{\mbfitsansvartheta }{\mathalpha}{mathematical sans-serif bold italic theta symbol}% -\UnicodeMathSymbol{"1D7C6}{\mbfitsansvarkappa }{\mathalpha}{mathematical sans-serif bold italic kappa symbol}% -\UnicodeMathSymbol{"1D7C7}{\mbfitsansphi }{\mathalpha}{mathematical sans-serif bold italic phi symbol}% -\UnicodeMathSymbol{"1D7C8}{\mbfitsansvarrho }{\mathalpha}{mathematical sans-serif bold italic rho symbol}% -\UnicodeMathSymbol{"1D7C9}{\mbfitsansvarpi }{\mathalpha}{mathematical sans-serif bold italic pi symbol}% -\UnicodeMathSymbol{"1D7CA}{\mbfDigamma }{\mathalpha}{mathematical bold capital digamma}% -\UnicodeMathSymbol{"1D7CB}{\mbfdigamma }{\mathalpha}{mathematical bold small digamma}% -\UnicodeMathSymbol{"1D7CE}{\mbfzero }{\mathord}{mathematical bold digit 0}% -\UnicodeMathSymbol{"1D7CF}{\mbfone }{\mathord}{mathematical bold digit 1}% -\UnicodeMathSymbol{"1D7D0}{\mbftwo }{\mathord}{mathematical bold digit 2}% -\UnicodeMathSymbol{"1D7D1}{\mbfthree }{\mathord}{mathematical bold digit 3}% -\UnicodeMathSymbol{"1D7D2}{\mbffour }{\mathord}{mathematical bold digit 4}% -\UnicodeMathSymbol{"1D7D3}{\mbffive }{\mathord}{mathematical bold digit 5}% -\UnicodeMathSymbol{"1D7D4}{\mbfsix }{\mathord}{mathematical bold digit 6}% -\UnicodeMathSymbol{"1D7D5}{\mbfseven }{\mathord}{mathematical bold digit 7}% -\UnicodeMathSymbol{"1D7D6}{\mbfeight }{\mathord}{mathematical bold digit 8}% -\UnicodeMathSymbol{"1D7D7}{\mbfnine }{\mathord}{mathematical bold digit 9}% -\UnicodeMathSymbol{"1D7D8}{\Bbbzero }{\mathord}{mathematical double-struck digit 0}% -\UnicodeMathSymbol{"1D7D9}{\Bbbone }{\mathord}{mathematical double-struck digit 1}% -\UnicodeMathSymbol{"1D7DA}{\Bbbtwo }{\mathord}{mathematical double-struck digit 2}% -\UnicodeMathSymbol{"1D7DB}{\Bbbthree }{\mathord}{mathematical double-struck digit 3}% -\UnicodeMathSymbol{"1D7DC}{\Bbbfour }{\mathord}{mathematical double-struck digit 4}% -\UnicodeMathSymbol{"1D7DD}{\Bbbfive }{\mathord}{mathematical double-struck digit 5}% -\UnicodeMathSymbol{"1D7DE}{\Bbbsix }{\mathord}{mathematical double-struck digit 6}% -\UnicodeMathSymbol{"1D7DF}{\Bbbseven }{\mathord}{mathematical double-struck digit 7}% -\UnicodeMathSymbol{"1D7E0}{\Bbbeight }{\mathord}{mathematical double-struck digit 8}% -\UnicodeMathSymbol{"1D7E1}{\Bbbnine }{\mathord}{mathematical double-struck digit 9}% -\UnicodeMathSymbol{"1D7E2}{\msanszero }{\mathord}{mathematical sans-serif digit 0}% -\UnicodeMathSymbol{"1D7E3}{\msansone }{\mathord}{mathematical sans-serif digit 1}% -\UnicodeMathSymbol{"1D7E4}{\msanstwo }{\mathord}{mathematical sans-serif digit 2}% -\UnicodeMathSymbol{"1D7E5}{\msansthree }{\mathord}{mathematical sans-serif digit 3}% -\UnicodeMathSymbol{"1D7E6}{\msansfour }{\mathord}{mathematical sans-serif digit 4}% -\UnicodeMathSymbol{"1D7E7}{\msansfive }{\mathord}{mathematical sans-serif digit 5}% -\UnicodeMathSymbol{"1D7E8}{\msanssix }{\mathord}{mathematical sans-serif digit 6}% -\UnicodeMathSymbol{"1D7E9}{\msansseven }{\mathord}{mathematical sans-serif digit 7}% -\UnicodeMathSymbol{"1D7EA}{\msanseight }{\mathord}{mathematical sans-serif digit 8}% -\UnicodeMathSymbol{"1D7EB}{\msansnine }{\mathord}{mathematical sans-serif digit 9}% -\UnicodeMathSymbol{"1D7EC}{\mbfsanszero }{\mathord}{mathematical sans-serif bold digit 0}% -\UnicodeMathSymbol{"1D7ED}{\mbfsansone }{\mathord}{mathematical sans-serif bold digit 1}% -\UnicodeMathSymbol{"1D7EE}{\mbfsanstwo }{\mathord}{mathematical sans-serif bold digit 2}% -\UnicodeMathSymbol{"1D7EF}{\mbfsansthree }{\mathord}{mathematical sans-serif bold digit 3}% -\UnicodeMathSymbol{"1D7F0}{\mbfsansfour }{\mathord}{mathematical sans-serif bold digit 4}% -\UnicodeMathSymbol{"1D7F1}{\mbfsansfive }{\mathord}{mathematical sans-serif bold digit 5}% -\UnicodeMathSymbol{"1D7F2}{\mbfsanssix }{\mathord}{mathematical sans-serif bold digit 6}% -\UnicodeMathSymbol{"1D7F3}{\mbfsansseven }{\mathord}{mathematical sans-serif bold digit 7}% -\UnicodeMathSymbol{"1D7F4}{\mbfsanseight }{\mathord}{mathematical sans-serif bold digit 8}% -\UnicodeMathSymbol{"1D7F5}{\mbfsansnine }{\mathord}{mathematical sans-serif bold digit 9}% -\UnicodeMathSymbol{"1D7F6}{\mttzero }{\mathord}{mathematical monospace digit 0}% -\UnicodeMathSymbol{"1D7F7}{\mttone }{\mathord}{mathematical monospace digit 1}% -\UnicodeMathSymbol{"1D7F8}{\mtttwo }{\mathord}{mathematical monospace digit 2}% -\UnicodeMathSymbol{"1D7F9}{\mttthree }{\mathord}{mathematical monospace digit 3}% -\UnicodeMathSymbol{"1D7FA}{\mttfour }{\mathord}{mathematical monospace digit 4}% -\UnicodeMathSymbol{"1D7FB}{\mttfive }{\mathord}{mathematical monospace digit 5}% -\UnicodeMathSymbol{"1D7FC}{\mttsix }{\mathord}{mathematical monospace digit 6}% -\UnicodeMathSymbol{"1D7FD}{\mttseven }{\mathord}{mathematical monospace digit 7}% -\UnicodeMathSymbol{"1D7FE}{\mtteight }{\mathord}{mathematical monospace digit 8}% -\UnicodeMathSymbol{"1D7FF}{\mttnine }{\mathord}{mathematical monospace digit 9}% -\UnicodeMathSymbol{"1EEF0}{\arabicmaj }{\mathop}{arabic mathematical operator meem with hah with tatweel}% -\UnicodeMathSymbol{"1EEF1}{\arabichad }{\mathop}{arabic mathematical operator hah with dal}% - -% /© -% -% ------------------------------------------------ -% The UNICODE-MATH package <wspr.io/unicode-math> -% ------------------------------------------------ -% This package is free software and may be redistributed and/or modified under -% the conditions of the LaTeX Project Public License, version 1.3c or higher -% (your choice): <http://www.latex-project.org/lppl/>. -% ------------------------------------------------ -% Copyright 2006-2019 Will Robertson, LPPL "maintainer" -% Copyright 2010-2017 Philipp Stephani -% Copyright 2011-2017 Joseph Wright -% Copyright 2012-2015 Khaled Hosny -% ------------------------------------------------ -% -% ©/ - diff --git a/macros/luatex/optex/base/usebib.opm b/macros/luatex/optex/base/usebib.opm deleted file mode 100644 index f37d21b315..0000000000 --- a/macros/luatex/optex/base/usebib.opm +++ /dev/null @@ -1,398 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \MakeReference {Reading bib databases <2021-03-12>} % loaded on demand by \usebib - - \_doc ----------------------------- - Loading the `librarian.tex` macro package. See `texdoc librarian` - for more information about it. - - We want to ignore `\errmessage` and we want not to create `\jobname.lbr` - file. - \_cod ----------------------------- - -\_def\errmessage#1{} -\_def\newwrite#1{\_csname lb@restoreat\_endcsname \_endinput} -\_def\_tmpb{\_catcode`\_=12 \_input librarian \_catcode`\_=11 }\_tmpb -\_let\errmessage=\_errmessage -\_let\newwrite=\_newwrite - -\_private \BibFile \ReadList \SortList \SortingOrder \NameCount \AbbreviateFirstname - \CreateField \RetrieveFieldInFor \RetrieveFieldIn ; - - \_doc ----------------------------- - The `\usebib` command. - \_cod ----------------------------- - -\_def\_usebib/#1 (#2) #3 {% - \_let\_citeI=\_relax \_xdef\_citelist{\_citelist\_citelistB}% - \_global\_let\_addcitelist=\_writeXcite - \_ifx\_citelist\_empty - \_opwarning{No cited items. \_noexpand\usebib ignored}% - \_else - \_bgroup \_par - \_emergencystretch=.3\_hsize - \_ifx\_bibpart\_undefined \_def\_bibpart{none}\_fi - \_def\_optexbibstyle{#2}% - \_setctable\_optexcatcodes - \_ea \_skiptoendinput \_input languages.opm - \_input bib-#2.opm - \_the \_bibtexhook - \_ifcsname _mt:bib.and:\_cs{_lan:\_the\_language}\_endcsname \_else - \_opwarning{\_string\usebib: No phrases for language - "\_cs{_lan:\_the\_language}" (using "en")}% - \_language=0 \_chardef\_documentlanguage=0 - \_fi - \_def\_tmp##1[*]##2\_relax{\_def\_tmp{##2}}\_ea\_tmp\_citelist[*]\_relax - \_ifx\_tmp\_empty\_else % there was \nocite[*] used. - \_setbox0=\_vbox{\_hsize=\_maxdimen \_def\_citelist{}\_adef@{\_readbibentry}% - \_input #3.bib - \_ea}\_ea\_def\_ea\_citelist\_ea{\_citelist}% - \_fi - \_def\_citeI[##1]{\_csname lb@cite\_endcsname{##1}{\_bibpart}{}{}}\_citelist - \_BibFile{#3}% - \_if s#1\_SortList{\_bibpart}\_fi - \_ReadList{\_bibpart}% - \_restorectable - \_egroup - \_fi -} -\_long\_def\_skiptoendinput#1\_endinput{} -\_def\_readbibentry#1#{\_readbibentryA} -\_def\_readbibentryA#1{\_readbibentryB#1,,\_relax!.} -\_def\_readbibentryB#1#2,#3\_relax!.{\_addto\_citelist{\_citeI[#1#2]}} - - \_doc ----------------------------- - Corrections in librarian macros. - \_cod ----------------------------- - -\_tmpnum=\_catcode`\@ \_catcode`\@=11 -\_def\lb@checkmissingentries#1,{% we needn't \errmessage here, only \opmacwarning - \_def\lb@temp{#1}% - \_unless\_ifx\lb@temp\lb@eoe - \lb@ifcs{#1}{fields}% - {}% - {\_opwarning{\_string\usebib: entry [#1] isn't found in .bib}}% - \_ea\lb@checkmissingentries - \_fi -} -\_def\lb@readentry#1#2#3,{% space before key have to be ingnored - \_def\lb@temp{#2#3}% we need case sensitive keys - \_def\lb@next{\_ea\lb@gotoat\lb@gobbletoeoe}% - \lb@ifcs\lb@temp{requested}% - {\_let\lb@entrykey\lb@temp - \lb@ifcs\lb@entrykey{fields}{}% - {\lb@defcs\lb@entrykey{fields}{}% - \_lowercase{\lb@addfield{entrytype}{#1}}% - \_let\lb@next\lb@analyzeentry}}{}% - \lb@next -} -\_let\lb@compareA=\lb@compare -\_let\lb@preparesortA=\lb@preparesort -\_def\lb@compare#1\lb@eoe#2\lb@eoe{% SpecialSort: - \_ifx\lb@sorttype\lb@namestring - \_ifx\_sortfield\_undefined \lb@compareA#1\lb@eoe#2\lb@eoe - \_else - \_ea\_RetrieveFieldInFor\_ea{\_sortfield}\lb@entrykey\lb@temp - \_ifx\lb@temp\_empty \_toks1={#1\lb@eoe}\_else \_toks1=\_ea{\lb@temp\lb@eoe}\_fi - \_ea\_RetrieveFieldInFor\_ea{\_sortfield}\lb@currententry\lb@temp - \_ifx\lb@temp\_empty \_toks2={#2\lb@eoe}\_else \_toks2=\_ea{\lb@temp\lb@eoe}\_fi - \_edef\lb@temp{\_noexpand\lb@compareA\_space\_the\_toks1 \_space\_the\_toks2}\lb@temp - \_fi - \_else \lb@compareA#1\lb@eoe#2\lb@eoe \_fi -} -\_def\lb@preparesort#1#2\lb@eoe{% - \_if#1-% - \_def\lb@sorttype{#2}% - \_else - \_def\lb@sorttype{#1#2}% - \_fi - \lb@preparesortA#1#2\lb@eoe -} -\_def\_SpecialSort#1{\_def\_sortfield{#1}} -\_def\WriteImmediateInfo#1{} % the existence of .lbr file bocks new reading of .bib -\_catcode`\@=\_tmpnum - - \_doc ----------------------------- - Main action per each entry. - \_cod ----------------------------- - -\_def\MakeReference{\_par \_bibskip - \_advance\_bibnum by1 - \_isdefined{_bim:\_the\_bibnum}\_iftrue - \_edef\_tmpb{\_csname _bim:\_the\_bibnum\_endcsname}% - \_bibmark=\_ea{\_tmpb}% - \_else \_bibmark={}\_fi - \_edef\_tmpb{\EntryKey}% - \_noindent \_dest[cite:\_the\_bibnum]\_printlabel\EntryKey - \_printbib - {% - \_RetrieveFieldIn{entrytype}\_entrytype - \_csname _print:BEGIN\_endcsname - \_isdefined{_print:\_entrytype}\_iftrue - \_csname _print:\_entrytype\_endcsname - \_else - \_ifx\_entrytype\_empty \_else - \_opwarning{Entrytype @\_entrytype\_space from [\EntryKey] undefined}% - \_csname _print:misc\_endcsname - \_fi\_fi - \_csname _print:END\_endcsname - \_ifx\_wref\_wrefrelax\_else - \_immediate\_wref\_Xbib{{\EntryKey}{\_the\_bibnum}{\_the\_bibmark}}\_fi - }\_par -} - - \_doc ----------------------------- - The \`\_bprinta`, \`\_bprintb`, \`\_bprintc`, \`\_bprintv` - commands used in the style files: - \_cod ----------------------------- - -\_def\_bprinta {\_bprintb*} -\_def\_bprintb #1[#2#3]{% - \_def\_bibfieldname{#2#3}% - \_if!#2\_relax - \_def\_bibfieldname{#3}% - \_RetrieveFieldIn{#3}\_bibfield - \_ifx\_bibfield\_empty\_else - \_RetrieveFieldIn{#3number}\_namecount - \_def\_bibfield{\_csname _Read#3\_ea\_endcsname \_csname _pp:#3\_endcsname}% - \_fi - \_else - \_RetrieveFieldIn{#2#3}\_bibfield - \_fi - \_if^#1^% - \_ifx\_bibfield\_empty \_ea\_ea\_ea \_doemptyfield - \_else \_ea\_ea\_ea \_dofullfield \_fi - \_else \_ea \_bprintaA - \_fi -} -\_def\_dofullfield#1#2{\_def\_dofield##1{#1}\_ea\_dofield\_ea{\_bibfield}} -\_def\_doemptyfield#1#2{\_def\_dofield##1{#2}\_ea\_dofield\_ea{\_bibfield}} -\_let\_Readauthor=\ReadAuthor \_let\_Readeditor=\ReadEditor -\_def\_bprintaA #1#2{\_ifx\_bibfield\_empty #2\_else\_bprintaB #1**\_eee\_fi} -\_def\_bprintaB #1*#2*#3\_eee{\_if^#3^#1\_else\_ea\_bprintaC\_ea{\_bibfield}{#1}{#2}\_fi} -\_def\_bprintaC #1#2#3{#2#1#3} -\_def\_bprintc#1#2{\_bprintcA#1#2**\_relax} -\_def\_bprintcA#1#2*#3*#4\_relax{\_ifx#1\_empty \_else \_if^#4^#2\_else#2#1#3\_fi\_fi} -\_def\_bprintv [#1]#2#3{\_def\_tmpa{#2}\_def\_tmpb{#3}\_bprintvA #1,,} -\_def\_bprintvA #1,{% - \_if^#1^\_tmpb\_else - \_RetrieveFieldIn{#1}\_tmp - \_ifx \_tmp\_empty - \_else \_tmpa \_def\_tmpb{}\_def\_tmpa{}% - \_fi - \_ea \_bprintvA - \_fi -} -\_sdef{_pp:author}{\_letNames\_authorname} -\_sdef{_pp:editor}{\_letNames\_editorname} -\_def\_letNames{\_let\_Firstname=\Firstname \_let\_Lastname=\Lastname - \_let\_Von=\Von \_let\_Junior=\Junior -} - - \_doc ----------------------------- - Various macros + multilingual. Note that \`\_nobibwarnlist` is used in - \`\_bibwarning` and it is set by \^`\nobibwarning` macro. - \_cod ----------------------------- - -\_def\_bibwarning{% - \_ea\_isinlist \_ea\_nobibwarnlist\_ea{\_ea,\EntryKey,}\_iffalse - \_opwarning{Missing field "\_bibfieldname" in [\EntryKey]}\_fi} - -\_endcode - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -The file `usebib.opm` implements the command -\~`\usebib/<sorttype> (<style>) <bibfiles>` -where `<sorttype>` is one letter `c` (references ordered by citation order in -the text) or `s` (references ordered by key in the style file), -`<style>` is the part of the name `bib-<style>.opm` of the style file -and `<bibfiles>` are one or more `.bib` file names without suffix separated by -comma without space. Example: - -\begtt -\usebib/s (simple) mybase,yourbase -\endtt - -This command reads the `<bibfiles>` directly and creates the list of -bibliographic references (only those declared by \~`\cite[]` or -\~`\nocite[]` in the text). The formatting of such references is defined in the style -file. - -The principle \"first entry wins" is used. Suppose `\usebib/s (simple) local,global`. -If an entry with the same label is declared in `local.bib` and in -`global.bib` too then the first wins. So, you can set exceptions in your -`local.bib` file for your document. - -The `bib-<style>.opm` declares entry types (like `@BOOK`, `@ARTICLE`) and declares -their mandatory and optional fields (like `author`, `title`). When -a mandatory field is missing in an entry in the `.bib` file then a warning is printed on the -terminal about it. You can suppress such warnings by command -\^`\nobibwarning`~`[<bib-labels>]`, where <bib-labels> is a comma-separated list -of labels (without spaces) where missing mandatory fields will be no warned. - -Old `.bib` files may use the obscure notation for accents like `{\"o}`. -Recommendation: convert such old files to Unicode encoding. If you are -unable to do this then you can set \^`\bibtexhook={`\^`\oldaccents}`. - -\secc Notes for bib-style writers - -The `.bib` files include records in the format: - -\begtt \catcode`\<=13 -@<entry-type>{<label>, - <field-name> = "<field-data>", - <field-name> = "<field-data>", - ...etc -} -\endtt -% -see the file `demo/op-biblist.bib` for a real example. The <entry-types> and -<field-names> are case insensitive. - -Ancient Bib\TeX/ has read such files and has generated files appropriate for -reading by \LaTeX. It has worked with a set of <entry-types>, see the www -page \url{http://en.wikipedia.org/wiki/BibTeX}. The set of entry types -listed on this www page is de facto the Bib\TeX/ standard. The \OpTeX/ bib -style writer must \"declare" all such entry types and more non-standard -entry types can be declared too if there is a good reason for doing it. The -word \"declare" used in the previous sentence means that a bib-style writer must -define the printing rules for each <entry-type>. -The printing rules for <entry-type> include: which fields will be printed, in -what order, by what format they will be printed on (italic, caps, etc.), -which fields are mandatory, which are optional, and which are ignored in -`.bib` records. - -The style writer can be inspired by two styles already done: `bib-simple.opm` -and `bib-iso690.opm`. The second one is documented in detail in -section~\ref[isobib]. - -The printing rules for each <entry-type> must be declared by -`\_sdef{_print:<entry-type>}` in `bib-<style>.opm` file. -The `<entry-type>` has to be lowercase here. \OpTeX/ supports following -macros for a more comfortable setting of printing rules: - -\begitems -* \^`\_bprinta` `[<field-name>] {<if defined>} {<if not defined>}`. The part <if defined> - is executed if <field-name> is declared in .bib file for the entry which is - currently processed. Else the part <if not defined> is processed. - The part <if defined> can include the `*` parameter which is replaced - by the value of the <field-name>. -* The part <if not defined> can include - the \^`\_bibwarning` command if the <field-name> is mandatory. -* \^`\_bprintb` `[<field-name>] {<if defined>} {<if not defined>}`. The same as - `\_bprinta`, but the `##1` parameter is used instead `*`. Differences: `##1` - parameter can be used more than once and can be enclosed in nested - braces. The `*` parameter can be used at most once and cannot be enclosed - in braces. Warning: if the `\_bprintb` commands are nested (`\_bprintb` in - `\_bprintb`), then you need to write the `####1` parameter for internal `\_bprintb`. - But if `\_bprinta` commands are nested then the parameter is not duplicated. -* \^`\_bprintc` `\macro {<if non-empty>}`. The <if non-empty> part is executed if - `\macro` is non-empty. The `*` parameter can be used, it is replaced by - the `\macro`. -* \^`\_bprintv` `[<field1>,<field2>,...] {<if defined>} {<if not defined>}`. - The part <if defined> is executed if <field1> or <filed2> or ... - is defined, else the second part <if not defined> is executed. - There is one filed name or the list field names separated by commas. - The parts cannot include any parameters. -\enditems - -There are two special field-names: `!author` and `!editor`. The processed list of -authors or editors are printed here instead of raw data, see the commands -\~`\_authorname` and \~`\_editorname` below. - -The bib-style writer can define `_print:BEGIN` and/or `_print:END`. -They are executed at the beginning or -end of each `<entry-type>`. The formatting does not solve the numbering and -paragraph indentation of the entry. This is processed by \^`\_printbib` macro -used in \OpTeX/ (and may be redefined by the author or document designer). - -The \^`\bibmark={something}` can be declared, for instance in the `_print:END` macro. -Such \"bibmark" is saved to the `.ref` file and used in next \TeX/ run as -`\cite` marks when `\nonumcitations` is set. - -Moreover, the bib-style writer must declare the format of -special fields `author` and `editor`. These fields include a -list of names, each name is precessed individually in a loop. The -\^`\_authorname` or \^`\_editorname` is called for each name on the list. -The bib-style writer must define -the \`\_authorname` and \`\_editorname` commands -in order to declare the format of printing each individual name. -The following control sequences can be used in these macros: - -\begitems -* `\_NameCount`: the number of the currently processed author in the list -* `\_namecont`: the total number of the authors in the list -* `\_Lastname`, `\_Firstname`, `\_Von`, `\_Junior`: the parts of the name. -\enditems - -The whole style file is read in the group during the `\usebib` command is executed -before typesetting the reference list. Each definition or setting is local -here. - -The auto-generated phrases (dependent on current language) can be used in -bib-style files by `\_mtext{bib.<identifier>}`, where <ident> is an identifier of -the phrase and the phrase itself is defined by -`\_sdef{_mt:bib.<identifier>:<language>}{<phrase>}`. See section~\ref[langphrases] -for more detail. Phrases for <identifiers>: -and, etal, edition, citedate, volume, number, prepages, postpages, editor, -editors, available, availablealso, bachthesis, masthesis, phdthesis -are defined already, see the end of section~\ref[langphrases]. - -If you are using non-standard field-names in .bib database and bib-style, -you have to declare them by `\_CreateField {<fieldname>}`. - -You can declare `\_SortingOrder` in the manner documented by librarian package. - -User or author of the bib-style can create the hidden field which has a -precedence while sorting names. Example: - -\begtt -\CreateField {sortedby} -\SpecialSort {sortedby} -\endtt -Suppose that the .bib file includes: -\begtt -... -author = "Jan Chadima", -sortedby = "Hzzadima Jan", -... -\endtt -Now, this author is sorted between H and I, because the Ch digraph in this -name has to be sorted by this rule. - -If you need (for example) to place the auto-citations before other citations, -then you can mark your entries in `.bib` file by `sortedby = "@"`, because this -character is sorted before `A`. - -\_endinput - -History: --------- - -2021-03-12 \_citelistB added before first test. -2021-02-15 \_expandafter -> \_ea -Apr. 2014: released in OPmac -Jan. 2016: "first entry wins" implemented -Apr. 2016: \readentry -> \readbibentry, \usebib->\MakeReference -Feb. 2018: \input librarian does not create \jobname.lbr - -% Source: - -% opmac-bib -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Petr Olsak, version Feb. 2018 (beta) - -% This is module for OPmac macros, see http://petr.olsak.net/opmac.html -% The command: -% \usebib/<sorttype> (<style>) (bibfiles> -% for direct reading .bib files by OPmac macros (without bibTeX) is implemented here. -% The implementation depends on librarian.tex package by Paul Isambert. -% Use: -% \input opmac \input opmac-bib -% or simply: -% \input opmac-bib -% before using the command \usebib. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end - diff --git a/macros/luatex/optex/base/verbatim.opm b/macros/luatex/optex/base/verbatim.opm deleted file mode 100644 index 8fd20ee531..0000000000 --- a/macros/luatex/optex/base/verbatim.opm +++ /dev/null @@ -1,372 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \begtt {Verbatim <2021-01-22>} % preloaded in format - - \_doc ---------------------------- - The internal parameters - \`\_ttskip`, \`\_ttpenalty`, \`\_viline`, \`\_vifile` and \`\_ttfont` - for verbatim macros are set. - \_cod ---------------------------- - -\_def\_ttskip{\_medskip} % space above and below \begtt, \verbinput -\_mathchardef\_ttpenalty=100 % penalty between lines in \begtt, \verbinput -\_newcount\_viline % last line number in \verbinput -\_newread\_vifile % file given by \verinput -\_def\_ttfont{\_tt} % default tt font - - \_doc ---------------------------- - \`\code``{<text>}` expands to `\detokenize{<text>}` when `\escapechar=-1`. In - order to do it more robust when it is used in `\write` then it expands as - noexpanded `\code<space>` (followed by space in its csname). This macro - does the real work. - - The \`\_printinverbatim``{<text>}` macro is used for `\code{<text>}` printing and for - \code{`}<text>\code{`} printing. It is defined as `\hbox`, so the in-verbatim <text> - will be never broken. But you can re-define this macro. - - When `\code` occurs in PDF outlines then it does the same as `\detokenize`. - The macro for preparing outlines sets `\escapechar` to $-1$ and uses - \^`\_regoul` token list before `\edef`. - - The `\code` is not `\proteced` because we want it expands to - `\unexpanded{\code<space>{<text>}}` in `\write` parameters. This protect the - expansions of the `\code` parameter (like `\\`, `\^` etc.). - \_cod ---------------------------- - -\_def\_code#1{\_unexpanded\_ea{\_csname _code \_endcsname{#1}}} -\_protected\_sdef{_code }#1{{\_escapechar=-1 \_ttfont \_the\_everyintt \_relax - \_ea\_printinverbatim\_ea{\_detokenize{#1}}}} -\_def\_printinverbatim#1{\_leavevmode\_hbox{#1}} - -\_regmacro {}{}{\_let\code=\_detokenize \_let\_code=\_detokenize} -\_public \code ; - - \_doc ---------------------------- - The \`\_setverb` macro sets all catcodes to \"verbatim mode". It should be used only - in a group, so we prepare a new catcode table with \"verbatim" catcodes and we define - it as\nl `\_catcodetable`\`\_verbatimcatcodes`. After the group is finished then - original catcode table is restored. - \_cod ---------------------------- - -\_newcatcodetable \_verbatimcatcodes -\_def\_setverb{\_begingroup - \_def\do##1{\_catcode`##1=12 } - \_dospecials - \_savecatcodetable\_verbatimcatcodes % all characters are normal - \_endgroup -} -\_setverb -\_def\_setverb{\_catcodetable\_verbatimcatcodes }% - - \_doc ---------------------------- - \`\verbchar``<char>` saves original catcode of previously declared `<char>` (if - such character was declared) using \`\_savedttchar` and \`\_savedttcharc` - values. Then new such values are stored. The declared character is activated - by `\_adef` as a macro (active character) which opens a group, - does `\_setverb` and other settings and reads its parameter until second the same - character. This is done by the \`\_readverb` macro. Finally, it prints scanned - `<text>` by \^`\_printinverbatim` and closes group. Suppose that `\verbchar"` is - used. Then the following work is schematically done: - \begtt - \_def "{\_begingroup \_setverb ... \_readverb} - \_def \_readverb #1"{\_printinverbatim{#1}\_endgroup} - \endtt - Note that the second occurrence of `"` is not active because `\_setverb` - deactivates it. - \_cod ---------------------------- - -\_def\_verbchar#1{% - \_ifx\_savedttchar\_undefined\_else \_catcode\_savedttchar=\_savedttcharc \_fi - \_chardef\_savedttchar=`#1 - \_chardef\_savedttcharc=\_catcode`#1 - \_adef{#1}{\_begingroup \_setverb \_adef{ }{\_dsp}\_ttfont \_the\_everyintt\_relax \_readverb}% - \_def\_readverb ##1#1{\_printinverbatim{##1}\_endgroup}% -} -\_let \_activettchar=\_verbchar % for backward compatibility -\_public \verbchar \activettchar ; - - \_doc ---------------------------- - \`\begtt` is defined only as public. We don't need a private `\_begtt` variant. - This macro opens a group and sets `%` as an active character (temporary). - This will allow it to be used as the comment character at the same line after - `\begtt`. Then \`\_begtti` is run. It is defined by \^`\eoldef`, - so users can put a parameter at the - same line where `\begtt` is. This `#1` parameter is used after \^`\everytt` - parameters settings, so users can change them locally. - - The \^`\_begtti` macro does \^`\_setverb` and another preprocessing, sets - `\endlinechar` to `^^J` and reads the following text in verbatim mode - until \`\endtt` occurs. This scanning is done by \`\_startverb` macro which is - defined as: - \begtt \adef/{\bslash} - \_def\_startverb #1/endtt #2^^J{...} - \endtt - We must to ensure that the backslash in `\endtt` has category 12 (this is a - reason of the `\ea` chain in real code). - The `#2` is something between `\endtt` and the end of the same line and it is simply - ignored. - - The `\_startverb` puts the scanned data to \`\_prepareverbdata`. It sets the data - to `\_tmpb` without changes by default, but you should re-define it in order - to do special changes if you want. (For example, \^`\hisyntax` redefines - this macro.) The scanned data have `^^J` at each end of line and all spaces are - active characters (defined as {\visiblesp`\ `}). - Other characters have normal category 11 or 12. - - When `\_prepareverbdata` finishes then `\_startverb` runs `\_printverb` loop - over each line of the data and does a final work: last skip plus `\noindent` - in the next paragraph. - \_cod --------------------------- - -\_def\begtt{\_par \_begingroup \_adef\%##1\_relax{\_relax}\_begtti} -\_eoldef \_begtti#1{\_wipeepar \_setxhsize - \_vskip\_parskip \_ttskip - \_setverb - \_ifnum\_ttline<0 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi - \_adef{ }{\_dsp}\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt - \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}% - \_the\_everytt \_relax #1\_relax \_ttfont - \_def\_testcommentchars##1\_iftrue{\_iffalse}\_let\_hicomments=\_relax - \_endlinechar=`^^J - \_startverb -} -\_ea\_def\_ea\_startverb \_ea#\_ea1\_csstring\\endtt#2^^J{% - \_prepareverbdata\_tmpb{#1^^J}% - \_ea\_printverb \_tmpb\_end - \_par - \_endgroup \_ttskip - \_isnextchar\_par{}{\_noindent}% -} -\_def\_prepareverbdata#1#2{\_def#1{#2}} - - \_doc - The \`\_printverb` macro calls \^`\_printverbline``{<line>}` repeatedly - to each scanned line of verbatim text. The `\_printverb` is used from - `\begtt...\endtt` and from `\verbinput` too. - - The \^`\_testcommentchars` replaces the following `\_iftrue` to - `\_iffalse` by default unless the \~`\commentchars` are set. So, the main body - of the loop is written in the `\_else` part of the `\_iftrue` condition. - The \^`\_printverbline``{<line>}` is called here. - - The \`\_printverbline``{<line>}` expects that it starts in vertical mode and it must - do `\par` to return the vertical mode. The \`\_printverblinenum` - is used here: it does nothing when `\_ttline`\code{<0} else it prints the line - number using `\_llap`. - - \`\_putttpenalty` puts \^`\_ttpenalty` before second and next lines, but - not before first line in each `\begtt...\endtt` environment. - \_cod ---------------------------- - -\_def\_printverb #1^^J#2{% - \_ifx\_printverblinenum\_relax \_else \_incr\_ttline \_fi - \_testcommentchars #1\_relax\_relax\_relax - \_iftrue - \_ifx\_end#2 \_printcomments\_fi - \_else - \_ifx\_vcomments\_empty\_else \_printcomments \_def\_vcomments{}\_fi - \_ifx\_end#2 - \_bgroup \_adef{ }{}\_def\t{}% if the last line is emtpy, we don't print it - \_ifcat&\_egroup \_else\_egroup \_printverbline{#1}\_fi - \_else - \_printverbline{#1}% - \_fi - \_fi - \_ifx\_end#2 \_let\_next=\_relax \_else \_def\_next{\_printverb#2}\_fi - \_next -} -\_def\_printverbline#1{\_putttpenalty \_indent \_printverblinenum \_kern\_ttshift #1\par} -\_def\_initverblinenum{\_tenrm \_thefontscale[700]\_ea\_let\_ea\_sevenrm\_the\_font} -\_def\_printverblinenum{\_llap{\_sevenrm \_the\_ttline\_kern.9em}} -\_def\_putttpenalty{\_def\_putttpenalty{\_penalty\_ttpenalty}} - - \_doc ---------------------------- - Macro \`\verbinput` uses a file read previously or opens the given file. Then - it runs the parameter scanning by \`\_viscanparameter` and \`\_viscanminus`. - Finally the \`\_doverbinput` is run. At the beginning of `\_doverbinput`, we have - `\_viline`= number of lines already read using previous `\verbinput`, - `\_vinolines`= the number of lines we need to skip and `\_vidolnes`= the - number of lines we need to print. - A similar preparation is done as in `\begtt` after the group is opened. Then - we skip \`\_vinolines` lines in a loop a and we read \`\_vidolines` lines. The - read data is accumulated into `\_tmpb` macro. The next steps are equal to - the steps done in \^`\_startverb` macro: data are processed via - \^`\_prepareverbdata` and printed via \^`\_printverb` loop. - \_cod \_fin ---------------------- - -\_def\_verbinput #1(#2) #3 {\_par \_def\_tmpa{#3}% - \_def\_tmpb{#1}% cmds used in local group - \_ifx\_vifilename\_tmpa \_else - \_openin\_vifile={#3}% - \_global\_viline=0 \_global\_let\_vifilename=\_tmpa - \_ifeof\_vifile - \_opwarning{\_string\verbinput: file "#3" unable to read} - \_ea\_ea\_ea\_skiptorelax - \_fi - \_fi - \_viscanparameter #2+\_relax -} -\_def\_skiptorelax#1\_relax{} - -\_def \_viscanparameter #1+#2\_relax{% - \_if$#2$\_viscanminus(#1)\_else \_viscanplus(#1+#2)\_fi -} -\_def\_viscanplus(#1+#2+){% - \_if$#1$\_tmpnum=\_viline - \_else \_ifnum#1<0 \_tmpnum=\_viline \_advance\_tmpnum by-#1 - \_else \_tmpnum=#1 - \_advance\_tmpnum by-1 - \_ifnum\_tmpnum<0 \_tmpnum=0 \_fi % (0+13) = (1+13) - \_fi \_fi - \_edef\_vinolines{\_the\_tmpnum}% - \_if$#2$\_def\_vidolines{0}\_else\_edef\_vidolines{#2}\_fi - \_doverbinput -} -\_def\_viscanminus(#1-#2){% - \_if$#1$\_tmpnum=0 - \_else \_tmpnum=#1 \_advance\_tmpnum by-1 \_fi - \_ifnum\_tmpnum<0 \_tmpnum=0 \_fi % (0-13) = (1-13) - \_edef\_vinolines{\_the\_tmpnum}% - \_if$#2$\_tmpnum=0 - \_else \_tmpnum=#2 \_advance\_tmpnum by-\_vinolines \_fi - \_edef\_vidolines{\_the\_tmpnum}% - \_doverbinput -} -\_def\_doverbinput{% - \_tmpnum=\_vinolines - \_advance\_tmpnum by-\_viline - \_ifnum\_tmpnum<0 - \_openin\_vifile={\_vifilename}% - \_global\_viline=0 - \_else - \_edef\_vinolines{\_the\_tmpnum}% - \_fi - \_vskip\_parskip \_ttskip \_wipeepar \_setxhsize - \_begingroup - \_ifnum\_ttline<-1 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi - \_setverb \_adef{ }{\_dsp}\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt - \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}% - \_the\_everytt\_relax \_tmpb\_relax \_ttfont - \_endlinechar=`^^J \_tmpnum=0 - \_loop \_ifeof\_vifile \_tmpnum=\_vinolines\_space \_fi - \_ifnum\_tmpnum<\_vinolines\_space - \_vireadline \_advance\_tmpnum by1 \_repeat %% skip lines - \_edef\_ttlinesave{\_ttline=\_the\_ttline}% - \_ifnum\_ttline=-1 \_ttline=\_viline \_fi - \_tmpnum=0 \_def\_tmpb{}% - \_ifnum\_vidolines=0 \_tmpnum=-1 \_fi - \_ifeof\_vifile \_tmpnum=\_vidolines\_space \_fi - \_loop \_ifnum\_tmpnum<\_vidolines\_space - \_vireadline - \_ifnum\_vidolines=0 \_else\_advance\_tmpnum by1 \_fi - \_ifeof\_vifile \_tmpnum=\_vidolines\_space \_else \_visaveline \_fi %% save line - \_repeat - \_ea\_prepareverbdata \_ea \_tmpb\_ea{\_tmpb^^J}% - \_catcode`\ =10 \_catcode`\%=9 % used in \commentchars comments - \_ea\_printverb \_tmpb\_end - \_global\_ttlinesave - \_par - \_endgroup - \_ttskip - \_isnextchar\_par{}{\_noindent}% -} -\_def\_vireadline{\_read\_vifile to \_tmp \_incr\_viline } -\_def\_visaveline{\_ea\_addto\_ea\_tmpb\_ea{\_tmp}} - -\_public \verbinput ; - - \_doc ----------------------------- - If the language of your code\label[commentchars]\wlabel{} - printed by \^`\verbinput` supports the - format of comments started by two characters from the beginning of the - line then you can set these characters by \^`\commentchars``<first><second>`. - Such comments are printed in the non-verbatim mode without these two - characters and they look like the verbatim printing is interrupted - at the places where such comments are. - See the section~\ref[lua] for good illustration. - The file `optex.lua` is read by a single command - `\verbinput (4-) optex.lua` here and the `\commentchars --` was set before it. - - If you need to set a special character by \^`\commentchars` then you must - to set the catcode to 12 (and space to 13). Examples: - \begtt - \commentchars // % C++ comments - \commentchars -- % Lua comments - {\catcode`\%=12 \_ea}\commentchars %% % TeX comments - {\catcode`\#=12 \catcode`\ =13 \_ea}\commentchars#{ } % bash comments - \endtt - - There is one limitation when \TeX/ interprets the comments declared by - \^`\commentchars`. Each block of comments is accumulated to one line - and then it is re-interpreted by \TeX. So, the ends of lines in the - comments block are lost. You cannot use macros which - need to scan end of lines, for example `\begtt...\endtt` inside the comments - block does not work. The character `%` is ignored in comments but you can use `\%` - for printing or `%` alone for de-activating `\_endpar` from empty - comment lines. - - Implementation: The \`\commentchars``<first><second>` redefines the \`\_testcommentchars` - used in \^`\_printverb` in order to it removes the following `\_iftrue` - and returns `\_iftrue` or `\_iffalse` depending on the fact that - the comment characters are or aren't present at the beginning of tested line. - If it is true (`\ifnum` expands to `\ifnum 10>0`) then the rest of the - line is added to the \`\_vcomments` macro. - - The \`\_hicomments` is `\relax` by default but it is redefined by \^`\commentchars` - in order to keep no-colorized comments if we need to use feature from - \^`\commentchars`. - - The accumulated comments are printed whenever the non-comment line - occurs. This is done by \`\_printcomments` macro. - You can re-define it, but the main idea must be kept: it is printed in the - group, `\_reloding \_rm` initializes normal font, `\catcodetable0` - returns to normal catcode table used before `\verbinput` is started, and - the text accumulated in `\_vcomments` must be printed by - `\_scantextokens` primitive. - \_cod ----------------------------- - -\_def\_vcomments{} -\_let\_hicomments=\_relax - -\_def\_commentchars#1#2{% - \_def\_testcommentchars ##1##2##3\_relax ##4\_iftrue{\_ifnum % not closed in this macro - \_ifx #1##1\_ifx#2##21\_fi\_fi 0>0 - \_ifx\_relax##3\_relax \_addto\_vcomments{\_endgraf}% empty comment=\enfgraf - \_else \_addto\_vcomments{##3 }\_fi}% - \_def\_hicomments{\_replfromto{\b\n#1#2}{^^J}{\w{#1#2####1}^^J}}% used in \hisyntax -} -\_def\_testcommentchars #1\_iftrue{\_iffalse} % default value of \_testcommentchar -\_def\_printcomments{\_ttskip - {\_catcodetable0 \_reloading \_rm \_everypar={}% - \_noindent \_ignorespaces \_scantextokens\_ea{\_vcomments}\_par}% - \_ttskip -} -\_public \commentchars ; - - \_doc ----------------------------- - The \`\visiblesp` sets spaces as visible characters \char9251. - It redefines the \^`\_dsp`, so it is useful for verbatim modes only. - - The \`\_dsp` is equivalent to {\visiblesp`\ `} primitive. - It is used in all verbatim environments: spaces are active and defined as - `\_dsp` here. - \_cod ----------------------------- - -\_def \_visiblesp{\_ifx\_initunifonts\_relax \_def\_dsp{\_char9251 }% - \_else \_def\_dsp{\_char32 }\_fi} -\_let\_dsp=\ % primitive "direct space" - -\_public \visiblesp ; - -\_endcode - -\_endinput - -History: -2020-01-22 ... \activettchar changed to \verbchar -2020-12-30 ... \secc followed by \begtt must be unbreakable -2020-11-13 ... \commentchars implemented -2020-04-22 ... \ttshift introduced -2020-04-06 ... \visiblesp added -2020-04-04 ... ^^I activated as \t for multiline verbatim - \verbinput <cmds> (...) <filename>, <cmds> added. diff --git a/macros/luatex/optex/demo/op-biblist.bib b/macros/luatex/optex/demo/op-biblist.bib deleted file mode 100644 index 691a02ea0e..0000000000 --- a/macros/luatex/optex/demo/op-biblist.bib +++ /dev/null @@ -1,298 +0,0 @@ -This is an example of .bib file using by OpTeX. -Petr Olsak 2014 ----------------------------------------------------------- -See the section 1.5.3 of OpTeX documentation for more information. - -@BOOK{white, - author = "David J. Whitehouse", - title = "Handbook of surface and nanometrology", - edition = "2nd", - address = "Boca Raton", - publisher = "CRC Press", - year = 2011, - isbn = "978-1-4200-8201-2", - lang = "en", -} -@BOOK{lech, - author = "Richard Lech", - title = "Fundamental principles of engineering nanometrology", - howpublished = "online", - address = "Oxford", - publisher = "Elsevier", - year = 2009, - isbn = "978-0-08-096454-6", - citedate = "2011/08/29", - url = "http://www.sciencedirect.com/science/book/9780080964546", - option = "autrim:1", -} -@BOOK{Cmej, - author = "Světla Čmejrková and František Daneš and Jindra Světlá", - title = "Jak napsat odborný text", - address = "Praha", - publisher = "Leda", - year = 1999, - isbn = "80-85927-69-1", - key = "Czzmejrkova", -} -@BOOK{ tbn, - bibmark = "Ol00", - author = "Petr Olšák", - title = "\TeX{}book naruby", - edition = "2.", - address = "Brno", - publisher = "Konvoj", - year = 2001, - isbn = "80-7302-007-6", - url = "http://math.feld.cvut.cz/olsak/tbn.html", - option = "urlalso", -} -@BOOK{ tst, - author = "Petr Olšák", - title = "Typografický systém \TeX{}", - edition = "2.", - address = "Brno", - publisher = "Konvoj", - year = 2000, - url = "http://math.feld.cvut.cz/olsak/tst.html", - isbn = "80-85615-91-6", -} -@BOOK{ tpp, - author = "Petr Olšák", - title = "\TeX{} pro pragmatiky", - year = "2013", - address = "Brno", - publisher = "CsTUG", - isbn = "978-80-901950-1-1", - option = "titlepost:{\TeX{} -- CSplain -- OPmac}", - howpublished = "online", - url = "http://math.feld.cvut.cz/olsak/tpp.html", -} -@BOOK{texbook, - author = "Donald Ervin Knuth", - title = "The \TeX{}book", - address = "Boston", - publisher = "Addison-Wesley", - year = 1984, - isbn = "02-011-3448-9", -} -@BOOK{ rowling, - author = "Robert Calbraith", - option = "auprint:{\AU\space [pseudonym of J. K. Rowling]}", - title = "The Cuckoo's Calling", - address = "New York", - publisher = "Mulholland Books", - isbn = "0-316-20684-6", - year = 2013, -} -@BOOK{ earle, - author = "Richard Earle", - title = "The art of cause marketing: - how to use advertising to change personal behavior and public policy", - ednote = "Cover and interior design by Monica \upper{Baziuk}", - address = "New York", - publisher = "McGraw-Hill", - year = 2000, - isbn = "0-07-138702-1", - option = "yearprint:{\copyright2000}", -} -@BOOK{ novaci, - author = "Jan Novák and Helena Nováková", - title = "Alergenní rostliny", - address = "Praha", - publisher = "Knižní klub", - year = 2010, - isbn = "80-242-2591-3", -} -@BOOK{ adobe, - author = "Adobe\ creative\ team", - title = "Adobe Flash CS4 Professional: Oficiální výukový kurz", - ednote = "Přeložil Lukáš \upper{Krejčí}", - address = "Brno", - publisher = "Computer Press", - year = 2009, - isbn = "80-251-2334-8", -} -@BOOK{ nierhaus, - author = "Grehard Nierhaus", - title = "Algorithmic Composition: Paradigms of Automated Music Generation", - address = "Wien", - publisher = "Springer", - year = 2009, - isbn = "3-211-77539-6", - url = "http://www.springerlink.com/content/g7h129", - option = "yearprint:{\copyright2009} urlalso", -} -@BOOK{ taschen, - author = "Laszlo Taschen", - title = "Modern architekture A-Z", - ednote = "vol. 1, A-L", - address = "Köln", - publisher = "Tashen", - year = 2010, - isbn = "383-6521-321", -} -@ARTICLE{ opmactug, - author = "Petr Olšák", - title = "OPmac: Macros for Plain \TeX", - journal = "TUGboat", - publisher = "\TeX{} Users Group", - year = 2013, - volume = 34, - number = 1, - pages = "88--96", - issn = "0896-3207", - url = "http://petr.olsak.net/ftp/olsak/bulletin/tb106olsak-csplain.pdf", - option = "urlalso", - lang = "en", -} -@ARTICLE{ optextug, - author = "Petr Olšák", - title = "\OpTeX/ -- A new generation of Plain \TeX/", - journal = "TUGboat", - publisher = "\TeX{} Users Group", - year = 2020, - volume = 41, - number = 3, - pages = "348--354", - issn = "0896-3207", - url = "http://petr.olsak.net/ftp/olsak/bulletin/tb128olsak-optex.pdf", - option = "urlalso", - lang = "en", -} -@THESIS{ mirekB, - author = "Miroslav Olšák", - title = "Kvadratické rovnice na slovech", - school = "Univerzita Karlova v~Praze, fakulta Matematicko-fyzikální", - address = "Praha", - year = 2013, - url = "http://www.olsak.net/mirek/bakalarka/", - type = "Bakalářská práce", - option = "urlalso", -} -@THESIS{ mirekM, - author = "Miroslav Olšák", - title = "Součiny Fréchetovských prostorů", - school = "Univerzita Karlova v~Praze, fakulta Matematicko-fyzikální", - address = "Praha", - year = 2015, - url = "http://www.olsak.net/mirek/diplomka/", - type = "Diplomová práce", - option = "urlalso", -} -@THESIS{ mirekD, - author = "Miroslav Olšák", - title = "Generalizing CSP-related results to infinite algebras", - school = "Univerzita Karlova v~Praze, fakulta Matematicko-fyzikální", - address = "Praha", - year = 2019, - url = "https://dspace.cuni.cz/handle/20.500.11956/108756", - type = "Disertační práce", - option = "urlalso", - lang = "en", -} -@INBOOK{ zakonVS, - author = "Česko", - title = "Zákon č. 111 ze dne 22. dubna 1998 o vysokých školách a o změně a - doplnění dalších zákonů (zákon o vysokých školách)", - booktitle = "Sbírka zákonů České republiky", - year = 1998, - series = "částka 39, s. 5388--5419", - url = "http://aplikace.mvcr.cz/archiv2008/sbirka/1998/sb039-98.pdf", - issn = "1211-1244", - option = "urlalso unpublished", - key = "Czzesko", -} -@INBOOK{ lonka, - author = "Kristi Lonka", - title = "Helping doctoral students to finish their theses", - booktitle = "Teaching academic writing in European higher education", - editor = "Lennart Björk and Gerd Bräuer and Lotte Reinecker and Peter Stray Jörgensen", - address = "Dordrecht", - publisher = "Kluwer Academic Publ.", - year = 2003, - pages = "113--131", - isbn = "1-4020-1208-X", - option = "edprint:{\ED,~eds.}", -} -@INBOOK{ demay, - author = "Y. Demay", - title = "Computation of 2D viscoelastic flows for a differential constitutive equation", - editor = "J-M. Piau and J-F. Agassant", - booktitle = "Rheology for Polymer Melt Processing", - howpublished = "online", - publisher = "Elsevier", - year = 2011, - numbering = "s.~237--255", - isbn = "0444822369", - citedate = "2011/08/29", - url = "htpp://www.sciencedirect.com/science/article/pii/S0169310796800098", - option = "nowarn", -} -@INPROCEEDINGS{ distler, - author = "Tobias Distler and Rüdiger Kapitza", - title = "Increasing performance in Byzantine fault-tolerant systems on-demand replica consistency", - booktitle = "Proceedings of the Eurosys' 2011 conference. April 10 -- April 13, 2011, Salzburg, Austria", - address = "New York", - publisher = "Association of computer machinery", - year = 2011, - numbering = "pp.~91--105", - isbn = "1-4503-0634-8", -} -@INPROCEEDINGS{ talich, - author = "Milan Talich and Filip Antoš", - title = "Metody a postupy doigitalizace a online zpřístupnění starých kartografických děl", - howpublished = "online", - booktitle = "INFORUM 2011: 17. ročník konference o profesionálních informačních zdrojích, - 24.--26. května 2011, Vysoká škola ekonomická v Praze", - option = "unpublished", - url = "http://www.inforum.cz/pdf/2011/talich-milan.pdf", - citedate = "2011/08/29", - year = 2011, - option = "nowarn", -} -@ARTICLE{ mansouri, - author = "Majdi Mansouri and Quachani Ilham and Hicham Snoussi and Richard Cédric", - title = "Adaptive quantized target tracking in wireless sensors networks", - journal = "Wireles Networks", - number = 7, - volume = 17, - pages = "1625--1639", - lang = "en", - option = "nowarn", -} -@ARTICLE{ calafiore, - author = "Giuseppe C. Calafiore and Fabrizio Dabbene and Roberto Tempo", - title = "Research~ on probabilistic methods for control system design", - journal = "Automatica", - howpublished = "online", - Publisher = "Elsevier", - month = "July", - year = 2011, - volume = 47, - number = 7, - pages = "1279--1293", - issn = "0005-1090", - citedate = "2011/07/17", - doi = "10.1016/j.automatica.2011.02.029", - lang = "en", -} -@MISC{ bowles, - title = "What is fluid technology?", - ednote = "Bowles Fluidics Corp.", - citedate = "2011/10/10", - url = "http://www.bowlesfluidics.com/capabilites/technology/", - key = "zzzz" -} -@MISC{ biernatova, - author = "Olga Biernátová and Jan Skůpa", - title = "Bibliografické okazy a citace dokumentů: dle ČSN ISO 690 (01~0197) platné od 1. dubna 2011", - ednote = "Brno, 2011. Vytvořeno ve spolupráci s portálem citace.com", - url = "http://www.citace.com/dokumenty.php", -} -@MISC{ trtikova, - author = "Ilona Trtíková and Ludmila Tichá", - title = "Jak citovat", - ednote = "Ústřední knihovna ČVUT, 2011, 2012, 2013", - citedate = "2014/04/22", - url = "http://knihovna.cvut.cz/studium/jak-psat-vskp/doporuceni/jak-citovat/", -} diff --git a/macros/luatex/optex/demo/op-demo.tex b/macros/luatex/optex/demo/op-demo.tex deleted file mode 100644 index e17b2f0b2f..0000000000 --- a/macros/luatex/optex/demo/op-demo.tex +++ /dev/null @@ -1,127 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\fontfam[LMfonts] % Default font family: Latin Modern - -\margins/1 a5 (1,1,1,1.4)cm % A5 paper + 1cm margins -\typosize[9/10.5] % 9pt font / 10.5pt baselineskip -\parindent=10pt % typesetting parameters -\hyperlinks \Blue\Blue % active hyperlinks -\verbchar` % in-text verbatim by `...` -\everyintt={\Red} % in-text verbatim Red -\enquotes % use \"text" for English quotation - -\tit Demonstration - -\nonum\notoc\sec Contents - -\maketoc % Table of Contents is auto-generated here - -\sec Lists - -The lists have to be surrounded by `\begitems` -and `\enditems` sequences. - -\begitems -* First item. -* Second item. - \begitems \style i - * Nested item list, - * numbered by roman numerals. - \enditems -* Last item. -\enditems - -\secc Title of\nl Subsection - -The subsection text\dots - -\sec References - -There is a numbered equation. -The number is auto-generated by `\eqmark` sequence. -$$\label[my-eq] - a^2 + b^2 = c^2 \eqmark -$$ -We can refer to Equation~\ref[my-eq] -on page~\pgref[my-eq]. -We can refer to Table~\ref[my-tab] in -Section~\ref[tab-sec] too. And Figure~\ref[my-pic] -is on page~\pgref[my-pic]. - -\sec Hyperlinks - -You can refer to \url{http://petr.olsak.net} using `\url`. -Or use `\ulink` if the raw URL needs to be hidden: -\ulink[http://petr.olsak.net/optex]{\OpTeX/ page}. -The parameter text is colorized and it becomes -an active link if the `\hyperlinks` sequence -is used at the beginning of the document. -Internal links are activated too. - -\sec[tab-sec] Tables - -The `\table` sequence can be used -instead of \"low level" `\halign`. -The following table is framed by the `\frame` sequence -to get a double frame. - -\bigskip -\caption/t [my-tab] Testing table. -\cskip -\centerline{% - \frame{\table{|r|c|l|}{\crl - \bf Title A & \bf Title B & \bf Title C \crll - first & second & third \cr - next & text & last \crl }}} - -\sec Images - -The images (PDF, JPG, PNG, TIFF) can be inserted -by `\inspic` sequence. The `\caption` -can be added if you need to refer to a figure. - -\label[my-pic] -\centerline {\picwidth=2.7cm \inspic{op-ring.png}} -\cskip -\caption/f The nonempty ideal of a simple ring -- - the ring itself. - -\sec Verbatim - -In-text verbatim is surrounded by the character declared -by `\verbchar` sequence. The listing can be surrounded -by `\begtt` and `\endtt` sequences -\begtt -This is verbatim. - All characters are printed $$, \, # etc. -\endtt -or it can be included by `\verbinput` from an external file. - -\verbinput (98-100) op-demo.tex - -\sec Math - -The Math alphabets -`\mit`, `\cal`, `\script`, `\frak`, `\bbchar`, `\bi` -are provided. For example: -$$ - {\bi A} = \pmatrix {\cal C & \script C \cr - \frak M & \bbchar R }. -$$ -Hundreds of AMS symbols are available: -$\sphericalangle, \boxplus, \Cup, \Cap, \ldots$ - -\sec Others - -The `\fontfam` command selects a desired family of fonts. -The `\typosize` or `\typoscale` sequences set the size -and baselineskip of used fonts (including math fonts). -The `\fnote` generates a footnote\fnote{Like this} and -`\mnote` generates a margin note. -The `\margins` sets margins and paper dimensions. -The `\cite` sequence can be used for bibliographic citations. -The `\bib` sequence creates one bibliography record. Or -you can use `\usebib` for direct access to the {\tt.bib} files. -The list of features does not end here\dots - -\bye diff --git a/macros/luatex/optex/demo/op-letter-cs.tex b/macros/luatex/optex/demo/op-letter-cs.tex deleted file mode 100644 index b6883cb74c..0000000000 --- a/macros/luatex/optex/demo/op-letter-cs.tex +++ /dev/null @@ -1,41 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\letter % \letter OpTeX style activated -\fontfam[bonum] -\cslang - -\address - Vážený pan - Mgr. Bořek Byrokrat - ředitel Ústavu pro další možnosti - Úřední 789 - 123 45 Praha 1 - -\hfill V Praze dne \today - -\subject Žádost o možnost další možnosti - -Vážený pane řediteli, - -na základě Vašeho dopisu č.j.~123456/78-dat a elektronické výzvy si dovoluji -Vás požádat o prozkoumání mé možnosti další možnosti. -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do -eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim -veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea -commodo consequat. - -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do -eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim -veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea -commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit -esse cillum dolore eu fugiat nulla pariatur. - -S úctou - -\hfill \address - {\it Petr Olšák} - specialista na \TeX/ - Ulice 12345 - Praha 13 - -\bye diff --git a/macros/luatex/optex/demo/op-letter-en.tex b/macros/luatex/optex/demo/op-letter-en.tex deleted file mode 100644 index 0154e48c01..0000000000 --- a/macros/luatex/optex/demo/op-letter-en.tex +++ /dev/null @@ -1,38 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex -\useOpTeX - -\letter % \letter OpTeX style activated -\enlang \enquotes % Language and quote style -\fontfam[bonum] - -\hfill\address - Alice Author - 123 Sender Street - City 4567 - -\bigskip - -\address - Mr. Bobby Bureaucrat - 456 Magnolia Street - City 8901 - -\hfill\today - -\subject Inquiry regarding \"lorem ipsum" - -Dear Mr. Bureaucrat, - -\lorem[1-2] % 2 paragraphs of blindtext - -Thank you for your time. - -With best regards, - -\bigskip % leave some space for signature -\bigskip - -Alice Author - -\bye - diff --git a/macros/luatex/optex/demo/op-ring.png b/macros/luatex/optex/demo/op-ring.png Binary files differdeleted file mode 100644 index de7811df83..0000000000 --- a/macros/luatex/optex/demo/op-ring.png +++ /dev/null diff --git a/macros/luatex/optex/demo/op-slides-bg.png b/macros/luatex/optex/demo/op-slides-bg.png Binary files differdeleted file mode 100644 index 4ac1ad8c38..0000000000 --- a/macros/luatex/optex/demo/op-slides-bg.png +++ /dev/null diff --git a/macros/luatex/optex/demo/op-slides.tex b/macros/luatex/optex/demo/op-slides.tex deleted file mode 100644 index 50bcdaffa6..0000000000 --- a/macros/luatex/optex/demo/op-slides.tex +++ /dev/null @@ -1,322 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\slides % OpTeX slides style activated - -\catcode`<=13 % special printing of <text> -\def<#1>{\hbox{$\langle$\it#1\/$\rangle$}} -\everyintt={\catcode`\<=13} - -\hyperlinks\Blue\Blue % hyperlinks are used in the title page -\backgroundpic{op-slides-bg.png} % background picture - -\verbchar` % inline verbatim -\enquotes % English quotes \"..." - -\slideshow %------------------------------------------------------------ - - -\tit \OpTeX/ slides - -\subtit Petr Olšák\nl petr@olsak.net - -\subtit\rm \url{http://petr.olsak.net/optex} - -\pg; %------------------------------------------------------------------ - -\sec Basics - -* The the simple document looks like: - -\begtt -\slides % style initialized -%\wideformat % 16:9 -\slideshow % partially uncovering ideas - -\sec First slide -text -\pg; - -\sec Second slide -text -\pg. -\endtt - -* If `\slideshow` is missing or commented out then - \"partially uncovering ideas" (see later) are deactivated. It is useful - for printing. -* The `\slideshow` must be the last command in the declaration part of the - document. -* By default, the slides have A5 landscape format. - You can declare `\wideformat`. Then the height is the same - but width is 263\,mm, i.\,e.~the ratio width:height is 16:9. - -\pg; %------------------------------------------------------------------ - -\sec Title slide - -* Title of the document (used at the first slide) is created - by `\tit Title` (terminated by end of line). -* The `\subtit Author name etc.`\ (terminated by end of line) - can be used after `\tit` at the first slide. -* You can use `\nl` for a new line in paragraphs or titles. - -\sec Default design - -* The paragraph texts are ragged right. -* Titles, subtitles, and section titles are centered. -* The `\sec` and `\secc` are printed without numbers. -* No paragraph indentation, a little vertical space between paragraphs. -* The Heros font family (aka Helvetica) is initialized as default.\nl - Sans-serif FiraMath font for math typesetting is used.\nl - If `\fontfam[<famname>]` precedes `\slides` then it rewrites default. -* The items in lists are started by a blue square (`\type X` and `\type x` ). - -\pg; %------------------------------------------------------------------ - -\sec One slide (one page) - -* Top-level item list is activated by default. The asterisk `*` opens - new item at the top-level list. -* Nested items lists (second and more level) should be created in - the `\begitems`\dots`\enditems` environments. -* Each slide (page) must be terminated by `\pg;` command. -* The last slide must be terminated by `\pg.` command or by `\bye`. - -\begtt -\sec My ideas - -* First idea -* Second idea - \begitems - * First sub-idea - * Second sub-idea - \enditems -* Final idea -\endtt - -* Note: each page is processed in a group, so: put your own definitions - (if~exist) before `\slideshow` or use `\global` assignment. - -\pg; %------------------------------------------------------------------ - -\sec Partially uncovering ideas - -* The control sequence `\pg` must be followed by:\pg+ -\begitems -* the character `;` -- normal next page,\pg+ -* the character `.` -- the end of the document,\pg+ -* the character `+` -- next page keeps the same text - and a next text is added (usable for partially uncovering of ideas).\pg+ -\enditems - -* Summary: -\begtt -\pg; ... next page -\pg. ... the end of the document -\pg+ ... uncover next text on the same page -\endtt -\pg+ - -* When `\slideshow` is not declared then `\pg+` is deactivated.\pg+ -* The `\pg+` creates a new \"virtual page", so the current paragraph is - terminated. - -\pg; %------------------------------------------------------------------ - -\sec Example with partially uncovering ideas - -The previous page was created by: - -\begtt -\sec Partially uncovering ideas - -* The control sequence `\pg` must be followed by:\pg+ - -\begitems -* the character `.` -- normal next page,\pg+ -* the character `;` -- the end of the document,\pg+ -* the character `+` -- next ... \pg+ -\enditems - -* Summary -... -* When `\slideshow` is not declared - then `\pg+` is deactivated.\pg+ -* The `\pg+` creates a new \"virtual page", - so the current paragraph is terminated. -\pg; -\endtt - -\pg; %------------------------------------------------------------------ - -\sec Notes to `\slideshow` - -* When `\slideshow` is active then you cannot reference sections by - hyperlinked `\ref`. Only `\pgref` works (and goes to the last layer - of the referenced page). -* If the text overfull the page (slide) then it follows to the next page without - saying explicitly `\pg;`. But `\slideshow` cannot work in this case.\pg+ -* If `\slideshow` then each part of page between two `\pg`'s or between - `\slideshow` and the first `\pg` is processed in a local group. -* If not `\slideshow` then the document is not separated to groups. - This can lead to different results. So, you can put `\slideopen` command - instead of `\slideshow`. Then local groups are opened exactly as when - `\slideshow` is used but `\slideshow` is not activated. Example: - -\begtt -\slides -\def\foo...{...} % global definitions. -%\slideshow % printing version, no slide show. -\slideopen % opens group for first page. -... first page -\pg; % closes group and opens group for second page. -... second page -\pg. % closes group of the last page. -\endtt - -\pg; %------------------------------------------------------------------ - -\sec More about design - -* You can use `\backgroundpic{<image-file>}` for putting an image to the background. -* You can re-declare `\footline` or re-define internal macros for design as - you wish. -* The TeXGyre Heros font is used as default text font, the FiraMath is used - for math. -* If you want to use another text font fmaily, use `\fontfam` - {\em before} `\slides` command. -* If you want to use different math font, use - `\loadmath{[font]}` before `\fontfam` (if used) and before `\slides`. For example: - -\begtt -\loadmath{[Asana-Math]} % Math font: Asana -\fontfam[Termes] % Text font: Termes -\slides -... -\endtt - -* You can put the images or text wherever using `\putimege` or `\puttext` - macros... - -\pg; %------------------------------------------------------------------ - -\sec Putting images and texts wherever - -* `\puttext <right> <up> {<text>}` puts a <text> to the desired place: - It moves the current point <right> and <up>, puts the <text> and returns - back, so the typesetting continues from previous position. The parameters - <right> and <up> are dimensions. For example - -\begtt -\puttext 0mm 50mm {\Red HELLO} -\endtt - - \puttext 0mm 50mm {\Red HELLO} - prints red HELLO, as shown here.\pg+ - -* `\putpic <right> <up> <width> <height> {<image-file>}` - puts the image with desired <width> and <height> at the position like - `\puttext` puts the text. - - \putpic .8\hsize 20mm 30mm \nospec {op-ring.png} -* The ring above is the result of - -\begtt -\putpic .8\hsize 20mm 30mm \nospec {op-ring.png} -\endtt - % - used at beginning of this paragraph.\pg+ -* Use `\nospec` for <width> or <height> of the image if you don't want to specify both - dimensions (because you don't want to change the image aspect ratio). - -\pg; %------------------------------------------------------------------ - -\sec Limits of the \code{\\pg+} sequence - -* The \code{\\pg+} sequence (partially uncovering ideas) cannot be used inside - a~group. -* The exception is the nested environment `\begitems...\enditems`. -* The `\pg+` always finalizes the current paragraph. - It is impossible to hide only a part of the horizontal mode.\pg+ - -\sec The \code{\\layers}\,...\code{\\endlayers} environment - -If you really need something unsupported by `\pg+` then you can use - -\begtt \catcode`\<=13 -\layers <number> -<layered text> -\endlayers -\endtt - -* The <layered text> should include conditions like - `\ifnum\layernum...` or `\ifcase\layernum`. - It is printed <number> times to more slide pages (layers) with the same - surrounding text. See next page... - -\pg; %------------------------------------------------------------------ - -\sec Example of \code{\\layers} environment - -The `\slides` style provides a shortcut `\use` and a macro `\pshow` (means -partially show): - -\begtt -\def\use#1#2{\ifnum\layernum#1\relax#2\fi} -\def\pshow#1{\use{=#1}\Red \use{<#1}\Transparent \ignorespaces} -\endtt -`\use{=3}{do something}` does something only if `\layernum=3`. - -The `{\pshow<num> <text>}` prints <text> in Red when current layer is equal -to <num> or it prints <text> normally when current layers is greater than <num>. -The transparent (invisible) text is used in other cases. - -The following dance: -\layers 3 -{\pshow2 Second text.} {\pshow3 Third text.} {\pshow1 First text.} -\endlayers -\pg+ - -was generated by - -\begtt -\layers 3 -{\pshow2 Second text.} {\pshow3 Third text.} {\pshow1 First text.} -\endlayers -\endtt - -\pg+ -* The <layered text> is treated as a macro parameter. So, you cannot use verbatim - nor `\sec` titles here. Maximal one `\layers` environment can be per one - page (terminated by `\pg+` or `\pg;` or `\pg.` - -\pg; %------------------------------------------------------------------ - -\sec Comparison \OpTeX/ slides with Beamer\fnote{\url{http://www.ctan.org/pkg/beamer}} - -The \LaTeX{} package {\bf\Blue Beamer} gives much more features and many themes -are prepared for Beamer, {\bf\Red but} -\pg+ -* the user of Beamer is forced to {\em program} his/her document using - dozens of \code{\\begin{foo}} and \code{\\end{foo}} and many another - programming constructions,\pg+ -* plain \TeX{} gives you a possibility to simply - {\em write} your document with minimal markup. The result is more compact. - You can concentrate on the contents of your document, not on the - programming syntax.\pg+ -* User needs to read 250 pages of doc for understanding Beamer,\pg+ -* on the other hand, you need to read only eleven - slides\fnote{this twelfth slide isn't counted} - and you are ready to use {\bf\Blue\OpTeX/ slides}. - -\pg; %------------------------------------------------------------------ - -\null -\vskip2cm -\centerline{\typosize[35/40]\bf Thanks for your attention}\pg+ - -\vskip2cm -\centerline{\Blue\typosize[60/70]\bf Questions?} - -\pg. %----------------------------- THE END ---------------------------- - diff --git a/macros/luatex/optex/doc/omls.tex b/macros/luatex/optex/doc/omls.tex deleted file mode 100644 index bcc5749a51..0000000000 --- a/macros/luatex/optex/doc/omls.tex +++ /dev/null @@ -1,832 +0,0 @@ -\fontfam[lm] - -\adef<#1>{\ifcsname s:#1\endcsname - \link[s:#1]{}{\Blue$\langle$\hbox{\it#1\/}$\rangle$}% - \else {\Blue$\langle$\hbox{\it#1\/}$\rangle$}\fi} -\everyintt={\catcode`<=13 \Red} -\verbchar` -\enlang -\enquotes - -\def\r[#1]{\label[#1]\wlabel{\the\_itemnum}} -\def\:{$\to$} -\let\_narrowlastlinecentered=\ignoreit -\_def\_printsecc#1{\_par - \_abovetitle{\_penalty-200}{\_medskip\_smallskip} - {\_seccfont \_noindent \_raggedright \_printrefnum[@\_quad]% - \_label[\the\_secnum.\the\_seccnum]\wlabel{\the\_secnum.\the\_seccnum}#1\_nbpar}% - \_nobreak \_belowtitle{\_medskip}% - \_firstnoindent -} -\def\.`{\bgroup\catcode`\ =12 \scancs} -\def\scancs#1{\egroup - \immediate\_wref\Xknowncs{\string#1{\the\_secnum.\the\_seccnum}}% - \ea`\string#1% -} -\def\printcs#1{\ea\printcsred\csstring#1;~\ref[#1] \ } -\def\printcsred,#1;{{\Red\tt \bslash#1}} -\def\printknowncs{\ifx\knowncslist\undefined \let\knowncslist=\empty \fi - \ifx\knowncslist\empty TeX me again...\else - \_dosorting\knowncslist \ea\xargs \ea\printcs \knowncslist;\fi} - -\def\~`<#1>`{<#1>\sxdef{s:#1}{}\dest[s:#1]} - -\refdecl{ - \def\knowncslist{}^^J - \def\Xknowncs#1#2{% - \sxdef{,\csstring#1}{#2}% - \global\ea\addto\ea\knowncslist\ea{\csname,\csstring#1\endcsname}% - } -} -\sdef{_item:c}{\pdfsave\llap{\pdfscale{1.3}{1.3}$\circ$\enspace}\pdfrestore} - -%\parindent=15pt \iindent=\parindent \ttindent=\parindent -%\ttindent=0pt -\everylist={\advance\ttindent by-1em} -\hyperlinks \Green \Green -\def\cskip{\par\nobreak} -\def\begblock{\medskip\hbox\bgroup\vrule\vbox\bgroup\hrule\smallskip - \_fnset\leftskip=\parindent \rightskip=\parindent \medskip\noindent} -\def\endblock{\medskip\hrule\egroup\vrule\egroup} - -\def\raggedright{\rightskip=10pt plus1fil\relax} -\def\optexmanual{\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf]{\OpTeX/ manual}} - -\titskip=1cm - -\hfill Version 0.1 - -\tit \OpTeX/ Markup Language Standard - -{\it\hfil Petr Olšák, 2021}\bigskip - -The \OpTeX/ markup language standard (OMLS) declares a list of control -sequences used in \OpTeX/ documents including their syntax and sematic. The -listed control sequences in OMLS in section~\ref[listcs] in table~\ref[alistcs] -are called {\it known} and other control sequences are {\it unknown}. - -The main reason for OMLS is to give instructions on how to program convertors -from \OpTeX/ documents to another formats (Html, Markdown, \LaTeX/) or how -to interpret the \OpTeX/ document sources in such applications as -{\tt texcount} or text editors\fnote -{We suppose advanced editor features: color highlighting, sections/chapters folding, - auto-completions, etc.}. -These converters and applications are called {\it cnv-programs} in this document. - -We suppose that if you need absolute control over the typography of the -document when it is converted to PDF pages, then you use \OpTeX/ itself. If -you need to create other formats of the same document then you can use a -cnv-program which accepts OMLS. The result is a document without -typographical instructions like dimensions of pages, margins, paginations -and headers, selection of a font-family, dimensions of the fonts, etc.\ You can -imagine the result of such a conversion as a single Html page where more -typographical features can be controlled in a different way, for example by -an external CSS file. This is a reason why control sequences like `\fontfam` or -`\margins` are ignored by cnv-programs. - -Obviously, \TeX/ and \OpTeX/ itself gives possibility to declare various -input formats for various purposes. Sometimes (in very special cases) there -exists a good reason to declare a different and special input format by -\TeX/ macros. But if the source of the document respects the OMLS then it is -reasonably transformable to other formats by cnv-programs. We hope that -OMLS-ready documents cover a very large set of typical documents used these -days. - -We suppose that cnv-programs work internally with strings of source lines -without tokenization. This is one of the great differences in processing the -document directly by \OpTeX/ and using a cnv-program. The second difference is -that the expansion process of macros is not implemented in cnv-programs in -its full range. We respect that the result of cnv-programs will be different -than from processing directly by \OpTeX/. But this is not a bug, this is -the feature. We concentrate on the fixed syntax and sematic given by OMLS of the -\OpTeX/ document and we throw behind the head the typographical -exactness of the document which can be done only directly by \TeX/ (and it is -exactly described in \TeX/book, for example). - -\notoc\nonum\sec Table of contents - -\begmulti 2 -\maketoc -\endmulti -\vfil\break - -\sec Syntactical rules - -The syntactical elements are described as strings here. No \TeX/'s tokenization is -taken into account. The rule with a smaller number has precedence. - -\begitems \style n -* end of line or end of file \: \~`<eol>`.\r[eol] -* `%%:` at beginning of the line \: \~`<cnv-declarator>`, see section~\ref[cnv-decl]. -* `<cnv-declarator><text><eol>` is interpreted specially. -* space or a tab-character \: \~`<space>`. -* non-empty sequence of `<space>`s \: \~`<spaces>`.\r[spcs] -* an empty line or a line only with `<spaces>` \: \~`<empty-line>`. -* a character `a`--`z` or `A`--`Z` \: \~`<letter>`. -* a `<letter>` or `_` \: \~`<specletter>`. -* a character different from previous rule or `<eol>` or `<spaces>` \: \~`<non-specletter>` -* `\<non-specletter>` \: \~`<singlechar-control-sequence>`.\r[scs] -* a non-empty sequence of `<specletter>`s \: \~`<letters-seq>`. -* `\<letters-seq><non-specletter>` \: \~`<multiletter-control-sequence>``<non-specletter>`. -* `%<text><eol>` \: `<comment>` and it is completely ignored including `<eol>`.\r[com] -* `<spaces>` at beginning of the line marks that the line as {\it indented}. -* `<spaces>` at beginning of the line \: are ignored.\r[bspace] -* `<spaces><eol>` or `<eol>` \: `<spaces>`.\r[eolrm] -* `<multileter-control-sequence><spaces>` \: `<multileter-control-sequence>`.\r[csspace] -* `<multiletter-control-sequence>` or `<singlechar-control-sequence>` \: \~`<control-sequence>`.\r[cs] -* `<spaces>` \: `<space>`.\r[sspace] -* `~` \: non-breakable space. -* text where all pairs `{` and `}` match at arbitrary level \: \~`<balanced-text>`.\r[balt] -* `{<balanced-text>}` can be interpreted as a parameter of a `<control-sequence>`, see section~\ref[listcs]. -* The `{` alone not used by previous rule opens a group and the `}` alone closes the same group.\r[group] -* There are two main modes: h-mode, v-mode\fnote - {this is great simplification of real \TeX/ modes.}. - The document processing starts in v-mode. -* In v-mode: a `<non-space>` character or a control sequence listed - in table~\ref[vtohmode] swithes to h-mode. -* In h-mode: an `<empty-line>` or a control sequence listed in table~\ref[htovmode] switches to v-mode.\r[htov] -* The switching from v-mode to h-mode \: a paragraph begins. -* The switching from h-mode to v-mode \: the current paragraph ends. -* `$<text>$` or `$$<text>$$` \: process `<text>` in math-mode, see section~\ref[math]. -* a non-empty sequence of digits with optional `+` or `-` in the front \: \~`<number>`. -* `<number>` with optional dot inside the sequence of digits \: \~`<decimal-number>`. -* a pair of letters listed in the table~\ref[tex-units] \: \~`<tex-unit>`. -* optional space, i.e.\ `<space>` or nothing \: \~`<o-space>`. -* `<decimal-number><o-space><tex-unit><o-space>` \: \~`<dimen>`. -* `<control-sequence>` not listed in table~\ref[alistcs] nor in configuration \: \~`<unknown-control-sequence>`.\r[unkncs] -* `=<o-space>` or `<o-space>` \: \~`<o-equal>`. -* `<unknown-control-sequence><o-equal><dimen>` \: should be completely ignored.\r[eqdim] -* `<unknown-control-sequence><o-equal><number>` \: should be completely ignored. -* `<unknown-control-sequence>=<o-space>{<balanced-text>}` \: should be completely ignored. -* `<unknown-control-sequence>[<balanced-text>]` \: should be completely ignored.\r[ibkt] -* `<unknown-control-sequence>` \: should be ignored.\r[ignore] -* `<control-sequence>`s are processed as described in section~\ref[listcs] or - by a configuration of the cnv-program. -\enditems - -\bigskip -\label[vtohmode]\caption/t -List of control sequences which switch from v-mode to h-mode. -\cskip -\begblock -`\`<space>, -`\hfil`, -`\hfill`, -`\hskip`, -`\hss`, -`\indent`, -`\leavevmode`, -`\noindent`, -`\quad`, -`\qquad`, -`\vrule`. -\endblock - -\bigskip -\label[htovmode]\caption/t -List of control sequences which switch from h-mode to v-mode. -\cskip -\begblock -`\begblock`, -`\begitems`, -`\begmulti`, -`\begtt`, -`\bib`, -`\bigskip`, -`\bye`, -`\caption`, -`\chap`, -`\cskip`, -`\end`, -`\endblock`, -`\enditems`, -`\endmulti` -`\hrule`, -`\medskip`, -`\par`, -`\sec`, -`\secc`, -`\secl`, -`\smallskip`, -`\vfil`, -`\vskip`. -\endblock - -\bigskip -\label[tex-units]\caption/t -List of \TeX/ units. -\cskip -\begblock -`bp`, -`cc`, -`cm`, -`dd`, -`em`, -`ex`, -`in`, -`mm`, -`pc`, -`pt`, -`sp`. -\endblock - -\nonum\secc Examples - -\begitems -* `\%` is `<control-sequence>` by rules \ref[scs], \ref[cs]. It does not start - comment, because rule \ref[scs] has precedence before rule \ref[com]. -* `\%<space>`: the `<space>` is kept, but `\foo<space>`: the space is removed - by rule~\ref[csspace]. -* `wordA<spaces><eol><spaces>wordB` is `wordA<space>wordB` by rules~\ref[bspace], - \ref[eolrm], and~\ref[sspace]. -* `\kern-3pt` should be ignored, because `\kern` is `<unknown-control-sequence>` and rule - \ref[eqdim] is applied. -* `\vskip42mm` should finalize paragraph in h-mode by rule~\ref[htov] and then it - is ignored by rule~\ref[eqdim] because `\vskip` is - `<unknown-control-sequence>` not listed in table~\ref[alistcs]. -* `\typosize[12/16]` is ignored by rule~\ref[ibkt]. -* `\foo{text}` is `{text}` (i.e. `text` in a group) by rules~\ref[ignore] and~\ref[group]. -\enditems - -\sec Scanning parameters - -If a control sequence listed in rules above or in the section~\ref[listcs] -has a parameter, the parameter is scanned -as a string with interpretation only those rules which are needed to -determine the boundary of the parameters. For example `\tit <title><eol>` -applies only rule~\ref[eol] during scanning the parameter, i.e.\ `<title>` -is a string telemetered by the end of the line or the end of the file. -Or `\fnote{<balanced-text>}` applies only rule~\ref[balt]. - -If the parameter is in the format `{<something>}` then the `<something>` is -always meant as `<balanced-text>`. We don't specify the type `<balanced-text>` -explicitly here, so we refer to `\fnote{<text>}` and not -`\fnote{<balanced-text>}`, for example. - -The spaces before the scanned parameter are optional -and they are ignored. Spaces inside `{`...`}` are not ignored. - -If the parameter is in the format `{<something>}` and the first non-space -character is not `{` then the parameter is this first non-space character or -a `<control-sequence>` if the first non-space character is~`\`. For example -`\fnote a` is equal to `\fnote{a}`. The difference from this rule is given -for `\input`, `\verbinput`,`\inspic` and `\inkinspic` control sequences in -section~\ref[listcs]. - -If the parameter is scanned as a string already then -all syntactical rules are applied when it is used. For example: -\begtt -\tit This is a title -\endtt -the parameter is scanned as `This is a title` and the rules~\ref[spcs] -and~\ref[sspace] are applied when it is used. - - -\sec Declaration and text parts of the document - -A typical \OpTeX/ document has two parts. A declaration part, where -macros are defined by `\def` and friends, fonts and sizes are declared, etc. -This part should be ignored by cnv-programs. -The second part includes the document text with a markup using well-declared control -sequences. The cnv-program has to interpret the second part. - -So, the cnv-program starts in declaration-skipping mode and it switches to -the text mode later. - -When cnv-program is in declaration-skipping mode then all indented lines are -ignored. And lines which begins by `}` or by a <control-sequence> not listed -in table~\ref[textopen] are ignored too. - -If the line begins by a character other than `}` or by a <control-sequence> -listed in table~\ref[textopen] then cnv-program switches to text mode. All -texts are interpreted from this line including this one. - -User can say explicitly where the second part of the document starts by -`%%:text` given at beginning of a line. Moreover, if `%%:decl` is given at -beginning of a line, then all text between `%%:decl` and `%%:text` is -ignored, only other possible `<cnv-declarator>`s are processed here. -It means that the declaration part and the text part of the document can be -simply determined by the pair `%%:decl` and `%%:text`. - -\bigskip -\label[textopen]\caption/t -List of control sequences which start the text mode. -\cskip -\begblock \raggedright -`\address`, -`\begblock`, -`\begitems`, -`\begmulti`, -`\begtt`, -`\bf`, -`\bi`, -`\bib`, -`\caption`, -`\cite`, -`\clipinoval`, -`\clipincircle`, -`\ecite`, -`\fnote`, -`\frame`, -`\hfil`, -`\hfill`, -`\ii`, -`\iid`, -`\incircle`, -`\inkinspic`, -`\inoval`, -`\inspic`, -`\it`, -`\LaTeX`, -`\LuaTeX`, -`\maketoc`, -`\mnote`, -`\OpTeX`, -`\putpic`, -`\puttext`, -`\rcite`, -`\rm`, -`\rotbox`, -`\sec`, -`\secc`, -`\secl`, -`\table`, -`\TeX`, -`\tit`, -`\usebib`, -`\verbinput`. -\endblock - - -\sec[cnv-decl] The `%%:` declarators - -The `%%:` declarators are ignored when the document is processed by \TeX/ -but they can give instructions to cnv-programs. The `%%:` must be placed at -beginning of the line. The list of `%%:` declarators follows: - -\begitems -* `%%:decl` -- the following text is ignored until `%%:text` occurs. Only - other `%%:` declarators are interpreted. -* `%%:text` -- the following text must be interpreted in text mode. -* `%%:to <format> <config-file>` -- if the cnv-program converts to the - <format> then it has to use the <config-file>. For example: - \begtt - %%:to html html-mydocument.cfg - %%:to markdown markdown-mydocument.cfg - %%:to latex preamble-mydocument.cfg - \endtt - The language of the config files are not a part of this standard, we - suppose something to be natural for used cnv-program. The config file should - give additional rules for interpreting control sequences not listed in the - section~\ref[listcs] (see rule~\ref[unkncs]). For example a tool for - defining a behavior of unknown control sequences can be here. - These definitions can depend on the converted document and on the output - format and they can be given in the configuration files. -* `%%:app <application> <config-file>` -- behaves like `%%;to` but the - cnv-program name instead output format is given here. -* `%%:do <format-or-app> <action>` -- does an `<action>` if `<format-or-app>` - is output format or used cnv\hbox{-}program name. The `<action>` syntax depends - on used cnv-program and it typicaly does a change in its configuration or - give a command to it. -* `%%:skip <formats-or-apps>` -- ignores all following lines until another `%%:` occurs - if the output format or application name is included in the `<formats-or-apps>` - space-separated list. Example: - \begtt - %%:skip html markdown - This text is not interpreted when Html or Markdown output is generated. - %%: - \endtt - If the `<formats-or-apps>` is empty then the `%%:skip` is applied for - each cnv-program and for each output. -* `%%:if <formats-or-apps>` -- processes following lines until another `%%:` - only if the output format or application name is included in the - `<formats-or-apps>` space-separated list. Other cnv-programs or output formats - not mentioned here skip these lines. Note that \TeX/ processes such lines always. - But you can use `\ignoreit{<text>}` which is processed as - `{<text>}` by cnv-programs (see rule~\ref[ignore]) but it is ignored by \OpTeX. - Example: - \begtt - %%:if html latex - \ignoreit{\input{file.tex}} - %%: - \endtt - The `file.tex` in this example is processed only if \LaTeX/ or Html output is generated. -* `%%:use` -- the next single line is fully interpreted unless cnv-program ignores - declarations by `%%:decl` or because it is in declaration-skipping mode. - Example: - \begtt - %%:use - \verbchar` \picdir={img/} - \endtt - The example shows how cnv-program is able to read `\verbchar` or - `\picdir` settings in the declaration\hbox{-}skipping mode although these control - sequences are not listed in table~\ref[textopen]. -* `%%:quotes <qql> <qqr> <ql> <qr>` -- declares \~`<qql>` and \~`<qqr>` (left - and right double quotation marks), \~`<ql>` and \~`<qr>` (left and right single - quotation mark). They are used when `\"` or `\'` control sequences are - processed. Default: unset, i.e.\ `\"` and `\'` are interpreted as - unknown control sequences. -\enditems - - -\sec[listcs] List of known control sequences - -The phrase \"should be" is used very often when the interpretation of -control sequences is declared here. It means that this is only a common -interpretation, but differences are possible due to the type of the output -format and used cnv-program. For example, when we convert to \LaTeX\, then -`\-` and `\/` are not ignored but they are re-written without change to the -output of the \LaTeX/ source file. - -\bigskip -\label[alistcs] -\caption/t List of known control sequences alphabeticaly sorted. -\cskip -\begblock -\raggedright \printknowncs -\endblock - - -\secc Character-like control sequences - -\begitems -* \.`\%`, \.`\$`, \.`\&`,\.`\#` respectively \: should be normal characters - `%`, `$`, `&`, `#` respectively. -* \.`\bslash` \: normal character `\`. -* \.`\space`, `\<space>`, `\<eol>` \: space. -* `\,` \: should be small space or space. -* \.`\quad`, \.`\qquad` \: should be bigger space or more spaces. -* \.`\-`, \.`\/` \: should be ignored. -* \.`\"<text>"` or \.`\'<text>'` \: `<qql><text><qqr>` or `<ql><text><qr>`, - only if `%%:quotes` are set. -\enditems - -\secc Input files - -\begitems -* \.`\input {<file-name>}` or `\input <file-name><space>` should redirect the - input to given file. At the end of the input-ed file or at \.`\endinput` the - reading of the current file continues. The file is read from the current - directory, but the <file-name> should include the full path to the file - or relative path starting from the current directory. First, the file - `<file-name>.tex` is tried to read and if it doesn't exist then - the file `<file-name>` is read. -* \.`\picdir <o-equal>{<text>}` saves `<text>` to `<picdir-value>`. By - default, `<picdir-value>` is empty. -* \.`\inspic {<file-name>}` or `\inspic <file-name><space>` should include the - given picture from the `<picdir-value><file-name>`. -* \.`\inkinspic {<file-name>}` or `\inkinspic <file-name><space>` behaves like - `\inspic`. -* \.`\verinput <ignore> (<lines>) <file-name><space>` should include the - <file-name> (only given lines) as a verbatim text, i.\,e. without any - syntactical interpretation. -* \.`\usebib/<letter> (<style>) <file-names>` should use files from - `<file-names>` to generate the list of bib references. The `<file-names>` - is comma separated list (the `.bib` extension is appended to - each such file name). Only cited bib records should be used in this - bib-references, i.e. their label must be used in a `\cite[<labels>]` or - `\rcite[<labels>]` or `\ecite[<label>]`. - What bib fields are used in bib records depends on the cnv-program and - on its configuration. Maybe, simple cnv-programs should generate nothing here. -\enditems - -\secc Titles - -\begitems -* \.`\tit <title><eof>` should be a title of the document. -* \.`\chap <title><eof>` or `\chap [<label>] <title><eof>` is the title of - first level. -* \.`\sec <title><eof>` or `\sec [<label>] <title><eof>` is the title of - second level. -* \.`\secc <title><eof>` or `\secc [<label>] <title><eof>` is the title of - third level. -* \.`\secl<level> <title><eof>` is the title of given level. -\enditems - -\secc Fonts - -\.`\rm` selects upright normal font (it is selected by default), \.`\it` selects -italic, \.`\bf` selects upright bold font, \.`\bi` selects bold italic and -\.`\tt` selects a monospaced font, \.`\em` select italic (if upright is current) or upright -(if italic is current). The font sizes or other font features are typically ignored -by cnv-programs. The actual font selection is closed at the end of the current group. -The groups are given: -\begitems -* explicitly by `{` and `}` characters (which are not delimiters of - parameters of known control sequences), -* implicitly: parameters of control sequences listed in table~\ref[groupcs] - are processed in a group and blocks of text enclosed by - `\begitems`...`\enditems`, `\begblock`...`\endblock`, `\begmulti`...`\endmulti` - are processed in a group. - Each item in `\table` is in a group. -\enditems - -\label[groupcs] -\caption/t Parameters of following control sequences are processed in a group. -\cskip -\begblock -`\caption`, -`\chap`, -`\fnote`, -`\mnote`, -`\sec`, -`\secc`, -`\tit`. -\endblock - -\secc Colors - -\.`\Red`, \.`\Green`, \.`\Blue`, \.`\Cyan`, \.`\Magenta`, \.`\Yellow`, \.`\White`, -\.`\Black`, and \.`\Brown` should select the given color of the font. The selection -is closed at the end of the current group (like font selectors). - -\secc Blockquotes - -The blockquote\fnote -{The terminology is borrowed from Markdown.} -is opened by \.`\begblock` and closed by \.`\endblock`. -Blockquotes can contain multiple paragraphs and can contain nested -blockquotes. - -\secc Lists - -The list is opened by \.`\begitems` and closed by \.`\enditems`. The `*` starts -a new item in this environment. Nested lists are allowed. - -The type of items (ordered/unordered) -is given by \.`\style <character>`, see section 1.4.5 in the -\optexmanual. Default type is unordered (bullets are used). - - -\secc Code blocks (verbatim texts) - -Code blocks are inline verbatim or display verbatim. - -\begitems -* \.`\begtt <ignored><eol><text>\endtt<ignored><eol>` processes `<text>` in - \"display verbatim mode", i.\,e. there are no special characters, each character - is processed without special interpretation, the <eol>s are end of lines. - The text at the same line after `\begtt` and after `\endtt` (if any) is - ignored. -* \.`\verbchar <character>` declares `<verbchar>`. By default, it is undeclared.\nl - New `\verbchar <character>` rewrites previous setting. The setting is - local in the group. -* Inline verbatim is enclosed in the pairs of `<verbchar>`s. - The text between two `<verbchar>`s is processed without special interpretation. - Only possibly <eol>s are replaced by space. - Example: - \begtt - %%:use - \verbchar` - Now, `$this %text ~\` is processed as inline verbatim. - \endtt - gives: Now, `$this %text ~\` is processed as inline verbatim. -* \.`\code{<text>}` processes `<text>` like inline verbatim, but - all `\<character>` are processed as `<character>`, specially `\{` and `\}` - are `{` and `}` but without taking them into `<balanced-text>` rule, - `\\` is `\` but do not create a `<control-sequence>`, etc. -\enditems - - -\secc Multicolumns - -\.`\begmulti <number><space>` opens the group and \.`\endmulti` -closes the group. If output format allows multi-columns then -the text enclosed between `\begmulti <number><space>` and matching -`\endmulti` should be printed in `<number>` balanced columns. - - -\secc Links - -\begitems -* \.`\url{<text>}` creates `<text>` as an external link which points to `<text>`. - The `\<character>` is interpreted as `<character>` in `<text>` with one - exception: `\|` is ignored. -* \.`\ulink[<url>]{<text>}` creates `<text>` as an external link which points - to `<url>`. The `\<character>` is interpreted as `<character>` only in - `<url>` parameter. -* \.`\label[<label>]` sets the `<label>`. First following occurence of `\chap`, `\sec`, - `\secc`, `\caption` or `\eqmark` sets this `<label>` as bounded to its - position in the document. -* \.`\ref[<label>]` should create an internal link to the position given by - `\chap`, `\sec`, `\secc`, `\caption` or `\eqmark`, - if `[<label>]` is used as the parameter of this control sequence - else if `<label>` is bounded here by previous `\label[<label>]` - The visual aspect of the link - is not declared by OMLS because we don't suppose that the chapters, - sections, equations, etc.\ are automatically numbered by exactly the same way as in - \OpTeX/. A recommendation should be: create a simple sequence of numbers over - all internal links. -* \.`\pgref[<label>]` should be replaced by `??` if cnv-program generates single-page - output (like Html, Markdown). Unfortunately, we get the irrelevant phrases in the output: - \"{\tt The problem is shown at the page ??}". - Users can declare `%%:skip` for such cases. -* \.`\bib[<label>]` or `\bib[<label>]<o-space>=<o-space>{<ignored>}` should open the new bib - record. More exactly, it closes previous paragraph (if h-mode is current) - and opens new h-mode. Then prints an auto-generated reference number in - `[...]`. Following text is interpreted as a bib record until the h-mode ends. -* \.`\cite[<labels>]` should create internal links to corresponding bib - records generated by `\usebib` or by `\bib`. The `<labels>` is a comma-separated list - of labels used in `.bib` files or in `\bib` commands to indicate - the corresponding bib record. The labels should be replaced by auto-generated - reference numbers used in bib records. All reference numbers created by - single `\cite` should be enclosed by single `[...]`. These numbers are - internal links. If the cnv-program does not implement this complicated - bib machinery then `\cite[<labels>]` should print only `[<labels>]`. -* \.`\rcite[<labels>]` does the same as `\cite[<labels>]` but doesn't print - outer `[...]`. -* \.`\ecite[<label>]{<text>}` creates the link to corresponding bib record, - `<text>` is is hyperlinked (no the auto-generated reference number). -* \.`\maketoc` should create a list of titles from all `\chap`, `\sec` and `\secc` - used in the document if they are not preceded by \.`\notoc`. All lines in - this list should include internal links to the position where the corresponding title - is used. -\enditems - -\secc Tables - -\begitems -* \.`\caption/<letter>` opens a caption. More exactly, if current mode is - h-mode, then switch to v-mode first (i.e.\ close the current paragraph). - Then switch from v-mode to h-mode and put a <caption-head>. The following - text should be interpreted as the caption text until h-mode ends. - If <letter> is `t` then <caption-head> is `Table` followed - by an auto-generated number. If the <letter> is `f` then <caption-head> is - `Figure` followed by an auto-generated number. The configuration of - cnv-programs shoud allow different words than default `Table` or `Figure` (for - example, if another language is used). -* \.`\table<ignored>{<declaration>}{<data>}` should create a table. The fidelity - rate of created output depends heavily on the used cnv-program and the output - format. We don't suppose that all aspects of \OpTeX/ tables are implemented. - The following features are listed in their priority of implementation. - \begitems \style c - * Items in `<data>` are separated by `&`. - The last item in each row is separated by end-row separator: \.`\cr`, \.`\crl`, \.`\crll`, - \.`\crli`, \.`\crlli`, or \.`\crlp{<list>}`. If there are $n$ columns in - the table then we have $n-1$ `&` separators and one end-row separator - for each table row. - There can be an optional end-row separator at the first item in `<data>` and - it should be ignored. The `<data>` can end without the end-row separator, it - should be added here. - * Spaces around `&` and before end-row separator are ignored. - * \.`\noalign{<text>}` and \.`\tskip <dimen>` should be ignored. - * Colum declarators in <declaration> should be interpreted: `l` (left aligned), `c` (center - aligned), `r` (right aligned) or `p{<ignored>}` (paragraph-like item). - * The `<number><letter>` or `<number>{<text>}` should be interpreted as - `<number>`-times repeated `<letter>` or `<text>` in `<declaration>`. - * \.`\vspan<decimal-number>{<text>}` should be an item with only `<text>`. - * \.`\mspan<number>[<decl>]{<text>}` should create `<text>` as an item which - spans over `<number>` columns. It is used instead `<number>` real - items, i.e.\ `<number>`$-1$ separators `&` aren't used here. - * Rules in the table should be interpreted, i.e. `|` in <declaration> - should be not ignored and - various end-row separators should be distinguished (see \optexmanual, - section 1.4.6). - * The aligning of `p{<p-data>}` columns should be interpreded by reading - \.`\fL`, \.`\fR`, \.`\fC`, \.`\fS` and \.`\fX` control sequences in `<p-data>`. - See \optexmanual, section 1.4.6. - \enditems -\enditems - -\secc Footnotes, marginal notes - -\begitems -* \.`\fnote{<text>}` should create a footnote link as an auto-generated - reference number. - The `<text>` should be appended at the end of the document labeled by this - reference number. Another alternative (for Html output, for example): the mouse over - the reference number riases an auto-popup `<text>`. -* \.`\fnotemark<number>` should create a pointer to a next declared - footnote as auto-generated reference number. The `<text>` of the footnote is - declared after that by \.`\fnotetext{<text>}`. Exact behavior: if the - reference number of the last processed `\fnote` is $n$ then - `\fnotemark<number>` uses the value - $n+{}$`<number>` as its reference number. A set of `\fnotemark`s - is followed by an equally large set of `\fnotetext{<text>}`. First one - have reference number $n+1$, second $n+2$, etc. When whole set of `\fnotetext{<text>}` - is processed then $n$ is reset to the last reference number used here. -* \.`\mnote <ignored>{<text>}` should be created as auto-popup `<text>` or the `<text>` - is inserted at the margin. -\enditems - -\secc Tagging for index - -We don't suppose that the cnv-program can generate the alphabetically sorted -index. So, the markup for creating the index should be ignored: - -\begitems -* \.`\ii <word><space>` (where `<word>` is a sequence of non-space characters) - should be ignored. -* \.`\iid <word><space>` is `<word><space>` by default, but - if `,` or `.` follows after `<space>` then the `<space>` is removed. -\enditems - -\secc Logos - -\.`\TeX`, \.`\LuaTeX`, \.`\OpTeX`, \.`\LaTeX`, respectively \: -`TeX`, `LuaTeX`, `OpTeX`, `LaTeX`, respectively. If `/` follows -these control sequences then it is ignored. Other logos should be declared -in the configuration of the cnv-program. - -\secc What should be ignored - -\begitems -* \.`\def<text>{<text>}` and other variants with \.`\gdef`, \.`\edef`, \.`\xdef`. - Reason: user can insert a special definition in the `%%:text` part of the - document in order to solve a problem. But cnv-program should ignore~it. -* \.`\outlines{<text>}`, \.`\insertoutline{<text>}` and \.`\thisoutline{<text>}`. -\enditems - - -\sec[math] Math mode processing - -There are two math modes, inline: `$<formula>$` or display: `$$<formula>$$`. -We suppose that `<formula>` will be processed by MathJax or similar -software. So, the `<formula>` should be kept without changes in cnv-program -output, but there are exceptions: - -\begitems -* `$<sign><decimal-number>$` should be transformed to non-math text - `<sign><decimal-number>`. The `<sign>` is~`+` or~`-` or nothing. - The `<decimal-number>` can include `,` (comma) instead `.` (period). - If the `<sign>` is~`-` (character U+002D) then - it must be converted to `−` (character U+2212, math minus). -* `{\bbchar <text>}` should be converted to `\mathbb{<text>}`, because - MathJax doesn't understand `\bbchar`. `$\bbchar <text>$` should be - converted to `$\mathbb{<text>}$`. -* `{\frak <text>}` or `$\frak <text>$` \: - `\mathfrak{<text>}` or `$\mathfrak{<text>}$`. -* `{\script <text>}` or `$\script <text>$` \: - `\mathscr{<text>}` or `$\mathscr{<text>}$`. -* `\eqmark`, `\eqmark[<label>]` \: `\leqno (<num>)`, where `<num>` is - auto-generated number. Or it should be completely ignored. -* It is strongly recommended to allow users to declare another replacement - rules over `<formula>` in configuration files of cnv-programs. -\enditems - - -\sec Notes on various conversions - -The cnv-programs behave differently because output formats have different -concepts and are intended for different purposes. The following sections -mention the main differences for typical conversions. - -\secc To Html - -The Html document is one single page. If we want to split the document to more -pages, then we can use `%%:do html <action>` in positions where the document -should be split (the syntax of `<action>` depends on the used cnv-program.) - -The design of Html pages should be declared by CSS files. - -Pictures inserted by `\inspic` should be inserted into the Html page as -\code{<img src="...">}, so the picture files must be installed in -the webserver to render the Html page correctly in a web browser. - -The `\maketoc` used in the \OpTeX/ document means that the Table of contents should -be here. It should be generated by the cnv-program, two-pass processing is -needed because the cnv-program needs to read all titles of `\chap`, `\sec` and -`\secc`. Another approach is to read the `.ref` file produced by \OpTeX/. - - -\secc To Markdown - -Markdown source file is \"one-page document" too. The principles a -re similar to conversion to Html. - -\secc From Markdown - -The cnv-program which does such a reverse conversion should be very useful for -people they prefer even clearer markup than in \OpTeX/. - -\secc To \LaTeX - -\LaTeX/ gives the same main feature as \OpTeX/: it can generate PDF -output from a source file. But different macros, a different concept, and -a different markup are used. - -The main reason for such conversion is that journal editors -require \LaTeX/ source file, but user want to prepare their real document in -more comfortable (\OpTeX/) markup and with more simple macros. - -This conversion should keep almost all features. For example, the -`\pgref[<label>]` is converted to `\pageref{<label>}`. The cnv-program -needs not to generate a Table of contents, bibliography references, etc. Only -appropriate \LaTeX/ markup must be used. - -The contents of generated \LaTeX/ preamble should be configurable. - - -\secc From \LaTeX - -The reverse conversion from \LaTeX/ to \OpTeX/ can be usable -for people, they want to switch to creating their documents in \OpTeX/. - -The cnv-program must solve additional problem in this type of conversion. -There are various math \LaTeX/ environments, they must be converted to -plain~\TeX/ syntax of math typesetting. For example:\nl -`\begin{array}...\end{array}` \: `\matrix{...}`,\nl -`\begin{align*}...\end{align*}` \: `$$\eqalign{...}$$`\nl -`\frac{...}{...}` \: `{...\over...}`. - -\bye diff --git a/macros/luatex/optex/doc/optex-doc.pdf b/macros/luatex/optex/doc/optex-doc.pdf Binary files differdeleted file mode 100644 index a4df4f013a..0000000000 --- a/macros/luatex/optex/doc/optex-doc.pdf +++ /dev/null diff --git a/macros/luatex/optex/doc/optex-doc.tex b/macros/luatex/optex/doc/optex-doc.tex deleted file mode 100644 index 9f2fadeeb4..0000000000 --- a/macros/luatex/optex/doc/optex-doc.tex +++ /dev/null @@ -1,114 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% Run optex optex-doc -% (three times) to generate OpTeX documentation including references and the index. - -\load [doc.opm] \let\enddocument=\endinput - -\typosize[10/12] % Main size (used in techdoc) - -\begingroup \typosize [11/13.5] % Different size used in useroc. - -\insertoutline{OpTeX} % PDF outlines generated from TOC - -% Title: - -\vglue1cm -\centerline{\setfontsize{at50pt}\rm\OpTeX} -\vskip-8mm - -\tit Format Based on Plain \TeX/ and OPmac\fnotemark1 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\hfill Version 1.01 - -\centerline{\it Petr Olšák, 2020, 2021} - -\bigskip -\centerline{\url{http://petr.olsak.net/optex}} - -\fnotetext {OPmac package is a set of simple additional macros to Plain \TeX{}. -It enables users to take advantage of \LaTeX/ functionality but keeps -Plain \TeX/ simplicity. See -\url{http://petr.olsak.net/opmac-e.html} for more information about it.} - -\bigskip -\noindent -\OpTeX/ is \LuaTeX/ format with Plain \TeX/ and OPmac. Only \LuaTeX/ engine -is supported. - -\OpTeX/ should be a modern Plain \TeX/ with power from OPmac (Fonts -Selection System, colors, graphics, references, hyperlinks, -indexing, bibliography, ...) with preferred Unicode fonts. - -The main goal of \OpTeX/ is: - -\begitems -* \OpTeX/ keeps the simplicity (like in Plain \TeX/ and OPmac macros). -* There is no old obscurities concerning various 8-bit encodings and - various engines. -* \OpTeX/ provides a powerful Fonts Selection System (for Unicode font - families, of course). -* \OpTeX/ supports hyphenations of all languages installed in your \TeX/ system. -* All features from OPmac macros are copied. For example sorting words in - the Index\fnotemark1, reading `.bib` files directly\fnotemark1, syntax - highlighting\fnotemark1, colors, graphics, hyperlinks, references). - \fnotetext{All these features are implemented by \TeX/ macros, no external - program is needed.} -* Macros are documented in the same place where code is. -* User namespace of control sequences is separated from the internal namespace - of \OpTeX/ and primitives (`\foo` versus `\_foo`). - The namespaces for macro writers are designed too. -\enditems - -If you need to customize your document or you need to use something -very specific, then you can copy relevant parts of \OpTeX/ macros into your macro -file and do changes to these macros here. This is a significant difference from -\LaTeX/ or ConTeXt, which is an attempt to create a new user level with a -plenty of non-primitive parameters and syntax hiding \TeX/ internals. -The macros from \OpTeX/ are simple and straightforward because they solve only -what is explicitly needed, they do not create a new user level for -controlling your document. We are using \TeX/ directly in this case. -You can use \OpTeX/ macros, understand them, and modify them. - -\OpTeX/ offers a markup language for authors of texts (like \LaTeX), -i.\,e.\ the fixed set of tags to define the structure of the document. This -markup is different from the \LaTeX{} markup. It may offer to write the -source text of the document somewhat clearer and more attractive. - -The manual includes two parts: user documentation and technical -documentation. The second part is generated directly from the sources of -\OpTeX/. There are many hyperlinks from one part to second and vice versa. - -This manual describes \OpTeX/ features only. We suppose that the user knows \TeX/ -basics. They are described in many books. You can see a short -document \ulink[http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf] -{\TeX/ in nutshell} too. - -\vfil\break - -\insertoutline{CONTENTS} \outlines{0} - -\notoc\nonum \sec Contents -\maketoc - -\thisoutline {USER DOCUMENTATION} - -\chap User documentation - -\input optex-userdoc -\endgroup - -%\end - -\input optex-techdoc - -\vfil\break - -\def\_printchap#1{\noindent{\_printrefnum[@]\_secfont #1}\medskip} - -\nonum\chap Index - -\begmulti 3 \tt \makeindex \endmulti - -\bye diff --git a/macros/luatex/optex/doc/optex-math.tex b/macros/luatex/optex/doc/optex-math.tex deleted file mode 100644 index 789dd5a187..0000000000 --- a/macros/luatex/optex/doc/optex-math.tex +++ /dev/null @@ -1,1662 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% Run optex optex-math (two times) to generate this document -% or look at PDF here: http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf - -\fontfam[lmfonts] - -\font\ttlib=[LiberationMono-Regular] -\def\ttspec{\let\_ttfont=\ttlib} - -\report - -\def\new #1 {\mnote{\Red$\blacktriangleleft$\,\sans\setfontsize{at9pt}\rm#1}} -\fixmnotes\right -\enquotes -\verbchar` -\catcode`\<=13 -\def<#1>{$\langle\hbox{\it#1\/}\rangle$} -\everyintt={\catcode`\<=13 } -\def\ss#1{$\vrule height3pt#1\vrule height3pt$} - -\addto\_secfont\Blue \addto\_seccfont\Blue -\_def\_printsec#1{\_par - \_abovetitle{\_penalty-400}\_bigskip - {{\_secfont \_noindent \_raggedright \llap{\_printrefnum[@\_quad]}#1}\_nbpar}\_insertmark{#1}% - \_nobreak \_belowtitle{\_medskip}% - \_firstnoindent -} -\_def\_printsecc#1{\_par - \_abovetitle{\_penalty-200}\_medskip - {{\_seccfont \_noindent \_raggedright \llap{\_printrefnum[@\_quad]}#1}\_nbpar}% - \_nobreak \_belowtitle{\_medskip}% - \_firstnoindent -} - -\def\i #1 {\ii .#1 \iis .#1 {{\code{\\#1}}}} -\def\x`{\bgroup\_setverb\xx} -\bgroup \lccode\string`\.=\string`\` \lowercase{\egroup \def\xx #1#2.{\i #2 \egroup `#1#2.}} - - -\hyperlinks\Green\Green - -\insertoutline{MATH} -\outlines{0} - - - -\tit Typesetting Math with \OpTeX/ - -\hfill Version 03, January 2021 - -\author Petr Olšák - - -This document is a brief summary of typesetting math. It describes \TeX/, -Plain \TeX/ and \OpTeX/ features concerned to math. The first two types of -features are documented in \TeX/book in chapters 16, 17, and 18, but it is -summarized here in short again in order to give a complete guide about math -typesetting for \OpTeX/ users. - -\new {} -The \OpTeX/ features which differs from standard \TeX/ or Plain \TeX/ are -documented with the red triangle at the margin (like in this paragraph). -Reader can simply distinguish between \"standard" features (given by -\TeX/ or Plain \TeX/) and new \OpTeX/ features. - -There are more types of extensions: e\TeX, lua\TeX/, Unicode math and -\OpTeX/ macros. The appropriate label (e\TeX, Lua\TeX/, Unicode, \OpTeX/) -is appended to the red triangle to inform you about the extension type. -Nevertheless, \OpTeX/ user doesn't have to worry about it, all extensions -are available if Unicode Math font is loaded (e.g., by the command -`\fonfam[lmfonts]`). See section 1.3.3 in \OpTeX/ documentation about -loading Unicode math fonts. - -{\iindent=2em -\bigskip -\maketoc } -\vfil\break - -\sec Basics structure of math formulas - -\secc General rules and terminology - -The \ii in-line/math in-line math (in the paragraph) is created by `$<math list>$`. The -\ii display/math display math (a standalone line between paragraphs) is created by `$$<math list>$$`. -More than one line can be here if an appropriate macro is used. In-line math is -processed in a \TeX/ group in \ii in-line/math/mode {\em in-line math mode}. The display math is -processed in a \TeX/ group in \ii display/math/mode {\em display math mode}. Spaces are -ignored in math modes, so `$x+y$` and `$x + y$` gives the same result: $x+y$. - -The \ii math/list <math list> is a sequence of \ii math/atom,atom {\em math atoms} and -\ii other/material {\em other material}. -The math atoms are \ii single/math/object {\em single math objects} or -\ii composed/math/atom composed math atoms. - -\begitems \hfuzz=.6pt -* The single math object is a single character to be printed in math mode - like `x`, `+`, `\int`. -* The math atom is constructed in general by `{<math list 1>}^{<math list 2>}_{<math list 3>}`. - It consists from \ii nucleus {\em nucleus} <math list 1>, \ii exponent exponent <math list 2> - and \ii subscript subscript <math list 3>. Each part of the atom should be empty. - If <math list 2> or <math list 3> is empty, we need not to write brackets and - the prefix `^` or `_`. - If the <math list 1> or <math list 2> or <math list 3> - consist only from a single math object then we need not use brackets. - For example - `x^2` is a math atom with `x` in the nucleus, `2` in the exponent, and with empty subscript. - Or `a_{i,j}` is a math atom with `a` in the nucleus, empty exponent, and `i,j` in the subscript.% - \fnote{In \OpTeX/, the character `_` can be interpreted as a part of - the control sequence name, not as the subscript constructor. But in common cases, - constructions of math atoms are interpreted exactly as in plain \TeX. See sections - 2.2.2 and 2.14 of \OpTeX/ documentation for more details. If you want to - be sure that `_` is just a subscript constructor in \OpTeX/ then you can set \code{\\catcode`\\_=8} - but after this, you cannot use control sequences with `_` character.} - The constructors for exponent `^` and subscript `_` can be used in arbitrary order - after the nucleus, for example, `z_1^{x+y}` is the same math atom as - `z^{x+y}_1`. The single math objects not followed by `^` nor `_` are - considered as math atoms with this object in the nucleus and with empty - exponent and subscript (this is a very common case). - \TeX/ assigns the \ii class {\em class} for each math atom, see section~\ref[class]. -* Other material can be \TeX/ box or glue (space) or `\kern` or `\vrule` etc. -\enditems - -Example: The `Z = \int``_\Omega x^{2y} + z\, dx` generates -$Z = \int_\Omega x^{2y} + z\, dx$ and it is <math list> which consists from: - -\begitems -* `Z` is math atom with empty exponent and subscript, class: Ord, -* `=` is math atom with empty exponent and subscript, class: Rel, -* `\int``_\Omega` is math atom with empty exponent and with subscript `\Omega`, class: Op, -* `x^{2y}` is math atom with exponent `2y` and empty subscript, class: Ord, - \begitems \let\_bullet=\circ - * `2` is math atom with empty exponent and subscript, class: Ord, - * `y` is math atom with empty exponent and subscript, class: Ord, - \enditems -* `+` is math atom with empty exponent and subscript, class: Bin, -* `z` is math atom with empty exponent and subscript, class: Ord, -* `\,` is another material, the glue (space) in this case, -* `d` is math atom with empty exponent and subscript, class: Ord, -* `x` is math atom with empty exponent and subscript, class: Ord. -\enditems - -\secc[class] Classes of math atoms - -\TeX/ assigns \ii class {\em a class} for each math atom.\fnote -{Using terminology of \TeX/book, each single math object has its {\em class} but the - math atom has its {\em kind} derived from this class. I use only one word - for both meanings in this document.} -This data type is used when -\TeX/ decides about \ii horizontal/spacing horizontal spaces between atoms in the output. (Note -that spaces in the input are ignored.) For example, -`$xy$` prints two atoms without space between them but `$x+y$` is printed with -small spaces around the `+` binary operator. Compare: $xy$ and $x+y$. - -The class is assigned depending on the nucleus of the atom. If the nucleus is -not a single math object, i.e. it is constructed by `{<math list>}` with braces -then the atom has its class Ord. If the nucleus is a single math object constructed -without braces then the class of the atom depends on this single math -object. Each single math object must be declared in \TeX/ with its default -class. The following table lists the classes with typical examples. -The full set of all math objects used in math typesetting -is listed in section~\ref[objects] with their default classes. - -\bigskip -\noindent\hfil\table{llll}{ - & \ii class Class & Meaning & Example \crl - 0 & \iid Ord & ordinary object & variables, digits, $x, {\bbchar R}, \Gamma, 0, 1$ \cr - 1 & \iid Op & big opertator & $\sum, \int, \bigcup$ \cr - 2 & \iid Bin & binary operator & $+, \times, -, \pm, \cup$ \cr - 3 & \iid Rel & reations & $=, \ne, \leq, \supseteq, \succsim$ \cr - 4 & \iid Open & opening bracket & $\{, (, [, \langle$ \cr - 5 & \iid Close & closing bracket & $\}, ), ], \rangle$ \cr - 6 & \iid Punct & punctuation & comma \cr - & \iid Inner & left-right & \code{\\left...\\right} outputs, see section~\ref[delims] -} -\bigskip - -There are \ii horizontal/spacing,spacing three space types used -by the algorithm for horizontal spacing in the math formulas. - -\begitems -* \ii thin/space Thin space: \x`\thinmuskip` primitive register, `\,` macro. Used around Op atoms. -* \ii medium/space Medium space: \x`\medmuskip` primitive register, `\>` macro. Used around Bin atoms. -* \ii thick/space Thick space: \x`\thickmusip` primitive register, `\;` macro. Used around Rel atoms. -\enditems - -\puttext 7.8cm -3.7cm {\rotbox{90}{Left atom}} -\puttext 11.5cm -.5cm {Right atom} -\puttext 8.2cm -4.4cm {\typosize[9/11] -\thistable{\def\_enspace{ }}% -\table {l|8c|} { - \omit & Ord & Op & Bin & Rel & Open & Close & Punct & \omit \hfil Inner \crlp{2-9} - Ord & 0 & 1 & 2 & 3 & 0 & 0 & 0 & 1 \cr - Op & 1 & 1 & & 3 & 0 & 0 & 0 & 1 \cr - Bin & 2 & 2 & & & 2 & & & 2 \cr - Rel & 3 & 3 & & 0 & 3 & 0 & 0 & 3 \cr - Open & 0 & 0 & & 0 & 0 & 0 & 0 & 0 \cr - Close & 0 & 1 & 2 & 3 & 0 & 0 & 0 & 1 \cr - Punct & 1 & 1 & & 1 & 1 & 1 & 1 & 1 \cr - Inner & 1 & 1 & 2 & 3 & 1 & 0 & 1 & 1 \crlp{2-9} -}} - -\hangindent=-8.7cm \hangafter=0 -Ord atoms are printed without spaces between them. The spaces are not -cumulated, so the rule about spaces mentioned above is only a rough idea. -The exact rule for horizontal spaces is given for each pairs of atoms -in the table here. The symbol 0 means no space, 1 thin space, 2 medium space, -and 3 means thick space. - -\hangindent=-8.7cm \hangafter-2 -The Bin atom is automatically transformed to the -Ord atom if no atom precedes or if Op, Bin, Rel, Open, or Punct atom -precedes. And it is transformed to the Ord atom if Rel, Close or Punct atom -follows. This corresponds to the empty cells in the table. -Why such behavior? Compare \"\hbox{$0-3$}" and \"$-3$". The Bin atom in -the second case behaves like Ord atom because it is \ii unary/minus {\em unary minus}. -There is no space between the unary minus and the following object. - -All medium spaces and thick spaces and some thin spaces from this table are -omitted if the <math list> is processed in -\ii script/style,scriptscript/style script or scriptscript styles -(smaller size). See section~\ref[styles] about math styles. - -You can overwrite the default class derived from the nucleus of the atom by -\TeX/ primitives \x`\mathord`, \x`\mathop`, \x`\mathbin`, \x`\mathrel`, \x`\mathopen`, -\x`\mathclose`, \x`\mathpunct` and \x`\mathinner`. They can precede a nucleus of -the atom and they set the class of the atom. -For example, `x \mathrel+ y` behaves like `x = y` from a spacing point of view but + -is printed. Another example: `\mathop{\rm lim} z` creates the atom `lim` in -roman font of class Op. So, the thin space is inserted between lim and $z$. - -There are more special kinds of math atoms: fractions, math accents, -radicals. They are constructed in a special way (see next sections) but they behave -like Ord atom in the horizontal spacing algorithm. - -\secc[styles] Math styles - -When a formula (or a sub-formula) is processed by \TeX/ then one from four -\ii math/style,display/style,text/style,script/style,scriptscript/style -styles is active: display style ($D$), text style ($T$), script style ($S$) or -scriptscript style ($SS$). - -\ii T/style,D/style,S/style,SS/style The $T$ style is started in in-line math mode `$...$` and the $D$ -style is started in display math mode `$$...$$`. The first level of exponents or -subscripts is processed in $S$ style and the second and more levels of -exponents or indexes are processed in $SS$ style. -There are special rules for math styles when fractions are constructed, see -section~\ref[frac]. - -The $D$ and $T$ styles use basic \ii font/size font size, $S$ uses smaller font size (typically -70~\%) and $SS$ style uses more smaller font size (typically 50~\%). Next -levels of \"more smaller fonts" are not used due to classical typographic rules. - -The \ii nucleus nucleus of \iid Op atoms (big operators, $\sum$, $\int$, etc.) have typically bigger versions -of the character shape for $D$ style than for $T$ style. -So, there are four sizes for such math -objects: one size for each math style. All other math objects (with non Op -class) are printed only in three sizes: The sizes for $T$ and $D$ styles are equal. - -The \iid Op atom puts its \iid exponent and \iid subscript above and below the nucleus in $D$ -style but right to the nucleus in other styles: -$$ - `\sum``_{i=1}^\infty` \quad \hbox{gives}\quad \sum_{i=1}^\infty \hbox{ in $D$ style and} - \quad \textstyle \sum_{i=1}^\infty \hbox{ in $T$ style}. -$$ -This default behavior of the Op atom -can be modified by placing \x`\limits` or \x`\nolimits` or -\x`\displaylimits` \TeX/ primitive just after its nucleus before the constructors -of exponent and/or index. The `\nolimits` puts exponent and subscript right -to the nucleus (regardless of the current style) and `\limits` puts these -objects above and below the nucleus (regardless of the current style). There -can be more such primitives in a queue (due to a macro expansion, for -instance). Then the last primitive in the queue wins. -If the last primitive is \x`\displaylimits` then -the default behavior is processed regardless there are \x`\limits` or \x`\nolimits` -before it. -$$ - `\sum\nolimits``_{i=1}^\infty` \quad \hbox{gives}\quad \sum\nolimits_{i=1}^\infty - \hbox{ in $D$ style and}\quad \textstyle\sum\nolimits_{i=1}^\infty - \hbox{ in $T$ style}. -$$ -Atoms of all other classes have their exponents and/or subscripts only right -to their nucleus without any exception. - -The primitives \x`\displaystyle`, \x`\textstyle`, \x`\scriptstyle` and -\x`\scriptscriptstyle` set the given style regardless the default rules. For -example, you can create a formula in in-line math mode and in $D$ style by -`$\displaystyle <fomula>$` or a formula in display mode and $T$ style can be printed -by `$$\textstyle <fomrula>$$`. - -If a subformula is placed below something (below a line from root symbol, -below a fraction line), then the processed style $D, T, S$ or $SS$ is -\ii cramped/style {\em cramped}. -The exponents are positioned slightly lower than in -\ii non-cramped/style non-cramped style. The selectors `\displaystyle`\,\dots -`\scriptscriptstyle` mentioned above select non-cramped style. The -non-cramped style is selected when math mode starts too. -\new \OpTeX/ -You can select a cramped style by the macro \x`\cramped` at the start of the -math formula or after the math-style selectors: `\scriptstyle\cramped` for -example. - -Several macros need to know what math style is currently processed (for -example they need to draw something in an appropriate size). But it -not possible simply due to the syntax of fractions (section~\ref[frac]). -This syntax requires to process all math lists in two steps: the first step -expands all macros and creates structured data of processed math list. The -second step reads the output of the first step, switches between math -styles and creates definitive output. So, macros (working in the first step) -cannot know the current math -style because it is set only in the second step. \TeX/ supports the primitive -\x`\matchchioce``{<D>}{<T>}{<S>}{<SS>}` which prepares four math lists in the -first step and only one of these four lists are used in the second step. We -can put different macros into each of the four parameters of `\mathchoice`. -Plain \TeX/ supports the macro \x`\mathpalette` which gives a more comfortable -interface of \x`\mathchoice` to the macro programmer. -The cramped/non-cramped variants of the current style are kept when `\mathchioce` -is used. - -\new \OpTeX/ -We describe another interface for creating macros depending on the current -style. You can use \x`\mathstyles``{<math list>}`. It -behaves like `{<math list>}`, moreover, you can use the following commands inside such -<math list>: -\begitems -* The macro \x`\currstyle`. It expands to - `\displaystyle`, `\textstyle`, - `\scriptstyle` or `\scriptscriptstyle` depending on the current math style - when the `\mathstyles` was opened. -* The \x`\dobystyle``{<D>}{<T>}{<S>}{<SS>}` is expandable macro. It expands its - parameter `<D>`, `<T>`, `<S>` or `<SS>` depending on the current math style - when `\mathstyles` was opened. -* The value of the \x`\stylenum` register is 0, 1, 2 or 3 - depending on the current math style when `\mathstyles` was opened. -\enditems -% -Example of usage of \x`\mathstyles`: -\def\mysymbol{\mathbin\mathstyles - {\kern1pt\vrule height\mysymbolA width\mysymbolA\kern1pt}} -\def\mysymbolA{\dobystyle{5pt}{5pt}{3.5pt}{2.5pt}} -\begtt -\def\mysymbol{\mathbin\mathstyles - {\kern1pt\vrule height\mysymbolA width\mysymbolA\kern1pt}} -\def\mysymbolA{\dobystyle{5pt}{5pt}{3.5pt}{2.5pt}} -Test: $a\mysymbol b_{c \mysymbol d}$ or $a\mysymbol b\over c$. -\endtt -This example gives Test: $a\mysymbol b_{c \mysymbol d}$ or $a\mysymbol b\over c$. - -The \x`\mathstyles` macro mentioned above uses \TeX/ primitive \x`\mathchoice`, so it -creates four math lists and only one is used. It may take more -computer time in special cases. -\new Lua\TeX/ -Lua\TeX/ supports the \x`\mathstyle` primitive -(no \"`s`" at the end of this control sequence) which -expands to values 0 to 7 depending on the current style: -$D, D', T, T', S, S', SS, SS'$ -(where $X'$ means cramped variant of the style). This primitive does -not use `\mathchoice` but it simply ignores the fraction syntax, so -`$a\mysymbol b\over c$` cannot work if `\mysymbol` is defined using the `\mathstyle` -primitive. See section 7.3.1 of Lua\TeX/ documentation for more information. - - -\secc[frac] Fractions - -The \iid fraction can be constructed by `{<numerator>`\x`\over``<denominator>}`. If the -fraction is only a single object in the whole math mode (between dollars), -you need not use the outer braces, so you can write `$1\over2$` to get $1\over2$. - -The \ii numerator,denominator <numerator> and <denominator> are printed in \"smaller" math style than -current math style. More exactly the following schema is used. -$D$: $T\over T$., $T$: $S\over S$, $S$: $SS\over SS$, $SS$: $SS\over SS$. -For example -$$ - `{a+b \over c}` \quad \hbox{is printed as } - {a+b\over c} \hbox{ in $D$ style and as } - \textstyle {a+b\over c} \hbox{ in $T$ style}. -$$ - -The \LaTeX/ macro \x`\frac``{<numerator>}{<denominator>}` is not supported in -Plain \TeX/ nor in \OpTeX/ but you can define such macro if you want. - -The syntax with \x`\over` is more preferred because it is more human-readable -notation. You can write the fraction in the same manner as you can read it. -You can compare: `$1\over2$` (one over two) with `$\frac12$` (frac twelve). - -Besides the `\over` primitive, there are analogical \TeX/ primitives which -create \"generalized" fractions. The result is similar to `{<above>\over <below>}` -but there is something extra: - -\begitems -* `{<above>`\x`\atop``<below>}` does `{<above>\over<below>}` but - without the fractional rule. -* `{<above>`\x`\above``<dimen><below>}` creates fractional rule with <dimen> thickness. -* `{<above>`\x`\overwithdelims``<delim-l><delim-r><below>}` adds the <delim-l> left to - the fraction and the <delim-r> right to the fraction. -* `{<above>`\x`\atopwithdelims``<delim-l><delim-r><below>}` is analogical to - `\overwithdelims` but without fractional rule. -* `{<above>`\x`\abovewithdelims``<delim-l><delim-r><dimen><below>}` behaves as - `\overwithdelims` but the fractional rule has <dimen> thickness. -\enditems -% -The `\...withdelims` variants read <delim-l> and <delim-r>, they must be -declared as {\em math delimiter} in \TeX. They are vertically scalable -math objects, typically brackets. See section~\ref[delims] for more -information about math delimiters. Example: -$$ - `{n \atopwithdelims() k}`\quad \hbox{ creates } - {n \choose k} \hbox{ in $D$ style and } - \textstyle {n \choose k} \hbox{ in $T$ style}. -$$ -The \x`\choose` macro is defined by `\def\choose{\atopwithdelims()}`, so the -user can write `{n\choose k}` in order to get binomial coefficients. - - -\secc[delims] Vertically scalable objects: math delimiters - -The vertically scalable objects are called \ii delimiters {\em delimiters}. For example, -all types of brackets are declared as delimiters. -This means that you can use a bracket in arbitrary -vertical size.\fnote{ -This is not exactly true, because traditional typography says that they -cannot be scaled continuously but by visible steps. This means that there is -a sequence of increasing brackets in the font, the reader must see a difference -between every two sizes of brackets.} - -The following objects are declared as delimiters (i.e.\ vertically scalable): - -\bigskip -{\tt \adef!{\bslash} -\table{l 14c}{ - \rm source: & ( & ) & [ & ] & \code{\\\{} & \code{\\\}} & / - & !backslash & !langle & !rangle - & | & \code{\\|} & \cr - \rm output: &$($&$)$&$[$&$]$& $\{$ & $\}$ & $/$ - & $\backslash$ & $\langle$ & $\rangle$ - & $|$ & $\|$ -} -\medskip -\table{l 14c}{ - \rm source: & !lfloor & !rfloor & !lceil & !rceil \cr - \rm output: & $\lfloor$ & $\rfloor$ & $\lceil$ & $\rceil$ -} -\medskip -\table{l 14c}{ - \rm source: & !uparrow & !Uparrow & !dowarrow & !Downarrow - & !updownarrow & !Updownarrow \cr - \rm output: & $\uparrow$ & $\Uparrow$ & $\downarrow$ & $\Downarrow$ - & $\updownarrow$ & $\Updownarrow$ -}} -\bigskip -\noindent \new Unicode -If you can produce the characters $\langle$, $\rangle$,\fnote - {Do not confuse $\string<, >$ and $\langle, \rangle$. The first pair are Rel atoms - with meaning \"less than" or \"greater than", but the second pair are special - types of brackets. They are not directly available at computer keyboards without - using a keyboard macro.} -$\lfloor$, $\rfloor$, ... $\updownarrow$, $\Updownarrow$ -directly in your text editor then you can use these Unicode characters in your source instead of control -sequences `\langle`, `\rangle`, `\lfloor`, `\rfloor` ... `\updownarrow`, `\Updownarrow`. -For many users (including me), there is more simple to type `\lfloor` than to find -how to create the $\lfloor$ character in my text editor. Note that there exist -text editors (Emacs, for example) -enabling you to type `\lfloor` and this control sequence is immediately -converted to the $\lfloor$ Unicode character. -Your source text looks pretty and you can use classical \TeX/ sequences. - -\new Unicode -There are more \ii delimiters delimiters, but it heavily depends on loaded Unicode Math -font. For example, this document is printed in `latinmodern-math` font and -there are six more delimiters `\lBrack`~$\lBrack$, `\rBrack`~$\rBrack$, -`\lAngle` $\lAngle$, `\rAngle` $\rAngle$, `\lgroup` $\lgroup$, `\rgroup` $\rgroup$. -See section~\ref[objects] for table of all Unicode symbols for math typesetting. - -Arbitrary tall formula can be surrounded by a pair of delimiters using -\x`\left` and \x`\right` \TeX/ primitives: `\left<delim> <formula> \right<delim>`. -The delimiters are scaled to the height and depth of the <formula> -and vertically centered to the {\em math axis}.\fnote -{Math axis is a horizontal line passing through the center of symbols $+$ - and $-$. All vertically scalable objects are vertically centered with - respect to this axis.} -Example: -$$ - `+ \left\{ \sum_{i=1}^\infty x_i \right)` \quad \hbox{ gives } - + \left\{ \sum_{i=1}^\infty x_i \right). -$$ -The pair `\left<delim> <formula> \right<delim>` creates the formula in a -\TeX/ group. Such group can be nested with another groups. -Each `\left` must have its `\right` counterpart at the same group level. -If you don't want to create visible delimiter, use dot instead <delim>. -Example: -$$ - `\left. \int``_0^t e^{x^2}\,dx\, \right|_{t=42}` \quad \hbox{ gives } - \left. \int_0^t e^{x^2} \,dx\, \right|_{t=42} -$$ - -\new e\TeX/ -You can use \x`\middle``<delim>` inside the <formula> which is surrounded by -`\left...\right`. Then the given <delim> is scaled to the same size like -their `\left` and `\right` counterparts. - -When a delimiter is used without `\left` nor `\right` prefix, then it is the -Open, Close, Ord or Bin atom by its natural meaning: -$(, [, \{, \ldots, \lfloor, \lceil$ are Open atoms, -$], ], \}, \ldots, \rfloor, \rceil$ are Close atoms, -$/, \backslash, |, \|$ are Ord atoms and -$\uparrow, \Uparrow, \ldots, \Updownarrow$ are Bin atoms. You can overwrite -this default setting, for example `\mathclose(`. If delimiters are used with -`\left` and `\right` prefixes then `\left<delim>` behaves like Open atom, -`\right<delim>` behaves like Close atom and the math list -`\left<delim><formula>\right<delim>` is encapsulated as a single Inner atom. -The `\middle<delim>` behaves like Open atom at its left side and like Close -atom at its right side. - -The sequence of increasing delimiters can be printed by the following -macros: -$$ - `(` \to (,\quad \x`\big``(` \to \big(,\quad \x`\Big``(` \to \Big(,\quad - \x`\bigg``(` \to \bigg(, \quad \x`\Bigg``(` \to \Bigg(. -$$ -The `\Bigg<delim>` is not the maximal size of the bracket. Try -`\left(\vbox to5cm{}\right.`, for example. You can see that the font -\"cheats" from certain sizes, because there are not all infinity number of -sizes of brackets drawn in the font, of course. - -The `\big<delim>` creates Ord atom. We need to create Open atom -for opening bracket and Close atom for closing bracket more often. -Then we can use macros -\x`\bigl``<delim>`, -\x`\Bigl``<delim>`, -\x`\biggl``<delim>`, -\x`\Biggl``<delim>` for creating Open atoms and -\x`\bigr``<delim>`, -\x`\Bigr``<delim>`, -\x`\biggr``<delim>`, -\x`\Biggr``<delim>` for creating Close atoms. Unfortunately, the source is not -too attractive when more sizes of brackets are used, but typographic -traditions say that we have to distinguish brackets by the size in math -mode if they are in equal types: -$$ - `\Bigl( f\bigl( 2(x+y) + z\bigr) \Bigr)'` \quad \hbox{gives } - \Bigl(f\bigl(2(x+y)+z\bigr)\Bigr)'. -$$ - -\secc Horizontally scalable objects: math accents - -Arbitrary wide formula can be covered by \ii math/accent,accent {\em scalable math accent}. -Example: -$$ - \x`\overrightarrow`` {a+b+c+d+e+f}` \quad \hbox{gives } \overrightarrow {a+b+c+d+e+f}. -$$ -The usage is: control sequence of selected math accent followed by `{<math list>}`. - -Standard scalable math accents are: -\x`\overline` $\overline{abc}$, -\x`\overbrace` $\overbrace{abc}$, -\x`\overrightarrow` $\overrightarrow{abc}$, -\x`\overleftarrow`~$\overleftarrow{abc}$, -\x`\underline` $\underline{abc}$, -\x`\underbrace` $\underbrace{abc}$. - -An Op atom is created. The exponents and subscripts are centered above -and below the nucleus of this atom (regardless of the current style). Example: -$$ - `\overbrace {b\cdot b\cdot b \cdots b}^{k\times}` \quad \hbox{gives } - \overbrace {b\cdot b\cdot b \cdots b}^{k\times} -$$ -There are scalable accents with a limited maximum width: -\x`\widehat` $\widehat{abc}$ and \x`\widetilde` $\widetilde{abc}$. If the -formula is wider than the font can cover then the widest variant from the -font is used and it is horizontally centered. - -\new Unicode -There are more scalable accents in Unicode math fonts: -\x`\overparen` $\overparen{abc}$, \x`\underparen` $\underparen{abc}$, -\x`\overbracket` $\overbracket{abc}$, \x`\underbracket` $\underbracket{abc}$, -\x`\overleftrightarrow` $\overleftrightarrow{abc}$, -\x`\overleftharpoon` $\overleftharpoon{abc}$, -\x`\overrightharpoon` $\overrightharpoon{abc}$, - - -\secc Fixed math accents - -Fixed \ii math/accent,accent math accents can be applied to single math object or to the `{<math list>}`. -The accent is centered (with respect of slanting axis) and the result is a -nucleus of Ord -atom. For example `\dot x` gives $\dot x$. The list of fixed math accents -follows: \x`\acute`` x` $\acute x$, \x`\bar`` x` $\bar x$, -\x`\breve`` x` $\breve x$, \x`\check`` x` $\check x$, -\x`\dot`` x` $\dot x$, \x`\ddot`` x` $\ddot x$, -\x`\grave`` x` $\grave x$, \x`\hat`` x` $\hat x$, -\x`\vec`` x` $\vec x$, \x`\tilde`` x` $\tilde x$. - -\new Unicode -The additional fixed accents depends on used Unicode math font. The -`latinmodern-math` supports: -\x`\ovhook`` x` $\ovhook x$, \x`\ocirc`` x` $\ocirc x$, -\x`\leftharpoonaccent`` x` $\leftharpoonaccent x$, \x`\rightharpoonaccent`` x` $\rightharpoonaccent x$, -\x`\dddot`` x` $\dddot x$, \x`\ddddot`` x` $\ddddot x$, -\x`\widebridgeabove`` x` $\widebridgeabove x$, \x`\asteraccent`` x` $\asteraccent x$. - -There exist one special math accent `'` (single quote, ASCII 39) -which can be appended after a symbol like this: `f'` -and it creates $f'$ (typical meaning is the -derivation of the given function). You can put more such accents, for -example `g'''` gives $g'''$. - -\secc Roots - -There is a macro \x`\sqrt``{<math list>}` to create \ii square/root square root. For example: -$$ - `\sqrt{\sqrt{\sqrt{x+1}+1}+1}` \quad \hbox{gives } - \sqrt{\sqrt{\sqrt{x+1}+1}+1} -$$ -The \ii root $n$-th root is created by the macro \x`\root`` <n>\of{<math list>}`. For -example `\root k+1\of x` gives $\root k+1\of x$. - -\secc Math alphabets - -Letters \ii math/alphabet $a\dots z$, $A\dots Z$ and $\alpha$\dots$\omega$ are printed in italic -in math mode. This follows the traditional typographic rule. -All other math symbols, digits, and uppercase Greek letters must be -upright.\fnote -{French typographic convention says that uppercase Greek letters have to be - in italic too. Use `\_itGreek` declaration in this case.} -These rules are independent of the current variant of surrounding text font. - -If we want to use the letters or digits -in another than this default shape, then we can use -\ii math/alphabet/selector {\em math alphabet selectors}: -\x`\mit`, \x`\rm`, \x`\it`, \x`\bf`, \x`\cal`. -\new \OpTeX/ -\OpTeX/ supports more such selectors \x`\script`, \x`\frak`, \x`\bbchar`, \x`\bi`, see -section 1.3.3 in the \OpTeX/ documentation. The math selectors have local -validity in the group. - -The control sequences \x`\rm`, \x`\it`, \x`\bf`, and \x`\bi` act as variant selectors -of fonts in non-math mode (text mode) and they act -as math alphabet selectors in math mode. This \"overlaying" concept -is given by Plain \TeX/. Example: math operators lim, sin, cos, -log, etc.\ must be printed unslanted. We are using `\lim`, `\sin`, `\cos`, -`\log` etc.\ in math mode in order to comply with this typographic convention. For -example `\sin` is defined as: -\begtt -\def\sin {\mathop{\rm sin}\nolimits} -\endtt -The `\rm` is used here as math alphabet selector, no variant selector of -text fonts. - -The list of all predefined `\rm`-like math operators follows: \x`\arccos`, -\x`\arcsin`, \x`\arctan`, \x`\arg`, \x`\cos`, \x`\cosh`, \x`\cot`, \x`\coth`, \x`\deg`. -\x`\det`, \x`\dim`, \x`\exp`, \x`\gcd`, \x`\hom`, \x`\inf`, \x`\ker`, \x`\lg`, \x`\lim`, -\x`\liminf`, \x`\limsup`, \x`\ln`, \x`\log`, \x`\max`, \x`\min`, \x`\Pr`, \x`\scs`, \x`\sin`, -\x`\sinh`, \x`\sup`, \x`\tan`, \x`\tanh`, You can define another such operator -analogically. - -\new Unicode -Unicode font can include the following math alphabets: -\begtt \typosize[9/11] -\_rmvariables % upright letters A-Z, a-z -\_bfvariables % bold letters A-Z, a-z -\_itvariables % italic letters A-Z, a-z -\_bivariables % bold italic letters A-Z, a-z -\_calvariables % calligraphic letters A-Z, a-z -\_bcalvariables % calligraphic letters A-Z, a-z -\_frakvariables % fraktur A-Z, a-z -\_bfrakvariables % bold fraktur A-Z, a-z -\_sansvaraibales % sans serif letters A-Z, a-z -\_bsansvaraibales % bold sans serif letters A-Z, a-z -\_isansvaraibales % slanted sans serif letters A-Z, a-z -\_bisansvaraibales % bold slanted sans serif letters A-Z, a-z -\_ttvariables % monospace, typewriter letters A-Z, a-z -\_bbvariables % double struck A-Z, a-z -\_rmdigits % upright digits 0..9 -\_bfdigits % bold digits 0..9 -\_sansdigits % sans serif digits 0..9 -\_bsansdigits % bold sans serif digits 0..9 -\_ttdigits % monospace typewriter digits 0..9 -\_bbdigits % double-struck digits 0..9 -\_rmgreek % upright Greek letters \alpha-\omega -\_itgreek % slanted Greek letters \alpha-\omega -\_bfgreek % bold Greek letters \alpha-\omega -\_bigreek % bold italic Greek letters \alpha-\omega -\_bsansgreek % bold sans serif Greek letters \alpha-\omega -\_bisansgreek % bold slanted snas serif Greek letters \alpha-\omega -\_itGreek % slanted Greek letters \Alpha-\Omega -\_bfGreek % bold Greek letters \Alpha-\Omega -\_biGreek % bold italic Greek letters \Alpha-\Omega -\_bsansGreek % bold sans serif Greek letters \Alpha-\Omega -\_bisansGreek % bold slanted snas serif Greek letters \Alpha-\Omega -\endtt -% -Not all Unicode math fonts include all math alphabets listed here. Typically, -the lowercase letters of calligraphic shape and all letters of -bold calligraphic shape are missing. - -\new \OpTeX/ -\OpTeX/ defines internal math alphabet selectors as mentioned in the -previous listing of math alphabets and sets as default: -\begtt \typosize[10/12] -\_itvariables \_rmdigits \_itgreek \_rmGreek -\endtt -% -Moreover, it defines the alphabet selectors at user level (see section 1.3.3 -of the \OpTeX/ manual). For example -\begtt \typosize[10/12] -\def\rm {\_tryload\_tenrm \_inmath{\_rmavariables \_rmdigits}} -\endtt -% -The first part -\new \OpTeX/ -`\_tryload\_tenrm` is applicable for text fonts and the -`\_inmath` part is processed only in math mode and sets the math alphabets. -You can see the file `unimath-codes.opm` where all user-level selectors are -defined. You can redefine them. For example, \OpTeX/ defines `\bf` as a math -alphabet selector that selects sans serif bold in math. This is the common -notation for vectors, tensors, and matrices. If you dislike this, then you can define: -\begtt \typosize[10/12] -\def\bf {\_tryloadbf\_tenbf \_inmath{\_bfvariables\_bfdigits\_bfgreek\_bfGreek}} -\endtt - - -\secc[objects] List of single math objects - -\new Unicode -All \ii single/math/object single math objects are listed in the `unimath-table.opm` or -`unicode-math-table.tex` file. You can -look into this file. The codes, \TeX/ sequences, classes, and comments -for all possible math codes are here. Maybe, your Unicode math font which is loaded -does not support all these codes. -\new \OpTeX/ -You can try all codes of the currently loaded font by -\begtt -\input print-unimath.opm -\endtt -The `unimath-table` is printed with characters available in the loaded font. -\new \OpTeX/ -If the character is unsupported by the font then the slot is empty and only -\TeX/ sequence and the class of the code is printed in the table. -For example, this document loads `latimodern-math.otf` font. -And the result from `\input print-unimath.opm` looks like the following ten -pages. - -Unsupported characters can be replaced by characters from other Unicode math -font, see -\ulink[http://petr.olsak.net/optex/optex-tricks.html\#addumathfont]{OpTeX trick 0030} -or section~\ref[newfam]. - - -\label[listA]\wlabel{} - -\bigskip -\input print-unimath.opm -\bigskip - -\label[listB]\wlabel{} - -It isn't very comfortable to find something in the previous table -if you know the shape. You can try the online web tool \ii Detexify -\ulink[https://detexify.kirelabs.org/classify.html]{Detexify}. -You can draw the symbol here and the suggestion of \TeX/ sequence is -printed. - -\def\g#1{{\tt\string#1}~$#1$} - -The generic \TeX/ sequences for the Greek letters \ii Greek/letters can be used: -\g\alpha, \g\beta, \g\gamma, \g\delta, \g\varepsilon, \g\zeta, \g\eta, -\g\theta, \g\iota, \g\kappa, \g\lambda, \g\mu, \g\nu, \g\xi, -\g\omicron, \g\pi, \g\rho, \g\varsigma, \g\sigma, \g\tau, \g\upsilon, -\g\varphi, \g\chi, \g\psi, \g\omega, \g\vardelta, \g\epsilon, \g\vartheta, -\g\varkappa, \g\phi, \g\varrho, \g\varpi\ -and -\g\Alpha, \g\Beta, \g\Gamma, \g\Delta, \g\Epsilon, \g\Zeta, \g\Eta, \g\Theta, -\g\Iota, \g\Kappa, \g\Lambda, \g\Mu, \g\Nu, \g\Xi, \g\Omicron, \g\Pi, \g\Rho, -\g\Sigma, \g\Tau, \g\Upsilon, \g\Phi, \g\Chi, \g\Psi, \g\Omega. - -\new \OpTeX/ -The variant of Greek letters in the output -(upright, italic, bold, bold sans serif, etc.) -written by the sequences `\alpha`, `\beta` etc. depends on the math alphabet -selected by `\_itgreek`, `\_rmgreek`, etc. selectors. The user-level -selectors `\bf` and `\bi` set `\_bsansgreek` and `\_bisansgreek`, so -`{\bi\delta}` produces $\bi\delta$. - -\new Unicode -All characters available in the math font can be accessed by \TeX/ control -sequence or by directly using the Unicode character in the document source. -Example: -\begtt \adef/{} -$$ - \sum/_{k=0}^\infty e^{(\alpha+i\beta/_k)} = - e^\alpha \sum/_{k=0}^\infty e^{i\beta/_k} = - e^\alpha \sum/_{k=0}^\infty (\cos\beta/_k + i\sin\beta/_k). -$$ -\endtt -or -\begtt \ttspec -$$ - ∑_{k=0}^∞ e^{(α + iβ_k)} = e^α ∑_{k=0}^∞ e^{iβ_k} - = e^α ∑_{k=0}^∞ (\cos β_k + i\sin β_k). -$$ -\endtt -both gives the same result: -$$ - ∑_{k=0}^∞ e^{(α + iβ_k)} = e^α ∑_{k=0}^∞ e^{iβ_k} - = e^α ∑_{k=0}^∞ (\cos β_k + i\sin β_k). -$$ -\medskip - - -\sec Other specialities - -\secc The `\not` prefix - -You can apply \x`\not` before a following math object. -The slash $/$ is overprinted such math object, for example -`$a \not= b$` gives $a \not= b$. - -\new \OpTeX/ -If there exists a direct Unicode character for the negation of a relation symbol -(for example `\ne` creates $\ne$ directly as a character U+2260) -then `\not<char>` expands to appropriate Unicode character. -For example `\not=` expands to `\ne` or `\not\in` expands to `\notin`. -If such character does not exist then -the centered $/$ is overprinted over the next character. - - -\secc The `\buildrel` macro: text over the relation - -The macro \x`\buildrel`` <text>\over <relation>` creates a new atom Rel with the -<relation> and with the smaller <text> above this <relation>. Example: -`$M \buildrel\rm def\over= X\cup Y$` gives $M\buildrel\rm def\over= X\cup Y$. - - -\secc Spaces - -Spaces between atoms are created automatically as were mentioned in -section~\ref[class]. But sometimes you have to help \TeX/ to create -appropriate space. You can use following macros: - -\begitems -* `\,` is \ii thin/space {\em thin space} used around Op atoms, after comma, etc.: \ss\,, -* `\!` is \ii negative/thin/space negative thin space, -* `\>` is \ii medium/space {\em medium space} used around Bin atoms: \ss\>, -* `\;` is \ii thick/space {\em thick space} used around Rel atoms: \ss\;, -* \x`\quad` is \ii em/space {\em em space}: \ss\quad, -* \x`\qquad` is \ii double/em/space {\em double em space}: \ss\qquad. -\enditems -% -Of course, you can use \ii direct/space {\em direct space} {\visiblesp`\ `} which is \TeX/ primitive -and gives interword space: \ss\ \ -or you can use \x`\hskip`` <value>` to put arbitrary space. - -The space size of `\,`, `\!` resp. `\>`, resp. `\;` is given by -`\thinmuskip`, resp. `\medmuskip`, resp. `\thickmuskip` values. You can see -in the `plain.tex` file that these default values differ very little in their basic -size but there is no stretchability/shrinkability in the `\,` space, there is small -stretchability in the `\>` space, and more stretchability in the `\;` space. - -The registers \x`\thinmuskip`, \x`\medmuskip`, and \x`\thickmuskip` store so-called -\ii mu/values {\em mu values} given by math unit `mu`. It is 1/18 em and this unit depends -on the current font size used in the math formula ($S$ or $SS$ styles use -smaller font size, the `mu` unit is smaller here). You can use \x`\muskip` -instead `\hskip` or \x`\mukern` instead `\kern` if you want to use this -special mu unit. It is allowed only in math mode. - -The \x`\quad` and \x`\qquad` spaces have fixed width and they can be used in text -mode too. (\OpTeX/ allows to use `\,` in text mode too). -Use `\quad` or `\qquad` if you want to separate more formulas created in -single math mode. Examples of typical usage of spaces: - -\begtt \adef/{} \typosize[10/12] -$$ \alpha\,(x+y), \qquad \int/_a^b \!\! f(x)\,{\rm d}x, \qquad \Gamma/_{\!i}. $$ -\endtt -$$ \alpha\,(x+y), \qquad \int_a^b \!\! f(x)\,{\rm d}x, \qquad \Gamma_{\!i}. $$ - - -\secc Texts in math mode - -If you write `$Hello world!$` (i.e.\ Hello world in math mode), then you get -$Hello world!$. It is interpreted as the product of variables $H$, and $e$, and -$l^2$, and $o$, etc., followed by the symbol ! used for factorial. -The non-ASCII letters (with accents) don't work at all because they are -never used as symbols for variables. Spaces are ignored. - -If you want to write a short text in the math mode, then you can use -`\hbox{<text>}`. The \x`\hbox` primitive initializes text mode regardless of -the \"outer mode". Example: - -\begtt \adef/{} \typosize[10/12] -$$ \sum/_{n=0}^\infty (-1)^n a_n \hbox{ converges, if $a_n\searrow 0$.} $$ -\endtt -$$ \sum_{n=0}^\infty (-1)^n a_n \hbox{ converges, if $a_n\searrow 0$.} $$ -% -Note the space before the word \"converges". The space before `\hbox` is -irrelevant. Second notice: the example shows the text mode inside math mode -and the in-line math mode inside this text mode. The same result can be -produced by: - -\begtt \adef/{} \typosize[10/12] -$$ \sum/_{n=0}^\infty (-1)^n a_n \hbox{ converges, if } a_n\searrow 0. $$ -\endtt -% -The difference can be visible if the formula $a_n\searrow 0$ includes a -fraction, for example ${1\over2}a_n\searrow 0$. The first example prints the -fraction in the text style and the second example prints it in the display style. - -The disadvantage of `\hbox` is that it starts in the text mode independently -of the current style, but we want to use smaller font in $S$ or $SS$ styles. -\new \OpTeX/ -You can use \x`\mathbox``{<text>}` in such situations. This macro behaves like -`\hbox` but the text is appropriately smaller in $S$ and $SS$ styles. -Example: -$$ - `{\mathbox{cena}\over\mathbox{výkon}}` \quad \hbox{gives } - {\mathbox{cena}\over\mathbox{výkon}} \hbox{ in $D$ style and } - \textstyle {\mathbox{cena}\over\mathbox{výkon}} \hbox{ in $T$ style.} -$$ -Note that $\mathbox{cena}\over\mathbox{výkon}$ means $\rm price\over performance$ -and you can write `$\rm price\over performance$` when you are using only -words without spaces and accented letters. But phrases with spaces or accented letters -should be printed in text mode using `\hbox` or `\mathbox`. - -\secc `\vcenter` - -The \x`\vcenter` primitive behaves like `\vbox`, but it can be used only in -math mode and its result is vertically centered to the math axis. -For example, matrices, are created by tables in `\vcenter`. - -All big objects in math formula are centered on the math axis and the baseline is -ignored. In the following example, we create a new big math operator by -`\vcenter`: -\begtt -$$ - \def\myop#1{\mathop{\vcenter{\frame{\vbox to2em{\vss\hbox{ $#1$ }\vss}}}}} - F(x) = \myop{x(i)}_{i=1}^\infty -$$ -\endtt -\vskip-2em -$$ - \def\myop#1{\mathop{\vcenter{\frame{\vbox to2em{\vss\hbox{ $#1$ }\vss}}}}} - F(x) = \myop{x(i)}_{i=1}^\infty -$$ - - -\secc Three dots - -You can write `$1,2,\dots,n$` to get $1,2,\dots,n$. The \x`\dots` macro puts -thin space between dots and after the last dot, so the five object: comma, -dots, comma are exactly equidistant. - -Typographic conventions say that you have to use the repeating symbol -before and after three dots (comma in the previous example) and the three dots -should be at baseline if the repeating symbol is at baseline. Or they should be -at the math axis if the repeating symbol is at the math axis. We have to use \x`\cdots` instead -`\dots` in the second case. Example: -$$ - `a_1, a_2, \dots, a_n, \quad a_1 + a_2 + \cdots + a_n` \qquad - a_1, a_2, \dots, a_n, \quad a_1 + a_2 + \cdots + a_n -$$ -\vskip-.7em -There are \x`\vdots` $\vdots$, \x`\ddots` $\ddots$ and \x`\adots` $\adots$ which -can be used in matrices. - -\new Unicode -Three dots like the output of the `\dots` macro are present as a single -character in fonts too. This character is called ellipsis. Font designers -typically suggest this character with smaller spaces between dots than we -need in math mode. So the rule about equidistant \"comma, three dots, comma" -is not met when this character is used. You can try `$1,2,\unicodeellipsis, n$` -and `$1+2+\unicodecdots + n$`. You get $1,2,\unicodeellipsis, n$ and -$1+2+\unicodecdots + n$. If you feel that this is better, then you can set: -`\let\dots=\unicodeellipsis \let\cdots=\unicodecdots`. - -The Unicode fonts includes compact variants `\unicodevdots` $\unicodevdots$, -`\unicodeddots` $\unicodeddots$ and `\unicodeadots` $\unicodeadots$ too. - - -\secc Phantoms and `\smash` - -The \x`\phantom``{<math list>}` macro creates an invisible subformula equal to -the formula generated by <math list>. It has its size, so it can -interfere with surrounding visible subformulas. This macro is very useful for -aligning with special requirements. Examples are shown in -sections~\ref[matrix] and~\ref[elines]. - -The \x`\vphantom``{<math list>}` has only its vertical size (i.e.\ its height -and depth), the width is zero. The \x`\hphantom``{<math list>}` has only its -width. - -The \x`\smash``{<math list>}` is the opposite of `\vphantom`. It creates visible -subformula but it has only its width. Its height and depth are zero. - -The result of these macros is the nucleus of an Ord atom. You can use `\mathop`, -`\mathbin`, etc. primitives to change this class. For example -`$a\mathrel{\phantom{=}}b$` creates the same formula as $a=b$ with the same -distance from $a$ to $b$ but without the equal sign: -$a\mathrel{\phantom{=}}b$. - -These macros work in the text mode too. Then their argument is -the <horizontal list>. - - -\sec Structured objects - -\secc[matrix] Matrices - -The macro \x`\matrix``{<data>}` creates a vertically centered table of items. -The <data> includes <items> separated by `&` and rows are separated by -`\cr`. The number of columns and rows are unlimited. Columns are printed centered -and separated by the `\quad` space. The vertically scalable -brackets around the table are not printed. You can use \x`\pmatrix``{<data>}` -instead `\matrix{<data>}`: the vertically scalable parentheses () are inserted -around the table. Examples: - -\begtt -$$ - {\bf A} = \pmatrix{a_{1,1} & a_{1,2} & \cdots & a_{1,n} \cr - a_{2,1} & a_{2,2} & \cdots & a_{2,n} \cr - \vdots & \vdots & \ddots & \vdots \cr - a_{m,1} & a_{m,2} & \cdots & a_{m,n} }, -$$ -\endtt -$$ - {\bf A} = \pmatrix{a_{1,1} & a_{1,2} & \cdots & a_{1,n} \cr - a_{2,1} & a_{2,2} & \cdots & a_{2,n} \cr - \vdots & \vdots & \ddots & \vdots \cr - a_{m,1} & a_{m,2} & \cdots & a_{m,n} }, -$$ -or: - -\begtt -\def\qmatrix[#1]{\left[\matrix{#1}\right]} -$$ - \qmatrix[a&b&c\cr d&e&f\cr g&h&i] \cdot \qmatrix[x_1\cr x_2\cr x_3] - = \qmatrix[b_1\cr b_2\cr b_3]. -$$ -\endtt -$$ - \def\qmatrix[#1]{\left[\matrix{#1}\right]} - \qmatrix[a&b&c\cr d&e&f\cr g&h&i] \cdot \qmatrix[x_1\cr x_2\cr x_3] - = \qmatrix[b_1\cr b_2\cr b_3]. -$$ - -If you need to align the columns by another way than to center, then you can -use the phantom. Compare: - -\begtt -$$ - \pmatrix{ 1 & -1 & 0 \cr - 0 & 2 & 13 \cr - -3 & 0 & 5 } \quad \hbox{or} \quad - \def\0{\phantom0} \def\+{\phantom+} - \pmatrix { \+1 & -1 & \00 \cr - \+0 & \+2 & 13 \cr - -3 & \+0 & \05 } -$$ -\endtt -$$ - \pmatrix{ 1 & -1 & 0 \cr - 0 & 2 & 13 \cr - -3 & 0 & 5 } \quad \hbox{or} \quad - \def\0{\phantom0} \def\+{\phantom+} - \pmatrix { \+1 & -1 & \00 \cr - \+0 & \+2 & 13 \cr - -3 & \+0 & \05 } -$$ - -\new\OpTeX/ -Another option to set the right aligned matrix is setting the \x`\lmfil`: -Its value is used on the left side in each `\matrix` item. The right side is -set directly to `\hfil`. -\begtt -$$ - \lmfil={\hfill} % left matrix filler = \hfill - \pmatrix{ 1 & -1 & 0 \cr 0 & 2 & 13 \cr -3 & 0 & 5 } -$$ -\endtt - -\new \OpTeX/ -If you want to draw a vertical line inside the matrix, you can use `\adef|` -as in the following example: -\begtt -$$ - \adef|{\kern-.2em&\strut\vrule&\kern-.2em} - \def\+{\phantom+} - \pmatrix{1 & 2 & 3 | 0 \cr 4 & 5 & 6 | 1 \cr 7 & 8 & 9 | 2 } \sim - \pmatrix{1 & \+2 & \+3 | 0 \cr 0 & -3 & -6 | 1 \cr 0 & -6 & -12 | 2} \sim - \pmatrix{1 & 2 & 3 | 0 \cr 0 & 1 & 2 | -1/3 \cr 0 & 0 & 0 | 1 } -$$ -\endtt -$$ - \adef|{\kern-.2em&\strut\vrule&\kern-.2em} - \def\+{\phantom+} - \pmatrix{1 & 2 & 3 | 0 \cr 4 & 5 & 6 | 1 \cr 7 & 8 & 9 | 2 } \sim - \pmatrix{1 & \+2 & \+3 | 0 \cr 0 & -3 & -6 | 1 \cr 0 & -6 & -12 | 2} \sim - \pmatrix{1 & 2 & 3 | 0 \cr 0 & 1 & 2 | -1/3 \cr 0 & 0 & 0 | 1 } -$$ - -If you want to put something before the opening bracket in the matrix, you can -use another `\matrix`. Example: - -\begtt -$$ - \adef|{\kern-.2em&\strut\vrule&\kern-.2em} - \def\+{\phantom+} - \def\r{{\bf r}} - \pmatrix{1 & 2 & 3 | 0 \cr 4 & 5 & 6 | 1 \cr 7 & 8 & 9 | 2 } \ \sim \ - \matrix{\cr 2.\r - 4\cdot 1.\r: \cr 3.\r -7\cdot 1.\r: } - \pmatrix{1 & \+2 & \+3 | 0 \cr 0 & -3 & -6 | 1 \cr 0 & -6 & -12 | 2} -$$ -\endtt -$$ - \adef|{\kern-.2em&\strut\vrule&\kern-.2em} - \def\+{\phantom+} - \def\r{{\bf r}} - \pmatrix{1 & 2 & 3 | 0 \cr 4 & 5 & 6 | 1 \cr 7 & 8 & 9 | 2 } \ \sim \ - \matrix{\cr 2.\r - 4\cdot 1.\r: \cr 3.\r -7\cdot 1.\r: } - \pmatrix{1 & \+2 & \+3 | 0 \cr 0 & -3 & -6 | 1 \cr 0 & -6 & -12 | 2} -$$ - -Plain \TeX/ defines the \x`\bordermatrix` macro which allows you to create a -top row above the brackets and left column before the opening bracket. -\TeX/book shows the following example: - -\begtt -$$ - M = \bordermatrix{ &C&I&C'\cr - C&1&0&0 \cr I&1-b&0 \cr C'&0&a&1-a } -$$ -\endtt -$$ - M = \bordermatrix{ &C&I&C'\cr - C&1&0&0 \cr I&1-b&0 \cr C'&0&a&1-a } -$$ - -The `\matrix` macro used in $D$ style creates all its items in $T$ style. -\new \OpTeX/ -If you are using the `\matrix` macro in $T$ style or $S$ style (but not in -fractions nor another matrices) then the resulting table is appropriately -smaller and all its items are processed in $S$ style. -If you are using `\matrix` in $SS$ style then the items are in $SS$ style too. -The following example shows one-column matrix in script style: -$$ - `\sum``_{\matrix{i\in M\cr j\in N\cr k\in P}} x_{i,j,k}` \ \hbox{ creates: } - \sum_{\matrix{i\in M\cr j\in N\cr k\in P}} x_{i,j,k} -$$ - - -\secc Cases - -The \x`\cases` macro can be used as in the following example: - -\begtt -$$ - f(x) = \cases{ 1 & for $x\le 0$, \cr - 100-x\over 100 & when $0 < x \le 100$, \cr - 0 & in other cases. } -$$ -\endtt -$$ - f(x) = \cases{ 1 & for $x\le 0$, \cr - 100-x\over 100 & when $0\string< x\le 100$, \cr - 0 & in other cases. } -$$ - -The `\cases` macro behaves like a special `\matrix` with two left-aligned -columns and with left vertically scaled brace $\{$. -The first column is processed in math mode and $T$ style, the second column -is processed in text mode. We have to use `$...$` in the second column if -there is math material. - - -\sec Lines in display mode - -\secc General principles - -The \ii display/math,display/math/mode -`$$<formula>$$` finalizes previous paragraph, prints centered <formula> on -single line with a vertical space above and below and opens next paragraph -with no indentation. - -From \TeX/'s point of view, the text above `$$<formula>$$` plus text -below is a single paragraph interrupted by display <formula>. If there is no -text above (i.e. the opening `$$` are in vertical mode), then the internal -`\noindent` is processed first and the empty line above <formula> is created. -Thus, it is definitely a bad idea to open display mode in vertical mode: never -put an empty line before `$$<formula>$$`. On the other hand, the empty line -just after `$$<formula>$$` says that the paragraph is finalized by the -<formula> and the next text (after the empty line) opens the next paragraph with -indentation. Summary: - -\begitems -* \"Text above `$$<formula>$$` text below": the <formula> interrupts the - paragraph with \"Text above" and \"text below". The \"text below" is - without indentation. -* \"Text above `$$<formula>$$` empty line Text below": the \"Text below" - opens new paragraph with indentation. -* \"Empty line `$$<formula>$$`" is bad practice. -\enditems - -In contrast with the paragraph breaking, there is no built-in algorithm for -breaking display <formula> to more lines. If the <formula> is too wide then -overfull `\hbox` occurs and human must decide about splitting the <formula> -to more lines. The macros `\displaylines` and `\eqalign` are intended to -such task, see sections~\ref[dlines] and~\ref[elines]. - -On the other hand, the in-line math <formula>, i.e.\ the `$<formula>$` in a -paragraph, can be broken after a Bin atom (with penalty `\binoppenalty`) or -after a Rel atom (with penalty `\relpenalty`). If you don't want to break -such a formula at a specific place then use `\nobreak`, for example -`$a+\nobreak b$`. If you want never to break such formulas then you can set -`\binoppenalty=10000`, `\relpenalty=10000`. (Default values are 700 and 500.) - - -\secc References to display lines - -The `$$<formula>`\x`\eqno``<mark>$$` \ii mark prints centered <formula> and the <mark> at -right margin. The `$$<formula>`\x`\leqno``<mark>$$` prints centered <formula> and -the <mark> at left margin. Examples: - -\begtt -$$ a^2 + b^2 = c^2 \eqno (1) $$ -\endtt -$$ - a^2 + b^2 = c^2 \eqno (1) -$$ -\begtt \aftergroup\nobreak -$$ a^2 + b^2 = c^2 \leqno \rm Py $$ -\endtt -$$\predisplaypenalty=10000 - a^2 + b^2 = c^2 \leqno \rm Py -$$ -The <mark> \ii mark is processed in math mode and $T$ style. If you want to put a -text here then you have to use `\rm <text>` or `\hbox{<text>}`. - -\new \OpTeX/ -The auto-generated <mark> can be created by `$$<formula>`\x`\eqmark``$$`. The -<label> can be used previously declared by \x`\label``[<label>]`. -Then it is associated to such -auto-generated <mark> and you can write a reference in the form -`see equation~\ref[<label>]`. You can write `\eqmark[<label>]` instead of -`\label[<label>]...\eqmark`. See the \OpTeX/ manual, section~1.4.3. - -\secc[dlines] The `\displaylines` macro - -This macro creates more horizontally centered formulas in one display mode. -The syntax is -\begtt \catcode`\<=13 -$$ \displaylines{ - <formula> \cr - <formula> \cr - ... \cr - <formula> -} $$ -\endtt -Usage of \x`\displaylines` is more -prefered than doing more display modes just behind each other. -Example: -\begtt -$$ \displaylines{ - (3x^3 + 4x^2 + 5x + 6) \cdot (x^6 + x^2 + 5) = \cr - = 3x^9 + 4x^8 + 5x^7 + 6x^6 + 3x^5 + 4x^4 + 20x^3 + 26x^2 + 25x + 30. -} $$ -\endtt -$$ \displaylines{ - (3x^3 + 4x^2 + 5x + 6) \cdot (x^6 + x^2 + 5) = \cr - = 3x^9 + 4x^8 + 5x^7 + 6x^6 + 3x^5 + 4x^4 + 20x^3 + 26x^2 + 25x + 30. -} $$ - -The output from `\displaylines` macro is breakable to more pages because -the lines are not encapsulated in one box. The macro uses a special feature of -`\halign` primitive. The disadvantage is that you cannot use `\eqno` nor -`\leqno` nor `\eqmark`. - -\new \OpTeX/ -\OpTeX/ provides alternative form: `\displaylines to<dimen> {<data>}`. -Then the centered formulas are encapsulated in a `\vcenter` box of width <dimen> and -usage of `\eqno` or `\leqno` or `\eqmark` is allowed. -The individual lines have the form `\hbox to<dimen>` and formulas are centered using -`\hss` from both sides. This means that you can set arbitrary <dimen> -without visual change of the formulas. Use smaller <dimen> value than -`\hsize` (or `\displaywidth`\fnote -{`\displaywith` = `\hsize` in most cases but it is -real display width when `\parshape` or `\hangindent` is used.}) -if you want to center formulas with `\eqno` appended. -The internal \TeX/ rule says: the formula with `\eqno` (or `\leqno`) is centered -if its width is less or equal `\displaywidth-4<mark-width>`. So -\begtt \catcode`\<=13 -$$ \displaylines to\hsize-8em {<formula>\cr<formula>}\eqno (1) $$ -\endtt -does global centering, because size of `(1)` is less than 2\,em. -You can do more experiments with this example, -for example `\diplaylines to\hsize{...}` -puts the `\eqno` mark to the next line in the display environment. Read -\TeX/book or \TeX/book naruby, where the precise explanation about such -positioning is. - -\new \OpTeX/ -You can use \"`\displaylines to<dimen>`" for more applications. For example, -you can put more -\"`\displaylines to<dimen>`" in single display mode, one next to second in order -to creating more centered columns with formulas; the width of such columns -are controlled by the <dimen> parameter. -Or, you can give an exception for several lines: - -\begtt \catcode`\<=13 -$$\displaylines to 10cm {<formula>\hfill \cr - <formula>\cr - <formula>\cr - \hfill <formula>} -$$ -\endtt -The example above gives similar result as the \LaTeX/ `multline` environment: -$$\displaylines to \hsize { - (3x^3 + 4x^2 + 5x + 6) \cdot (x^6 + x^2 + 5) = \hfill \cr - = 3x^9 + 3x^5 + 15x^3 + 4x^8 + 4x^4 + 20x^2 + 5x^7 + 5x^3 + 25x - + 6x^6 + 6x^2 + 30 = \cr - \hfill = 3x^9 + 4x^8 + 5x^7 + 6x^6 + 3x^5 + 4x^4 + 20x^3 + 26x^2 + 25x + 30. } -$$ - - -\secc[elines] The `\eqalign` macro - -The \ii .eqalign \iis .eqalign {{\code{\\eqalign}}} usage is: -\begtt \catcode`\<=13 -$$ \eqalign { <left-side> & <right-side> \cr - <left-side> & <right-side> \cr - ... \cr - <left-side> & <right-side> -} $$ -\endtt -The `\vcenter` box is created with two columns, left column is right aligned -and right column is left aligned. Example: - -\vbox{ -\begtt -$$ \eqalign{ - x + 2y + 3z &= 600 \cr - 12x + y - 3z &= 7 \cr - 4x - y + 5z &= -5 \cr -} $$ -\endtt -\vskip-5.7\baselineskip -{\hsize=1.35\hsize -$$ \eqalign{ - x + 2y + 3z &= 600 \cr - 12x + y - 3z &= 7 \cr - 4x - y + 5z &= -5 \cr -} $$}} - -\bigskip\noindent -The tab \"`&`" should be used just before a relation, i.e. `&=` is right, `=&` -is wrong. All lines are aligned to the used tab. - -Maybe you want more precise alignment in the example above. You can use -`\phantom`: - -\par\nobreak\vbox{ -\begtt -$$ \def\1{\phantom1} \def\+{\phantom+} - \eqalign{ - x + 2y + 3z &= 600 \cr - 12x + \1y - 3z &= \+7 \cr - 4x - \1y + 5z &= -5 \cr -} $$ -\endtt -\vskip-5.7\baselineskip -{\hsize=1.35\hsize -$$ \def\1{\phantom1} \def\+{\phantom+} - \eqalign{ - x + 2y + 3z &= 600 \cr - 12x + \1y - 3z &= \+7 \cr - 4x - \1y + 5z &= -5 -} $$}} -\bigskip -Another typical usage of the `\eqalign` macro: - -\begtt \typosize[10/12] -$$ \eqalign{ - p(x)\,q(x) &= (3x^3 + 4x^2 + 5x + 6) \cdot (x^6 + x^2 + 5) = \cr - &= 3x^9 + 4x^8 + 5x^7 + 6x^6 + 3x^5 + 4x^4 + 20x^3 + 26x^2 + 25x + 30. -} $$ -\endtt -$$ \eqalign{ - p(x)\,q(x) &= (3x^3 + 4x^2 + 5x + 6) \cdot (x^6 + x^2 + 5) = \cr - &= 3x^9 + 4x^8 + 5x^7 + 6x^6 + 3x^5 + 4x^4 + 20x^3 + 26x^2 + 25x + 30. -} $$ - -In \OpTeX/, \new\OpTeX/ -the `\eqalign` macro is more flexible. You can set the -`\baselineskip` value by the \x`\eqlines` parameter and math style -by the \x`\eqstyle` parameter. -For example, you need to put the system of \"equations" as a subscript of a sum -operator: -\begtt \typosize[10/12] \adef/{} -$$ - \sum/_{\eqlines{\baselineskip=.7\baselineskip}\eqstyle{\scriptstyle}\eqalign{ - i &\in A \cr - \quad j &\in B\cup C \cr - m &\in C }} - i + j + m -$$ -\endtt -$$ - \sum_{\eqlines{\baselineskip=.7\baselineskip}\eqstyle{\scriptstyle}\eqalign{ - i &\in A \cr - \quad j &\in B\cup C \cr - m &\in C }} - i + j + m -$$ - -\indent \new\OpTeX/ -You can write more equation systems one next second: -\begtt -$$\eqalign{ - x + y + z &= 1 && a + b + c &= -1 \cr - u + v &= 20 && f + g &= -20 \cr - i &= j -}$$ -\endtt -You can use the third column for centered equations -without aligning point. For example: -\begtt \catcode`\<=13 -$$ \left( \eqspace=0pt \eqalign{&& <first equation>\cr - && <second equation>} \right) $$ -\endtt -The \x`\eqspace` is additional space used in the third column to separate -equation systems one next second. - -\new \OpTeX/ -\OpTeX/ extensions summary: -\begitems -* `\eqlines` and `\eqstyle` set baselineskip and math style of the formulas. -* `\eqalign` allows more than two columns: - The first column is right-aligned (no space). The second is left-aligned (no space). - The third column (if used) - is centered with `\eqspace/2` at the left and right boundary of the column. - The fourth is the same as the first. The fifth is the same as second etc. The number - of columns that can be used in `\eqalign` is unlimited. -\enditems - -\secc The `\eqalign` macro with references - -You can give common mark to whole equation system by -`$$\eqalign{<data>}\eqno <mark>$$`. If you want to give marks to individual -lines of the equation system, then you can use another macro: -\x`\eqalignno`. The usage is similar as `\eqalign` but the -third column (if used) is intended to the equation mark. Example: - -\begtt -$$ \eqalignno{ - x + 2y + 3z &= 600 & \rm(A) \cr - 12x + y - 3z &= 7 & \rm(B) \cr - 4x - y + 5z &= -5 & \rm(C) \cr -} $$ -\endtt -\vskip-\baselineskip -$$ \eqalignno{ - x + 2y + 3z &= 600 & \rm(A) \cr - 12x + y - 3z &= 7 & \rm(B) \cr - 4x - y + 5z &= -5 & \rm(C) \cr -} $$ - -The `\leqalignno` macro is similar to `\eqalignno` but the marks are at the left -margin. The \OpTeX/ extensions of `\eqalign` are not available in -`\eqalignno` nor `\leqalignno` macros. - -\new \OpTeX/ -You can use auto-generated marks by `\eqmark` macro: -`$$\eqalign{<data>}\eqmark$$` or: -\begtt -$$ \eqalignno{ - x + 2y + 3z &= 600 & \eqmark[A] \cr - 12x + y - 3z &= 7 & \eqmark[B] \cr - 4x - y + 5z &= -5 & \eqmark[C] \cr -} $$ -\endtt - - -\sec Concept of loading math fonts - -\secc[fams] Math families - -\TeX/ can use more than one math font in math mode. This was a -necessity in the old days when only 128-characters fonts existed. -Each math font used in math mode has its \ii math/family {\em math family} represented by a number. -Math family is a collection of three (almost) equal fonts in three sizes: -first for `\textstyle` and `\displaystyle`, second for `\scriptstyle` -and third for `\scriptscriptstyle`. - -\new Unicode -When Unicode math font is loaded then it includes all three optical sizes and -all characters needed for typesetting math formula. -Theoretically, we can use only one math family with this single font. But more math families -(i.e.\ more fonts in math mode) is still possible. You can combine -characters from more fonts (Unicode fonts and old TFM fonts together) in one math formula. - -\new \OpTeX/ -\OpTeX/ loads the main Unicode math font into math family 1. The math -families 2 and 3 are reserved for specific \TeX/nical reasons, family 4 is -used for `\script` font and families 5, 6, 7, etc. can be used by user for -loading more fonts. The default macro for loading math fonts looks like: - -\begtt \typosize[10/12] -\_def\_normalunimath{% - \_loadumathfamily 1 {\_unimathfont}{} % Main Unicode math font - \_loadmathfamily 4 rsfs % \script (old TFM font) - \_setunimathdimens % set dimen parameters used in math formulas internally -}% -\let\_normalmath=\_normalunimath % this is done when Unicode math is initialized -\endtt -% -Whenever \OpTeX/ needs to resize math fonts (for example in footnotes or -titles), it calls the `\_normalmath` macro to reload all math -families to the desired size. If you want to add the next font, you can add -`\_loadunimathfamily <family> {<Unicode-font>}{<features>}` or -`\_loadmathfamily <family> <TFM-font>` into the `\_normalmath` macro. -The example in section~\ref[newfam] shows how to do it. - -\secc Two variants of math fonts: normal and bold - -All math formulas in the whole document need only one Unicode font (or only one collection -of math fonts as mentioned in section~\ref[fams]). But this -is not really true if titles are in bold font. If a math formula is present in -such a bold title then all characters of this formula must be bolder. -For example \"normal" variables must be in bold italic in titles, symbols -like `+` `=` must be bold and \"normal bold" letters -(e.g., indicating vectors in math formula) must be extra bold in titles. -It means that all fonts from the collection of math fonts must be bolder. -We need a second collection of math fonts with bolder -shape. Unfortunately, it is not always available. - -\new \OpTeX/ -If you have bold variant of used Unicode math font, then you can use -\ii .loadmath \iis .loadmath {{\code{\\loadmath}}} \x`\loadboldmath` command, for example: -\begtt -\loadmath {[xitsmath-regular]} -\loadboldmath {[xitsmath-bold]} \to {[xitsmath-regular]} -\endtt -% -\OpTeX/ uses `\_normalmath` macro for loading collection of math fonts in -\"normal" cases and `\_boldmath` macro for bold titles. The font declared by -\x`\loadboldmath` is used in second case. But if the bold variant of the font is -not available (this is unfortunately more typical), then \OpTeX/ uses faked -bold of main Unicode math font (the `embolden` internal font feature is -used). So, the default `\_boldmath` macro defined by \OpTeX/ looks like: - -\begtt \typosize[10/12] -\_def\_boldunimath{% - \_ifx\_unimathboldfont \_undefined - \_loadumathfamily 1 {\_unimathfont}{embolden=1.7;} % Main faked bold - \_else - \_loadumathfamily 1 {\_unimathboldfont}{} % Main real bold font - \_fi - \_loadmathfamily 4 rsfs % rsfs in not in bold, unfortunately - \_setunimathdimens -}% -\let\_boldmath=\_boldunimath % this is done when Unicode math is initialized -\endtt - -\secc[newfam] Example of using additional math font - -The font `bbold10.tfm` includes double stroked characters, for example, -double stroked plus, double stroked Greek letters and digits. -Try to run `pdftex testfont`, then answer the question about the name of the -font: `bbold10` and then type command `\table\end`. The `testfont.pdf` is -printed with the table of characters of this font. -Most of these characters cannot be found in Unicode math fonts. - -\new \OpTeX/ -We show an example of how to add this font to the collection of used math fonts. -We can re-define the `\_normalmath` macro by: -\begtt \typosize[10/12] -\addto\_normalmath {\_loadmathfamily 5 bbold } - -\_regtfm bbold 0 bbold5 5.5 bbold6 6.5 bbold7 7.5 bbold8 8.5 bbold9 - 9.5 bbold10 11.1 bbold12 15 bbold17 * % using all bbold*.tfm -\_normalmath % reload the math fonts collection -\endtt -% -The string \"`bbold`" is declared by `\_regtfm` as a collection of all -`bbold*.tfm` fonts, the optical sizes are supported. - -\addto\_normalmath {\_loadmathfamily 5 bbold } -\_regtfm bbold 0 bbold5 5.5 bbold6 6.5 bbold7 7.5 bbold8 8.5 bbold9 - 9.5 bbold10 11.1 bbold12 15 bbold17 * % using all bbold*.tfm -\_normalmath -\Umathchardef \bbplus 2 5 "2B -\Umathchardef \bble 3 5 "3C -\Umathchardef \bbge 3 5 "3E - -Finally, we must to declare new \TeX/ sequences for accessing the characters -from the new font, for example: - -\begtt \typosize[10/12] -\Umathchardef \bbplus 2 5 "2B -\Umathchardef \bble 3 5 "3C -\Umathchardef \bbge 3 5 "3E -\endtt -% -The \x`\Umathchardef` \TeX/ primitive declares new \TeX/ sequence used in math -typesetting. The first parameter is a class number (2 means Bin, 3 means Rel, -see the table in the section~\ref[class]). The second parameter is a math -family number. It is 5, see the redefinition of the `\_normalmath` macro above. -The third parameter is a slot in the font. Now you can try to use these characters: -$$ - `a \bbplus b \bbge c` \quad \hbox{gives} \quad a \bbplus b \bbge c. -$$ -% -Maybe, you want to declare a special math selector which can be used as -`$\bball a+b>c$` in order to get $\bbchar a \bbplus b \bbge c$. -Then you can define: - -\begtt \typosize[10/12] -\def\bball {\bbchar \Umathcodenum `+ \bbplus - \Umathcodenum `> \bbge - \Umathcodenum `< \bble } -\endtt - -If you want to add all double stroked Greek letters into `\bball` -selector, then you can do something like this: - -\begtt \typosize[10/12] -\def\setbbgreek #1 {\tmpnum=#1\xargs\setbbgreekA} -\def\setbbgreekA #1{\Umathcode \_ea`#1 0 5 \tmpnum \advance\tmpnum by1 } - -\addto\bball {% - \setbbgreek "0B \alpha \beta \gamma \delta \epsilon \zeta \eta - \theta \iota \kappa \lambda \mu \nu \xi \pi \rho \sigma - \tau \upsilon \phi \chi ; - \setbbgreek "7F \omega ; - \setbbgreek "00 \Gamma \Delta \Theta \Lambda \Xi \Pi \Sigma \Upsilon - \Phi \Psi \Omega ; } -\endtt -% -The \x`\Umathcode`` <input-code> <class> <family> <font-slot>` primitive is used -here. The control sequences `\alpha`, `\beta`, `\gamma` etc. are macros which expand -to the Unicode character of appropriate (non-math) Greek letter. We set the -Umathcode to such character, for example -\code{\\Umathcode `}$\_rmgreek\alpha$` 0 5 "0B` is processed. - -The bold variant of the font `bbold*.tfm` is not available, unfortunately. -We have to settle for normal version of the font in the `\_boldmath` macro: - -\begtt \typosize[10/12] - \addto \_boldmath {\_loadmathfamily 5 bbold } -\endtt - -Another approach of using more Unicode math fonts in a single formula is -shown in -\ulink[http://petr.olsak.net/optex/optex-tricks.html\#addumathfont]{OpTeX trick 0030}. - -\sec Index - -Control sequences listed at pages \pgref[listA]--\pgref[listB] are not -mentioned here again. - -\begmulti 3 -\makeindex -\endmulti - -\bye diff --git a/macros/luatex/optex/doc/optex-techdoc.tex b/macros/luatex/optex/doc/optex-techdoc.tex deleted file mode 100644 index 4ae25a9c7e..0000000000 --- a/macros/luatex/optex/doc/optex-techdoc.tex +++ /dev/null @@ -1,290 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% This file is read from optex-doc.tex -% Use: optex optex-doc -% (three times) to create whole documentation including all references and the index. - -\load [doc.opm] - -\thisoutline {TECHNICAL DOCUMENTATION} - -\chap Technical documentation - -This documentation is written in the source files `*.opm` between -the `\_doc` and `\_cod` pairs or after the `\_endcode` command. -When the format is generated by -\begtt -luatex -ini optex.ini -\endtt -then the text of the documentation is ignored and the format `optex.fmt` is -generated. On the other hand, if you run -\begtt -optex optex-doc.tex -\endtt -then the same `*.opm` files are read when the second chapter of this -documentation is printed. - -A knowledge about \TeX/ is expected from the reader. -You can see a short document -\ulink[http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf]{\TeX/ in a Nutshell} -or more detail -\ulink[https://eijkhout.net/texbytopic/texbytopic.html]{\TeX/ by topic}. - -Notices about hyperlinks. -If a control sequence is printed in red color in this documentation then -this denotes its \"main documentation point". Typically, the listing where -the control sequence is declared follows immediately. If a control sequence is -printed in the blue color in the listing or in the text -then it is an active link that points (usually) to the main documentation point. -The main documentation point can be an active link that points to a previous -text where the control sequence was -mentioned. Such occurrences are active links to the main documentation point. - -\sec[init] The main initialization file - -The `optex.ini` file is read as the main file when the format is generated. - -{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip} - \def\docfile{optex.ini} - -\verbinput (-4) optex.ini -% -Category codes are set first. Note that the `_` is set to category code -\"letter", it can be used as a part of control sequence names. -Other category codes are set as in the plain \TeX/. - -\verbinput (6-20) optex.ini -% -The \`\optexversion` and \`\fmtname` are defined. - -\verbinput (22-25) optex.ini -% -We check if \LuaTeX/ engine is used at `-ini` state. And the `^^J` character -is set as `\newlinechar`. - -\verbinput (27-36) optex.ini -% -The basic macros for macro file syntax is defined, i.\,e.\ -`\_endcode`, `\_doc` and `\_cod`. -The `\_codedecl` will be re-defined later. - -\verbinput (38-42) optex.ini -% -Individual `*.opm` macro files are read. - -\verbinput (44-87) optex.ini -% -The file `optex.lua` is embedded into the format as byte-code. -It is documented in section~\ref[lua]. - -\verbinput (89-92) optex.ini - -The `\everyjob` register is initialized and the format is saved by -the `\dump` command. - -\verbinput (94-102) optex.ini - -} - -\printdoctail prefixed.opm -\secc The implementation of the namespaces -\printdoc prefixed.opm - -\sec pdf\TeX/ initialization -\printdoctail luatex-ini.opm -\printdoc luatex-ini.opm - -\sec Basic macros -We define first bundle of basic macros. -\printdoc basic-macros.opm - -\sec Allocators for \TeX/ registers -\printdoctail alloc.opm -\printdoc alloc.opm - -\sec If-macros, loops, is-macros -\printdoc if-macros.opm - -\sec Setting parameters -\printdoctail parameters.opm -\printdoc parameters.opm - -\sec More \OpTeX/ macros -The second bundle of \OpTeX/ macros is here. -\printdoc more-macros.opm - -\sec Using key=value format in parameters -\printdoctail keyval.opm -\printdoc keyval.opm - -\sec Plain \TeX/ macros -All macros from plain \TeX/ are rewritten here. -Differences are mentioned in the documentation below. -\printdoc plain-macros.opm - -\sec Preloaded fonts for text mode -\printdoctail fonts-preload.opm -\printdoc fonts-preload.opm - -\printdoctail fonts-resize.opm -\printdoc fonts-resize.opm - -\printdoctail fonts-select.opm -\secc Implementation of the Font Selection System -\printdoc fonts-select.opm - -\sec [math-preload] Preloaded fonts for math mode -\printdoctail math-preload.opm -\printdoc math-preload.opm - -\sec[math-macros] Math macros -\printdoc math-macros.opm - -\sec Unicode-math fonts -\printdoctail math-unicode.opm - -\sec[opmac-fonts] Scaling fonts in document (high-level macros) -These macros are documented in section~\ref[sizes] from the user point of view. -\printdoc fonts-opmac.opm - -\sec[output] Output routine -\printdoctail output.opm -\printdoc output.opm - -\sec Margins -The `\margins` macro is documented in the section~\ref[marg]. -\printdoc margins.opm - -\sec[colors] Colors -\printdoctail colors.opm -\printdoc colors.opm - -\sec[ref-file] The \code{.ref} file -\printdoctail ref-file.opm -\printdoc ref-file.opm - -\sec[references] References -\printdoctail references.opm -\printdoc references.opm - -\sec Hyperlinks -\printdoctail hyperlinks.opm -\printdoc hyperlinks.opm - -\sec[maketoc] Making table of contents -\printdoc maketoc.opm - -\sec PDF outlines -\secc Nesting PDF outlines -\printdoctail outlines.opm -\printdoc outlines.opm -\secc Strings in PDF outlines -\printdoctail pdfuni-string.opm -\printdoc pdfuni-string.opm - -\sec[sections] Chapters, sections, subsections -\printdoc sections.opm - -\sec[lists] Lists, items -\printdoc lists.opm - -\sec Verbatim, listings -\secc[verb] Inline and \"display" verbatim -\printdoc verbatim.opm -\secc[hisyntax] Listings with syntax highlighting -\printdoctail hi-syntax.opm -\printdoc hi-syntax.opm - -\sec Graphics -\printdoctail graphics.opm -\printdoc graphics.opm - -\sec[table] The \code{\\table} macro, tables and rules -\printdoctail table.opm -\secc[table.impl] Implemetation of the \code{\\table} macro and friends -\printdoc table.opm - -\sec Balanced multi-columns -\printdoc multicolumns.opm - -\sec Citations, bibliography -\secc[bib] Macros for citations and bibliography preloaded in the format -\printdoc cite-bib.opm -\secc[usebib] The \code{\\usebib} command -\printdoctail usebib.opm -\secc The \code{usebib.opm} macro file loaded when \code{\\usebib} is used -\printdoc usebib.opm - -\secc[isobib] Usage of the \code{bib-iso690} style -{\everyintt={\catcode`\<=13 \visiblesp} -\printdoctail bib-iso690.opm } - -\secc Implementation of the \code{bib-iso690} style -\printdoc bib-iso690.opm - -\sec[makeindex] Sorting and making Index -\printdoc makeindex.opm - -\sec[fnotes] Footnotes and marginal notes -\printdoc fnotes.opm - -\sec Styles - \OpTeX/ provides three styles: `\report`, `\letter` and `\slides`. - Their behavior is documented in user part of the manual in the section - \ref[styles] and `\slides` style (for presentations) is documented in - `op-slides.pdf` which is an example of the presentation. -\secc \code{\\report} and \code{\\letter} styles -\printdoc styles.opm -\secc[slides] \code{\\slides} style for presentations -\printdoc slides.opm - -\sec Logos -\printdoc logos.opm - -\sec Multilingual support -\secc Lowercase, uppercase codes -\printdoctail uni-lcuc.opm -\secc Hyphenations -\printdoc hyphen-lan.opm -\printdoctail hyphen-lan.opm -\secc[langphrases] Multilingual phrases and quotation marks -\printdoc languages.opm - -\sec Other macros -Miscellaneous macros are here. -\printdoc others.opm - -\sec[lua] Lua code embedded to the format - -The file `optex.lua` is loaded into the format in `optex.ini` as byte-code -and initialized by `\everyjob`, see section~\ref[init]. - -The file implements part of the functionality from `luatexbase` namespace, -nowadays defined by \LaTeX/ kernel. `luatexbase` deals with modules, -allocators, and callback management. Callback management is a nice extension -and is actually used in \OpTeX/. Other functions are defined more or less just -to suit luaotfload's use. - -\newtoks \_hisyntaxlua -\_hisyntaxlua={% - \_hicolor C \Green - \_replfromto {--}{^^J} {\z C{--#1}^^J}% -} - -{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip} - \commentchars-- \def\docfile{optex.lua} \ttline=-1 - \_def\_printcomments{\_medskip - {\_catcodetable0 \_typosize[10/12]\_everypar={}\_scantextokens\_ea{\_vcomments}\par}% - \_bigskip - } - -\verbinput \hisyntax{lua} (4-) optex.lua -} - - -\sec Printing documentation -\printdoctail doc.opm -\printdoc doc.opm - -\enddocument - diff --git a/macros/luatex/optex/doc/optex-userdoc.tex b/macros/luatex/optex/doc/optex-userdoc.tex deleted file mode 100644 index a70cedcf4d..0000000000 --- a/macros/luatex/optex/doc/optex-userdoc.tex +++ /dev/null @@ -1,2019 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -% This file is read from optex-doc.tex -% Use: optex optex-doc (three times) to create whole documentation. - -\let\new=\relax - -\sec Starting with \OpTeX/ -%%%%%%%%%%%%%%%%%%%%%%%%% - -\new -\OpTeX/ is compiled as a format for \LuaTeX/. Maybe there is a command -`optex` in your \TeX/ distribution. Then you can write into the command line - -\begtt -optex document -\endtt -% -You can try to process `optex op-demo` or `optex optex-doc`. - -If there is no `optex` command, see more information about installation -\OpTeX/ at \url{http://petr.olsak.net/optex}. - -A minimal document should be - -\begtt -\fontfam[LMfonts] -Hello World! \bye -\endtt - -The first line \~`\fontfam[LMfonts]` tells that Unicode Latin Modern -fonts (derived from Computer Modern) are used. If you omit this line then -preloaded Latin Modern fonts are used but preloaded fonts cannot be in -Unicode\fnote -{This is a technical limitation of \LuaTeX/ for fonts downloaded in formats: -only 8bit fonts can be preloaded.}. -So the sentence `Hello World` will be OK without the first line, but you -cannot print such sentence in other languages (for example `Ahoj světe!`) -where Unicode fonts are needed -because the characters like `ě` are not mapped correctly in preloaded -fonts. - -A somewhat larger example with common settings should be: - -\begtt \catcode`!=0 -\fontfam[Termes] % selecting Unicode font family Termes (section !ref[fontfam]) -\typosize[11/13] % setting default font size and baselineskip (sec. !ref[sizes]) -\margins/1 a4 (1,1,1,1)in % setting A4 paper, 1 in margins (section !ref[marg]) -\cslang % Czech hyphenation patterns (section !ref[lang]) - -Tady je zkušební textík v českém jazyce. -\bye -\endtt -% -You can look at `op-demo.tex` file for a more complex, but still simple example. - -\sec Page layout -%%%%%%%%%%%%%%%% - -\secc[marg] Setting the margins -%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -The \^`\margins` command declares margins of the document. This command have -the following parameters: - -\begtt \catcode`\<=13 -\margins/<pg> <fmt> (<left>,<right>,<top>,<bot>)<unit> - example: -\margins/1 a4 (2.5,2.5,2,2)cm -\endtt - -Parameters are: - -\begitems -* <pg> \dots\ `1` or `2` specifies one-page or two-pages design. -* <fmt> \dots\ paper format (a4, a4l, a5, letter, etc. or user defined). -* <left>, <right>, <top>, <bot> \dots\ gives the amount of left, right, - top and bottom margins. -* <unit> \dots\ unit used for values <left>, <right>, <top>, <bot>. -\enditems - -Each of the parameters <left>, <right>, <top>, <bot> can be empty. -If both <left> and <right> are nonempty then `\hsize` is set. Else `\hsize` -is unchanged. If both <left> and <right> are empty then typesetting area is -centered in the paper format. The analogical rule works when <top> or <bot> -parameter is empty (`\vsize` instead `\hsize` is used). Examples: - -\begtt -\margins/1 a4 (,,,)mm % \hsize, \vsize untouched, - % typesetting area centered -\margins/1 a4 (,2,,)cm % right margin set to 2cm - % \hsize, \vsize untouched, vertically centered -\endtt - -If `<pg>=1` then all pages have the same margins. If `<pg>=2` then the -declared margins are true for odd pages. The margins at the even pages are -automatically mirrored in such case, it means that <left> is replaced by -<right> and vice versa. - -\OpTeX/ declares following paper formats: a4, a4l (landscape~a4), -a5, a5l, a3, a3l, b5, letter and user can declare another own format by \~`\sdef`: - -\begtt -\sdef{_pgs:b5l}{(250,176)mm} -\sdef{_pgs:letterl}{(11,8.5)in} -\endtt - -The `<fmt>` can be also in the form `(<width>,<height>)<unit>` where `<unit>` is -optional. If it is missing then `<unit>` after margins specification is -used. For example: - -\begtt -\margins/1 (100,200) (7,7,7,7)mm -\endtt -% -declares the paper 100$\times$200\,mm with all four margins 7\,mm. The spaces -before and after <fmt> parameter are necessary. - -The command \^`\magscale[<factor>]` scales the whole typesetting area. -\new The fixed point of such scaling is the upper left corner of the paper sheet. -Typesetting (breakpoints etc.) is unchanged. All units are relative after -such scaling. Only paper format's dimensions stay unscaled. Example: - -\begtt -\margins/2 a5 (22,17,19,21)mm -\magscale[1414] \margins/1 a4 (,,,)mm -\endtt -% -The first line sets the `\hsize` and `\vsize` and margins for final -printing at a5 format. The setting on the second line centers the scaled -typesetting area to the true a4 paper while breaking points for paragraphs -and pages are unchanged. It may be usable for -review printing. After the review is done, the second line can be commented out. - -\secc Concept of the default page -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\OpTeX/ uses \"output routine" for page design. -It is very similar to the Plain \TeX/ output routine. -There is \^`\headline` followed by \"page body" followed by -\^`\footline`. The \^`\headline` is empty by default and it can be used -for running headers repeated on each page. The \^`\footline` prints -centered page number by default. You can set the \^`\footline` to empty -using \^`\nopagenumbers` macro. - -The margins declared by \^`\margins` macro (documented in the previous -section~\ref[marg]) is concerned to the page body, -i.e.\ the \^`\headline` and \^`\footline` are placed to the top and bottom -margins. - -The distance between the \^`\headline` and the top of the page body is given by -the \^`\headlinedist` register. The distance between bottom of the page body and -the \^`\footline` is given by \^`\footlinedist`. The default values are: - -\begtt -\headline = {} -\footline = {\_hss\_rmfixed \_folio \_hss} % \folio expands to page number -\headlinedist = 14pt % from baseline of \headline to top of page body -\footlinedist = 24pt % from last line in pagebody to baseline of footline -\endtt - -The page body should be divided into top insertions (floating tables and -figures) followed by a real text and followed by footnotes. -Typically, the only real text is here. - -The \^`\pgbackground` tokens list is empty by default but it can be used for -creating a background of each page (colors, picture, watermark for example). -The macro \^`\draft` uses this register and puts big text DRAFT as a watermark -to each page. You can try it. - -More about the page layout is documented in sections~\ref[oparams] and~\ref[output]. - -\secc Footnotes and marginal notes -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -The Plain \TeX/'s macro \^`\footnote` can be used as usual. But a new macro -\^`\fnote{<text>}` is defined. The footnote mark is added automatically and it -is numbered -\new -on each chapter from one\fnote -{You can declare \^`\fnotenumglobal` if you want footnotes numbered in whole -document from one or \^`\fnotenumpages` if you want footnotes numbered at each -page from one. Default setting is \^`\fnotenumchapters`}. -The <text> is scaled to 80 \%. -User can redefine footnote mark or scaling, as shown in the section~\ref[fnotes]. - -The \^`\fnote` macro is fully applicable only in \"normal outer" paragraph. -It doesn't work inside boxes (tables, for example). If you are solving such -a case then you can use the command \^`\fnotemark``<numeric-label>` inside the box: only the -footnote mark is generated here. When the box is finished you can use -\^`\fnotetext{<text>}`. This macro puts the <text> to the footnote. -The <numeric-label> has to be `1` if only one such command is in the box. -Second \^`\fnotemark` inside the same box has to have the parameter `2` etc. -The same number of \^`\fnotetext`s have to be written -after the box as the number of \^`\fnotemark`s inserted inside the box. -Example: - -\begtt -Text in a paragraph\fnote{First notice}... % a "normal" footnote -\table{...}{...\fnotemark1...\fnotemark2...} % two footnotes in a box -\fnotetext{Second notice} -\fnotetext{Third notice} -... -\table{...}{...\fnotemark1...} % one footnote in a box -\fnotetext{Fourth notice} -\endtt - -The marginal note can be printed by the \^`\mnote{<text>}` macro. The <text> -is placed to the right margin on the odd pages and it is placed to the left -margin on the even pages. This is done after second \TeX{} run because the -relevant information is stored in an external file and read from it again. -If you need to place the notes only to the fixed margin write -\^`\fixmnotes\right` or \^`\fixmnotes\left`. - -The <text> is formatted as a little paragraph with the maximal width -\^`\mnotesize` ragged left on the left margins or ragged right on the right -margins. The first line of this little paragraph has its vertical position -given by the position of \^`\mnote` in the text. The exceptions are possible -by using the `up` keyword: \~`\mnote`` up<dimen>{<text>}`. -You can set such <dimen> to each \^`\mnote` manually in final printing -in order to margin notes do not overlap. The positive value of <dimen> -shifts the note up and negative value shifts it down. For example -\^`\mnote`` up 2\baselineskip{<text>}` shifts this marginal note two lines up. - -\sec Fonts -%%%%%%%%%% - -\secc[fontfam] Font families -%%%%%%%%%%%%%%%%%%%%%%% - -You can select the font family by \^`\fontfam[<Family-name>]`. -The argument <Family-name> is case insensitive and spaces are ignored in it. For -example, \^`\fontfam[LM Fonts]` is equal to \^`\fontfam[LMfonts]` and it is equal -to \^`\fontfam[lmfonts]`. Several aliases are prepared, thus -\^`\fontfam[Latin Modern]` can be used for loading Latin Modern family too. - -If you write \^`\fontfam[?]` then all font families registered in \OpTeX/ -are listed on the terminal and in the log file. -If you write \^`\fontfam[catalog]` then a catalog of all fonts registered in -\OpTeX/ and available in your \TeX/ system is printed. The instructions -on how to register your own font family are appended in the catalog. - -If the family is loaded then {\em font modifiers} applicable in such font family -are listed on the terminal: (`\caps`, `\cond` for example). -And there are four basic {\em variant selectors} (\^`\rm`, \^`\bf`, \^`\it`, \^`\bi`). -The usage of variant selectors is the same as in Plain \TeX: -`{\it italics text}`, `{\bf bold text}` etc. - -The font modifiers (`\caps`, `\cond` for example) can -be used before a variant selector and they -can be (independently) combined: `\caps\it` or `\cond\caps\bf`. The -modifiers keep their internal setting until the group ends or until another -modifier that negates the previous feature is used. So -`{\caps \rm First text \it Second text}` -gives {\caps \rm First text \it Second text}. - -The font modifier without following variant selector does not change the font -actually, it only prepares data used by next variant selectors. -There is one special variant selector \^`\currvar` which does not change the -selected variant but reloads the font due to (maybe newly -specified) font modifier(s). - -The context between variants \^`\rm` $\leftrightarrow$ \^`\it` and -\^`\bf` $\leftrightarrow$ \^`\bi` is kept by the \^`\em` -macro (emphasize text). -It switches from current \^`\rm` to \^`\it`, from current \^`\it` to \^`\rm`, from -current \^`\bf` to \^`\bi` and from current \^`\bi` to \^`\bf`. -The italics correction `\/` is inserted automatically, if needed. Example: - -\begtt -This is {\em important} text. % = This is {\it important\/} text. -\it This is {\em important} text. % = This is\/ {\rm important} text. -\bf This is {\em important} text. % = This is {\bi important\/} text. -\bi This is {\em important} text. % = This is\/ {\bf important} text. -\endtt - -\new -More about the \OpTeX/ Font Selection System is written in the technical -documentation in the section~\ref[fontsystem]. -You can mix more font families in your document, you can -declare your own variant selectors or modifiers, etc. - -\secc[sizes] Font sizes -%%%%%%%%%%%%%%%%%%%%% - -The command \^`\typosize[<fontsize>/<baselineskip>]` sets the font size of text and -math fonts and baselineskip. If one of these two parameters is empty, the -corresponding feature stays unchanged. Don't write the unit of these -parameters. The unit is internally set to \^`\ptunit` which is 1pt by default. -You can change the unit by the command \^`\ptunit=<something-else>`, -for instance \^`\ptunit=1mm` enlarges all font sizes declared by \^`\typosize`. -Examples: - -\begtt -\typosize[10/12] % default of Plain TeX -\typosize[11/12.5] % font 11pt, baseline 12.5pt -\typosize[8/] % font 8pt, baseline unchanged -\endtt - -The commands for font size setting described in this section -have local validity. If you put them into a group, -the settings are lost when the group is finished. If you set -something relevant with paragraph shape (baselineskip given by -\^`\typosize` for example) then you must first finalize the -paragraph before closing the group: -`{\typosize[12/14] ...<text of paragraph>... \par}`. - -The command \^`\typoscale[<font-factor>/<baselineskip-factor>]` -sets the text and math fonts -size and baselineskip as a multiple of the current fonts size and -baselineskip. The factor is written in \"scaled"-like way, it means that 1000 -means factor one. The empty parameter is equal to the parameter 1000, -i.e. the value stays unchanged. Examples: - -\begtt -\typoscale[800/800] % fonts and baselineskip re-size to 80 % -\typoscale[\magstep2/] % fonts bigger 1,44times (\magstep2 expands to 1440) -\endtt - -First usage of \^`\typosize` or \^`\typoscale` macro in your document sets so-called {\em main values}, i.\,e.\ main font size and main baselineskip. They are internally -saved in registers \^`\mainfosize` and \^`\mainbaselineskip`. - -\new -The \^`\typoscale` command does scaling with respect to current values by default. -If you want to do it with respect to the main values, type \^`\scalemain` immediately -before \^`\typoscale` command. - -\begtt -\typosize[12/14.4] % first usage in document, sets main values internally -\typosize[15/18] % bigger font -\scalemain \typoscale[800/800] % reduces from main values, no from current. -\endtt - -The \^`\typosize` and \^`\typoscale` macros initialize the font family by `\rm`. -You can re-size only the current font by the command -\^`\thefontsize[<font-size>]` or the font can be rescaled by -\^`\thefontscale[<factor>]`. These macros don't change math fonts sizes nor -baselineskip. - -\new -There is \"low level" \^`\setfontsize{<size-spec>}` command which behaves like -a font modifier and sets given font size used by next variant selectors. -It doesn't change the font size immediately, but the following variant selector -does it. For example \^`\setfontsize{at15pt}`\^`\currvar` sets current variant to 15pt. - -If you are using a font family with \"optical sizes feature" (i.\,e.\ there -are more recommended sizes of the same font which are not scaled -linearly; a good example is Computer Modern aka Latin Modern fonts) -then the recommended size is selected by all mentioned commands automatically. - -More information about resizing of fonts is documented in the -section~\ref[setfontsize]. - -\secc Typesetting math -%%%%%%%%%%%%%%%%%%%%% - -See the additional document -\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf] -{Typesetting Math with \OpTeX/} for more details about this issue. - -\OpTeX/ preloads a collection of 7bit Computer Modern math fonts -and AMS fonts in its format for math typesetting. -You can use them in any size and in the \^`\boldmath` variant. -% -\new -Most declared text font families (see \^`\fontfam` in the section~\ref[fontfam]) -are configured with a recommended Unicode -math font. This font is automatically loaded unless you specify -\^`\noloadmath` before first \^`\fontfam` command. See log file for more -information about loading text font family and Unicode math fonts. If you -prefer another Unicode math font, specify it by \^`\loadmath{[<font-file>]}` -or \^`\loadmath{<font-name>}` before first \^`\fontfam` command. - -Hundreds math symbols and operators like in AMS\TeX/ are accessible. -For example `\alpha` $\alpha$, `\geq`~$\geq$, `\sum` $\sum$, -`\sphericalangle` $\sphericalangle$, `\bumpeq`, $\bumpeq$. See AMS\TeX/ -manual or -\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf] -{Typesetting Math with \OpTeX/} for complete list of math symbols. - -The following math alphabets are available: - -\begtt \catcode`\$=3 \catcode`/=0 \medmuskip=0mu \adef{ }{ } -\mit % mathematical variables $abc-xyz,ABC-XYZ$ -\it % text italics $/it abc-xyz,ABC-XYZ$ -\rm % text roman $/rm abc-xyz,ABC-XYZ$ -\cal % normal calligraphics $/cal ABC-XYZ$ -\script % script $/script ABC-XYZ$ -\frak % fracture $/frak abc-xyz,ABC-XYZ$ -\bbchar % double stroked letters $/bbchar ABC-XYZ$ -\bf % sans serif bold $/bf abc-xyz,ABC-XYZ$ -\bi % sans serif bold slanted $/bi abc-xyz,ABC-XYZ$ -\endtt - -The last two selectors \^`\bf` and \^`\bi` select the sans serif fonts in math regardless of the current text font family. This is a common notation for vectors and -matrices. You can re-declare them, see section~\ref[unimath-codes] where -definitions of Unicode math variants of \^`\bf` and \^`\bi` selectors are documented. - -The math fonts can be scaled by \^`\typosize` and \^`\typoscale` macros. -Two math fonts collections are prepared: \^`\normalmath` for normal weight -and \^`\boldmath` for bold. The first one is set by default, the second one -is usable for math formulae in titles typeset in bold, for example. - -\new -You can use \^`\mathbox{<text>}` inside math mode. It behaves as `{\hbox{<text>}}` -(i.e. the <text> is printed in horizontal non-math mode) -but the size of the <text> is adapted to the context of math size (text or script or -scriptscript). - -\sec Typical elements of the document -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\secc[chap] Chapters and sections -%%%%%%%%%%%%%%%%%%%%%%%%%% - -The documents can be divided into chapters (\^`\chap`), -sections (\^`\sec`), subsections (\^`\secc`) and they can be titled -by \^`\tit` command. The parameters are separated by the end of current line (no -braces are used): - -\begtt \catcode`\<=13 -\tit Document title <end of line> -\chap Chapter title <end of line> -\sec Section title <end of line> -\secc Subsection title <end of line> -\endtt - -The chapters are automatically numbered by one number, sections by two numbers -(chapter.section), and subsections by three numbers. If there are no chapters -then sections have only one number and subsections two. - -The implicit design of the titles of chapter etc.\ is implemented in the -macros \^`\_printchap`, \^`\_printsec` and \^`\_printsecc`. A designer can simply change -these macros if he/she needs another behavior. - -The first paragraph after the title of chapter, section, and subsection is -not indented but you can type `\let`\^`\_firstnoindent=\relax` if you need all -paragraphs indented. - -If a title is so long then it breaks into more lines in the output. It is better to hint at the -breakpoints because \TeX/ does not interpret the meaning of the title. -Users can put the \^`\nl` (means newline) to the breakpoints. - -If you want to arrange a title to more lines in your source file then you can -use `^^J` at the end of each line (except the last one). -When `^^J` is used, then the reading of the title continues at the next line. -The \"normal" comment character `%` doesn't work in titles. -You can use \^`\nl`{\visiblesp` ^^J`} if you want to have corresponding lines in the source -and the output. - -The chapter, section, or subsection isn't numbered if the \^`\nonum` precedes. -And the chapter, section, or subsection isn't delivered to the table of -contents if \^`\notoc` precedes. You can combine both prefixes. - -\secc[cap] Another numbered objects -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -Apart from chapters, sections, and subsections, there are another -automatically numbered objects: equations, captions for tables and -figures. The user can declare more numbered objects. - -If the user writes the \^`\eqmark` as the last element of the display mode then -this equation is numbered. The equation number is printed in brackets. This number -is reset in each section by default. - -If the \^`\eqalignno` is used, then user can put \^`\eqmark` to the last column -before `\cr`. For example: - -\begtt -\eqalignno{ - a^2+b^2 &= c^2 \cr - c &= \sqrt{a^2+b^2} & \eqmark \cr} -\endtt - -Another automatically numbered object is a caption which is tagged by \^`\caption/t` for -tables and \^`\caption/f` for figures. The caption text follows. -The \^`\cskip` can be used between \^`\caption` text and the real object (table -or figure). You can use two orders: `<caption>\cskip <object>` or -`<object>\cskip <caption>`. -The \^`\cskip` creates appropriate vertical space between them. Example: - -\begtt -\caption/t The dependency of the computer-dependency on the age. -\cskip -\noindent\hfil\table{rl}{ - age & value \crl\noalign{\smallskip} - 0--1 & unmeasured \cr - 1--6 & observable \cr - 6--12 & significant \cr - 12--20 & extremal \cr - 20--40 & normal \cr - 40--60 & various \cr - 60--$\infty$ & moderate} -\endtt - -This example produces: - -\medskip -\caption/t The dependency of the computer-dependency on the age. -\cskip -\noindent\hfil\table{rl}{ - age & value \crl\noalign{\smallskip} - 0--1 & unmeasured \cr - 1--6 & observable \cr - 6--12 & significant \cr - 12--20 & extremal \cr - 20--40 & normal \cr - 40--60 & various \cr - 60--$\infty$ & moderate} -\medskip - -You can see that the word \"Table" followed by a number is added by the macro -`\caption/t`. -The caption text is centered. If it occupies more lines then the -last line is centered. - -The macro \^`\caption/f` behaves like \^`\caption/t` but it is intended for -figure captions with independent numbering. -The word (Table, Figure) depends on the selected language (see -section~\ref[lang] about languages). - -If you wish to make the table or figure as a floating object, you need to use -Plain \TeX/ macros \^`\midinsert` or \^`\topinsert` terminated by \^`\endinsert`. -Example: - -\begtt -\topinsert % table and its caption printed at the top of the current page - <caption and table> -\endinsert -\endtt -% -The pair \^`\midinsert`...\^`\endinsert` prefers to put the enclosed object -to the current place. Only if this is unable due to page breaking, it -behaves like \^`\topinsert`...\^`\endinsert`. - -\new -There are five prepared counters `A`, `B`, `C`, `D` and `E`. -They are reset in each chapter and section\fnote -{This feature can be changed, see the section~\ref[sections] in the technical documentation.}. -They can be used in context of \^`\numberedpar` `<letter>{<text>}` -macro. For example: -\begtt -\def\theorem {\numberedpar A{Theorem}} -\def\corollary {\numberedpar A{Corollary}} -\def\definition {\numberedpar B{Definition}} -\def\example {\numberedpar C{Example}} -\endtt -% -Three independent numbers are used in this example. One for Theorems and Corollaries -second for Definitions and third for Examples. The user can write -`\theorem Let $M$ be...` and the new paragraph is started with the text: -{\bf Theorem 1.4.1.} Let $M$ be... -You can add an optional parameter in brackets. For example, -`\theorem [(L'Hôpital's rule)] Let $f$, $g$ be...` -is printed like {\bf Theorem 1.4.2 (L'Hôpital's rule).} Let $f$, $g$ be... - -\secc References -%%%%%%%%%%%%%%% - -Each automatically numbered object documented in -sections \ref[chap] and \ref[cap] can be referenced -\new -if optional parameter -`[<label>]` is appended to \^`\chap`, \^`\sec`, -\^`\secc`, \^`\caption/t`, \^`\caption/f` or \^`\eqmark`. The alternative syntax is -to use \^`\label[<label>]` before mentioned commands (not necessarily directly -before). The reference is realized by \^`\ref[<label>]` or \^`\pgref[<label>]`. -Example: - -\begtt -\sec[beatle] About Beatles - -\noindent\hfil\table{rl}{...} % the table -\cskip -\caption/t [comp-depend] The dependency of the comp-dependency on the age. - -\label[pythagoras] -$$ a^2 + b^2 = c^2 \eqmark $$ - -Now we can point to the section~\ref[beatle] on the page~\pgref[beatle] -or write something about the equation~\ref[pythagoras]. Finally there -is an interesting Table~\ref[comp-depend]. -\endtt - -If there are forward referenced objects then users have to run \TeX{} twice. -During each pass, the working `*.ref` file (with references data) is created -and this file is used (if it exists) at the beginning of the document. - -You can use the \^`\label[<label>]` before the `\theorem`, `\definition` etc.\ -(macros defined with `\numberedpar`) if you want to reference these numbered objects. -You can't use `\theorem[<label>]` because the optional parameter -is reserved to another purpose here. - -You can create a reference to whatever else by commands -\^`\label[<label>]`\^`\wlabel{<text>}`. The connection between <label> and -<text> is established. The \^`\ref[<label>]` will print <text>. - -By default, labels are not printed, of course. But if you are preparing a -draft version of your document then you can declare \^`\showlabels`. The labels -are printed at their destination places after such a declaration. - -\secc Hyperlinks, outlines -%%%%%%%%%%%%%%%%%%%%%%%%% - -If the command \^`\hyperlinks` `<color-in> <color-out>` is used at the beginning of -the document, then the following objects are hyperlinked in the PDF output: - -\begitems -* numbers and texts generated by \^`\ref` or \^`\pgref`, -* numbers of chapters, sections, subsections, and page numbers in the table of contents, -* numbers or marks generated by \~`\cite` command (bibliography references), -* texts printed by \~`\url` or \~`\ulink` commands. -\enditems - -The last object is an external link and it is colored by -<color-out>. Other links are internal and they are colored by -<color-in>. Example: - -\begtt -\hyperlinks \Blue \Green % internal links blue, URLs green. -\endtt - -You can use another marking of active links: by frames which are visible in -the PDF viewer but invisible when the document is printed. The way to do it -is to define the macros \^`\_pgborder`, \^`\_tocborder`, \^`\_citeborder`, -\^`\_refborder` and \^`\_urlborder` as the triple of RGB components of the used -color. Example: - -\begtt -\def\_tocborder {1 0 0} % links in table of contents: red frame -\def\_pgborder {0 1 0} % links to pages: green frame -\def\_citeborder {0 0 1} % links to references: blue frame -\endtt - -By default, these macros are not defined. It means that no frames are created. - -The hyperlinked footnotes can be activated by \^`\fnotelinks` `<color-fnt> <color-fnf>` -where footnote marks in the text have `<color-fnt>` and the same footnote marks -in footnotes have <color-fnf>. You can define relevant borders -\^`\_fntborder` and \^`\_fnfborder` analogically as \^`\_pgborder` (for example). - -There are \"low level" commands to create the links. You can specify the -destination of the internal link by \^`\dest[<type>:<label>]`. The -active text linked to the \^`\dest` can be created by -\^`\ilink[<type>:<label>]{<text>}`. The `<type>` parameter is one of -the `toc`, `pg`, `cite`, `ref`, or another special for your purpose. -These commands create internal links only when \^`\hyperlinks` is declared. - -The \^`\url` macro prints its parameter in \~`\tt` font and creates a potential -breakpoints in it (after slash or dot, for example). If the \^`\hyperlinks` -declaration is used then the parameter of \^`\url` is treated as an external URL link. -An example: `\url{http://www.olsak.net}` creates \url{http://www.olsak.net}. -The characters \code{\%}, `\`, `#`, `{`, and `}` have to be protected by -backslash in the \^`\url` argument, the other special characters `~`, -`^`, `&` can be written as single character\fnote -{More exactly, there are the same rules as for `\code` command, see -section~\ref[verbatim].}. -You can insert the `\|` command -in the `\url` argument as a potential breakpoint. - -If the linked text have to be different than the URL, you can use -\^`\ulink[<url>]{<text>}` macro. For example: -`\ulink[http://petr.olsak.net/optex]{\OpTeX/ page}` -outputs to the text -\ulink[http://petr.olsak.net/optex]{\OpTeX/ page}. -The characters \code{\%}, `\`, `#`, `{`, and `}` must by escaped in -the <url> parameter. - -The PDF format provides {\em outlines} which are notes placed in the special frame of -the PDF viewer. These notes can be managed as a structured and hyperlinked -table of contents of the document. The command \^`\outlines{<level>}` creates -such outlines from data used for the table of contents in the document. The -<level> parameter gives the level of opened sub-outlines -in the default view. The deeper levels can be opened by mouse click on the -triangle symbol after that. - -\new -If you are using a special unprotected macro in section titles then \^`\outlines` macro -may crash. You must declare a variant of the macro for outlines case which is -expandable. Use \~`\regmacro` in this case. See the section \ref[toc] for more information -about \~`\regmacro`. - -The command \^`\insertoutline{<text>}` inserts a next entry into PDF outlines at -the main level~0. These entries can be placed before the table of contents (created -by \^`\outlines`) or after it. Their hyperlink destination is in the place -where the \^`\insertoutline` macro is used. - -The command \^`\thisoutline{<text>}` uses <text> in the outline instead of default -title text for the first following `\chap`, `\sec`, or `\secc`. -Special case: \^`\thisoutline{\relax}` doesn't create any outline for the following -`\chap`, `\sec`, or `\secc`. - -\secc Lists -%%%%%%%%%% - -The list of items is surrounded by \^`\begitems` and \^`\enditems` commands. -The asterisk (`*`) is active within this environment and it starts one item. -The item style can be chosen by the \^`\style` parameter written after \^`\begitems`: - -\begtt -\style o % small bullet -\style O % big bullet (default) -\style - % hyphen char -\style n % numbered items 1., 2., 3., ... -\style N % numbered items 1), 2), 3), ... -\style i % numbered items (i), (ii), (iii), ... -\style I % numbered items I, II, III, IV, ... -\style a % items of type a), b), c), ... -\style A % items of type A), B), C), ... -\style x % small rectangle -\style X % big rectangle -\endtt - -For example: - -\begtt -\begitems -* First idea -* Second idea in subitems: - \begitems \style i - * First sub-idea - * Second sub-idea - * Last sub-idea - \enditems -* Finito -\enditems -\endtt -% -produces: - -\begitems -* First idea -* Second idea in subitems: - \begitems \style i - * First sub-idea - * Second sub-idea - * Last sub-idea - \enditems -* Finito -\enditems - -Another style can be defined by the command \~`\sdef{_item:<style>}{<text>}`. -Default item can be set by \^`\defaultitem={<text>}`. -The list environments can be nested. Each new level of items is indented by -next multiple of \^`\iindent` value which is set to `\parindent` by default. -The \^`\ilevel` register says what level of items is currently processed. -Each \^`\begitems` starts \^`\everylist` tokens register. You can set, for -example: -\begtt -\everylist={\ifcase\ilevel\or \style X \or \style x \else \style - \fi} -\endtt - -You can say \^`\begitems` \^`\novspaces` if you don't want vertical spaces above -and below the list. The nested item list is without vertical spaces -automatically. More information about the design of lists of items should be -found in the section~\ref[lists]. - -A \"selected block of text" can be surrounded by -\^`\begblock`\dots\^`\endblock`. The default design of blocks of text is -indented text in smaller font. The blocks of text can be nested. - -\secc Tables -%%%%%%%%%%% - -The macro \^`\table{<declaration>}{<data>}` provides similar <declaration> -of tables as in \LaTeX: you can use letters `l`, `r`, `c`, each letter declares -one column (aligned to left, right, center, respectively). -These letters can be combined by the `|` character (vertical line). Example - -\begtt -\table{||lc|r||}{ \crl - Month & commodity & price \crli \tskip2pt - January & notebook & \$ 700 \cr - February & skateboard & \$ 100 \cr - July & yacht & k\$ 170 \crl} -\endtt -% -generates the result: - -\vskip-\medskipamount -\noindent\hfil\table{||lc|r||}{ \crl - Month & commodity & price \crli \tskip2pt - January & notebook & \$ 700 \cr - February & skateboard & \$ 100 \cr - July & yacht & k\$ 170 \crl} -\medskip - -Apart from `l`, `r`, `c` declarators, you can use the `p{<size>}` declarator -which declares the column with paragraphs of given width. More precisely, -a long text in the table cell is printed as a multiline paragraph with given width. -By default, the paragraph is left-right justified. But there are -alternatives: - -\begitems -* `p{<size>`\^`\fL}` fit left, i.e.\ left justified, ragged right, -* `p{<size>`\^`\fR}` fit right, i.e.\ right justified, ragged left, -* `p{<size>`\^`\fC}` fit center, i.e.\ ragged left plus right, -* `p{<size>`\^`\fS}` fit special, short one-line pararaph centered, - long paragraph normal, -* `p{<size>`\^`\fX}` fit extra, left-right justified but last line centered. -\enditems - -You can use `(<text>)` in the <declaration>. Then this text is applied in -each line of the table. For example `r(\kern10pt)l` adds more 10\,pt space -between `r` and `l` rows. - -An arbitrary part of the <declaration> can be repeated by a <number> -prefixed. For example `3c` means `ccc` or `c 3{|c}` means -`c|c|c|c`. Note that spaces in the <declaration> are ignored and you -can use them in order to more legibility. - -The command `\cr` used in the <data> part of the table -is generally known from Plain \TeX. It marks the end of each row in the table. -Moreover \OpTeX/ defines following similar commands: - -\begitems -* \^`\crl` \dots\ the end of the row with a horizontal line after it. -* \^`\crll` \dots\ the end of the row with a double horizontal line after it. -* \^`\crli` \dots\ like \^`\crl` but the horizontal line doesn't intersect the - vertical double lines. -* \^`\crlli` \dots\ like \^`\crli` but horizontal line is doubled. -* \^`\crlp{<list>}` \dots\ like \^`\crli` but the lines are drawn only in the - columns mentioned in comma-separated `<list>` of their numbers. - The <list> can include `<from>-<to>` declarators, for example - \^`\crlp{1-3,5}` is equal to \^`\crlp{1,2,3,5}`. -\enditems - -The \^`\tskip``<dimen>` command works like the `\noalign{\vskip<dimen>}` -immediately after `\cr*` commands but it doesn't interrupt the vertical lines. - -\new -You can use the following parameters for the \^`\table` macro. Default values are listed -too. - -\begtt -\everytable={} % code used in \vbox before table processing -\thistable={} % code used in \vbox, it is removed after using it -\tabiteml={\enspace} % left material in each column -\tabitemr={\enspace} % right material in each column -\tabstrut={\strut} % strut which declares lines distance in the table -\tablinespace=2pt % additional vert. space before/after horizontal lines -\vvkern=1pt % space between lines in double vertical line -\hhkern=1pt % space between lines in double horizontal line -\tabskip=0pt % space between columns -\tabskipl=0pt \tabskipr=0pt % space before first and after last column -\endtt - -Example: if you do \^`\tabiteml={$\enspace}`\^`\tabitemr={\enspace$}` then -the \^`\table` acts like \LaTeX's array environment. - -If there is an item that spans to more than one column in the table then -the macro \^`\multispan{<number>}` (from Plain \TeX) can help you. Another -alternative is -the command \^`\mspan``<number>[<declaration>]{<text>}` -which spans <number> columns and formats the <text> by the -<declaration>. The <declaration> must include a declaration of only one column -with the same syntax as common \^`\table` <declaration>. -If your table includes vertical rules and you want to -create continuous vertical rules by \^`\mspan`, then use rule declarators `|` -after `c`, `l` or `r` letter in \^`\mspan` <declaration>. The -exception is only in the case when \^`\mspan` includes the first -column and the table have rules on the left side. The example of \^`\mspan` -usage is below. - -The \^`\frame{<text>}` makes a frame around <text>. You can put the whole \^`\table` -into \^`\frame` if you need double-ruled border of the table. Example: - -\begtt -\frame{\table{|c||l||r|}{ \crl - \mspan3[|c|]{\bf Title} \crl \noalign{\kern\hhkern}\crli - first & second & third \crlli - seven & eight & nine \crli}} -\endtt -% -creates the following result: - -\hfil\frame{\table{|c||l||r|}{\crl - \mspan3[|c|]{\bf Title} \crl \noalign{\kern\hhkern}\crli - first & second & third \crlli - seven & eight & nine \crli}} -\bigskip - -The \^`\vspan``<number>{<text>}` shifts the <text> down in order it looks -like to be in the center of the <number> lines (current line is first). -You can use this for creating tables like in the following example: - -\begtt \typosize[8.7/11] -\thistable{\tabstrut={\vrule height 20pt depth10pt width0pt} - \baselineskip=20pt \tablinespace=0pt \rulewidth=.8pt} -\table{|8{c|}}{\crlp{3-8} - \mspan2[c|]{} & \mspan3[c|]{Singular} & \mspan3[c|]{Plural} \crlp{3-8} - \mspan2[c|]{} & Neuter & Masculine & Feminine & Masculine & Feminine & Neuter \crl - \vspan2{I} & Inclusive & \mspan3[c|]{\vspan2{O}} & \mspan3[c|]{X} \crlp{2,6-8} - & Exclusive & \mspan3[c|]{} & \mspan3[c|]{X} \crl - \vspan2{II} & Informal & \mspan3[c|]{X} & \mspan3[c|]{X} \crlp{2-8} - & Formal & \mspan6[c|]{X} \crl - \vspan2{III} & Informal & \vspan2{O} & X & X & \mspan2[c|]{X} &\vspan2{O} \crlp{2,4-7} - & Formal & & \mspan4[c|]{X} & \crl -} -\endtt - -\puttext 8.9cm -4cm {\pdfsave\pdfscale{.5}{.5}\rlap{% -\thistable{\tabstrut={\vrule height 20pt depth10pt width0pt} - \baselineskip=20pt \tablinespace=0pt \rulewidth=.8pt} -\table{|8{c|}}{\crlp{3-8} - \mspan2[c|]{} &\mspan3[c|]{Singular} &\mspan3[c|]{Plural} \crlp{3-8} - \mspan2[c|]{} & Neuter & Masculine & Feminine & Masculine & Feminine & Neuter \crl - \vspan2{I} & Inclusive & \mspan3[c|]{\vspan2{O}} &\mspan3[c|] X \crlp{2,6-8} - & Exclusive & \mspan3[c|]{} &\mspan3[c|] X \crl - \vspan2{II} & Informal & \mspan3[c|] X &\mspan3[c|] X \crlp{2-8} - & Formal & \mspan6[c|] X \crl - \vspan2{III} & Informal & \vspan2{O} & X & X &\mspan2[c|] X & \vspan2{O} \crlp{2,4-7} - & Formal & &\mspan4[c|] X & \crl -}}\pdfrestore} - -\hangindent=-7.5cm \hangafter=0 -You can use \^`\vspan` with non-integer parameter too if you feel that the -result looks better, for example \^`\vspan2.1{text}`. - -\hangindent=-7.5cm \hangafter=0 -The rule width of tables and implicit width of all `\vrule`s and `\hrule`s -can be set by the command \^`\rulewidth=<dimen>`. The default value given -by \TeX/ is 0.4\,pt. - -\hangindent=-7.5cm \hangafter=-2 -The `c`, `l`, `r` and `p` are default \"declaration letters" but you can define -more such letters by `\def\_tabdeclare<letter>{<left>##<right>}`. -More about it is in technical documentation in section~\ref[table.impl]. -See the definition of the \^`\_tabdeclarec` macro, for example. - -The `:` columns boundary declarator is described in section~\ref[table.bound]. -The tables with given width can be declared by `to<size>` or `pxto<size>`. -More about it is in section~\ref[table.w]. -Many tips about tables can be seen on the site -\url{http://petr.olsak.net/optex/optex-tricks.html}. - -\label[verbatim]\secc Verbatim -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -The display verbatim text have to be surrounded by the \^`\begtt` and -\^`\endtt` couple. -The in-line verbatim have to be tagged (before and after) -by a character which is declared by -\^`\verbchar``<char>`. For example \code{\\verbchar`} -declares the character \code{`} -for in-line verbatim markup. -And you can use \code{`\\relax`} for -verbatim `\relax` (for example). -\new -Another alternative of printing in-line -verbatim text is \~`\code{<text>}` (see below). - -If the numerical register \^`\ttline` is set to the non-negative value then -display verbatim will number the lines. The first line has the number -\^`\ttline+1` and when the verbatim ends then the \^`\ttline` value is equal to the -number of the last line printed. Next \^`\begtt...`\^`\endtt` environment will follow -the line numbering. \OpTeX/ sets \^`\ttline=-1` by default. - -The indentation of each line in display verbatim is controlled by -\^`\ttindent` register. This register is set to the `\parindent` by default. -Users can change the values of the `\parindent` and \^`\ttindent` independently. - -The \^`\begtt` command starts the internal group in which the catcodes are changed. -\new -Then the \^`\everytt` tokens register is run. It is empty by default and the user can -control fine behavior by it. For example, the catcodes can be re-declared here. If -you need to define an active character in the \^`\everytt`, use \~`\adef` as in the -following example: - -\begtt \adef@{\string\endtt} -\everytt={\adef!{?}\adef?{!}} -\begtt -Each occurrence of the exclamation mark will be changed to -the question mark and vice versa. Really? You can try it! -@ -\endtt -% -The \~`\adef` command sets its parameter as active {\it after\/} -the parameter of \^`\everytt` is read. So you don't have to worry about active -categories in this parameter. - -There is an alternative to \^`\everytt` named \^`\everyintt` which is used for -in-line verbatim surrounded by an \^`\verbchar` or processed by the \~`\code` -command. - -The \^`\everytt` is applied to all \^`\begtt...`\^`\endtt` environments (if it is not -declared in a group). There are tips for such global `\everytt` definitions here: - -\begtt \adef!{\char9251 } -\everytt={\typosize[9/11]} % setting font size for verbatim -\everytt={\ttline=0} % each listing will be numbered from one -\everytt={\visiblesp} % visualization!of!spaces -\endtt - -\new -If you want to apply a special code only for one \^`\begtt...`\^`\endtt` -environment then don't set any \^`\everytt` but put desired material at the -same line where \^`\begtt` is. For example: - -\begtt \adef@{\string\endtt} -\begtt \adef!{?}\adef?{!} -Each occurrence of ? will be changed to ! and vice versa. -@ -\endtt - -The in-line verbatim surrounded by a \^`\verbchar` doesn't work in -parameter of macros and macro definitions. (It works in titles declared by -\~`\chap`, \~`\sec` etc. and in \~`\fnote`s, because these macros are -specially defined in \OpTeX/). -\new -You can use more robust command \^`\code{<text>}` in problematic -situations, but you have to escape the following characters in the <text>: -`\`, `#`, `%`, braces (if the braces are unmatched in the <text>), -and space or `^` (if there are more than one subsequent spaces or `^` in -the <text>). Examples: - -\begtt -\code{\\text, \%\#} ... prints \text, %# -\code{@{..}*&^$ $} ... prints @{..}*&^$ $ without escaping, but you can - escape these characters too, if you want. -\code{a \ b} ... two spaces between a b, the second must be escaped -\code{xy\{z} ... xy{z ... unbalanced brace must be escaped -\code{^\^M} ... prints ^^M, the second ^ must be escaped -\endtt - -You can print verbatim listing from external files by the \^`\verbinput` command. -Examples: - -\begtt -\verbinput (12-42) program.c % listing from program.c, only lines 12-42 -\verbinput (-60) program.c % print from begin to the line 60 -\verbinput (61-) program.c % from line 61 to the end -\verbinput (-) program.c % whole file is printed -\verbinput (70+10) program.c % from line 70, only 10 lines printed -\verbinput (+10) program.c % from the last line read, print 10 lines -\verbinput (-5+7) program.c % from the last line read, skip 5, print 7 -\verbinput (+) program.c % from the last line read to the end -\endtt - -\new -You can insert additional commands for \^`\verbinput` before -the first opening bracket. They are processed in the local group. -For example, `\verbinput \hsize=20cm (-) program.c`. - -The \~`\ttline` influences the line numbering by the same way as in -\~`\begtt...`\~`\endtt` environment. If \~`\ttline=-1` then real line numbers are -printed (this is the default). If \code{\\ttline<-1} then no line -numbers are printed. - -The \^`\verbinput` can be controlled by \^`\everytt`, \^`\ttindent` just like -in \~`\begtt...`\~`\endtt`. - -The \~`\begtt`...\~`\endtt` pair or \~`\verbinput` can be used for listings of -codes. Automatic syntax highlighting is possible, for example -`\begtt` \^`\hisyntax{C}` activates colors for C programs. Or -`\verbinput` \^`\hisyntax{HTML} (-) file.html` can be used for HTML or XML codes. -\OpTeX/ implements C, Python, \TeX/, HTML and XML syntax highlighting. -More languages can be declared, see the section~\ref[hisyntax]. - -If the code is read by \^`\verbinput` and there are comment lines prefixed -by two characters then -you can set them by \~`\commentchars``<first><second>`. Such comments are -fully interpreted by \TeX/ (i.e. not verbatim). -Section~\ref[verb] (page \pgref[commentchars]) says more about this feature. - -\sec Autogenerated lists -%%%%%%%%%%%%%%%%%%%%%%%% - -\secc[toc] Table of contents -%%%%%%%%%%%%%%%%%%%%%% - -The \^`\maketoc` command prints the table of contents of all \~`\chap`, \~`\sec` -and \~`\secc` used in the document. These data are read from the external `*.ref` file, so -you have to run \TeX/ more than once (typically three times if the table of -contents is at the beginning of the document). - -Typically, we don't want to repeat the name of the section \"Table of contents" -in the table of contents again. The direct usage -of \~`\chap` or \~`\sec` isn't recommended here because the table of contents -is typically not referenced to itself. You can print the unnumbered and unreferenced -title of the section like this: - -\begtt -\nonum\notoc\sec Table of Contents -\endtt -If you need a customization of the design of the TOC, read the -section~\ref[maketoc]. - -\new -If you are using a special macro in section or chapter titles -and you need different behavior of such macro in other cases then use -\^`\regmacro{<case-toc>}{<case-mark>}{<case-outline>}`. -The parameters are applied locally in given cases. The \^`\regmacro` can be -used repeatedly: then its parameters are accumulated (for more macros). -If a parameter is empty then original definition is used in given case. -For example: - -\begtt -% default value of \mylogo macro used in text and in the titles: -\def\mylogo{\leavevmode\hbox{{\Red\it My}{\setfontsize{mag1.5}\rm Lo}Go}} -% another variants: -\regmacro {\def\mylogo{\hbox{\Red My\Black LoGo}}} % used in TOC - {\def\mylogo{\hbox{{\it My}\/LoGo}}} % used in running heads - {\def\mylogo{MyLoGo}} % used in PDF outlines -\endtt - -\secc Making the index -%%%%%%%%%%%%%%%%%%%%% - -The index can be included in the document by the \^`\makeindex` macro. No external -program is needed, the alphabetical sorting is done inside \TeX/ at macro -level. - -The \^`\ii` command (insert to index) declares the word separated by the space -as the index item. This declaration is represented as an invisible item on the -page connected to the next visible word. The page number of the page where -this item occurs is listed in the index entry. So you can type: - -\begtt -The \ii resistor resistor is a passive electrical component ... -\endtt - -You cannot double the word if you use the \^`\iid` instead of \^`\ii`: - -\begtt -The \iid resistor is a passive electrical component ... -or: -Now we'll deal with the \iid resistor . -\endtt - -Note that the dot or comma has to be separated by space when \^`\iid` is -used. This space (before dot or comma) is removed by the macro in -the current text. - -The multiple-words entries are commonly arranged in the index as follows: - -\medskip - -linear~dependency 11, 40--50 - ---- independency 12, 42--53 - ---- space 57, 76 - ---- subspace 58 - -\medskip - -To do this you have to declare the parts of the index entries by the `/` separator. -Example: - -\begtt -{\bf Definition.} -\ii linear/space,vector/space -{\em Linear space} (or {\em vector space}) is a nonempty set of... -\endtt - -The number of the parts of one index entry (separated by `/`) is unlimited. Note, that you can -spare your typing by the comma in the \~`\ii` parameter. The previous example -is equivalent to `\ii linear/space \ii vector/space`~. - -Maybe you need to propagate to the index the similar entry to the -linear/space in the form of space/linear. You can do this by the shorthand `,@` -at the end of the \~`\ii` parameter. Example: - -\begtt -\ii linear/space,vector/space,@ -is equivalent to: -\ii linear/space,vector/space \ii space/linear,space/vector -\endtt - -If you really need to insert the space into the index entry, write `~`. - -The \~`\ii` or \~`\iid` commands can be preceded by \^`\iitype` `<letter>`, then such -reference (or more references generated by one \~`\ii`) has the specified type. -The page numbers of such references should be formatted -specially in the index. \OpTeX/ implements only \^`\iitype` `b`, -\^`\iitype` `i` and \^`\iitype` `u`: -the page number in bold or in italics or underlined is printed -in the index when these types are used. The default index type is empty, which -prints page numbers in normal font. The \TeX/book index is a good example. - -The \^`\makeindex` creates the list of alphabetically sorted index entries -without the title of the section and without creating more columns. \OpTeX/ -provides other macros \^`\begmulti` and \^`\endmulti` for more columns: - -\begtt \catcode`\<=13 -\begmulti <number of columns> -<text> -\endmulti -\endtt -The columns will be balanced. The Index can be printed by the following -code: - -\begtt -\sec Index -\begmulti 3 \makeindex \endmulti -\endtt - -Only \"pure words" can be propagated to the index by the \~`\ii` command. It -means that there cannot be any macro, \TeX/ primitive, math selector, etc. -But there is another possibility to create such a complex index entry. Use -\"pure equivalent" in the \~`\ii` parameter and map this equivalent to a -real word that is printed in the index. Such mapping is done by -\^`\iis` command. Example: - -\begtt -The \ii chiquadrat $\chi$-quadrat method is ... -If the \ii relax `\relax` command is used then \TeX/ is relaxing. -... -\iis chiquadrat {$\chi$-quadrat} -\iis relax {\code{\\relax}} -\endtt -% -The \^`\iis` `<equivalent> {<text>}` creates one entry in the \"dictionary -of the exceptions". The sorting is done by the <equivalent> but the -<text> is printed in the index entry list. - -The sorting rules when \^`\makeindex` runs depends on the current language. -See section~\ref[lang] about languages selection. - -\secc Bib\TeX/ing -%%%%%%%%%%%%%%%% - -The command \^`\cite[<label>]` (or -\hbox{\^`\cite[<label-1>,<label-2>,...,<label-n>]`}) -creates the citation in the form [42] (or [15,~19,~26]). -If \^`\shortcitations` is declared at the beginning of the document then -continuous sequences of numbers are re-printed like this: -\hbox{[3--5,~7,~9--11]}. If -\^`\sortcitations` is declared then numbers generated by one \^`\cite` command -are sorted upward. - -If \^`\nonumcitations` is declared then the marks instead of numbers are generated -depending on the used bib-style. For example, the citations look like -[Now08] or [Nowak, 2008]. - -The \^`\rcite[<labels>]` creates the same list as \^`\cite[<labels>]` but without -the outer brackets. Example: `[\rcite[tbn], pg.~13]` creates [4,~pg.~13]. - -The \^`\ecite[<label>]{<text>}` prints the `<text>` only, but the entry labeled -<label> is decided as to be cited. If \~`\hyperlinks` is used then <text> -is linked to the references list. - -You can define alternative formating of \^`\cite` command. Example: - -\begtt \catcode`\<=13 -\def\cite[#1]{(\rcite[#1])} % \cite[<label>] creates (27) -\def\cite[#1]{$^{\rcite[#1]}$} % \cite[<label>] creates^{27} -\endtt - -The numbers printed by \^`\cite` correspond to the same numbers generated in -the list of references. There are two possibilities to generate this -references list: - -\begitems -* Manually using \~`\bib[<label>]` commands. -* By \~`\usebib/<type> (<style>) <bib-base>` command which reads `*.bib` - files directly. -\enditems - -\new -Note that another two possibilities documented in OPmac (using external -Bib\TeX/ program) isn't supported because Bib\TeX/ is an old program that does not -support Unicode. And Biber seems to be not compliant with Plain \TeX. - -\medskip\noindent -{\bf References created manually using \^`\bib[<label>]` command.} - -\begtt -\bib [tbn] P. Olšák. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 1997. -\bib [tst] P. Olšák. {\it Typografický systém \TeX.} - 269~s. Praha: CSTUG, 1995. -\endtt - -If you are using \~`\nonumcitations` then you need to declare the <marks> -used by \~`\cite` command. To do it you must use long form of the \^`\bib` -command in the format \^`\bib[<label>] = {<mark>}`. The spaces around -equal sign are mandatory. Example: - -\begtt -\bib [tbn] = {Olšák, 2001} - P. Olšák. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 2001. -\endtt - -\noindent -{\bf Direct reading of `.bib` files} is possible by \^`\usebib` macro. -This macro reads and uses macro package `librarian.tex` by Paul Isambert. -The usage is: - -\begtt \catcode`\<=13 -\usebib/c (<style>) <bib-base> % sorted by \cite-order (c=cite), -\usebib/s (<style>) <bib-base> % sorted by style (s=style). -% example: -\nocite[*] \usebib/s (simple) op-biblist % prints all from op-biblist.bib -\endtt - -The <bib-base> is one or more `*.bib` database source files (separated by -spaces and without extension) and the <style> is the part of the filename -`bib-<style>.opm` where the formatting of the references list is -defined. \OpTeX/ supports `simple` or `iso690` styles. The features of -the `iso690` style is documented in the section~\ref[isobib] in detail. -The \^`\usebib` command is more documented in section~\ref[usebib]. - -Not all records are printed from <bib-base> files: the command \^`\usebib` -selects only such bib-records which were used in \~`\cite` or \^`\nocite` -commands in your document. The \^`\nocite` behaves as \~`\cite` but prints -nothing. It tells only that the mentioned bib-record should be printed in the -reference list. If \^`\nocite[*]` is used then all records from <bib-base> -are printed. - -\sec Graphics -%%%%%%%%%%%%% - -\secc Colors -%%%%%%%%%%% - -\OpTeX/ provides a small number of color selectors: -{\Blue `\Blue`}, -{\Red `\Red`}, -{\Brown `\Brown`}, -{\Green `\Green`}, -{\Yellow `\Yellow`}, -{\Cyan `\Cyan`}, -{\Magenta `\Magenta`}, -{`\White`}, -{\Grey `\Grey`}, -{\LightGrey `\LightGrey`} and -`\Black`. User can define more -such selectors by setting four CMYK components -\new -or three RGB components. For example - -\begtt -\def \Orange {\setcmykcolor{0 0.5 1 0}} -\def \Purple {\setrgbcolor{1 0 1}} -\endtt - -\new -The command \^`\morecolors` reads more definitions of color selectors from -the \LaTeX/ file `x11nam.def`. -There are about 300 color names like -`\DeepPink`, `\Chocolate` etc. If there are numbered variants of the same -name, then the letters B, C, etc. are appended to the name in \OpTeX/. For example -`\Chocolate` is Chocolate1, `\ChocolateB` is Chocolate2 etc. - -\new -The color selectors work locally in groups by default but with limitations. See -the technical documentation, section~\ref[colors] for more information. - -The basic colors \^`\Blue`, \^`\Red`, \^`\Cyan`, \^`\Yellow` etc.\ are defined -with CMYK components using \^`\setcmykcolor`. -On the other hand, you can define a color with three -RGB components and \^`\morecolors` defines such RGB colors. -By default, the color model isn't converted but only stored to -PDF output for each used color. Thus, there may be a mix of color -models in the PDF output which is not a good idea. You can overcome this -problem by declaration \^`\onlyrgb` or \^`\onlycmyk`. Then only the selected color -model is used for PDF output and if a used color is declared by another color -model then it is converted. -The \^`\onlyrgb` creates colors more bright (usable for computer -presentations). On the other hand, CMYK makes colors more true\fnote -{Printed output is more equal to the monitor preview especially if you are -using ICC profile for your printer.} -for printing. - -\new -You can define your color by a linear combination of previously defined colors using -\^`\colordef`. For example: - -\begtt -\colordef \myCyan {.3\Green + .5\Blue} % 30 % green, 50 % blue, 20% white -\colordef \DarkBlue {\Blue + .4\Black} % Blue mixed with 40 % of black -\colordef \myGreen{\Cyan+\Yellow} % exact the same as \Green -\colordef \MyColor {.3\Orange+.5\Green+.2\Yellow} -\endtt -% -The linear combination is done in CMYK subtractive color space by default -(RGB colors used in \^`\colordef` argument are converted first). -If the resulting component is greater than 1 then it is truncated to 1. -If a convex linear combination (as in the last example above) is used then it -emulates color behavior on a painter's palette. -You can use \^`\rgbcolordef` instead of \^`\colordef` if you want to mix colors -in the additive RGB color space. - -\def\coloron#1#2#3{% - \setbox0=\hbox{{#2#3}}\leavevmode - \localcolor \rlap{#1\strut \vrule width\wd0}\box0 -} -The following example defines the macro for the -\coloron\Yellow\Brown{colored text on the colored background}. Usage: -`\coloron<background><foreground>{<text>}` - -The `\coloron` can be defined as follows: - -\begtt -\def\coloron#1#2#3{% - \setbox0=\hbox{{#2#3}}% - \leavevmode \rlap{#1\strut \vrule width\wd0}\box0 -} -\coloron\Yellow\Brown{The brown text on the yellow background} -\endtt - -\secc Images -%%%%%%%%%%% - -The \^`\inspic` `{<filename>.<extension>}` or -\^`\inspic` `<filename>.<extension><space>` -inserts the picture stored in -the graphics file with the name `<filename>.<extension>` to the document. -You can set the picture width by \^`\picw=<dimen>` -before \^`\inspic` command which declares the width of the picture. -The image files can be in the PNG, JPG, JBIG2 or PDF format. - -The \^`\picwidth` is an equivalent register to `\picw`. Moreover, there is an -\^`\picheight` register which denotes the height of the picture. If both -registers are set then the picture will be (probably) deformed. - -The image files are searched in \^`\picdir`. This token list is empty -by default, this means that the image files are searched in the -current directory. Example: \^`\picdir={img/}` supposes that image files are -in `img` subdirectory. Note: the directory name must end by `/` in -the \^`\picdir` declaration. - -Inkscape\fnote -{A powerful and free Wysiwyg editor for creating vector graphics.} -is able to save a picture to PDF and labels of the picture to another -file\fnote -{Chose \"Omit text in PDF and create LaTeX file" option.}. -This second file should be read by \TeX/to print labels -in the same font as document font. \OpTeX/ supports this feature by -\^`\inkinspic` `{<filename>.pdf}` command. It reads and displays -both: PDF image and labels generated by Inkscape. - -If you want to create vector graphics (diagrams, schema, geometry -skicing) then you can do it by Wysiwyg graphics editor (Inkscape, Geogebra for -example), export the result to PDF and include it by \^`\inspic`. -If you want to \"program" such pictures then Tikz package is recommended. -It works in Plain \TeX/ and \OpTeX. - -\secc PDF transformations -%%%%%%%%%%%%%%%%%%%%%%%% - -All typesetting elements are transformed by linear -transformation given by the current transformation matrix. The -`\pdfsetmatrix` `{<a> <b> <c> <d>}` command makes the internal multiplication -with the current matrix so linear transformations can be composed. -One linear transformation given by the `\pdfsetmatrix` above transforms -the vector $[0,1]$ to [<a>,\,<b>] and $[1,0]$ to [<c>,\,<d>]. -The stack-oriented commands `\pdfsave` and `\pdfrestore` gives a possibility of -storing and restoring the current transformation matrix and the position of the current point. -This position has to be the same from \TeX{}'s point of -view as from the transformation point of view when `\pdfrestore` is processed. -Due to this fact the `\pdfsave\rlap{<transformed text>}\pdfrestore` -or something similar is recommended. - -\OpTeX/ provides two special transformation macros -\^`\pdfscale` and \^`\pdfrotate`: - -\begtt \catcode`\<=13 -\pdfscale{<horizontal-factor>}{<vertical-factor>} -\pdfrotate{<angle-in-degrees>} -\endtt - -These macros simply call the properly `\pdfsetmatrix` command. - -It is known that the composition of transformations is not commutative. It -means that the order is important. You have to read the transformation -matrices from right to left. Example: - -\begtt -First: \pdfsave \pdfrotate{30}\pdfscale{-2}{2}\rlap{text1}\pdfrestore - % text1 is scaled two times and it is reflected about vertical axis - % and next it is rotated by 30 degrees left. -second: \pdfsave \pdfscale{-2}{2}\pdfrotate{30}\rlap{text2}\pdfrestore - % text2 is rotated by 30 degrees left then it is scaled two times - % and reflected about vertical axis. -third: \pdfsave \pdfrotate{-15.3}\pdfsetmatrix{2 0 1.5 2}\rlap{text3}% - \pdfrestore % first slanted, then rotated by 15.3 degrees right -\endtt -% -\par\nobreak\bigskip\smallskip -This gives the following result. -First: \pdfsave \pdfrotate{30}\pdfscale{-2}{2}\rlap{text1}\pdfrestore -second: \pdfsave \pdfscale{-2}{2}\pdfrotate{30}\rlap{text2}\pdfrestore -third: \pdfsave \pdfrotate{-15.3}\pdfsetmatrix{2 0 1.5 2}\rlap{text3}\pdfrestore -\par\nobreak\bigskip\penalty0%\bigskip - -You can see that \TeX/ knows nothing about dimensions of transformed material, -it treats it as with a zero dimension object. -\new -The \^`\transformbox{<transformation>}{<text>}` -macro solves the problem. This macro puts the transformed -material into a box with relevant dimensions. The <transfromation> parameter -includes one or more transformation commands `\pdfsetmatrix`, `\pdfscale`, -`\pdfrotate` with their parameters. The <text> is transformed text. - -Example: \~`\frame{\transformbox{\pdfscale{1}{1.5}\pdfrotate{-10}}{moj}}` -creates \frame{\transformbox{\pdfscale{1}{1.5}\pdfrotate{-10}}{moj}}. - -The \^`\rotbox{<deg>}{<text>}` is shortcut for -\^`\transformbox{\pdfrotate{<deg>}}{<text>}`. - -\secc Ovals, circles -%%%%%%%%%%%%%%%%%%%% - -\new -The \^`\inoval{<text>}` creates a box like this: \inoval{text}. -Multiline text can be put in an oval by the command \^`\inoval{\vbox{<text>}}`. -Local settings can be set by -\^`\inoval[<settings>]{<text>}` or you can re-declare global settings by -\^`\ovalparams={<settings>}`. The default settings are: - -\begtt -\ovalparams={\roundness=2pt % diameter of circles in the corners - \fcolor=\Yellow % color used for filling oval - \lcolor=\Red % line color used in the border - \lwidth=0.5bp % line width in the border - \shadow=N % use a shadow effect - \overlapmargins=N % ignore margins by surrounding text - \hhkern=0pt \vvkern=0pt} % left-righ margin, top-bottom margin -\endtt -The total distance from text to oval boundary is `\hhkern+\roundness` at the left and right -sides and -`\vvkern+\roundness` at the top and bottom sides of the text. - -If you need to set a parameters for the <text> (color, size, font etc.), -put such setting right in front of the <text>: -\^`\inoval{<text settings><text>}`. - -\new -The \^`\incircle[\ratio=1.8]{<text>}` creates a box like this \incircle[\ratio=1.8]{text}. -The \^`\ratio` parameter means width/height. The usage is analogical like for oval. -The default parameters are - -\begtt -\circleparams={\ratio=1 \fcolor=\Yellow \lcolor=\Red \lwidth=0.5bp - \shadow=N \ignoremargins=N \hhkern=2pt \vvkern=2pt} -\endtt - -\new -The macros \^`\clipinoval` `<x> <y> <width> <height> {<text>}` -and \^`\clipincircle` (with the same parameters) -print the `<text>` when a clipping path (oval or cirle with given -`<with>` and `<height>` shifted its center by `<x>` to right and by `<y>` to up) -is used. -The `\roundness=5mm` is default for \^`\clipinoval` and user can change it. -Example: - -\begtt -\clipincircle 3cm 3.5cm 6cm 7cm {\picw=6cm \inspic{myphoto.jpg}} -\endtt - -\secc Putting images and texts wherever - -\new -The \^`\puttext` `<x> <y> {<text>}` puts the `<text>` shifted by `<x>` right and by -`<y>` up from the current point of typesetting and does not change the -position of the current point. Assume a coordinate system with origin in the -current point. Then \^`\puttext` `<x> <y> {<text>}` puts the text at the -coordinates `<x>`, `<y>`. More exactly the left edge of its baseline is at that -position. - -\new -The \^`\putpic` `<x> <y> <width> <height> {<image-file>}` puts an image -given by `<image-file>` (including extension) of given -`<width>` and `<height>` at given position (its left-bottom corner). -You can write \^`\nospec` instead `<width>` or `<height>` if this parameter -is not specified. - -\sec Others -%%%%%%%%%%% - -\secc[lang] Using more languages -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\OpTeX/ prepares hyphenation patterns for all languages if such patterns are -available in your \TeX/ system. -\new -Only USenglish patterns (original from Plain \TeX/) are preloaded. -Hyphenation patterns of all other languages are loaded on demand when you first use -the `\<iso-code>lang` command in your document. -For example \^`\delang` for German, \^`\cslang` for -Czech, \^`\pllang` for Polish. The <iso-code> is a shortcut -of the language (mostly from ISO 639-1). -You can list all available languages by \^`\langlist` -macro. This macro prints now: - -\medskip -{\typosize[8.5/11.5]\emergencystretch=4em \hbadness=4000 -\noindent \langlist -\par} -\medskip - -\new -For compatibility with e-plain macros, there is the command -\^`\uselanguage{<language>}`. The parameter <language> is long-form of -language name, i.e.\ \^`\uselanguage{Czech}` works the same as \^`\cslang`. -The \^`\uselanguage` parameter is case insensitive. - -For compatibility with \csplain/, there are macros \^`\ehyph`, \^`\chyph`, -\^`\shyph` which are equivalent to \^`\enlang`, \^`\cslang` and \^`\sklang`. - -You can switch between language patterns by `\<iso-code>lang` commands mentioned -above. Default is \^`\enlang`. - -\OpTeX/ generates three phrases used for captions and titles in technical -articles or books: \"Chapter", \"Table" and \"Figure". These phrases need to be known -in used language and it depends on the previously used language selectors -`\<iso-code>lang`. \OpTeX/ declares these words only for few languages: -\new -Czech, German, Spanish, French, Greek, Italian, Polish, Russian, Slovak and -English, If you need to use these words in other languages or you want to -auto-generate more words in your macros, then you can declare it by -\~`\sdef` or \^`\_langw` commands as shown in section~\ref[langphrases]. - -The \~`\makeindex` command needs to know the sorting rules used in your language. -\OpTeX/ defines only a few language rules for sorting: Czech, -Slovak and English. How to declare sorting rules for more languages are -described in the section~\ref[makeindex]. - -If you declare `\<iso-code>quotes`, then the control sequences `\"` and `\'` -should be used like this: `\"<quoted text>"` or `\'<quoted text>'` -(note that the terminating character is the same but it isn't escaped). -This prints language-dependent normal or alternative quotes around -<quoted text>. The language is specified by <iso-code>. \OpTeX/ declares -quotes only for Czech, German, Spanish, French, Greek, Italian, Polish, -Russian, Slovak and English (\^`\csquotes`, \^`\dequotes`, \dots, \^`\enquotes`). -You can simply define your own quotes as shown in section~\ref[langphrases]. -The `\"` is used for quotes visually more similar to the `"` character which -can be primary quotes or secondary quotes depending on the language rules. -Maybe you want to alternate the meaning of these two types of quotes. Use -`\<isocode>quotes\altquotes` in such case. - -\secc[styles] Pre-defined styles -%%%%%%%%%%%%%%%%%%%%%%% - -\OpTeX/ defines three style-declaration macros \~`\report`, \~`\letter` and -\~`\slides`. You can use them at the beginning of your document if you are -preparing these types of documents and you don't need to create your own -macros. - -The \^`\report` declaration is intended to create reports. It -sets default font size to 11\,pt and `\parindent` (paragraph indentation) to 1.2\,em. -The `\tit` macro uses smaller font because we assume that \"chapter level" -will be not used in reports. The first page has no page number, but the next pages -are numbered (from number~2). Footnotes are numbered from one in the whole -document. The macro `\author <authors><end-line>` can be used when -\^`\report` is declared. It prints `<authors>` in italics at the center of the -line. You can separate authors by `\nl` to more lines. - -The \^`\letter` declaration is intended to create letters. -See the files `op-letter-*.tex` for examples. -The \^`\letter` style sets default -font size to 11\,pt and `\parindent` to 0\,pt. It sets half-line space -between paragraphs. The page numbers are not printed. The \^`\subject` macro -can be used, it prints the word \"Subject:" or \"Věc" (or something else -depending on current language) in bold. Moreover, the \^`\address` macro -can be used when \^`\letter` is declared. The usage of the \^`\address` macro -looks like: - -\begtt \catcode`\<=13 -\address - <first line of address> - <second line of address> - <etc.> - <empty line> -\endtt - -It means that you need not use any special mark at the end of lines: the ends -of lines in the source file are the same as in printed output. The -\^`\address` macro creates `\vtop` with address lines. The width of such -`\vtop` is equal to the widest line used in it. So, you can use -`\hfill\address...` to put the address box to the right side of the -document. Or you can use `<prefixed text>\address...` to put -`<prefixed text>` before the first line of the address. - -The \^`\slides` style creates a simple presentation slides. See an example -in the file `op-slides.tex`. Run `optex op-slides.tex` and see the documentation of -\^`\slides` style in the file `op-slides.pdf`. - -Analogical declaration macro `\book` is not prepared. Each book needs -individual typographical care. You need to create specific macros for -design. - -\secc Loading other macro packages -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -You can load more macro packages by `\input{<file-name>}` or by -\^`\load[<file-names>]`. The first case (`\input`) is \TeX/ primitive command, it can be -used in the alternative old syntax `\input <filename><space>` too. The -second case (\^`\load`) allows specifying a comma-separated list of included files. -Moreover, it loads each macro file only once, it sets -temporarily standard category codes during loading and it tries to -load `<filename>.opm` or `<filename>.tex` or `<filename>`, the first occurence -wins. Example: -\begtt -\load [qrcode, tikz] -\endtt -% -does `\input qrcode.opm` \,and `\input tikz.tex` \,and it saves -local information about the fact that these file names -`qrcode` and `tikz` were already used, i.\,e. next \^`\load` will skip them. - -It is strongly recommended to use the `\load` macro for loading external -macros if you need them. On the other hand, if your source document is structured -to more files (with individual chapters or sections), use simply the `\input` primitive. - -The macro packages intended to \OpTeX/ have the name `*.opm`. -The following packages are distributed as part of \OpTeX/: -\begitems -* `qrcode.opm` enables to create QR codes. -* `vlna.opm` enables to protect of one-letter prepositions and more things automatically. -* `emoji.opm` defines `\emoji{<name>}` command for colored emoticons. -* `plain-at.opm` defines the old names from plain \TeX/. -\enditems -See the directory `optex/pkg/` and these files for more information about -them. - -\secc Lorem ipsum dolor sit -%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\new -A designer needs to concentrate on the design of the output and maybe he/she -needs material for testing macros. There is the possibility to generate a -neutral text for such experiments. Use \^`\lorem[<number>]` or -\^`\lorem[<from>-<to>]`. It prints a paragraph (or paragraphs) with neutral -text. The numbers <number> or <from>, <to> must be in the range 1 to 150 -because there are 150 paragraphs with neutral text prepared for you. -The \^`\lipsum` macro is equivalent to \^`\lorem`. Example: \^`\lipsum[1-150]` -prints all prepared paragraphs. - -\secc Logos -%%%%%%%%%% - -\new -The control sequences for typical logos can be terminated by optional `/` -which is ignored when printing. This makes logos more legible in the source file: - -\begtt -We are using \TeX/ because it is cool. \OpTeX/ is better than \LaTeX. -\endtt - -\secc The last page -%%%%%%%%%%%%%%%%%%% - -The number of the last page (it may be different from the number of pages) is -expanded by \^`\lastpage` macro. It expands to `?` in first \TeX/ run and to -the last page in next \TeX/ runs. - -There is an example for footlines in the format \"current page / last page": - -\begtt -\footline={\hss \fixedrm \folio/\lastpage \hss} -\endtt - -\new -The \^`\lastpage` expands to the last \^`\folio` which is a decimal -number or Roman numeral (when \^`\pageno` is negative). If you need to know -the total pages used in the document, use \^`\totalpages` macro. It expands to -zero (in first \TeX/ run) or to the number of all pages in the document -(in next \TeX/ runs). - -\secc Use \OpTeX/ -%%%%%%%%%%%%%%%%% - -\new -The command \^`\useOpTeX` (or \^`\useoptex`) does nothing in \OpTeX/ but it causes -an error (undefined control sequence) when another format is used. You can -put it as the first command in your document: - -\begtt -\useOpTeX % we are using OpTeX format, no LaTeX :) -\endtt - -\sec Summary -%%%%%%%%%%%% - -\def\ttref#1'{\ea\~\ea`\csname#1\endcsname`} - -\begtt \typosize[9/11]\adef&{\kern.25em}\adef~#1'{\ea\~\ea`\csname#1\endcsname`} -~tit' Title (terminated by end of line) -~chap' Chapter Title (terminated by end of line) -~sec' Section Title (terminated by end of line) -~secc' Subsection Title (terminated by end of line) - -~maketoc' % table of contents generation -~ii' item1,item2 % insertion the items to the index -~makeindex' % the index is generated - -~label' [labname] % link target location -~ref' [labname] % link to the chapter, section, subsection, equation -~pgref' [labname] % link to the page of the chapter, section, ... - -~caption'/t % a numbered table caption -~caption'/f % a numbered caption for the picture -~eqmark' % a numbered equation - -~begitems' % start a list of the items -~enditems' % end of list of the items -~begblock' % start a block of text -~endblock' % end of block of text -~begtt' % start a verbatim text -~endtt' % end verbatim text -~verbchar' X % initialization character X for in-text verbatim -~code' % another alternative for in-text verbatim -~verbinput' % verbatim extract from the external file -~begmulti' num % start multicolumn text (num columns) -~endmulti' % end multicolumn text - -~cite' [labnames] % refers to the item in the lits of references -~rcite' [labnames] % similar to \cite but [] are not printed. -~sortcitations' ~shortcitations' ~nonumcitations' % cite format -~bib' [labname] % an item in the list of references -~usebib'/? (style) bib-base % direct using of .bib file, ? in {s,c} - -~load' [filenames] % loadaing macro files -~fontfam' [FamilyName] % selection of font family -~typosize' [font-size/baselineskip] % size setting of typesetting -~typoscale' [factor-font/factor-baselineskip] % size scaling -~thefontsize' [size] ~thefontscale' [factor] % current font size - -~inspic' file.ext % insert a picture, extensions: jpg, png, pdf -~table' {rule}{data} % macro for the tables like in LaTeX - -~fnote' {text} % footnote (local numbering on each page) -~mnote' {text} % note in the margin (left or right by page number) - -~hyperlinks' {color-in}{color-out} % PDF links activate as clickable -~outlines' {level} % PDF will have a table of contents in the left tab - -~magscale'[factor] % resize typesetting, line/page breaking unchanged -~margins'/pg format (left, right, top, bottom)unit % margins setting - -~report' ~letter' ~slides' % style declaration macros -\endtt - -\sec API for macro writers -%%%%%%%%%%%%%%%%%%%%%%%%%% - -All \TeX/ primitives and almost all \OpTeX/ macros are accesible by two -names: `\foo` (public or user name space) and `\_foo` (private name space). -For example `\hbox` and `\_hbox` means the same \TeX/ primitive. More about -it is documented in section~\ref[prefixed]. - -If this manual refers `\foo` then `\_foo` equivalent exists too. For example, -we mention the `\addto` macro below. The `\_addto` equivalent exists too, but it -is not explicitly mentioned here. If we refer only `\_foo` then its public -equivalent does not exist. For example, we mention the `\_codedecl` macro below, so -this macro is not available as `\codedecl`. - -If you are writing a document or macros specific for the document, then use -simply user namespace (`\foo`). If you are writing more general macros, -then use private namespace (`\_foo`), but you should declare your own namespace -by \~`\_namespace` macro and you have to follow the naming discipline described in -section~\ref[pkg-namespace]. - -The alphabetically sorted list of macros typically usable for macro writers follows. -More information about such macros can be found in the technical documentation. -You can use hyperlinks here in order to go to the appropriate place of the technical -documentation. - -\medskip \noindent -\^`\addto`` \macro{<text>}` adds <text> at the end of `\macro` body.\nl -\^`\adef` `<char>{<body>}` defines <char> active character with meaning <body>.\nl -\^`\afterfi` `{<text>}<ignored>\fi` expands to `\fi<text>`.\nl -\^`\bp`` {<dimen expression>}` expands \TeX/ dimension to decimal number in `bp` without unit.\nl -\~`\_codedecl`` <sequence> {<info>}` is used at beginning of macro files.\nl -\~`\colordef`` \macro {<mix of colors>}` declares `\macro` as color switch.\nl -\^`\cs` `{<string>}` expands `\<string>`.\nl -\~`\_doc` `...` \~`\_cod` encloses documenation text in the macro code.\nl -\^`\eoldef`` \macro #1{<body>}` defines `\macro` with parameter separated to end of line.\nl -\~`\_endcode` closes the part of macro code in macro files.\nl -\~`\_endnamespace` closes name space declared by \~`\_namespace`.\nl -\~`\eqbox`` [<label>]{<text>}` creates `\hbox{<text>}` with common width across whole document.\nl -\^`\expr`` {<expression>}` expands to result of the <expression> with decimal numbers.\nl -\~`\fontdef`` \f {<font spec.>}` declares `\f` as font switch.\nl -\~`\fontlet` `\fa=\fb <sizespec.>` declares `\fa` as the same font switch - like `\fb` at given <sizespec.>.\nl -\^`\foreach` `<list>\do <parameters>{<what>}` is exapandable loop over <list>.\nl -\^`\foreachdef` `\macro <parameters>{<what>}` declares expandable `\macro` as loop over <list>.\nl -\^`\fornum` `<from>..<to>\do {<what>}` is expanadable loop with numeric variable.\nl -\^`\incr` `<counter>` increases and \^`\decr` `<counter>` decreases `<counter>` by one globally.\nl -\^`\ignoreit` `<one>`, \^`\ignoresecond` `<one><two>` ignores given parameter.\nl -`\expandafter` \^`\ignorept` `\the<dimen>` expands to decimal number <dimen> without `pt`.\nl -\~`\isempty`, \~`\istoksempty`, \~`\isequal`, \~`\ismacro`, \~`\isdefined`, \~`\isinlist` -\~`\isfile`, \~`\isfont` do various tests. Example: \~`\isinlist\list{<text>}\iftrue` does - `\iftrue` if <text> is in `\list`.\nl -\^`\isnextchar`` <char>{<text1>}{<text2>}` performs <text1> if next - character is <char>, else <text2>.\nl -\~`\kv` `{<key>}` expands to value when key-value parameters are used.\nl -\^`\loop` `...` \^`\repeat` is classical Plain \TeX/ loop.\nl -\^`\mathstyles`` {<math list>}` enables to create macros dependent on current math style.\nl -\~`\_namespace`` {<pkg>}` declares name space used by package writers.\nl -\^`\newcount`, \^`\newdimen` etc. are classical Plain \TeX/ allocators.\nl -\^`\newif` `\iffoo` declares boolean `\iffoo` as in Plain \TeX/.\nl -\^`\_newifi` `\_iffoo` declares boolean `\_iffoo`.\nl -\^`\opinput`` {<filename>}` reads file like `\input` but with standard catcodes.\nl -\^`\optdef`` \macro [<opt-default>] <parameters>{<body>}` defines `\macro` with [opt.parameter].\nl -\^`\opwarning` `{<text>}` prints <text> to the terminal and .log file as warning.\nl -\~`\private`` <sequence> <sequence> ... ;` declares <sequence>s for private name space.\nl -\~`\public`` <sequence> <sequence> ... ;` declares <sequence>s for public name space.\nl -\~`\readkv` `\macro` reads parameters from `\macro` in key-value format.\nl -\^`\replstring`` \macro{<stringA>}{<stringB>}` replaces all <stringA> to <stringB> in `\macro`.\nl -\^`\sdef` `{<string>}<parameters>{<body>}` behaves like `\def\<string><parameters>{<body>}`.\nl -\^`\setctable` and \^`\restorectable` manipulate with stack of catcode tables.\nl -\^`\slet` `{<stringA>}{<stringB>}` behaves like `\let\<stringA>=\<stringB>`\nl -\^`\sxdef` `{<string>}<parameters>{<body>}` behaves like `\xdef\<string><parameters>{<body>}`.\nl -\^`\trycs`` {<string>}{<text>}` expands `\<string>` if it is defined else expands <text>.\nl -\^`\useit` `<one>`, \^`\usesecond` `<one><two>` uses given parameter.\nl -\^`\wlog`` {<text>}` writes <text> to .log file.\nl -\^`\wterm`` {<text>}` writes <text> to the terminal and .log file.\nl -\^`\xargs`` <what> <token> <token> ... ;` repeats <what><token> for each <token>.\nl -\unpenalty\unskip - -\sec Compatibility with Plain \TeX/ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -All macros of Plain \TeX/ are re-written in \OpTeX/. Common macros should -work in the same sense as in original Plain \TeX. Internal control sequences -like `\p@` or `\f@@t` are removed and mostly replaced by control sequences -prefixed by `_` (like `\_this`). If you need to use the basic set of old Plain -\TeX/ control sequences like `\p@` (for example you are reading an old macro file), -use `\load[plain-at]`. - -All primitives and common macros have two -control sequences with the same meaning: in prefixed and unprefixed form. -For example `\hbox` is equal to `\_hbox`. -Internal macros of \OpTeX/ have and use only prefixed form. User should use -unprefixed forms, but prefixed forms are accessible too because the `_` is -set as a letter category code globally (in macro files and users document too). User -should re-define unprefixed forms of control sequences without worries that -something internal will be broken (only the sequence `\par` cannot be -re-defined without change of internal \TeX/ behavior because it is -hard-coded in \TeX/, unfortunately). - -\new -The Latin Modern 8bit fonts instead Computer Modern 7bit fonts are -preloaded in the format, but only a few ones. The full family set is ready to -use after the command \~`\fontfam[LMfonts]` which reads the fonts in OTF -format. - -\new -Plain \TeX/ defines `\newcount`, `\bye` etc. as `\outer` macros. \OpTeX/ -doesn't set any macro as `\outer`. Macros like `\TeX`, `\rm` are defined as -`\protected`. - -\new -The text accents macros `\"`, `\'`, `\v`, `\u`, `\=`, `\^`, `\.`, `\H`, -`\~`, \code{\\`}, `\t` are undefined\fnote -{The math accents macros like `\acute`, `\bar`, `\dot`, `\hat` still work.} -in \OpTeX/. Use real -letters like á, ř, ž in your source document instead of these old accents macros. -If you really want to use them, you can initialize them by the \^`\oldaccents` -command. But we don't recommend it. - -\new -The default paper size is not set as the letter with 1\,in margins but as A4 with -2.5\,cm margins. You can change it, for example by -\^`\margins/1 letter (1,1,1,1)in`. This example sets the classical Plain \TeX/ -page layout. - -\new -The origin for the typographical area is not at the top left 1\,in 1\,in coordinates -but at the top left paper corner exactly. For example, `\hoffset` includes directly left -margin. - -The tabbing macros `\settabs`\iindex{settabs} and `\+` (from Plain \TeX/) -are not defined in \OpTeX/ because they are obsolete. But you can use the -\ulink[http://petr.olsak.net/optex/optex-tricks.html\#tabs]{\OpTeX/ trick 0021} -if you really need such feature. - -The `\sec` macro is reserved for sections but original Plain \TeX/ declares this -control sequence for math secans. - -\enddocument - - -\sec Dependencies -%%%%%%%%%%%%%%%%% - -When `optex.fmt` is created then the following must be installed - -\begitems -* The `\luatex` program. -* Latin moder font metrics - `ec-lmr10.tfm`, `ec-lmbx10.tfm`, `ec-lmri10.tfm`, - `ec-lmbxi10.tfm`, `ec-lmtt10.tfm` (for basic text font initializing). -* Computer rmodern font metrics - `cmr10.tfm`, `cmmi10.tfm`, `cmsy10.tfm`, `cmex10.tfm` (for basic math - initializing). If there are more Computer Modern fonts then they are read - too. -* The file `hyphen.tex` form plain \TeX. -\enditems - -When `\fontfam` is used then the ability of Unicode fonts reading -is initialized using Lua scripts: `ltluatex.lua` (from \LaTeX/ package), -`luaotfload-main.lua` and more 20 similar `.lua` files (from `luaotfload` -package). - -When a font family is needed using `\fontfam` then such font family must be -installed in the OTF format otherwise, the `\fontfam` command is ignored -(only warning about no-existent font family is printed). - -When `\cslang`, `\delang` etc. commands are used in the document -then the hyphenation patterns of relevant languages must be installed. -Moreover the Lua script `luatex-hyphen.lua` (from `hyph-utf8` package) -and data file `language-dat.lua` (from `hyphen-base` package) -must be installed. - -When `\usebib` command is used then `librarian.tex` file -(from the `librarian` macro package) must be installed. - -When `\morecolors` command is used then `x11nam.def` file -(from the `xcolor` package) must be installed. - -When `\lorem` command is used then `lipsum.ltd.tex` file -(from the `lipsum` package) must be installed. - diff --git a/macros/luatex/optex/doc/optex.1 b/macros/luatex/optex/doc/optex.1 deleted file mode 100644 index 7b912e12a8..0000000000 --- a/macros/luatex/optex/doc/optex.1 +++ /dev/null @@ -1,42 +0,0 @@ -.TH OPTEX 1 "17 Feb. 2020" "Petr Olsak" -.\"===================================================================== -.if t .ds TX \fRT\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X\fP -.if n .ds TX TeX -.ie t .ds OX \fIT\v'+0.25m'E\v'-0.25m'X\fP\" for troff -.el .ds OX TeX\" for nroff -.\" the same but obliqued -.\" BX definition must follow TX so BX can use TX -.if t .ds BX \fRB\s-2IB\s0\fP\*(TX -.if n .ds BX BibTeX -.\" LX definition must follow TX so LX can use TX -.if t .ds LX \fRL\\h'-0.36m'\\v'-0.15v'\s-2A\s0\\h'-0.15m'\\v'0.15v'\fP\*(TX -.if n .ds LX LaTeX -.\"===================================================================== -.SH NAME -optex \- OPmac and Plain TeX for LuaTeX engine. -.SH SYNOPSIS -.B optex -[ first line ] -.\"===================================================================== -.SH DESCRIPTION -This manual page was derived from the manual page for \*(LX and is not meant -to be exhaustive. The complete -documentation for this version of \*(TX can be found in the info file -or manual -.IR "Web2C: A TeX implementation" . -.PP -.B OpTeX -is LuaTeX macro package initialized as the LuaTeX format optex.fmt. -It is based on Plain TeX macros by Donlad Knuth and on OPmac macros from -csplain package. For more information about it see -http://petr.olsak.net/optex web page. -.\"===================================================================== -.SH "SEE ALSO" -.BR luatex (1), -.BR tex (1), -.br -.SH AUTHORS -The author of -.B OpTeX -is Petr Olsak. -.PP diff --git a/macros/luatex/optex/pkg/emoji.opm b/macros/luatex/optex/pkg/emoji.opm deleted file mode 100644 index e14579135f..0000000000 --- a/macros/luatex/optex/pkg/emoji.opm +++ /dev/null @@ -1,55 +0,0 @@ -% This is the macro package used by OpTeX, see http://petr.olsak.net/optex - -% emoji.opm, Petr Olšák <petr@olsak.net>, 2021 - -% Emoji allows us to use colored emoticons as characters from the font. -% The \emoji{<name>} command is available, see texdoc emoji (from -% corresponding LaTeX package). - -\_namespace{emoji} - -\_codedecl \.emoji {Emotikons from the TwemojiMozilla.ttf font} - - \_doc ----------------------------- - Font TwemojiMozilla.ttf is loaded. The font feature +colr is needed. - The `\emojifont` is implemented using `\_resizethefont` as size-dependent. - \_cod ----------------------------- - -\_initunifonts -\_font\.tenemoji=[TwemojiMozilla]:+colr -\_def\.emojifont{\.tenemoji\_resizethefont} -\_def\.emoji#1{{\.emojifont\_trycs{_emoji_:#1}{\_opwarning{uknown emoji "#1"}}}} - - \_doc ----------------------------- - The mapping from names or aliases to the codes are declared in the - `emoji-table.def` file from the \LaTeX/ package emoji. - \_cod ----------------------------- - -\_bgroup - \_def\__emoji_def #1 #2#3#4#5#6{% #1=n, #2=data, #3=name, #4=aliases, #5=descr, #6=versi - \_sxdef{_emoji_:#3}{#2}% - \_ifx^#4^\_else \_foreach #4, \_do ##1, {\_global\_slet{_emoji_:##1}{_emoji_:#3}}\_fi - } - \_def\ProvidesExplFile#1#2#3#4{} - \_def\__emoji_group#1 #2{} - \_def\__emoji_subgroup#1 #2{} - \_catcode`\#=12 - \_input {emoji-table.def}% defining emoji names -\_egroup - -\_nspublic \emoji \emojifont ; - -\_endnamespace - -\_endcode - -\begtt % ----------------------- Testing file --------------------------- -\load[emoji] -We can use \emoji{grinning} or directly: {\emojifont 😀} too. -\bye -\endtt % ---------------------------------------------------------------- - -More than 3000 emoticons are available. - -If you want black-and-white pictograms, see another font: -\url{http://petr.olsak.net/optex/optex-tricks.html\#fawesome} diff --git a/macros/luatex/optex/pkg/plain-at.opm b/macros/luatex/optex/pkg/plain-at.opm deleted file mode 100644 index 3277d7b24e..0000000000 --- a/macros/luatex/optex/pkg/plain-at.opm +++ /dev/null @@ -1,43 +0,0 @@ -% This is macro package used by OpTeX, see http://petr.olsak.net/optex - -\_codedecl \_undefined {Obscure @ names from plain TeX <2020-05-22>} - -\_setctable \_optexcatcodes -% PlainTeX obscure names: -\_catcode`\@=11 -\_let\z@=\_zo -\_let\z@skip=\_zoskip -\_newdimen\p@ \p@=1pt -\_chardef\@ne=1 -\_chardef\tw@=2 -\_chardef\thr@@=3 -\_chardef\sixt@@n=16 -\_mathchardef\@m=1000 -\_mathchardef\@M=10000 -\_mathchardef\@MM=20000 -\_countdef\m@ne=22 \m@ne=-1 -\_chardef\@cclv=255 -\_mathchardef\@cclvi=256 -\_skipdef\skip@=0 -\_dimendef\dimen@=0 -\_dimendef\dimen@i=1 -\_dimendef\dimen@ii=2 -\_countdef\count@=255 -\_def\m@th{\_mathsurround\z@} -\_def\o@lign{\_lineskiplimit\z@ \_oalign} -\_def\n@space{\_nulldelimiterspace\z@ \m@th} -\_newdimen\p@renwd \p@renwd=8.75pt -\_def\alloc@#1#2#3#4#5{\_allocator#5{\_csstring#2}#3} -\_restorectable - -\_endcode - -We absolutely don't recommend to use such obscure names in your macros. But -sometimes you need to read an old plain TeX document or a macro file. You -can load this file in such cases. For example: - -\begtt - \load [plain-at, shapepar.sty] -\endtt - -\_endinput diff --git a/macros/luatex/optex/pkg/qrcode.opm b/macros/luatex/optex/pkg/qrcode.opm deleted file mode 100644 index 5df0ad2c07..0000000000 --- a/macros/luatex/optex/pkg/qrcode.opm +++ /dev/null @@ -1,2707 +0,0 @@ -% This is macro package used by OpTeX, see http://petr.olsak.net/optex -% qrcode.opm, Petr Olšák <petr@olsak.net>, 2020 - -% See end of the file for more information - -\_codedecl \qrcode {Macro for QR code printing <2020-05-04>} - -\_namespace{qr} - -\_newcount\.i -\_newcount\.j -\_newcount\.a -\_newcount\.b -\_newcount\.c - -\_def\.relax{\_relax}% - -\_def\.utfstring#1{\_directlua{ - local text="\_luaescapestring{#1}" - tex.print(string.format('\_pcent.2x',string.len(text))) - for i=1,string.len(text) do - tex.print(string.format('\_pcent.2x',string.byte(text,i))) - end -}} -\_def\.utfstringlen#1{\_directlua{ - tex.print(string.len("\_luaescapestring{#1}")) -}} - -\_def\.g_preface_macro#1#2{% - % #1 = macro to be appended to - % #2 = code to add - \_edef\.codeA{#2}% - \_ea\_ea\_ea\_gdef\_ea\_ea\_ea#1\_ea\_ea\_ea{\_ea\.codeA#1}% -} - -\_def\.getstringlength#1{% - \_xdef\.stringlength{\.utfstringlen{#1}}% -}% - -\_def\.for#1=#2to#3by#4#{\.forA{#1}{#2}{#3}{#4}} -\_long\_def\.forA#1#2#3#4#5{\_begingroup - {\_escapechar=`\\ % allocation of #1 as counter: - \_ea \_ifx\_csname for:\_string#1\_endcsname \_relax - \_csname newcount\_ea\_endcsname \_csname for:\_string#1\_endcsname\_fi - \_ea}\_ea\_let\_ea#1\_csname for:\_string#1\_endcsname - #1=#2% - \_def\.forB{#5\_advance#1by#4\_relax \_ea\.forC}% - \_ifnum#4>0 \_def\.forC{\_ifnum#1>#3\_relax\_else\.forB\_fi}% - \_else \_def\.forC{\_ifnum#1<#3\_relax\_else\.forB\_fi}% - \_fi - \_ifnum#4=0 \let\.forC=\_relax \_fi - \.forC \_endgroup -} - -\_def\.padatfront#1#2{% - % #1 = macro containing text to pad - % #2 = desired number of characters - % Pads a number with initial zeros. - \.getstringlength{#1}% - \.a=\.stringlength\_relax - \_advance\.a by 1\_relax - \.for \.iz = \.a to #2 by 1 - {\.g_preface_macro{#1}{0}}% -} - -\.a=-1\_relax -\_def\.savehexsymbols(#1#2){% - \_advance\.a by 1\_relax% - \_ea\_def\_csname _qr_hexchar:\_the\.a\_endcsname{#1}% - \_ea\_edef\_csname _qr_hextodecimal:#1\_endcsname{\_the\.a}% - \_ifnum\.a=15\_relax - %Done. - \_let\.next=\_relax - \_else - \_def\.next{\.savehexsymbols(#2)}% - \_fi - \.next -}% -\.savehexsymbols(0123456789abcdef\_relax\_relax)% - -\_def\.decimaltobase#1#2#3{% - % #1 = macro to store result - % #2 = decimal representation of a positive integer - % #3 = new base - \_bgroup - \_edef\.newbase{#3}% - \_gdef\.base_result{}% - \.a=#2\_relax% - \.decimaltobase_recursive% - \_xdef#1{\.base_result}% - \_egroup -} -\_def\.decimaltobase_recursive{% - \.b=\.a - \_divide\.b by \.newbase\_relax - \_multiply\.b by -\.newbase\_relax - \_advance\.b by \.a\_relax - \_divide\.a by \.newbase\_relax - \_ifnum\.b<10\_relax - \_edef\.newdigit{\_the\.b}% - \_else - \_edef\.newdigit{\_csname _qr_hexchar:\_the\.b\_endcsname}% - \_fi - \_edef\.argument{{\_noexpand\.base_result}{\.newdigit}}% - \_ea\.g_preface_macro\.argument - \_ifnum\.a=0\_relax - \_relax - \_else - \_ea\.decimaltobase_recursive - \_fi -} -\_long\_def\.xaddto#1#2{\_xdef#1{#1#2}} - -\_def\.decimaltohex[#1]#2#3{% - % #1 (opt.) = number of hex digits to create - % #2 = macro to store result - % #3 = decimal digits to convert - \.decimaltobase{#2}{#3}{16}% - \.padatfront{#2}{#1}% -} -\_def\.decimaltobinary[#1]#2#3{% - % #1 (opt.) = number of bits to create - % #2 = macro to store result - % #3 = decimal digits to convert - \.decimaltobase{#2}{#3}{2}% - \.padatfront{#2}{#1}% -} - -\.for \.iz = 0 to 15 by 1% - {% - \.decimaltohex[1]{\.hexchar}{\_the\.iz}% - \.decimaltobinary[4]{\.bits}{\_the\.iz}% - \_ea\_xdef\_csname _qr_b2h:\.bits\_endcsname{\.hexchar}% - \_ea\_xdef\_csname _qr_h2b:\.hexchar\_endcsname{\.bits}% - }% - -\_def\.binarytohex[#1]#2#3{% - % #1 (optional) = # digits desired - % #2 = macro to save to - % #3 = binary string (must be multiple of 4 bits) - \_def\.testi{#1}% - \_ifx\.testi\.relax% - %No argument specified - \_def\.desireddigits{0}% - \_else - \_def\.desireddigits{#1}% - \_fi - \_gdef\.base_result{}% - \_edef\.argument{(#3\_relax\_relax\_relax\_relax\_relax)}% - \_ea\.binarytohex_int\.argument% - \.padatfront{\.base_result}{\.desireddigits}% - \_xdef#2{\.base_result}% -} -\_def\.binarytohex_int(#1#2#3#4#5){% - % #1#2#3#4 = 4 bits - % #5 = remainder, including \_relax\_relax\_relax\_relax\_relax terminator - \_def\.testi{#1}% - \_ifx\.testi\.relax% - %Done. - \_def\.next{\_relax}% - \_else% - \_xdef\.base_result{\.base_result\_csname _qr_b2h:#1#2#3#4\_endcsname}% - \_def\.next{\.binarytohex_int(#5)}% - \_fi% - \.next% -} - -\_def\.hextobinary[#1]#2#3{% - % #1 (optional) = # bits desired - % #2 = macro to save to - % #3 = hexadecimal string - \_bgroup - \_def\.testi{#1}% - \_ifx\.testi\.relax - %No argument specified - \_def\.desireddigits{0}% - \_else - \_def\.desireddigits{#1}% - \_fi - \_gdef\.base_result{}% - \_edef\.argument{(#3\_relax\_relax)}% - \_ea\.hextobinary_int\.argument% - \.padatfront{\.base_result}{\.desireddigits}% - \_xdef#2{\.base_result}% - \_egroup -} -\_def\.hextobinary_int(#1#2){% - % #1 = hexadecimal character - % #2 = remainder, including \_relax\_relax terminator - \_def\.testii{#1}% - \_ifx\.testii\.relax - %Done. - \_def\.next{\_relax}% - \_else - \_xdef\.base_result{\.base_result\_csname _qr_h2b:#1\_endcsname}% - \_def\.next{\.hextobinary_int(#2)}% - \_fi - \.next -} - -\_def\.hextodecimal#1#2{% - \_edef\.argument{#2}% - \_ea\.a\_ea=\_ea\_number\_ea"\.argument\_relax - \_edef#1{\_the\.a}% -} - -\_def\.hextodecimal#1#2{% - % #1 = macro to store result - % #2 = hexadecimal representation of a positive integer - \_bgroup - \.a=0\_relax - \_edef\.argument{(#2\_relax)}% - \_ea\.hextodecimal_recursive\.argument% - \_xdef#1{\_the\.a}% - \_egroup -} -\_def\.hextodecimal_recursive(#1#2){% - % #1 = first hex char - % #2 = remainder - \_advance \.a by \_csname _qr_hextodecimal:#1\_endcsname\_relax% - \_edef\.testii{#2}% - \_ifx\.testii\.relax% - %Done. - \_let\.next=\_relax% - \_else - %There's at least one more digit. - \_multiply\.a by 16\_relax - \_edef\.next{\_noexpand\.hextodecimal_recursive(#2)}% - \_fi% - \.next% -} - -\_def\.storetomatrix#1#2#3#4{% - % #1 = matrix name - % #2 = row number - % #3 = column number - % #4 = value of matrix entry - \_ea\_gdef\_csname #1@#2@#3\_endcsname{#4}% -}% - -\_def\.estoretomatrix#1#2#3#4{% - % This version performs exactly one expansion on #4. - % #1 = matrix name - % #2 = row number - % #3 = column number - % #4 = value of matrix - \_ea\_gdef\_csname #1@#2@#3\_ea\_endcsname\_ea{#4}% -}% - -\_def\.matrixentry#1#2#3{% - % #1 = matrix name - % #2 = row number - % #3 = column number - \_csname #1@#2@#3\_endcsname -}% - -\_def\.createsquareblankmatrix#1#2{% -% \.creatematrix{#1}% - \_ea\_gdef\_csname #1@numrows\_endcsname{#2}% - \_ea\_gdef\_csname #1@numcols\_endcsname{#2}% - \.for \.iz = 1 to #2 by 1% - {\.for \.jz = 1 to #2 by 1% - {\.storetomatrix{#1}{\_the\.iz}{\_the\.jz}{\.blank}}}% -}% - -\_def\.numberofrowsinmatrix#1{% - \_csname #1@numrows\_endcsname% -}% - -\_def\.numberofcolsinmatrix#1{% - \_csname #1@numcols\_endcsname% -}% - -\_def\.setnumberofrows#1#2{% - \_ea\_xdef\_csname #1@numrows\_endcsname{#2}% -}% - -\_def\.setnumberofcols#1#2{% - \_ea\_xdef\_csname #1@numcols\_endcsname{#2}% -}% - -\_newdimen\.desiredheight -\_newdimen\.modulesize - -\_def\.link#1#2{\_hbox{\_pdfstartlink height\_ht0 depth0pt \.border - user{/Subtype/Link/A <</Type/Action/S/URI/URI(#1)>>}\_relax #2\_pdfendlink}% -} -\_def\.border{% - \_ifcsname _qr_kv:qrborder\_endcsname attr{/C[\.kv{qrborder}] /Border[0 0 .6]}% - \_else attr{/Border[0 0 0]}% - \_fi -} - -\_def\.createliteralmatrix#1#2#3{% - % #1 = matrix name - % #2 = m, the number of rows and columns in the square matrix - % #3 = a string of m^2 tokens to be written into the matrix -% \.creatematrix{#1}% - \_ea\_xdef\_csname #1@numrows\_endcsname{#2}% - \_ea\_xdef\_csname #1@numcols\_endcsname{#2}% - \_gdef\.literalmatrix_tokens{#3}% - \.for \.iz = 1 to #2 by 1% - {\.for \.jz = 1 to #2 by 1% - {\_ea\.createliteralmatrix_int\_ea(\.literalmatrix_tokens)% - \.estoretomatrix{#1}{\_the\.iz}{\_the\.jz}{\.entrytext}% - }% - }% -} -\_def\.createliteralmatrix_int(#1#2){% - \_def\.entrytext{#1}% - \_gdef\.literalmatrix_tokens{#2}% -} - -\.createliteralmatrix{finderpattern}{8}{% - \.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.whitefixed - \.blackfixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.blackfixed\.whitefixed - \.blackfixed\.whitefixed\.blackfixed\.blackfixed\.blackfixed\.whitefixed\.blackfixed\.whitefixed - \.blackfixed\.whitefixed\.blackfixed\.blackfixed\.blackfixed\.whitefixed\.blackfixed\.whitefixed - \.blackfixed\.whitefixed\.blackfixed\.blackfixed\.blackfixed\.whitefixed\.blackfixed\.whitefixed - \.blackfixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.blackfixed\.whitefixed - \.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed\.whitefixed - \.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed\.whitefixed -}% - -\.createliteralmatrix{alignmentpattern}{5}{% - \.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed - \.blackfixed\.whitefixed\.whitefixed\.whitefixed\.blackfixed - \.blackfixed\.whitefixed\.blackfixed\.whitefixed\.blackfixed - \.blackfixed\.whitefixed\.whitefixed\.whitefixed\.blackfixed - \.blackfixed\.blackfixed\.blackfixed\.blackfixed\.blackfixed -}% - -\_def\.copymatrixentry#1#2#3#4#5#6{% - % Copy the (#2,#3) entry of matrix #1 - % to the (#5,#6) position of matrix #4. - \_ea\_ea\_ea\_global% - \_ea\_ea\_ea\_let\_ea\_ea\_csname #4@#5@#6\_endcsname - \_csname #1@#2@#3\_endcsname -}% - -\_def\.createduplicatematrix#1#2{% - % #1 = name of copy - % #2 = original matrix to be copied -% \.creatematrix{#1}% - \.for \.iz = 1 to \.numberofrowsinmatrix{#2} by 1% - {\.for \.jz = 1 to \.numberofcolsinmatrix{#2} by 1% - {\.copymatrixentry{#2}{\_the\.iz}{\_the\.jz}{#1}{\_the\.iz}{\_the\.jz}% - }% - }% - \.setnumberofrows{#1}{\.numberofrowsinmatrix{#2}}% - \.setnumberofcols{#1}{\.numberofcolsinmatrix{#2}}% -}% - -\_def\.placefinderpattern_int#1#2#3#4#5{% - % Work on matrix #1. - % Start in position (#2, #3) -- should be a corner - % #4 indicates horizontal direction (1=right, -1=left) - % #5 indicates vertical direction (1=down, -1=up) - % - % In this code, \sourcei and \sourcej are TeX counts working through the finderpattern matrix, - % and i and j are counters indicating positions in the big matrix. - \.setcounter\.i{#2}% - \.for \.sourcei=1 to 8 by 1% - {\.setcounter\.j{#3}% - \.for \.sourcej=1 to 8 by 1% - {\.copymatrixentry{finderpattern}{\_the\.sourcei}{\_the\.sourcej}% - {#1}{\_the\.i}{\_the\.j}% - \.addtocounter\.j{#5}% - }% - \.addtocounter\.i{#4}% - }% -}% - -\_def\.placefinderpatterns#1{% - % #1=matrix name - \.placefinderpattern_int{#1}{1}{1}{1}{1}% - \.placefinderpattern_int{#1}{\.numberofrowsinmatrix{#1}}{1}{-1}{1}% - \.placefinderpattern_int{#1}{1}{\.numberofcolsinmatrix{#1}}{1}{-1}% -}% - -\_def\.placetimingpatterns#1{% - %Set \.endingcol to n-8. - \.a=\.size\_relax% - \_advance\.a by -8\_relax% - \_edef\.endingcol{\_the\.a}% - \.for \.jz = 9 to \.endingcol by 1% - {\_ifodd\.jz\_relax% - \.storetomatrix{#1}{7}{\_the\.jz}{\.blackfixed}% - \.storetomatrix{#1}{\_the\.jz}{7}{\.blackfixed}% - \_else% - \.storetomatrix{#1}{7}{\_the\.jz}{\.whitefixed}% - \.storetomatrix{#1}{\_the\.jz}{7}{\.whitefixed}% - \_fi% - }% -}% - -\_def\.placealignmentpattern_int#1#2#3{% - % Work on matrix #1. - % Write an alignment pattern into the matrix, centered on (#2,#3). - \.a=#2\_relax% - \_advance\.a by -2\_relax% - \.b=#3\_relax% - \_advance\.b by -2\_relax% - \.setcounter\.i{\_the\.a}% - \.for \.iz=1 to 5 by 1% - {\.setcounter\.j{\_the\.b}% - \.for \.jz=1 to 5 by 1% - {\.copymatrixentry{alignmentpattern}{\_the\.iz}{\_the\.jz}% - {#1}{\_the\.i}{\_the\.j}% - \.stepcounter\.j - }% - \.stepcounter\.i - }% -}% - -\_newifi\_ifqr_incorner% -\_def\.placealignmentpatterns#1{% - %There are k^2-3 alignment patterns, - %arranged in a (k x k) grid within the matrix. - %They begin in row 7, column 7, - %except that the ones in the NW, NE, and SW corners - %are omitted because of the finder patterns. - %Recall that - % * \.k stores k, - % * \.alignment_firstskip stores how far between the 1st and 2nd row/col, & - % * \.alignment_generalskip stores how far between each subsequent row/col. - \_ea\_ifnum\.k>0\_relax - %There will be at least one alignment pattern. - %N.B. k cannot equal 1. - \_ea\_ifnum\.k=2\_relax - % 2*2-3 = exactly 1 alignment pattern. - \.a=7\_relax - \_advance\.a by \.alignment_firstskip\_relax - \_xdef\.targetii{\_the\.a}% - \.placealignmentpattern_int{#1}{\.targetii}{\.targetii}% - \_else - % k is at least 3, so the following loops should be safe. - \_xdef\.targetii{7}% - \.for \.ii = 1 to \.k by 1% - {\_ifcase\.ii\_relax% - \_relax% \.ii should never equal 0. - \_or - \_xdef\.targetii{7}% If \.ii = 1, we start in row 7. - \_or - %If \.ii = 2, we add the firstskip. - \.a=\.targetii\_relax% - \_advance\.a by \.alignment_firstskip\_relax% - \_xdef\.targetii{\_the\.a}% - \_else - %If \.ii>2, we add the generalskip. - \.a=\.targetii\_relax% - \_advance\.a by \.alignment_generalskip\_relax% - \_xdef\.targetii{\_the\.a}% - \_fi - \.for \.jj = 1 to \.k by 1% - {\_ifcase\.jj\_relax% - \_relax% \.jj should never equal 0. - \_or - \_xdef\.targetjj{7}% If \.jj=1, we start in row 7. - \_or - %If \.jj=2, we add the firstskip. - \.a=\.targetjj\_relax% - \_advance\.a by \.alignment_firstskip% - \_xdef\.targetjj{\_the\.a}% - \_else - %If \.jj>2, we add the generalskip. - \.a=\.targetjj\_relax% - \_advance\.a by \.alignment_generalskip% - \_xdef\.targetjj{\_the\.a}% - \_fi - \.incornerfalse% - \_ifnum\.ii=1\_relax - \_ifnum\.jj=1\_relax - \.incornertrue - \_else - \_ifnum\.k=\.jj\_relax - \.incornertrue - \_fi - \_fi - \_else - \_ea\_ifnum\.k=\.ii\_relax - \_ifnum\.jj=1\_relax - \.incornertrue - \_fi - \_fi - \_fi - \_ifqr_incorner - \_relax - \_else - \.placealignmentpattern_int{#1}{\.targetii}{\.targetjj}% - \_fi - }% ends \.for \.jj - }% ends \.for \.ii - \_fi - \_fi -}% - -\_def\.placedummyformatpatterns#1{% - \.for \.jz = 1 to 9 by 1% - {\_ifnum\.jz=7\_relax% - \_else% - \.storetomatrix{#1}{9}{\_the\.jz}{\.formatsquare}% - \.storetomatrix{#1}{\_the\.jz}{9}{\.formatsquare}% - \_fi% - }% - \.setcounter\.j{\.size}% - \.for \.jz = 1 to 8 by 1% - {\.storetomatrix{#1}{9}{\_the\.j}{\.formatsquare}% - \.storetomatrix{#1}{\_the\.j}{9}{\.formatsquare}% - \.addtocounter\.j{-1}% - }% - %Now go back and change the \.formatsquare in (n-8,9) to \.blackfixed. - \.addtocounter\.j{1}% - \.storetomatrix{#1}{\_the\.j}{9}{\.blackfixed}% -}% - -\_def\.placedummyversionpatterns#1{% - \_ea\_ifnum\.version>6\_relax - %Must include version information. - \_global\.i=\.size% - \_global\_advance\.i by -10\_relax% - \.for \.iz = 1 to 3 by 1% - {\.for \.jz = 1 to 6 by 1% - {\.storetomatrix{#1}{\_the\.i}{\_the\.jz}{\.formatsquare}% - \.storetomatrix{#1}{\_the\.jz}{\_the\.i}{\.formatsquare}% - }% - \.stepcounter\.i - }% - \_fi -}% - -\_def\.writebit(#1#2)#3{% - % #3 = matrix name - % (qr_i,qr_j) = position to write in (counters) - % #1 = bit to be written - % #2 = remaining bits plus '\_relax' as an end-of-file marker - \_edef\.datatowrite{#2}% - \_ifnum#1=1 - \.storetomatrix{#3}{\_the\.i}{\_the\.j}{\.black}% - \_else - \.storetomatrix{#3}{\_the\.i}{\_the\.j}{\.white}% - \_fi -}% - -\_newifi\_ifqr_rightcol -\_newifi\_ifqr_goingup - -\_def\.writedata_hex#1#2{% - % #1 = name of a matrix that has been prepared with finder patterns, timing patterns, etc. - % #2 = a string consisting of bytes to write into the matrix, in two-char hex format. - \.setcounter\.i{\.numberofrowsinmatrix{#1}}% - \.setcounter\.j{\.numberofcolsinmatrix{#1}}% - \.rightcoltrue - \.goinguptrue - \_edef\.argument{{#1}(#2\_relax\_relax\_relax)}% - \_ea\.writedata_hex_recursive\.argument% -}% - -\_def\.writedata_hex_recursive#1(#2#3#4){% - % #1 = name of a matrix that has been prepared with finder patterns, timing patterns, etc. - % (qr_i,qr_j) = position to write in counters - % #2#3#4 contains the hex codes of the bytes to be written, plus \_relax\_relax\_relax - % as an end-of-file marker - \_edef\.testii{#2}% - \_ifx\.testii\.relax% - % #2 is \_relax, so there is nothing more to write. - \_relax - \_let\.go=\_relax - \_else - % #2 is not \_relax, so there is another byte to write. - \.hextobinary[8]{\.bytetowrite}{#2#3}% - \_xdef\.datatowrite{\.bytetowrite\_relax}% %Add terminating "\_relax" - \.writedata_recursive{#1}% %This function actually writes the 8 bits. - \_edef\.argument{{#1}(#4)}% - \_ea\_def\_ea\.go\_ea{\_ea\.writedata_hex_recursive\.argument}% %Call self to write the next bit. - \_fi - \.go -}% - -\_def\.writedata#1#2{% - % #1 = name of a matrix that has been prepared with finder patterns, timing patterns, etc. - % #2 = a string consisting of 0's and 1's to write into the matrix. - \.setcounter\.i{\.numberofrowsinmatrix{#1}}% - \.setcounter\.j{\.numberofcolsinmatrix{#1}}% - \.rightcoltrue - \.goinguptrue - \_edef\.datatowrite{#2\_relax}% - \.writedata_recursive{#1}% -}% - -\_def\.iblank{\.blank}% - -\_def\.writedata_recursive#1{% - % #1 = matrix name - % (qr_i,qr_j) = position to write in (counters) - % \.datatowrite contains the bits to be written, plus '\_relax' as an end-of-file marker - \_ea\_let\_ea\.squarevalue\_csname #1@\_the\.i @\_the\.j\_endcsname% - \_ifx\.squarevalue\.iblank - %Square is blank, so write data in it. - \_ea\.writebit\_ea(\.datatowrite){#1}% - %The \.writebit macro not only writes the first bit of \.datatowrite into the matrix, - %but also removes the bit from the 'bitstream' of \.datatowrite. - \_fi - %Now adjust our position in the matrix. - \_ifqr_rightcol - %From the right-hand half of the two-bit column, we always move left. Easy peasy. - \.addtocounter\.j{-1}% - \.rightcolfalse - \_else - %If we're in the left-hand column, things are harder. - \_ifqr_goingup - %First, suppose we're going upwards. - \_ifnum\.i>1\_relax% - %If we're not in the first row, things are easy. - %We move one to the right and one up. - \.addtocounter\.j{1}% - \.addtocounter\.i{-1}% - \.rightcoltrue - \_else - %If we are in the first row, then we move to the left, - %and we are now in the right-hand column on a downward pass. - \.addtocounter\.j{-1}% - \.goingupfalse - \.rightcoltrue - \_fi - \_else - %Now, suppose we're going downwards. - \_ea\_ifnum\.size>\.i\_relax% - %If we're not yet in the bottom row, things are easy. - %We move one to the right and one down. - \.addtocounter\.j{1}% - \.addtocounter\.i{1}% - \.rightcoltrue - \_else - %If we are in the bottom row, then we move to the left, - %and we are now in the right-hand column on an upward pass. - \.addtocounter\.j{-1}% - \.rightcoltrue - \.goinguptrue - \_fi - \_fi - %One problem: what if we just moved into the 7th column? - %Das ist verboten. - %If we just moved (left) into the 7th column, we should move on into the 6th column. - \_ifnum\.j=7\_relax% - \.setcounter\.j{6}% - \_fi - \_fi - %Now check whether there are any more bits to write. - \_ifx\.datatowrite\.relax - % \.datatowrite is just `\_relax', so we're done. - \_let\.nexttoken=\_relax - \_relax - \_else - % Write some more! - \_def\.nexttoken{\.writedata_recursive{#1}}% - \_fi - \.nexttoken -}% - -\_def\.writeremainderbits#1{% - % #1 = name of a matrix that has been prepared and partly filled. - % (qr_i,qr_j) = position to write in counters - \_ea\_ifnum\.numremainderbits>0\_relax - \_def\.datatowrite{}% - \.for \.iz = 1 to \.numremainderbits by 1% - {\.xaddto{\.datatowrite}{0}}% - \.xaddto{\.datatowrite}{\_relax}% terminator - \.writedata_recursive{#1}% - \_fi -}% - -\_newifi\_ifqr_cellinmask - -\_def\.setmaskingfunction#1{% - % #1 = 1 decimal digit for the mask. (I see no reason to use the 3-bit binary code.) - % The current position is (\themaski,\themaskj), with indexing starting at 0. - \_edef\.maskselection{#1}% - \_ea\_ifcase\.maskselection\_relax - %Case 0: checkerboard - \_def\.parsemaskingfunction{% - % Compute mod(\themaski+\themaskj,2)% - \.a=\.maski% - \_advance\.a by \.maskj% - \.b=\.a% - \_divide\.b by 2% - \_multiply\.b by 2% - \_advance\.a by -\.b% - \_edef\.maskfunctionresult{\_the\.a}% - }% - \_or - %Case 1: horizontal stripes - \_def\.parsemaskingfunction{% - % Compute mod(\themaski,2)% - \_ifodd\.maski\_relax% - \_def\.maskfunctionresult{1}% - \_else% - \_def\.maskfunctionresult{0}% - \_fi% - }% - \_or - %Case 2: vertical stripes - \_def\.parsemaskingfunction{% - % Compute mod(\themaskj,3)% - \.a=\.maskj% - \_divide\.a by 3% - \_multiply\.a by 3% - \_advance\.a by -\.maskj% - \_edef\.maskfunctionresult{\_the\.a}% - }% - \_or - %Case 3: diagonal stripes - \_def\.parsemaskingfunction{% - % Compute mod(\themaski+\themaskj,3)% - \.a=\.maski% - \_advance\.a by \.maskj% - \.b=\.a% - \_divide\.b by 3% - \_multiply\.b by 3% - \_advance\.b by -\.a% - \_edef\.maskfunctionresult{\_the\.b}% - }% - \_or - %Case 4: wide checkerboard - \_def\.parsemaskingfunction{% - % Compute mod(floor(\themaski/2) + floor(\themaskj/3),2) % - \.a=\.maski% - \_divide\.a by 2% - \.b=\.maskj% - \_divide\.b by 3% - \_advance\.a by \.b% - \.b=\.a% - \_divide\.a by 2% - \_multiply\.a by 2% - \_advance\.a by -\.b% - \_edef\.maskfunctionresult{\_the\.a}% - }% - \_or - %Case 5: quilt - \_def\.parsemaskingfunction{% - % Compute mod(\themaski*\themaskj,2) + mod(\themaski*\themaskj,3) % - \.a=\.maski% - \_multiply\.a by \.maskj% - \.b=\.a% - \.c=\.a% - \_divide\.a by 2% - \_multiply\.a by 2% - \_advance\.a by -\.c% (result will be -mod(i*j,2), which is negative.) - \_divide\.b by 3% - \_multiply\.b by 3% - \_advance\.b by -\.c% (result will be -mod(i*j,3), which is negative.) - \_advance\.a by \.b% (result is negative of what's in the spec.) - \_edef\.maskfunctionresult{\_the\.a}% - }% - \_or - %Case 6: arrows - \_def\.parsemaskingfunction{% - % Compute mod( mod(\themaski*\themaskj,2) + mod(\themaski*\themaskj,3) , 2 ) % - \.a=\.maski% - \_multiply\.a by \.maskj% - \.b=\.a% - \.c=\.a% - \_multiply\.c by 2% % \.c equals 2*i*j. - \_divide\.a by 2% - \_multiply\.a by 2% - \_advance\.c by -\.a% Now \.c equals i*j + mod(i*j,2). - \_divide\.b by 3% - \_multiply\.b by 3% - \_advance\.c by -\.b% (Now \.c equals mod(i*j,2) + mod(i*j,3). - \.a=\.c% - \_divide\.a by 2% - \_multiply\.a by 2% - \_advance\.c by-\.a% - \_edef\.maskfunctionresult{\_the\.c}% - }% - \_or - %Case 7: shotgun - \_def\.parsemaskingfunction{% - % Compute mod( mod(\themaski+\themaskj,2) + mod(\themaski*\themaskj,3) , 2 ) % - \.a=\.maski% - \_advance\.a by \.maskj% %So \.a = i+j - \.b=\.maski% - \_multiply\.b by \.maskj% %So \.b = i*j - \.c=\.a% - \_advance\.c by \.b% So \.c = i+j+i*j - \_divide\.a by 2% - \_multiply\.a by 2% - \_advance\.c by -\.a% So \.c = mod(i+j,2) + i*j - \_divide\.b by 3% - \_multiply\.b by 3% - \_advance\.c by -\.b% So \.c = mod(i+j,2) + mod(i*j,3) - \.a=\.c% - \_divide\.c by 2% - \_multiply\.c by 2% - \_advance\.a by -\.c% - \_edef\.maskfunctionresult{\_the\.a}% - }% - \_fi -}% - -\_def\.checkifcellisinmask{% - % The current position is (\.iz,\.jz), in TeX counts, - % but the counters (maski,maskj) should contain - % the current position with indexing starting at 0. - % That is, maski = \.iz-1 and maskj = \.jz-1. - % - % \.parsemaskingfunction must have been set by a call to \.setmaskingfunction - \.parsemaskingfunction - \_ea\_ifnum\.maskfunctionresult=0\_relax - \.cellinmasktrue - \_else - \.cellinmaskfalse - \_fi -}% - -\_newcount\.maski -\_newcount\.maskj - -\_def\.applymask#1#2#3{% - % #1 = name of a matrix that should be filled out completely - % except for the format and/or version information. - % #2 = name of a new matrix to contain the masked version - % #3 = 1 decimal digit naming the mask - \.createduplicatematrix{#2}{#1}% - \.setmaskingfunction{#3}% - \.setcounter\.maski{-1}% - \.for \.iz = 1 to \.size by 1% - {\.stepcounter\.maski - \.setcounter\.maskj{-1}% - \.for \.jz = 1 to \.size by 1% - {\.stepcounter\.maskj - \.checkifcellisinmask - \_ifqr_cellinmask - \.checkifcurrentcellcontainsdata{#2}% - \_ifqr_currentcellcontainsdata - \.flipcurrentcell{#2}% - \_fi - \_fi - }% - }% -}% - -\_newifi\_ifqr_currentcellcontainsdata -\.currentcellcontainsdatafalse - -\_def\.iwhite{\.white}% -\_def\.iblack{\.black}% - -\_def\.checkifcurrentcellcontainsdata#1{% - % #1 = name of matrix - \.currentcellcontainsdatafalse - \_ea\_ifx\_csname #1@\_the\.iz @\_the\.jz\_endcsname\.iwhite - \.currentcellcontainsdatatrue - \_fi - \_ea\_ifx\_csname #1@\_the\.iz @\_the\.jz\_endcsname\.iblack - \.currentcellcontainsdatatrue - \_fi -}% - -\_def\.flippedblack{\.black}% -\_def\.flippedwhite{\.white}% - -\_def\.flipcurrentcell#1{% - % #1 = name of matrix - % (\.iz, \.jz) = current position, in TeX counts. - % This assumes the cell contains data, either black or white! - \_ea\_ifx\_csname #1@\_the\.iz @\_the\.jz\_endcsname\.iwhite - \.storetomatrix{#1}{\_the\.iz}{\_the\.jz}{\.flippedblack}% - \_else - \.storetomatrix{#1}{\_the\.iz}{\_the\.jz}{\.flippedwhite}% - \_fi -}% - -\_def\.chooseandapplybestmask#1{% - % #1 = name of a matrix that should be filled out completely - % except for the format and/or version information. - % This function applies all eight masks in succession, - % calculates their penalties, and remembers the best. - % The number indicating which mask was used is saved in \.mask_selected. - \.createduplicatematrix{originalmatrix}{#1}% - \.message{<Applying Mask 0...}% - \.applymask{originalmatrix}{#1}{0}% - \.message{done. Calculating penalty...}% - \.evaluatemaskpenalty{#1}% - \_xdef\.currentbestpenalty{\.penalty}% - \.message{penalty is \.penalty>^^J}% - \_gdef\.currentbestmask{0}% - \.for \.iz = 1 to 7 by 1% - {\.message{<Applying Mask \_the\.iz...}% - \.applymask{originalmatrix}{currentmasked}{\_the\.iz}% - \.message{done. Calculating penalty...}% - \.evaluatemaskpenalty{currentmasked}% - \.message{penalty is \.penalty>^^J}% - \_ea\_ea\_ea\_ifnum\_ea\.penalty\_ea<\.currentbestpenalty\_relax - %We found a better mask. - \_xdef\.currentbestmask{\_the\.iz}% - \.createduplicatematrix{#1}{currentmasked}% - \_xdef\.currentbestpenalty{\.penalty}% - \_fi - }% - \_xdef\.mask_selected{\.currentbestmask}% - \.message{<Selected Mask \.mask_selected>^^J}% -}% - -\_def\.Ni{3}% -\_def\.Nii{3}% -\_def\.Niii{40}% -\_def\.Niv{10}% -\_def\.fiveones{11111}% -\_def\.fivezeros{00000}% -\_def\.twoones{11}% -\_def\.twozeros{00}% -\_def\.finderA{00001011101}% -\_def\.finderB{10111010000}% -\_def\.finderBthree{1011101000}% -\_def\.finderBtwo{101110100}% -\_def\.finderBone{10111010}% -\_def\.finderBzero{1011101}% -\_newifi\_ifqr_stringoffive -\_def\.addpenaltyiii{% - \.addtocounter\.penaltyiii{\.Niii}% -}% -\_newcount\.totalones -\_newcount\.penaltyi -\_newcount\.penaltyii -\_newcount\.penaltyiii -\_newcount\.penaltyiv -\_def\.evaluatemaskpenalty#1{% - % #1 = name of a matrix that we will test for the penalty - % according to the specs. - \.setcounter\.penaltyi{0}% - \.setcounter\.penaltyii{0}% - \.setcounter\.penaltyiii{0}% - \.setcounter\.penaltyiv{0}% - \_bgroup%localize the meanings we give to the symbols - \_def\.black{1}\_def\.white{0}% - \_def\.blackfixed{1}\_def\.whitefixed{0}% - \_def\.formatsquare{0}% This is not stated in the specs, but seems - % to be the standard implementation. - \_def\.blank{0}% These would be any bits at the end. - % - \.setcounter\.totalones{0}% - \.for \.iz=1 to \.size by 1% - {\_def\.lastfive{z}% %The z is a dummy, that will be removed before any testing. - \.stringoffivefalse - \_def\.lasttwo_thisrow{z}% %The z is a dummy. - \_def\.lasttwo_nextrow{z}% %The z is a dummy. - \_def\.lastnine{z0000}% %The 0000 stands for the white space to the left. The z is a dummy. - \_def\.ignore_finderBat{0}% - \.for \.jz=1 to \.size by 1% - {\_edef\.newbit{\.matrixentry{#1}{\_the\.iz}{\_the\.jz}}% - % - % LASTFIVE CODE FOR PENALTY 1 - % First, add the new bit to the end. - \_ea\.xaddto\_ea\.lastfive\_ea{\.newbit}% - \_ifnum\.jz<5\_relax% - %Not yet on the 5th entry. - %Don't do any testing. - \_else - % 5th entry or later. - % Remove the old one, and then test. - \.removefirsttoken\.lastfive% - \_ifx\.lastfive\.fiveones% - \_ifqr_stringoffive - %This is a continuation of a previous block of five or more 1's. - \.stepcounter\.penaltyi - \_else - %This is a new string of five 1's. - \.addtocounter\.penaltyi{\.Ni}% - \_global\.stringoffivetrue - \_fi - \_else - \_ifx\.lastfive\.fivezeros% - \_ifqr_stringoffive - %This is a continuation of a previous block of five or more 0's. - \.stepcounter\.penaltyi - \_else - %This is a new string of five 0's. - \.addtocounter\.penaltyi{\.Ni}% - \_global\.stringoffivetrue - \_fi - \_else - %This is not a string of five 1's or five 0's. - \_global\.stringoffivefalse - \_fi - \_fi - \_fi - % - % 2x2 BLOCKS FOR PENALTY 2 - % Every 2x2 block of all 1's counts for \.Nii penalty points. - % We do not need to run this test in the last row. - \_ea\_ifnum\_ea\.iz\_ea<\.size\_relax - \_ea\.xaddto\_ea\.lasttwo_thisrow\_ea{\.newbit}% - %Compute \.iplusone - \.a=\.iz\_relax% - \_advance\.a by 1% - \_edef\.iplusone{\_the\.a}% - % - \_edef\.nextrowbit{\.matrixentry{#1}{\.iplusone}{\_the\.jz}}% - \_ea\.xaddto\_ea\.lasttwo_nextrow\_ea{\.nextrowbit}% - \_ifnum\.jz<2\_relax% - %Still in the first column; no check. - \_else - %Second column or later. Remove the old bits, and then test. - \.removefirsttoken\.lasttwo_thisrow - \.removefirsttoken\.lasttwo_nextrow - \_ifx\.lasttwo_thisrow\.twoones - \_ifx\.lasttwo_nextrow\.twoones - \.addtocounter\.penaltyii{\.Nii}% - \_fi - \_else - \_ifx\.lasttwo_thisrow\.twozeros - \_ifx\.lasttwo_nextrow\.twozeros - \.addtocounter\.penaltyii{\.Nii}% - \_fi - \_fi - \_fi - \_fi - \_fi - % - % LASTNINE CODE FOR PENALTY 3 - % First, add the new bit to the end. - \_ea\.xaddto\_ea\.lastnine\_ea{\.newbit}% - \_ifnum\.jz<7\_relax% - %Not yet on the 7th entry. - %Don't do any testing. - \_else - % 7th entry or later. - % Remove the old one, and then test. - \.removefirsttoken\.lastnine - \_ea\_ifnum\.size=\.jz\_relax% - % Last column. Any of the following should count: - % 1011101 (\.finderBzero) - % 10111010 (\.finderBone) - % 101110100 (\.finderBtwo) - % 1011101000 (\.finderBthree) - % 10111010000 (\.finderB) - \_ifx\.lastnine\.finderB - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBthree - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBtwo - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBone - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBzero - \.addpenaltyiii - \_fi - \_fi - \_fi - \_fi - \_fi - \_else - \_ifx\.lastnine\.finderA% %Matches 0000 1011101 - \.addpenaltyiii - %Also, we record our discovery, so that we can't count this pattern again - %if it shows up four columns later as 1011101 0000. - % - %Set \.ignore_finderBat to \.jz+4. - \.a=\.jz\_relax% - \_advance\.a by 4% - \_xdef\.ignore_finderBat{\_the\.a}% - \_else - \_ifx\.lastfive\.finderB% %Matches 1011101 0000. - \_ea\_ifnum\.ignore_finderBat=\.jz\_relax - %This pattern was *not* counted already earlier. - \.addpenaltyiii - \_fi - \_fi - \_fi - \_fi - \_fi - % - %COUNT 1's FOR PENALTY 4 - \_ea\_ifnum\.newbit=1\_relax% - \.stepcounter\.totalones - \_fi - }% end of j-loop - }% end of i-loop - % - %NOW WE ALSO NEED TO RUN DOWN THE COLUMNS TO FINISH CALCULATING PENALTIES 1 AND 3. - \.for \.jz=1 to \.size by 1% - {\_def\.lastfive{z}% %The z is a dummy, that will be removed before any testing. - \.stringoffivefalse - \_def\.lastnine{z0000}% %The 0000 stands for the white space to the left. The z is a dummy. - \_def\.ignore_finderBat{0}% - \.for \.iz=1 to \.size by 1% - {\_edef\.newbit{\.matrixentry{#1}{\_the\.iz}{\_the\.jz}}% - % - % LASTFIVE CODE FOR PENALTY 1 - % First, add the new bit to the end. - \_ea\.xaddto\_ea\.lastfive\_ea{\.newbit}% - \_ifnum\.iz<5\_relax% - %Not yet on the 5th entry. - %Don't do any testing. - \_else - % 5th entry or later. - % Remove the old one, and then test. - \.removefirsttoken\.lastfive - \_ifx\.lastfive\.fiveones% - \_ifqr_stringoffive - %This is a continuation of a previous block of five or more 1's. - \.stepcounter\.penaltyi - \_else - %This is a new string of five 1's. - \.addtocounter\.penaltyi{\.Ni}% - \_global\.stringoffivetrue - \_fi - \_else - \_ifx\.lastfive\.fivezeros% - \_ifqr_stringoffive - %This is a continuation of a previous block of five or more 0's. - \.stepcounter\.penaltyi - \_else - %This is a new string of five 0's. - \.addtocounter\.penaltyi{\.Ni}% - \_global\.stringoffivetrue - \_fi - \_else - %This is not a string of five 1's or five 0's. - \_global\.stringoffivefalse - \_fi - \_fi - \_fi - % - % HAPPILY, WE DON'T NEED TO CALCULATE PENALTY 2 AGAIN. - % - % LASTNINE CODE FOR PENALTY 3 - % First, add the new bit to the end. - \_ea\.xaddto\_ea\.lastnine\_ea{\.newbit}% - \_ifnum\.iz<7\_relax% - %Not yet on the 7th entry. - %Don't do any testing. - \_else - % 7th entry or later. - % Remove the old one, and then test. - \.removefirsttoken\.lastnine - \_ea\_ifnum\.size=\.iz\_relax% - % Last column. Any of the following should count: - % 1011101 (\.finderBzero) - % 10111010 (\.finderBone) - % 101110100 (\.finderBtwo) - % 1011101000 (\.finderBthree) - % 10111010000 (\.finderB) - \_ifx\.lastnine\.finderB - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBthree - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBtwo - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBone - \.addpenaltyiii - \_else - \.removefirsttoken\.lastnine - \_ifx\.lastnine\.finderBzero - \.addpenaltyiii - \_fi - \_fi - \_fi - \_fi - \_fi - \_else - \_ifx\.lastnine\.finderA% %Matches 0000 1011101 - \.addpenaltyiii - %Also, we record our discovery, so that we can't count this pattern again - %if it shows up four columns later as 1011101 0000. - % - %Set \.ignore_finderBat to \.iz+4. - \.a=\.iz\_relax% - \_advance\.a by 4% - \_xdef\.ignore_finderBat{\_the\.a}% - \_else - \_ifx\.lastfive\.finderB% %Matches 1011101 0000. - \_ea\_ifnum\.ignore_finderBat=\.iz\_relax - %This pattern was *not* counted already earlier. - \.addpenaltyiii - \_fi - \_fi - \_fi - \_fi - \_fi - % - }% end of i-loop - }% end of j-loop - \_egroup - % - %CALCULATE PENALTY 4 - %According to the spec, penalty #4 is computed as - % floor( |(i/n^2)-0.5|/0.05 ) - % where i is the total number of 1's in the matrix. - % This is equal to abs(20*i-10n^2) div n^2. - % - \.a=\.totalones\_relax - \_multiply\.a by 20\_relax - \.b=\.size\_relax - \_multiply\.b by \.size\_relax - \.c=10\_relax - \_multiply\.c by \.b\_relax - \_advance\.a by -\.c\_relax - \_ifnum\.a<0\_relax - \_multiply\.a by -1\_relax - \_fi - \_divide\.a by \.b\_relax - \.setcounter\.penaltyiv{\_the\.a}% - % - %CALCULATE TOTAL PENALTY - \.a=\_the\.penaltyi\_relax% - \_advance\.a by \_the\.penaltyii\_relax% - \_advance\.a by \_the\.penaltyiii\_relax% - \_advance\.a by \_the\.penaltyiv\_relax% - \_edef\.penalty{\_the\.a}% -}% - -\_def\.removefirsttoken#1{% - %Removes the first token from the macro named in #1. - \_edef\.argument{(#1)}% - \_ea\.removefirsttoken_int\.argument% - \_xdef#1{\.removefirsttoken_result}% -}% -\_def\.removefirsttoken_int(#1#2){% - \_def\.removefirsttoken_result{#2}% -}% - -\_def\.writeformatstring#1#2{% - % #1 = matrix name - % #2 = binary string representing the encoded and masked format information - \.setcounter\.i{9}% - \.setcounter\.j{1}% - \_edef\.argument{{#1}(#2\_relax)}% - \_ea\.writeformatA_recursive\.argument - % - \.setcounter\.i{\.numberofrowsinmatrix{#1}}% - \.setcounter\.j{9}% - \_ea\.writeformatB_recursive\.argument -}% - -\_def\.writeformatA_recursive#1(#2#3){% - % #1 = matrix name - % #2 = first bit of string - % #3 = rest of bitstream - % (qr_i,qr_j) = current (valid) position to write (in counters) - \_ifnum#2=1\_relax - \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.blackformat}% - \_else - \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.whiteformat}% - \_fi - % Now the tricky part--moving \.iz and \.jz to their next positions. - \_ifnum\.j<9\_relax - %If we're not yet in column 9, move right. - \.stepcounter\.j - \_ifnum\.j=7\_relax - %But we skip column 7! - \.stepcounter\.j - \_fi - \_else - %If we're in column 9, we move up. - \.addtocounter\.i{-1}% - \_ifnum\.i=7\_relax - %But we skip row 7! - \.addtocounter\.i{-1}% - \_fi - \_fi - %N.B. that at the end of time, this will leave us at invalid position (0,9). - %That makes for an easy test to know when we are done. - \_ifnum\.i<1 - \_let\.nexttoken=\_relax - \_else - \_def\.nexttoken{\.writeformatA_recursive{#1}(#3)}% - \_fi - \.nexttoken -}% - -\_def\.writeformatB_recursive#1(#2#3){% - % #1 = matrix name - % #2 = first bit of string - % #3 = rest of bitstream - % (qr_i,qr_j) = current (valid) position to write (in counters) - \_ifnum#2=1\_relax - \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.blackformat}% - \_else - \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.whiteformat}% - \_fi - % Now the tricky part--moving counters i and j to their next positions. - \.a=\.size% - \_advance\.a by -6\_relax% - \_ifnum\.a<\.i\_relax - %If we're not yet in row n-6, move up. - \.addtocounter\.i{-1}% - \_else - \_ifnum\.a=\.i\_relax - %If we're actually in row n-6, we jump to position (9,n-7). - \.setcounter\.i{9}% - %Set counter j equal to \.size-7. - \_global\.j=\.size\_relax% - \_global\_advance\.j by -7\_relax% - \_else - %Otherwise, we must be in row 9. - %In this case, we move right. - \.stepcounter\.j - \_fi - \_fi - %N.B. that at the end of time, this will leave us at invalid position (9,n+1). - %That makes for an easy test to know when we are done. - \_ea\_ifnum\.size<\.j\_relax - \_let\.nexttoken=\_relax - \_else - \_def\.nexttoken{\.writeformatB_recursive{#1}(#3)}% - \_fi - \.nexttoken -}% - -\_def\.writeversionstring#1#2{% - % #1 = matrix name - % #2 = binary string representing the encoded version information - % - % Plot the encoded version string into the matrix. - % This is only done for versions 7 and higher. - \_ea\_ifnum\.version>6\_relax - %Move to position (n-8,6). - \.setcounter\.i{\.size}\_relax% - \.addtocounter\.i{-8}\_relax% - \.setcounter\.j{6}% - \_edef\.argument{{#1}(#2\_relax)}% - \_ea\.writeversion_recursive\.argument - \_fi -}% - -\_def\.writeversion_recursive#1(#2#3){% - % #1 = matrix name - % #2 = first bit of string - % #3 = rest of bitstream - % (qr_i,qr_j) = current (valid) position to write (in counters) - % - % The version information is stored symmetrically in the matrix - % In two transposed regions, so we can write both at the same time. - % In the comments, we describe what happens in the lower-left region, - % not the upper-right. - % - %Set \.topline equal to n-10. - \.a=\.size\_relax% - \_advance\.a by -10\_relax% - \_edef\.topline{\_the\.a}% - % - \_ifnum#2=1\_relax - \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.blackformat}% - \.storetomatrix{#1}{\_the\.j}{\_the\.i}{\.blackformat}% - \_else - \.storetomatrix{#1}{\_the\.i}{\_the\.j}{\.whiteformat}% - \.storetomatrix{#1}{\_the\.j}{\_the\.i}{\.whiteformat}% - \_fi - % Now the tricky part--moving counters i and j to their next positions. - \.addtocounter\.i{-1}% - \_ea\_ifnum\.topline>\.i\_relax - %We've overshot the top of the region. - %We need to move left one column and down three. - \.addtocounter\.j{-1}% - \.addtocounter\.i{3}% - \_fi - %N.B. that at the end of time, this will leave us at invalid position (n-8,0). - %That makes for an easy test to know when we are done. - \_ifnum\.j<1\_relax - \_let\.nexttoken=\_relax - \_else - \_def\.nexttoken{\.writeversion_recursive{#1}(#3)}% - \_fi - \.nexttoken -}% -\_newcount\.hexchars - -\_def\.encode_binary#1{% - % #1 = string of ascii characters, to be converted into bitstream - % - % We do this one entirely in hex, rather than binary, because we can. - % - %Now comes the actual data. - % - {\_endlinechar=-1 \_xdef\.codetext{4\.utfstring{#1}0}}% - %The terminator is 0 - %\.xaddto\.codetext{0}% %This is '0000' in binary. - % - %There is no need to pad bits to make a multiple of 8, - %because the data length is already 4 + 8 + 8n + 4. - % - %Now add padding codewords if needed. - \.setcounter\.hexchars{0}% - \.getstringlength{\.codetext}% - \.setcounter\.hexchars{\.stringlength}% - %Set \.numpaddingcodewords equal to \.totaldatacodewords - hexchars/2. - \.a=-\.hexchars\_relax - \_divide\.a by 2\_relax - \_advance\.a by \.totaldatacodewords\_relax - \_edef\.numpaddingcodewords{\_the\.a}% - % - \_ea\_ifnum\.numpaddingcodewords<0% - \_edef\.ds{ERROR: Too much data! Over by \.numpaddingcodewords bytes.}\_show\.ds - \_fi - \_ea\_ifnum\.numpaddingcodewords>0% - \.for \.iz = 2 to \.numpaddingcodewords by 2% - {\.xaddto{\.codetext}{ec11}}% - \_ea\_ifodd\.numpaddingcodewords\_relax - \.xaddto{\.codetext}{ec}% - \_fi - \_fi -}% - -\_def\.splitcodetextintoblocks{% - \.setcounter\.i{0}% - \.for \.jz = 1 to \.numshortblocks by 1% - {\.stepcounter\.i - \.splitoffblock{\.codetext}{\_the\.i}{\.shortblock_size}% - }% - \_ea\_ifnum\.numlongblocks>0\_relax - \.for \.jz = 1 to \.numlongblocks by 1% - {\.stepcounter\.i - \.splitoffblock{\.codetext}{\_the\.i}{\.longblock_size}% - }% - \_fi -}% - -\_def\.splitoffblock#1#2#3{% - % #1 = current codetext in hexadecimal - % #2 = number to use in csname "\datablock@#2". - % #3 = number of bytes to split off - \.message{<Splitting off block #2>}% - \_ea\_gdef\_csname datablock@#2\_endcsname{}% %This line is important! - \.for \.iz = 1 to #3 by 1% - {\_edef\.argument{{#2}(#1)}% - \_ea\.splitoffblock_int\.argument - }% -}% - -\_def\.splitoffblock_int#1(#2#3#4){% - % #1 = number to use in csname "\datablock@#1". - % #2#3 = next byte to split off - % #4 = remaining text - % - % We add the next byte to "\datablock@#1", - % and we remove it from the codetext. - \_ea\_xdef\_csname datablock@#1\_endcsname{\_csname datablock@#1\_endcsname#2#3}% - \_xdef\.codetext{#4}% -}% - -\_def\.createerrorblocks{% - \.for \.ii = 1 to \.numblocks by 1% - {\.message{<Making error block \_the\.ii>}% - \.FXgenerate_errorbytes{\_csname datablock@\_the\.ii\_endcsname}{\.numeccodewords}% - \_ea\_xdef\_csname errorblock@\_the\.ii\_endcsname{\.FXerrorbytes}% - }% -}% - -\_def\.interleave{% - \.setcounter\.i{0}% - \_def\.interleaved_text{}% - \.message{<Interleaving datablocks of length \.shortblock_size\_space and \.longblock_size: }% - \.for \.ii = 1 to \.shortblock_size by 1% - {\.for \.jj = 1 to \.numblocks by 1% - {\.writefromblock{datablock}{\_the\.jj}% - }% - \.message{\_the\.ii,}% - }% - %The long blocks are numbered \.numshortblocks+1, \.numshortblocks+2, ..., \.numblocks. - \.a=\.numshortblocks\_relax - \_advance\.a by 1\_relax - \.for \.jj = \.a to \.numblocks by 1% - {\.writefromblock{datablock}{\_the\.jj}}% - \_ea\_ifnum\.numlongblocks>0\_relax% - \.message{\.longblock_size.>}% - \_else - \.message{.>}% - \_fi - \.message{<Interleaving errorblocks of length \.numeccodewords: }% - \.for \.ii = 1 to \.numeccodewords by 1% - {\.message{\_the\.ii,}% - \.for \.jj = 1 to \.numblocks by 1% - {\.writefromblock{errorblock}{\_the\.jj}% - }% - }% - \.message{.><Interleaving complete.>}% -}% - -\_def\.writefromblock#1#2{% - % #1 = either 'datablock' or 'errorblock' - % #2 = block number, in {1,...,\.numblocks}% - \_edef\.argument{(\_csname #1@#2\_endcsname\_relax\_relax\_relax)}% - \_ea\.writefromblock_int\.argument - \_ea\_xdef\_csname #1@#2\_endcsname{\.writefromblock_remainder}% -}% - -\_def\.writefromblock_int(#1#2#3){% - % #1#2 = first byte (in hex) of text, which will be written to \.interleaved_text - % #3 = remainder, including \_relax\_relax\_relax terminator. - \.xaddto{\.interleaved_text}{#1#2}% - \.writefromblock_intint(#3)% -}% - -\_def\.writefromblock_intint(#1\_relax\_relax\_relax){% - \_xdef\.writefromblock_remainder{#1}% -}% - -\_newifi\_ifqr_leadingcoeff -\_def\.testleadingcoeff(#1#2){% - % Tests whether the leading digit of #1#2 is 1. - \_ifnum#1=1\_relax - \.leadingcoefftrue - \_else - \.leadingcoefffalse - \_fi -}% - -\_def\.polynomialdivide#1#2{% - \_edef\.numerator{#1}% - \_edef\.denominator{#2}% - \.divisiondonefalse% - \_ea\_ea\_ea\.oneroundofdivision\_ea\_ea\_ea{\_ea\.numerator\_ea}\_ea{\.denominator}% -}% - -\_def\.empty{}% -\_def\.oneroundofdivision#1#2{% - % #1 = f(x), of degree n - % #2 = g(x), of degree m - % Obtains a new polynomial h(x), congruent to f(x) modulo g(x), - % but of degree at most n-1. - % - % If leading coefficient of f(x) is 1, subtracts off g(x) * x^(n-m). - % If leading coefficient of f(x) is 0, strips off that leading zero. - % - \.testleadingcoeff(#1)% - \_ifqr_leadingcoeff - \.xorbitstrings{#1}{#2}% - \_ifqr_xorfailed - %If xor failed, that means our #1 was already the remainder! - \.divisiondonetrue - \_edef\.theremainder{#1}% - \_else - %xor succeeded. We need to recurse. - \_ea\_ea\_ea\_edef\_ea\_ea\_ea\.numerator\_ea\_ea\_ea{\_ea\.stripleadingzero\_ea(\.xorresult)}% - \_fi - \_else - \_ea\_def\_ea\.numerator\_ea{\.stripleadingzero(#1)}% - \_ifx\.numerator\.empty - \.divisiondonetrue - \_def\.theremainder{0}% - \_fi - \_fi - \_ifqr_divisiondone - \_relax - \_else - \_ea\.oneroundofdivision\_ea{\.numerator}{#2}% - \_fi -}% - -\_def\.stripleadingzero(0#1){#1}%Strips off a leading zero. - -\_newifi\_ifqr_xorfailed% This flag will trigger when #2 is longer than #1. - -\_def\.xorbitstrings#1#2{% - % #1 = bitstring - % #2 = bitstring no longer than #1 - \.xorfailedfalse - \_edef\.argument{(,#1\_relax\_relax)(#2\_relax\_relax)}% - \_ea\.xorbitstrings_recursive\.argument - %\.xorbitstrings_recursive(,#1\_relax\_relax)(#2\_relax\_relax)% -}% - -\_def\.xorbitstrings_recursive(#1,#2#3)(#4#5){% - % #1#2#3 is the first bitstring, xor'ed up through #1. - % #4#5 is the remaining portion of the second bitstring. - \_def\.testii{#2}% - \_def\.testiv{#4}% - \_ifx\.testii\.relax - % #1 contains the whole string. - % Now if #4 is also \_relax, that means the two strings started off with equal lengths. - % If, however, #4 is not \_relax, that means the second string was longer than the first, a problem. - \_ifx\.testiv\.relax - %No problem. We are done. - \.xorbit_saveresult(#1#2#3)% - \_else - %Problem! The second string was longer than the first. - \.xorfailedtrue - \_def\.xorresult{}% - \_fi - \_else - % There is still a bit to manipulate in #2. - % Check whether #4 contains anything. - \_ifx\.testiv\.relax - % No, #4 is empty. We are done. "#2#3" contains the remainder of the first string, - % which we append untouched and then strip off the two \_relax-es. - \.xorbit_saveresult(#1#2#3)% - \_else - % Yes, #4 still has something to XOR. Do the task. - \_ifnum#2=#4\_relax - \.xorbitstrings_recursive(#1% - 0,#3)(#5)% - \_else - \.xorbitstrings_recursive(#1% - 1,#3)(#5)% - \_fi - \_fi - \_fi -}% - -\_def\.xorbit_saveresult(#1\_relax\_relax){% - %Strips off the extra '\_relax'es at the end. - \_def\.xorresult{#1}% -}% - -\_newifi\_ifqr_divisiondone - -\_def\.BCHcode#1{% - \_edef\.formatinfo{#1}% - \_def\.formatinfopadded{\.formatinfo 0000000000}% - \_def\.divisor{10100110111}% - \.divisiondonefalse - \.polynomialdivide{\.formatinfopadded}{\.divisor}% - % - \.getstringlength{\.theremainder}% - %Run loop from stringlength+1 to 10. - \.a=\.stringlength\_relax% - \_advance\.a by 1\_relax% - \.for \.iz = \.a to 10 by 1% - {% - \_xdef\.theremainder{0\.theremainder}% - }% - \_edef\.BCHresult{\.formatinfo\.theremainder}% -}% - -\_def\.formatmask{101010000010010}% - -\_def\.encodeandmaskformat#1{% - \.BCHcode{#1}% - \.xorbitstrings{\.BCHresult}{\.formatmask}% - \_edef\.formatbitstring{\.xorresult}% -}% - -\_def\.Golaycode#1{% - % #1 = 6-bit version number - \_edef\.versioninfo{#1}% - \_def\.versioninfopadded{\.versioninfo 000000000000}% %Append 12 zeros. - \_def\.divisor{1111100100101}% - \.divisiondonefalse - \.polynomialdivide{\.versioninfopadded}{\.divisor}% - % - \.getstringlength{\.theremainder}% - %Run loop from stringlength+1 to 12. - \.a=\.stringlength\_relax% - \_advance\.a by 1\_relax% - \.for \.iz = \.a to 12 by 1% - {% - \_xdef\.theremainder{0\.theremainder}% - }% - \_edef\.Golayresult{\.versioninfo\.theremainder}% -}% -\_def\.Fresult{}% - -\_def\.xorbitstring#1#2#3{% - % #1 = new macro to receive result - % #2, #3 = bitstrings to xor. The second can be shorter than the first. - \_def\.xor_result{}% - \_edef\.argument{(#2\_relax\_relax)(#3\_relax\_relax)}% - \_ea\.xorbitstring_recursive\.argument% - \_edef#1{\.xor_result}% -}% -\_def\.xorbitstring_recursive(#1#2)(#3#4){% - \_edef\.testi{#1}% - \_ifx\.testi\.relax% - %Done. - \let\.next=\_relax% - \_else - \_if#1#3\_relax - \.xaddto{\.xor_result}{0}% - \_else - \.xaddto{\.xor_result}{1}% - \_fi - \_edef\.next{\_noexpand\.xorbitstring_recursive(#2)(#4)}% - \_fi - \.next -} - -\_def\.Faddchar_raw#1#2{% - %Add two hexadecimal digits using bitwise xor - \.hextobinary[4]{\.summandA}{#1}% - \.hextobinary[4]{\.summandB}{#2}% - \.xorbitstring{\.Fresult}{\.summandA}{\.summandB}% - \.binarytohex[1]{\.Fresult}{\.Fresult}% -}% - -\_def\.canceltwos#1{% - \_edef\.argument{(#1\_relax\_relax)}% - \_ea\.canceltwos_int\.argument% -}% - -\_def\.canceltwos_int(#1#2){% - \_ea\.canceltwos_recursion(,#1#2)% -}% - -\_def\.canceltwos_recursion(#1,#2#3){% - \_def\.testii{#2}% - \_ifx\.testii\.relax - %Cancelling complete. - \.striptworelaxes(#1#2#3)% - %Now \.Fresult contains the answer. - \_else - \_relax - \_ifnum#2=2\_relax - \.canceltwos_recursion(#10,#3)% - \_else - \.canceltwos_recursion(#1#2,#3)% - \_fi - \_fi -}% - -\_def\.striptworelaxes(#1\_relax\_relax){% - \_gdef\.Fresult{#1}% -}% - -\.for \.iz = 0 to 15 by 1% - {\.decimaltohex[1]{\.tempa}{\_the\.iz}% - \.for \.jz = 0 to 15 by 1% - {\.decimaltohex[1]{\.tempb}{\_the\.jz}% - \.Faddchar_raw\.tempa\.tempb - \_ea\_xdef\_csname F@addchar@\.tempa\.tempb\_endcsname{\.Fresult}% - }% - }% - -\_def\.Faddchar#1#2{% - \_ea\_def\_ea\.Fresult\_ea{\_csname F@addchar@#1#2\_endcsname}% -}% - -\_def\.Faddstrings#1#2{% - \_edef\.argument{(,#1\_relax\_relax)(#2\_relax\_relax)}% - \_ea\.Faddstrings_recursion\.argument% -}% - -\_def\.Faddstrings_recursion(#1,#2#3)(#4#5){% - %Adds two hexadecimal strings, bitwise, from left to right. - %The second string is allowed to be shorter than the first. - \_def\.testii{#2}% - \_def\.testiv{#4}% - \_ifx\.testii\.relax - %The entire string has been processed. - \_gdef\.Fresult{#1}% - \_else - \_ifx\.testiv\.relax - %The second string is over. - \.striptworelaxes(#1#2#3)% - %Now \.Fresult contains the answer. - \_else - %We continue to add. - \.Faddchar{#2}{#4}% - \_edef\.argument{(#1\.Fresult,#3)(#5)}% - \_ea\.Faddstrings_recursion\.argument% - \_fi - \_fi -}% -\_gdef\.Fstripleadingzero(0#1){\_edef\.Fresult{#1}}% - -\.i=0% -\_def\.poweroftwo{1}% -\.for \.iz = 1 to 254 by 1% - {\_global\_advance\.i by1% - \.a=\.poweroftwo\_relax - \_multiply\.a by 2\_relax - \_edef\.poweroftwo{\_the\.a}% - \.decimaltohex[2]{\.poweroftwo_hex}{\.poweroftwo}% - \_ea\_ifnum\.poweroftwo>255\_relax - %We need to bitwise add the polynomial represented by 100011101, i.e. 0x11d. - \.Faddstrings{\.poweroftwo_hex}{11d}% %Now it should start with 0. - \_ea\.Fstripleadingzero\_ea(\.Fresult)% %Now it should be two hex digits. - \_edef\.poweroftwo_hex{\.Fresult}% %Save the hex version. - \.hextodecimal{\.poweroftwo}{\.Fresult}% - \_fi - \_xdef\.poweroftwo{\.poweroftwo}% - \_ea\_xdef\_csname F@twotothe@\_the\.i\_endcsname{\.poweroftwo_hex}% - \_ea\_xdef\_csname F@logtwo@\.poweroftwo_hex\_endcsname{\_the\.i}% - }% -\_ea\_xdef\_csname F@twotothe@0\_endcsname{01}% -\_ea\_xdef\_csname F@logtwo@01\_endcsname{0}% - -\_def\.Ftwotothe#1{% - \_ea\_xdef\_ea\.Fresult\_ea{\_csname F@twotothe@#1\_endcsname}% -}% -\_def\.Flogtwo#1{% - \_ea\_xdef\_ea\.Fresult\_ea{\_csname F@logtwo@#1\_endcsname}% -}% - -\_def\.zerozero{00}% - -\_def\.Fmultiply#1#2{% - % #1 and #2 are two elements of F_256, - % given as two-character hexadecimal strings. - % Multiply them within F_256, and place the answer in \.Fresult - \_edef\.argA{#1}% - \_edef\.argB{#2}% - \_ifx\.argA\.zerozero - \_def\.Fresult{00}% - \_else - \_ifx\.argB\.zerozero - \_def\.Fresult{00}% - \_else - \_ea\.Flogtwo\_ea{\.argA}% - \_edef\.logA{\.Fresult}% - \_ea\.Flogtwo\_ea{\.argB}% - \_edef\.logB{\.Fresult}% - \_ea\.a\_ea=\.logA\_relax% \.a = \logA - \_ea\_advance\_ea\.a\.logB\_relax% \advance \.a by \logB - \_ifnum\.a>254\_relax% - \_advance\.a by -255\_relax - \_fi - \_ea\.Ftwotothe\_ea{\_the\.a}% - % Now \.Fresult contains the product, as desired. - \_fi - \_fi -}% - -\_newifi\_ifqr_FXleadingcoeff_zero -\_def\.FXtestleadingcoeff(#1#2#3){% - % Tests whether the leading coefficient of the hex-string #1#2#3 is '00'. - \_edef\.FXleadingcoefficient{#1#2}% - \.FXleadingcoeff_zerofalse - \_ifx\.FXleadingcoefficient\.zerozero - \.FXleadingcoeff_zerotrue - \_fi -}% - -\_newifi\_ifqr_FXdivisiondone - -\_newcount\.divisionsremaining %Keep track of how many divisions to go! -\_def\.FXpolynomialdivide#1#2{% - \_edef\.FXnumerator{#1}% - \_edef\.denomin{#2}% - \.getstringlength\.FXnumerator - \.setcounter\.divisionsremaining{\.stringlength}% - \.getstringlength\.denomin - \.addtocounter\.divisionsremaining{-\.stringlength}% - \.addtocounter\.divisionsremaining{2}% - \_divide\.divisionsremaining by 2\_relax %2 hex chars per number - \.FXdivisiondonefalse - \_ea\_ea\_ea\.FXpolynomialdivide_recursive\_ea\_ea\_ea{\_ea\.FXnumerator\_ea}\_ea{\.denomin}% -}% - -\_def\.FXpolynomialdivide_recursive#1#2{% - % #1 = f(x), of degree n - % #2 = g(x), of degree m - % Obtains a new polynomial h(x), congruent to f(x) modulo g(x), - % but of degree at most n-1. - % - % If leading coefficient of f(x) is 0, strips off that leading zero. - % If leading coefficient of f(x) is a, subtracts off a * g(x) * x^(n-m). - % N.B. we assume g is monic. - % - \.FXtestleadingcoeff(#1)% - \_ifqr_FXleadingcoeff_zero - %Leading coefficient is zero, so remove it. - \_ea\_def\_ea\.FXnumerator\_ea{\.FXstripleadingzero(#1)}% - \_else% - %Leading coefficient is nonzero, and contained in \.FXleadingcoefficient - \.FXsubtractphase{#1}{#2}{\.FXleadingcoefficient}% - \_ifqr_FXsubtractfailed - %If subtraction failed, that means our #1 was already the remainder! - \.FXdivisiondonetrue - \_edef\.theremainder{#1}% - \_else% - %xor succeeded. We need to recurse. - \_ea\_ea\_ea\_edef\_ea\_ea\_ea\.FXnumerator\_ea\_ea\_ea{\_ea\.FXstripleadingzero\_ea(\.FXsubtraction_result)}% - \_fi% - \_fi% - \.addtocounter\.divisionsremaining{-1}% - \_ifnum\.divisionsremaining=0\_relax - %Division is done! - \.FXdivisiondonetrue - \_edef\.theremainder{\.FXnumerator}% - \_relax% - \_else% - \_ea\.FXpolynomialdivide_recursive\_ea{\.FXnumerator}{#2}% - \_fi% -}% - -\_def\.FXstripleadingzero(00#1){#1}%Strips off a single leading zero of F_256. - -\_newifi\_ifqr_FXsubtractfailed% This flag will trigger when #2 is longer than #1. - -\_def\.FXsubtractphase#1#2#3{% - % #1 = bitstring - % #2 = bitstring no longer than #1 - % #3 = leading coefficient - \.FXsubtractfailedfalse - \_edef\.argument{(,#1\_relax\_relax\_relax)(#2\_relax\_relax\_relax)(#3)}% - \_ea\.FXsubtract_recursive\.argument% -}% - -\_def\.FXsubtract_recursive(#1,#2#3#4)(#5#6#7)(#8){% - % This is a recursive way to compute f(x) - a*g(x)*x^k. - % #1#2#3#4 is the first bitstring, subtracted up through #1. - % Thus #2#3 constitutes the next two-character coefficient. - % #5#6#7 is the remaining portion of the second bitstring. - % Thus #5#6 constitutes the next two-character coefficient - % #8 is the element a of F_256. It should contain two characters. - \_def\.testii{#2}% - \_def\.testv{#5}% - \_ifx\.testii\.relax - % #1 contains the whole string. - % Now if #5 is also \_relax, that means the two strings started off with equal lengths. - % If, however, #5 is not \_relax, that means the second string was longer than the first, a problem. - \_ifx\.testv\.relax - %No problem. We are done. - \.FXsubtract_saveresult(#1#2#3#4)% %We keep the #2#3#4 to be sure we have all three relax-es to strip off. - \_else - %Problem! The second string was longer than the first. - %This usually indicates the end of the long division process. - \.FXsubtractfailedtrue - \_def\.FXsubtraction_result{}% - \_fi - \_else - % There is still a coefficient to manipulate in #2#3. - % Check whether #5 contains anything. - \_ifx\.testv\.relax - % No, #5 is empty. We are done. "#2#3#4" contains the remainder of the first string, - % which we append untouched and then strip off the three \_relax-es. - \.FXsubtract_saveresult(#1#2#3#4)% - \_else - % Yes, #5#6 still has something to XOR. Do the task. - \.Fmultiply{#5#6}{#8}% Multiply by the factor 'a'. - \.Faddstrings{#2#3}{\.Fresult}% Subtract. (We're in characteristic two, so adding works.) - \_edef\.argument{(#1\.Fresult,#4)(#7)(#8)}% - \_ea\.FXsubtract_recursive\.argument% - \_fi - \_fi -}% - -\_def\.FXsubtract_saveresult(#1\_relax\_relax\_relax){% - %Strips off the three extra '\_relax'es at the end. - \_def\.FXsubtraction_result{#1}% -}% - -\_def\.FXcreategeneratorpolynomial#1{% - % #1 = n, the number of error codewords desired. - % We need to create \prod_{j=0}^{n-1} (x-2^j). - \_edef\.FXgenerator_degree{#1}% - \_def\.FXgeneratorpolynomial{01}% Initially, set it equal to 1. - \.setcounter\.i{0}% - \.FXcreategenerator_recursive% - %The result is now stored in \.FXgeneratorpolynomial -}% - -\_def\.FXcreategenerator_recursive{% - % \.FXgeneratorpolynomial contains the current polynomial f(x), - % which should be a degree-i polynomial - % equal to \prod_{j=0}^{i-1} (x-2^j). - % (If i=0, then \.FXgeneratorpolynomial should be 01.) - % This recursion step should multiply the existing polynomial by (x-2^i), - % increment i by 1, and check whether we're done or not. - \_edef\.summandA{\.FXgeneratorpolynomial 00}% This is f(x) * x - \_edef\.summandB{00\.FXgeneratorpolynomial}% This is f(x), with a 0x^{i+1} in front. - \.Ftwotothe{\_the\.i}% - \_edef\.theconstant{\.Fresult}% - \.FXsubtractphase{\.summandA}{\.summandB}{\.theconstant}% - %This calculates \.summandA + \.theconstant * \.summandB - %and stores the result in \.FXsubtraction_result - \_edef\.FXgeneratorpolynomial{\.FXsubtraction_result}% - \.stepcounter\.i - \_ea \_ifnum\.FXgenerator_degree=\.i\_relax - %We just multiplied by (x-2^{n-1}), so we're done. - \_relax - \_else% - %We need to do this again! - \_ea \.FXcreategenerator_recursive - \_fi -}% - -\_def\.FXgenerate_errorbytes#1#2{% - % #1 = datastream in hex - % #2 = number of error correction bytes requested - \_edef\.numerrorbytes{#2}% - \_ea\.FXcreategeneratorpolynomial\_ea{\.numerrorbytes}% - \_edef\.FXnumerator{#1}% - \.for \.iz = 1 to \.numerrorbytes by 1% - {\.xaddto\.FXnumerator{00}}% %One error byte means two hex codes. - \.FXpolynomialdivide{\.FXnumerator}{\.FXgeneratorpolynomial}% - \_edef\.FXerrorbytes{\.theremainder}% -}% -\_newifi\_ifqr_versionmodules - -\_def\.level_char#1{% - \_ea\_ifcase#1 - M\_or L\_or H\_or Q\_fi}% - -\_newifi\_ifqr_versiongoodenough -\_def\.choose_bestversion#1{% - % \.desiredversion = user-requested version - % \.desiredlevel = user-requested error-correction level - \_edef\.stringlength{\.utfstringlen{#1}}% - % - %Run double loop over levels and versions, looking for - %the smallest version that can contain our data, - %and then choosing the best error-correcting level at that version, - %subject to the level being at least as good as the user desires. - \_global\.versiongoodenoughfalse% - \_gdef\.bestversion{0}% - \_gdef\.bestlevel{0}% - \_ifnum\.desiredversion=0\_relax - \.a=1\_relax - \_else - \.a=\.desiredversion\_relax - \_fi - \.for \.iz=\.a to 40 by 1 - {\_edef\.version{\_the\.iz}% - \_global\.versiongoodenoughfalse - \.for \.jz=0 to 3 by 1% - {%First, we map {0,1,2,3} to {1,0,4,3}, so that we loop through {M,L,H,Q} - %in order of increasing error-correction capabilities. - \.a = \.jz\_relax - \_divide \.a by 2\_relax - \_multiply \.a by 4\_relax - \_advance \.a by 1\_relax - \_advance \.a by -\.jz\_relax - \_edef\.level{\_the\.a}% - \_ifnum\.desiredlevel=\.a\_relax - \_global\.versiongoodenoughtrue - \_fi - \_ifqr_versiongoodenough - \.calculate_capacity{\.version}{\.level}% - \_ea\_ea\_ea\_ifnum\_ea\.truecapacity\_ea<\.stringlength\_relax - %Too short - \_relax - \_else - %Long enough! - \_xdef\.bestversion{\.version}% - \_xdef\.bestlevel{\.level}% - \_global\.iz=40% - \_fi - \_fi - }% - }% - \_edef\.version{\.bestversion}% - \_edef\.level{\.bestlevel}% - \_ea\_ifnum\.desiredversion>0\_relax - \_ifx\.bestversion\.desiredversion\_relax - %No change from desired version. - \_else - %Version was increased - \.message{<Requested QR version '\.desiredversion' is too small for desired text.}% - \.message{Version increased to '\.bestversion' to fit text.>^^J}% - \_fi - \_fi - \_ifx\.bestlevel\.desiredlevel\_relax - %No change in level. - \_else - \.message{<Error-correction level increased from \.level_char{\.desiredlevel}}% - \.message{to \.level_char{\.bestlevel} at no cost.>^^J}% - \_fi -}% - -\_def\.calculate_capacity#1#2{% - \_edef\.version{#1}% - \_edef\.level{#2}% - %Calculate \.size, the number of modules per side. - % The formula is 4\.version+17. - \.a=\.version\_relax - \_multiply\.a by 4\_relax - \_advance\.a by 17\_relax - \_xdef\.size{\_the\.a}% - % - % Calculate \.k, which governs the number of alignment patterns. - % The alignment patterns lie in a kxk square, except for 3 that are replaced by finding patterns. - % The formula is 2 + floor( \.version / 7 ), except that k=0 for version 1. - \_ea\_ifnum\.version=1\_relax% - \_def\.k{0}% - \_else% - \.a=\.version\_relax - \_divide \.a by 7\_relax - \_advance\.a by 2\_relax - \_edef\.k{\_the\.a}% - \_fi% - % - %Calculate number of function pattern modules. - %This consists of the three 8x8 finder patterns, the two timing strips, and the (k^2-3) 5x5 alignment patterns. - %The formula is 160+2n+25(k^2-3)-10(k-2), unless k=0 in which case we just have 160+2n. - \.a=\.size\_relax - \_multiply\.a by 2\_relax - \_advance\.a by 160\_relax - \_ea\_ifnum\.k=0\_relax\_else - %\.k is nonzero, hence at least 2, so we continue to add 25(k^2-3)-10(k-2). - \.b=\.k\_relax - \_multiply\.b by \.k\_relax - \_advance\.b by -3\_relax - \_multiply\.b by 25\_relax - \_advance\.a by \.b\_relax - \.b=\.k\_relax - \_advance\.b by -2\_relax - \_multiply\.b by 10\_relax - \_advance\.a by -\.b\_relax - \_fi - \_edef\.numfunctionpatternmodules{\_the\.a}% - % - %Calculate the number of version modules, either 36 or 0. - \_ea\_ifnum\.version>6\_relax - \.versionmodulestrue - \_def\.numversionmodules{36}% - \_else - \.versionmodulesfalse - \_def\.numversionmodules{0}% - \_fi - % - %Now calculate the codeword capacity and remainder bits. - %Take n^2 modules, subtract all those dedicated to finder patterns etc., format information, and version information, - %and what's left is the number of bits we can play with. - %The number of complete bytes is \.numdatacodewords; - %the leftover bits are \.numremainderbits. - \.a=\.size\_relax - \_multiply \.a by \.size\_relax - \_advance \.a by -\.numfunctionpatternmodules\_relax - \_advance \.a by -31\_relax% % There are 31 format modules. - \_advance \.a by -\.numversionmodules\_relax - \.b=\.a\_relax - \_divide \.a by 8\_relax - \_edef\.numdatacodewords{\_the\.a}% - \_multiply\.a by 8\_relax - \_advance \.b by -\.a\_relax - \_edef\.numremainderbits{\_the\.b}% - % - %The size of the character count indicator also varies by version. - %There are only two options, so hardcoding seems easier than expressing these functionally. - \_ea\_ifnum\.version<10\_relax - \_def\.charactercountbytes_byte{1}% - \_def\.charactercountbits_byte{8}% - \_else - \_def\.charactercountbytes_byte{2}% - \_def\.charactercountbits_byte{16}% - \_fi - % - %Now we call on the table, from the QR specification, - %of how many blocks to divide the message into, and how many error bytes each block gets. - %This affects the true capacity for data, which we store into \.totaldatacodewords. - % The following macro sets \.numblocks and \.numeccodewords - % based on Table 9 of the QR specification. - \.settableix - \.a = -\.numblocks\_relax - \_multiply \.a by \.numeccodewords\_relax - \_advance\.a by \.numdatacodewords\_relax - \_edef\.totaldatacodewords{\_the\.a}% - \_advance\.a by -\.charactercountbytes_byte\_relax%Subtract character count - \_advance\.a by -1\_relax% Subtract 1 byte for the 4-bit mode indicator and the 4-bit terminator at the end. - \_edef\.truecapacity{\_the\.a}% -} - -\_def\.setversion#1#2{% - % #1 = version number, an integer between 1 and 40 inclusive. - % #2 = error-correction level, as an integer between 0 and 3 inclusive. - % 0 = 00 = M - % 1 = 01 = L - % 2 = 10 = H - % 3 = 11 = Q - % This macro calculates and sets a variety of global macros and/or counters - % storing version information that is used later in construction the QR code. - % Thus \setversion should be called every time! - % - \_edef\.version{#1}% - \_edef\.level{#2}% - % - \.calculate_capacity{\.version}{\.level}% - %The capacity-check code sets the following: - % * \.size - % * \.k - % * \_ifqr_versionmodules - % * \.numversionmodules - % * \.numdatacodewords - % * \.numremainderbits - % * \.charactercountbits_byte - % * \.charactercountbytes_byte - % * \.numblocks (via \.settableix) - % * \.numeccodewords (via \.settableix) - % * \.totaldatacodewords - % - % The alignment patterns' square is 7 modules in from each edge. - % They are spaced "as evenly as possible" with an even number of modules between each row/column, - % unevenness in division being accommodated by making the first such gap smaller. - % The formula seems to be - % general distance = 2*round((n-13)/(k-1)/2+0.25) - % = 2*floor((n-13)/(k-1)/2+0.75) - % = 2*floor( (2*(n-13)/(k-1)+3) / 4 ) - % = (((2*(n-13)) div (k-1) + 3 ) div 4 ) * 2 - % first distance = leftovers - % The 0.25 is to accommodate version 32, which is the only time we round down. - % Otherwise a simple 2*ceiling((n-13)/(k-1)/2) would have sufficed. - % - \.a = \.size\_relax - \_advance\.a by -13\_relax - \_multiply\.a by 2\_relax - \.b = \.k\_relax - \_advance \.b by -1\_relax - \_divide\.a by \.b\_relax - \_advance\.a by 3\_relax - \_divide\.a by 4\_relax - \_multiply\.a by 2\_relax - \_edef\.alignment_generalskip{\_the\.a}% - % - %Now set \.alignment_firstskip to (\.size-13)-(\.k-2)*\.alignment_generalskip % - \.a = \.k\_relax - \_advance\.a by -2\_relax - \_multiply\.a by -\.alignment_generalskip\_relax - \_advance\.a by \.size\_relax - \_advance\.a by -13\_relax - \_edef\.alignment_firstskip{\_the\.a}% - % - % - % - % Our \.totaldatacodewords bytes of data are broken up as evenly as possible - % into \.numblocks datablocks; some may be one byte longer than others. - % We set \.shortblock_size to floor(\.totaldatacodewords / \.numblocks) - % and \.numlongblocks to mod(\.totaldatacodewords , \.numblocks). - \.a=\.totaldatacodewords\_relax - \_divide\.a by \.numblocks\_relax - \_edef\.shortblock_size{\_the\.a}% - \_multiply\.a by -\.numblocks\_relax - \_advance\.a by \.totaldatacodewords\_relax - \_edef\.numlongblocks{\_the\.a}% - % - %Set \.longblock_size to \.shortblock_size+1. - \.a=\.shortblock_size\_relax - \_advance\.a by 1\_relax - \_edef\.longblock_size{\_the\.a}% - % - %Set \.numshortblocks to \.numblocks - \.numlongblocks - \.b=\.numblocks\_relax - \_advance\.b by -\.numlongblocks\_relax - \_edef\.numshortblocks{\_the\.b}% -}% - -\_def\.settableix_int(#1,#2){% - \_edef\.numblocks{#1}% - \_edef\.numeccodewords{#2}% -}% - -\_def\.settableix{% -\_ea\_ifcase\.level\_relax - %00: Level 'M', medium error correction - \_edef\.tempdata{(% - \_ifcase\.version\_relax - \_relax %There is no version 0. - \_or1,10% - \_or1,16% - \_or1,26% - \_or2,18% - \_or2,24% - \_or4,16% - \_or4,18% - \_or4,22% - \_or5,22% - \_or5,26% - \_or5,30% - \_or8,22% - \_or9,22% - \_or9,24% - \_or10,24% - \_or10,28% - \_or11,28% - \_or13,26% - \_or14,26% - \_or16,26% - \_or17,26% - \_or17,28% - \_or18,28% - \_or20,28% - \_or21,28% - \_or23,28% - \_or25,28% - \_or26,28% - \_or28,28% - \_or29,28% - \_or31,28% - \_or33,28% - \_or35,28% - \_or37,28% - \_or38,28% - \_or40,28% - \_or43,28% - \_or45,28% - \_or47,28% - \_or49,28% - \_fi)}% -\_or - %01: Level 'L', low error correction - \_edef\.tempdata{% - (\_ifcase\.version\_relax - \_relax %There is no version 0. - \_or 1,7% - \_or 1,10% - \_or 1,15% - \_or 1,20% - \_or 1,26% - \_or 2,18% - \_or 2,20% - \_or 2,24% - \_or 2,30% - \_or 4,18% - \_or 4,20% - \_or 4,24% - \_or 4,26% - \_or 4,30% - \_or 6,22% - \_or 6,24% - \_or 6,28% - \_or 6,30% - \_or 7,28% - \_or 8,28% - \_or 8,28% - \_or 9,28% - \_or 9,30% - \_or 10,30% - \_or 12,26% - \_or 12,28% - \_or 12,30% - \_or 13,30% - \_or 14,30% - \_or 15,30% - \_or 16,30% - \_or 17,30% - \_or 18,30% - \_or 19,30% - \_or 19,30% - \_or 20,30% - \_or 21,30% - \_or 22,30% - \_or 24,30% - \_or 25,30% - \_fi)}% -\_or - %10: Level 'H', high error correction - \_edef\.tempdata{(% - \_ifcase\.version\_relax - \_relax %There is no version 0. - \_or1,17% - \_or1,28% - \_or2,22% - \_or4,16% - \_or4,22% - \_or4,28% - \_or5,26% - \_or6,26% - \_or8,24% - \_or8,28% - \_or11,24% - \_or11,28% - \_or16,22% - \_or16,24% - \_or18,24% - \_or16,30% - \_or19,28% - \_or21,28% - \_or25,26% - \_or25,28% - \_or25,30% - \_or34,24% - \_or30,30% - \_or32,30% - \_or35,30% - \_or37,30% - \_or40,30% - \_or42,30% - \_or45,30% - \_or48,30% - \_or51,30% - \_or54,30% - \_or57,30% - \_or60,30% - \_or63,30% - \_or66,30% - \_or70,30% - \_or74,30% - \_or77,30% - \_or81,30% - \_fi)}% -\_or - %11: Level 'Q', quality error correction - \_edef\.tempdata{(% - \_ifcase\.version\_relax - \_relax %There is no version 0. - \_or1,13% - \_or1,22% - \_or2,18% - \_or2,26% - \_or4,18% - \_or4,24% - \_or6,18% - \_or6,22% - \_or8,20% - \_or8,24% - \_or8,28% - \_or10,26% - \_or12,24% - \_or16,20% - \_or12,30% - \_or17,24% - \_or16,28% - \_or18,28% - \_or21,26% - \_or20,30% - \_or23,28% - \_or23,30% - \_or25,30% - \_or27,30% - \_or29,30% - \_or34,28% - \_or34,30% - \_or35,30% - \_or38,30% - \_or40,30% - \_or43,30% - \_or45,30% - \_or48,30% - \_or51,30% - \_or53,30% - \_or56,30% - \_or59,30% - \_or62,30% - \_or65,30% - \_or68,30% - \_fi)}% -\_fi -\_ea\.settableix_int\.tempdata -}% - -\_def\.qM{M}\_def\.qz{0}% -\_def\.qL{L}\_def\.qi{1}% -\_def\.qH{H}\_def\.qii{2}% -\_def\.qQ{Q}\_def\.qiii{3}% -\_def\.setlevel#1{% - \_edef\.level_selected{#1}% - \_ifx\.level_selected\.qM - \_edef\.desiredlevel{0}% - \_fi - \_ifx\.level_selected\.qL - \_edef\.desiredlevel{1}% - \_fi - \_ifx\.level_selected\.qH - \_edef\.desiredlevel{2}% - \_fi - \_ifx\.level_selected\.qQ - \_edef\.desiredlevel{3}% - \_fi - \_ifx\.level_selected\.qz - \_edef\.desiredlevel{0}% - \_fi - \_ifx\.level_selected\.qi - \_edef\.desiredlevel{1}% - \_fi - \_ifx\.level_selected\.qii - \_edef\.desiredlevel{2}% - \_fi - \_ifx\.level_selected\.qiii - \_edef\.desiredlevel{3}% - \_fi -}% - -% key-value pairs (OPmac trick 0069) -\_def\.kv#1{\_ifcsname _qr_kv:#1\_endcsname \_csname _qr_kv:#1\_ea\_endcsname - \_else \_ea\.kvunknown \_fi -} -\_def\.kvunknown{???} -\_def\.kvscan #1#2=#3,{\_ifx#1,\_else \_sdef{_qr_kv:#1#2}{#3}\_ea\.kvscan\_fi} - -\_def\.qrset#1{\_def\.tmpb{#1,}% - \_replstring\.tmpb{ =}{=}\_replstring\.tmpb{= }{=}% - \_replstring\.tmpb{tight,}{qr-border=0,}% - \_replstring\.tmpb{padding,}{qr-border=1,}% - \_replstring\.tmpb{verbose,}{qr-message=1,}% - \_replstring\.tmpb{silent,}{qr-message=0,}% - \_replstring\.tmpb{draft,}{qr-final=0,}% - \_replstring\.tmpb{final,}{qr-final=1,}% - \_replstring\.tmpb{nolink,}{qr-link=0,}% - \_replstring\.tmpb{link,}{qr-link=1,}% - \_ea\.kvscan\.tmpb,=,% - \.desiredheight=\.kv{height}\_relax - \.setlevel{\.kv{level}}% - \_edef\.desiredversion{\.kv{version}}% -} -\.qrset{height=2cm, version=0, level=M, tight, silent, final, nolink} - -\_def\.setcounter #1#2{\_global#1=#2\_relax} -\_def\.stepcounter #1{\_global\_advance#1 by1\_relax} -\_def\.addtocounter#1#2{\_global\_advance#1 by#2\_relax} - -\_def\.qrcode{\_begingroup - \_isnextchar[{\.qrcodeA}{\.qrcodeB}% -} -\_def\.qrcodeA[#1]{\.qrset{#1}\_ea\.qrcodeB\_romannumeral-`\.} -\_def\.qrcodeB#1{% - \_if1\.kv{qr-message}\_let\.message=\_message \_else \_def\.message##1{}\_fi - \_if1\.kv{qr-border}\_def\.padd{\_kern4\.modulesize}\_else\_def\.padd{}\_fi - \_bgroup - \_escapechar=-1 - \_xdef\.etext{\_detokenize{#1}}\_gdef\.text{#1}% - \_egroup - \.qrcode_int - \_endgroup -} -\_def\.qrcode_int{% - \.message{<QR code requested for "\.etext" in version - \.desiredversion-\.level_char{\.desiredlevel}.>^^J}% - %First, choose the version and level. - %Recall that \.choose_bestversion sets \.version and \.level. - \_ea\.choose_bestversion\_ea{\.etext}% - \_if1\.kv{qr-final}% - \.setversion{\.version}{\.level}% - \.qrcode_int_new - \_else - \.modulesize=\.desiredheight - \_divide\.modulesize by \.size\_relax - \_let\.d=\.desiredheight - \_vbox{\.padd\_hbox{\.padd\_vbox to\.d{\_hrule\_vss - \_hbox to\.d{\_vrule height.7\.d depth.3\.d \_hss ...QR...\_hss\_vrule}% - \_vss\_hrule}\.padd}\.padd}% - \_fi -}% - -\_nspublic \qrcode \qrset ; - -\_def\.qrcode_int_new{% - \.qrbeginhook - \.createsquareblankmatrix{newqr}{\.size}% - \.placefinderpatterns{newqr}% - \.placetimingpatterns{newqr}% - \.placealignmentpatterns{newqr}% - \.placedummyformatpatterns{newqr}% - \.placedummyversionpatterns{newqr}% - \.message{<Calculating QR code for "\.etext" in - version \.version-\.level_char{\.level}.>^^J}% - \_ea\.encode_binary\_ea{\.etext}% - \.splitcodetextintoblocks - \.createerrorblocks - \.interleave - \.message{<Writing data...}% - \.writedata_hex{newqr}{\.interleaved_text}% - \.message{done.>^^J}% - \.writeremainderbits{newqr}% - \.chooseandapplybestmask{newqr}% - \.decimaltobinary[2]{\.level_binary}{\.level}% - \.decimaltobinary[3]{\.mask_binary}{\.mask_selected}% - \_edef\.formatstring{\.level_binary\.mask_binary}% - \.message{<Encoding and writing format string...}% - \_ea\.encodeandmaskformat\_ea{\.formatstring}% - \.writeformatstring{newqr}{\.formatbitstring}% - \.message{done.>^^J}% - \.message{<Encoding and writing version information...}% - \.decimaltobinary[6]{\.version_binary}{\.version}% - \.Golaycode{\.version_binary}% - \.writeversionstring{newqr}{\.Golayresult}% - \.message{done.>^^J}% - \.message{<Printing QR code...}% - \.matrixtobinary{newqr}% - \.restore\.data - \.message{done.>^^J}% - \.qrendhook -}% - -\_def\.matrixtobinary#1{% - \_bgroup - \_gdef\.data{}% - \_def\.black{1}\_let\.blackfixed=\.black \_let\.blackformat=\.black - \_def\.white{0}\_let\.whitefixed=\.white \_let\.whiteformat=\.white - \.for \.iz = 1 to \.size by 1 - {\.for \.jz = 1 to \.size by 1 - {\_xdef\.data{\.data\.matrixentry{#1}{\_the\.iz}{\_the\.jz}}}}% - \_xdef\.data{{\.size}{\.data}}% - \_egroup -} - -\_def\.restore#1{\_ea\.restoreA#1} -\_def\.restoreA#1#2{% - \.modulesize=\.desiredheight \_divide\.modulesize by#1 - \_if1\.kv{qr-link}\_setbox0=\_fi - \_vbox\_bgroup\.padd \_offinterlineskip \_baselineskip=\.modulesize - \.i=0 \.j=0 \_let\.next=\.restoreB - \_hbox\_bgroup\.padd \.restoreB #2% - \_if1\.kv{qr-link}\.link{\.etext}{\_box0}\_fi -} -\_def\.restoreB#1{\_advance \.j by1 - \_ifx1#1\_vrule height\.modulesize width\.modulesize\_else \_kern\.modulesize\_fi - \_ifnum\.size=\.j \_vrule height\.modulesize width 0pt \.padd\_egroup \_advance\.i by1 - \_ifnum\.size=\.i \.padd\_egroup \_let\.next=\_relax \_else \_hbox\_bgroup\.padd \_fi - \_fi \.next -} - -\_def\.qrbeginhook{} -\_def\.qrendhook{} - -\_endnamespace -\_endcode - -This macro file is created for \OpTeX/. It is derived from: - -\begtt -% qrcode.tex -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Petr Olsak <petr@olsak.net> Jul. 2015 - -% This macro qrcode.tex is (roughly speaking) a copy of qrcode.sty -% macro by Anders Hendrickson <ahendric@cord.edu>, see -% http://www.ctan.org/tex-archive/macros/latex/contrib/qrcode - -% The main difference between qrcode.sty and qrcode.tex is, that -% the LaTeX ballast was removed from qrcode.sty by Petr Olsak. The result: -% The qrcode.tex macro can be used in plain TeX format too. -\endtt - -\secc Usage - -Load this macro file by `\load[qrcode]` and then the command -`\qrcode{<encoded text>}` or `\qrcode[<options>]{<encoded text>}` is ready to use. - -The parameter <encoded text> is used as is (without expanding). -It follows the same rules as in the `\code{<text>}` macro. -Use these rules if the encoded text includes a \TeX/ sensitive characters. - -The characters from all Unicode table are allowed in <encoded text>. - -\secc Options - -You can use `\qrset{<options>}` for global-like options and -`\qrcode[<options>]{<encoded text>}` for local options for one QR code. -The `\qrset{<options>}` is valid within a group (if exists) or in whole -document. - -Options are separated by comma and they are in two types: single -word or key=value format. Default options are: - -\begtt -\qrset{height=2cm, version=0, level=M, tight, silent, final, nolink} -\endtt - -The options are the same as described in `qrcode.pdf` at -\url{http://www.ctan.org/tex-archive/macros/latex/contrib/qrcode}. -In short: - -\begitems -* `height=dimen` ... The height of the QRcode without padding. - -* `version=number` ... Number 0 to 40 linearly depends on the density of QRcode. - The 0 means that the density is automatically selected. - -* `level=letter` ... L, M, Q o H (low, medium, quality, hight) sets the amount - of redundancy in the code in order of error recovering. - -* `tight` ... Code without margins. -* `padding` ... 4module blank margins around the code. - -* `verbose` ... Information about calculating in terminal and in the log. -* `silent` ... No information about calculating. - -* `final` ... The QR code is calculated and printed. -* `draft` ... Only empty rectangle in the same size as QR code is printed. - -* `nolink` ... The QR code is not active hyperlink. -* `link` ... The QR code is active hyperlink to <encoded text>. - -* `qrborder={R G B}` ... The color of the frame around active hypertext space - if link option is set. R G B (red green blue) are decimal - numbers from 0 to 1. The frame is visible only in - pdf viewers. Default: invisible frame. -\enditems - - -Example: - -\begtt -\qrset{silent} % ... all codes will be silent in the log and terminal. -\qrcode [height=3cm, link, padding, qrborder={1 0 0}] {http://petr.olsak.net} - % ... 3cm QRcode as hyperlink -\endtt - -Note: - -The saving/restoring pre-calculated QRcodes isn't supported by default. -If you are printing the same QR codes repeatedly, use \setbox/\copy -technique. For example: - -\begtt -\newbox\mybox -\setbox\mybox=\hbox{\qrcode{encoded text}} -\copy\mybox \copy\mybox \copy\mybox etc. -\endtt - -If you have a huge amount of different QR codes, you can use draft/final -options. - -The `\_qr_data` macro is saved after each \qrcode calculation in the format -`{size}{111101011...001}` where size is the number of columns or rows in QR -square and second parameter includes size^2 ones or zeros which means black -or white modules (scanned left to right, top to bottom). Another information -can be retrieved from `\_qr_text` macro (encoded text before expanding) and -`\_qr_etext` macro (raw encoded text, each charater is detokeinized). -The macros `\_qr_data`, `\_qr_text` and `\_qr_etext` are saved globally. - diff --git a/macros/luatex/optex/pkg/vlna.opm b/macros/luatex/optex/pkg/vlna.opm deleted file mode 100644 index 4db22aa0cc..0000000000 --- a/macros/luatex/optex/pkg/vlna.opm +++ /dev/null @@ -1,193 +0,0 @@ -% This is the macro package used by OpTeX, see http://petr.olsak.net/optex - -% vlna.opm, Petr Olšák <petr@olsak.net>, 2021 - -% Vlna prevents breaks in spaces after single-letter prepositions, after (or -% before) degrees, and between value and SI units. It enables or disables -% split hyphens too. All folks are done at the postprocessing phase before TeX splits -% the typesetting material into the paragraph lines. - -% vlna.opm is based on Lua code from the package `luavlna` (by Michal Hoftich -% and Miro Hrončok). See `texdoc luavlna` or end of this file for more information. - -\_namespace{vlna} - -\_codedecl \.singlechars {Preventing single-chars prepositions and more <2021-01-08>} - - \_doc ----------------------------- - We declare new attribute, register callbacks, and define Lua functions that - point to Lua functions from `luavlna.lua` package. - We need this package installed. - - We need not `require ltluatex` because `luatexbase.callbaks` are defined - in the `optex.lua` file and it is part of the OpTeX format. - \_cod ----------------------------- - -\_newattribute \.preventsinglestatus - -\_directlua{% - luavlna = require "luavlna" - - luatexbase.add_to_callback("pre_linebreak_filter", luavlna.preventsingle,"LuaVlna") - luatexbase.add_to_callback("hyphenate", luavlna.split_hyphens, "allow hyphen breaks") - luavlna.preventsingleid = \_the\_attributealloc - - set_singlechars = function(lang,chars) - if (lang == "") then return nil end - local utf_gmatch = unicode.utf8.gmatch - local chars = chars or "" - local singlechars = {} - for char in unicode.utf8.gmatch(chars,"(\_csstring\%a)") do - singlechars[char] = true - end - luavlna.singlechars(lang,singlechars) - end - - set_compounds = function(lang, compounds) - if (lang == "") then return nil end - local c = compounds:explode(",+") % match multiple colons as one - local compoundstable = {} - for _, compound in pairs(c) do - compoundstable[compound] = true - end - luavlna.initials(lang, compoundstable) - end - - set_main_language = function(lang) - if (lang == "") then return nil end - luavlna.set_main_language(tonumber(lang)) - end - - enable_split_hyphens = function(lang) - if (lang == "") then return nil end - luavlna.split_hyphen_langs[tonumber(lang)] = true - end - - disable_split_hyphens = function(lang) - if (lang == "") then return nil end - luavlna.split_hyphen_langs[tonumber(lang)] = nil - end -} - - \_doc ----------------------------- - We need not `require luavlna-langno` because of the conversion from - language name to the `\language` number is done by the macro - `\.langtonum``<sequence>={<langname>}` defined here. - It does `\def<sequence>{<langnumber>}` or `\def\sequence{}` if <langname> - is unknown. The <langname> is case insensitive and these names are - declared in the hyphen-lan.opm file, section 2.37.2 in OpTeX documentation. - \_cod ----------------------------- - -\_def\.langtonum#1=#2{\_lowercase{\_edef#1{\_trycs{_ulan:#2}{}}}% - \_ifx#1\_empty \_opwarning{vlna: unknown language "#2", ignored}% - \_else \_edef#1{\_the\_cs{_#1Patt}}\_fi} - - \_doc ----------------------------- - `\singlechars``{<langname>}{<prepositions>}` sets <prepositions> for - given language.\nl - `\compoundinitials``{<langname>}{<comma-separated-list>}` sets - compound characters from the list for given language. - \_cod ----------------------------- - -\_def\.singlechars#1#2{\.langtonum\.l={#1}\_directlua{set_singlechars("\.l","#2")}} -\_def\.compoundinitials#1#2{\.langtonum\.l={#1}\_directlua{set_compounds("\.l","#2")}} - - \_doc ----------------------------- - `\enablesplithyphens` and `\disablesplithyphens` are dependent on the language. - \_cod ----------------------------- - -\_def\.enablesplithyphens#1{\.langtonum\.l={#1}\_directlua{enable_split_hyphens("\.l")}} -\_def\.disablesplithyphens#1{\.langtonum\.l={#1}\_directlua{disable_split_hyphens("\.l")}} - - \_doc ----------------------------- - By default, the language-dependent features of the `luavlna` depend on - the current `\language` value, i.e. on the currently selected hyphenation. - `\preventsinglelang``{<langname>}` activates the language-dependent - features regardless of the current `\language` value. - \_cod ----------------------------- - -\_def\.preventsinglelang#1{\.langtonum\.l={#1}\_directlua{set_main_language("\.l")}} - - \_doc ----------------------------- - Switching on/off `luavlna` preposition features should be done using attribute - setting. It will allow you to switch them on/off in the middle of the paragraph. - \_cod ----------------------------- - -\_def\.preventsingleon{\.preventsinglestatus=2 } -\_def\.preventsingleoff{\.preventsinglestatus=1 } - - \_doc ----------------------------- - Switching on/off the other `luavlna` features is implemented only by - setting a special `luavlna` variable. - \_cod ----------------------------- - -\_def\.preventsingledebugon{\_directlua{luavlna.debug(true)}} -\_def\.preventsingledebugoff{\_directlua{luavlna.debug(false)}} - -\_def\.nopredegrees{\_directlua{luavlna.no_predegrees = true}} -\_def\.nosufdegrees{\_directlua{luavlna.no_sufdegrees = true}} -\_def\.nounits{\_directlua{luavlna.no_unit = true}} -\_def\.noinitials{\_directlua{luavlna.no_initials = true}} - -\_nspublic - \singlechars % declare single-letter prepositions per language - \compoundinitials % declare compound characters per language - \enablesplithyphens % enable split hyphens per language - \disablesplithyphens % disable split hyphens per language - \preventsinglelang % declare main language independent of current hyphenation - \preventsingleon % switch on the prepositions feature (default) - \preventsingleoff % switch off the prepositions feature - \nopredegrees % switch off pre-degrees feature (default is on) - \nosufdegrees % switch off post-degrees feature (default is on) - \nounits % switch off SI units feature (default is on) - \noinitials % switch off initials feature (default is on) - \preventsingledebugon % switch on debug printing (purple squares) - \preventsingledebugoff % switch off debug printing (default) - ; - -\_endnamespace - -% Default values: -\singlechars{Czech}{AIiVvOoUuSsZzKk} -\singlechars{Slovak}{AIiVvOoUuSsZzKk} -\compoundinitials{Czech}{Ch,CH} % doesn't work in version v0.1g of luavlna -\enablesplithyphens{Czech} -\enablesplithyphens{Slovak} -% + predegrees, sufdegrees, units, initials (they are independent of language value) - -\_endcode - -What should be done automatically after `\load[vlna]`: - - Prepositions feature: v lese -> v~lese, (A taky zde) -> (A~taky zde). - - Pre-degrees feature: Mgr. Bown -> Mgr.~Brown. - - Post-degrees feature: John Brown, PhD. -> John Brown,~PhD. - - SI units feature: 42 cm -> 42~cm (with thin space) - - Initials feature: J. Brown -> J.~Brown - - Split hyphens feature: propan-butan -> propan\discretionary{-}{-}{-}butan. - -The prepositions and split-hyphens features are language-dependent, the other -features are language-independent. - -A testing file: - -\begtt -\load[vlna] -\fontfam[LMfonts] -\cslang -\preventsingledebugon - -Mgr. J. Brown, PhD., zkusí v lese (A taky v závorce) zkontrolovat rozměr 42 m. -Obejde se bez propan-butanových lahví. -\bye -\endtt - -Note, that versinon v0.1g 2020-06-02 of the luavlna package is an -experimental code. It seems that `\compoundinitials` does not work in this -version and when you use `\hbox{-}` in a paragraph when -`\enablesplithyphens` then LuaTeX hangs. |