From d65c208b161ffee9ce5343fdfdb17d00523cecae Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 20 Apr 2021 03:00:55 +0000 Subject: CTAN sync 202104200300 --- macros/optex/README | 120 + macros/optex/base/alloc.opm | 173 + macros/optex/base/basic-macros.opm | 130 + macros/optex/base/bib-iso690.opm | 906 ++ macros/optex/base/bib-simple.opm | 164 + macros/optex/base/cite-bib.opm | 271 + macros/optex/base/colors.opm | 394 + macros/optex/base/doc.opm | 276 + macros/optex/base/f-adventor.opm | 22 + macros/optex/base/f-antt.opm | 32 + macros/optex/base/f-baskerville.opm | 22 + macros/optex/base/f-bonum.opm | 24 + macros/optex/base/f-comicneue.opm | 23 + macros/optex/base/f-cursor.opm | 22 + macros/optex/base/f-dejavu.opm | 31 + macros/optex/base/f-ebgaramond.opm | 37 + macros/optex/base/f-garamondl.opm | 26 + macros/optex/base/f-gfsbodoni.opm | 22 + macros/optex/base/f-heros.opm | 244 + macros/optex/base/f-kerkis.opm | 32 + macros/optex/base/f-kpfonts.opm | 45 + macros/optex/base/f-libertine-s.opm | 50 + macros/optex/base/f-libertine.opm | 60 + macros/optex/base/f-libertinus.opm | 36 + macros/optex/base/f-librecaslon.opm | 22 + macros/optex/base/f-lido.opm | 48 + macros/optex/base/f-lmfonts.opm | 186 + macros/optex/base/f-merriweather.opm | 33 + macros/optex/base/f-pagella.opm | 24 + macros/optex/base/f-poltawski.opm | 34 + macros/optex/base/f-roboto.opm | 59 + macros/optex/base/f-schola.opm | 24 + macros/optex/base/f-sourcepro.opm | 39 + macros/optex/base/f-technika.opm | 31 + macros/optex/base/f-termes.opm | 24 + macros/optex/base/f-xcharter.opm | 24 + macros/optex/base/fams-ini.opm | 214 + macros/optex/base/fnotes.opm | 191 + macros/optex/base/fonts-catalog.opm | 136 + macros/optex/base/fonts-opmac.opm | 226 + macros/optex/base/fonts-preload.opm | 36 + macros/optex/base/fonts-resize.opm | 354 + macros/optex/base/fonts-select.opm | 846 ++ macros/optex/base/graphics.opm | 445 + macros/optex/base/hi-syntax.opm | 223 + macros/optex/base/hisyntax-c.opm | 66 + macros/optex/base/hisyntax-html.opm | 31 + macros/optex/base/hisyntax-python.opm | 82 + macros/optex/base/hisyntax-tex.opm | 38 + macros/optex/base/hyperlinks.opm | 157 + macros/optex/base/hyphen-lan.opm | 245 + macros/optex/base/if-macros.opm | 313 + macros/optex/base/keyval.opm | 82 + macros/optex/base/languages.opm | 188 + macros/optex/base/lists.opm | 128 + macros/optex/base/logos.opm | 61 + macros/optex/base/luatex-ini.opm | 136 + macros/optex/base/makeindex.opm | 463 + macros/optex/base/maketoc.opm | 154 + macros/optex/base/margins.opm | 80 + macros/optex/base/math-macros.opm | 1079 +++ macros/optex/base/math-preload.opm | 227 + macros/optex/base/math-unicode.opm | 266 + macros/optex/base/mathclass.opm | 1591 ++++ macros/optex/base/more-macros.opm | 284 + macros/optex/base/multicolumns.opm | 114 + macros/optex/base/optex.ini | 107 + macros/optex/base/optex.lua | 356 + macros/optex/base/others.opm | 106 + macros/optex/base/outlines.opm | 108 + macros/optex/base/output.opm | 267 + macros/optex/base/parameters.opm | 588 ++ macros/optex/base/pdfuni-string.opm | 127 + macros/optex/base/plain-macros.opm | 346 + macros/optex/base/prefixed.opm | 298 + macros/optex/base/print-unimath.opm | 56 + macros/optex/base/ref-file.opm | 141 + macros/optex/base/references.opm | 94 + macros/optex/base/sections.opm | 469 + macros/optex/base/slides.opm | 247 + macros/optex/base/styles.opm | 120 + macros/optex/base/table.opm | 526 ++ macros/optex/base/uni-lcuc.opm | 15944 ++++++++++++++++++++++++++++++++ macros/optex/base/unimath-codes.opm | 439 + macros/optex/base/unimath-table.opm | 2471 +++++ macros/optex/base/usebib.opm | 398 + macros/optex/base/verbatim.opm | 372 + macros/optex/demo/op-biblist.bib | 298 + macros/optex/demo/op-demo.tex | 127 + macros/optex/demo/op-letter-cs.tex | 41 + macros/optex/demo/op-letter-en.tex | 38 + macros/optex/demo/op-ring.png | Bin 0 -> 512984 bytes macros/optex/demo/op-slides-bg.png | Bin 0 -> 62385 bytes macros/optex/demo/op-slides.tex | 322 + macros/optex/doc/omls.tex | 832 ++ macros/optex/doc/optex-doc.pdf | Bin 0 -> 1380041 bytes macros/optex/doc/optex-doc.tex | 114 + macros/optex/doc/optex-math.tex | 1662 ++++ macros/optex/doc/optex-techdoc.tex | 290 + macros/optex/doc/optex-userdoc.tex | 2019 ++++ macros/optex/doc/optex.1 | 42 + macros/optex/pkg/emoji.opm | 55 + macros/optex/pkg/plain-at.opm | 43 + macros/optex/pkg/qrcode.opm | 2707 ++++++ macros/optex/pkg/vlna.opm | 193 + 105 files changed, 44529 insertions(+) create mode 100644 macros/optex/README create mode 100644 macros/optex/base/alloc.opm create mode 100644 macros/optex/base/basic-macros.opm create mode 100644 macros/optex/base/bib-iso690.opm create mode 100644 macros/optex/base/bib-simple.opm create mode 100644 macros/optex/base/cite-bib.opm create mode 100644 macros/optex/base/colors.opm create mode 100644 macros/optex/base/doc.opm create mode 100644 macros/optex/base/f-adventor.opm create mode 100644 macros/optex/base/f-antt.opm create mode 100644 macros/optex/base/f-baskerville.opm create mode 100644 macros/optex/base/f-bonum.opm create mode 100644 macros/optex/base/f-comicneue.opm create mode 100644 macros/optex/base/f-cursor.opm create mode 100644 macros/optex/base/f-dejavu.opm create mode 100644 macros/optex/base/f-ebgaramond.opm create mode 100644 macros/optex/base/f-garamondl.opm create mode 100644 macros/optex/base/f-gfsbodoni.opm create mode 100644 macros/optex/base/f-heros.opm create mode 100644 macros/optex/base/f-kerkis.opm create mode 100644 macros/optex/base/f-kpfonts.opm create mode 100644 macros/optex/base/f-libertine-s.opm create mode 100644 macros/optex/base/f-libertine.opm create mode 100644 macros/optex/base/f-libertinus.opm create mode 100644 macros/optex/base/f-librecaslon.opm create mode 100644 macros/optex/base/f-lido.opm create mode 100644 macros/optex/base/f-lmfonts.opm create mode 100644 macros/optex/base/f-merriweather.opm create mode 100644 macros/optex/base/f-pagella.opm create mode 100644 macros/optex/base/f-poltawski.opm create mode 100644 macros/optex/base/f-roboto.opm create mode 100644 macros/optex/base/f-schola.opm create mode 100644 macros/optex/base/f-sourcepro.opm create mode 100644 macros/optex/base/f-technika.opm create mode 100644 macros/optex/base/f-termes.opm create mode 100644 macros/optex/base/f-xcharter.opm create mode 100644 macros/optex/base/fams-ini.opm create mode 100644 macros/optex/base/fnotes.opm create mode 100644 macros/optex/base/fonts-catalog.opm create mode 100644 macros/optex/base/fonts-opmac.opm create mode 100644 macros/optex/base/fonts-preload.opm create mode 100644 macros/optex/base/fonts-resize.opm create mode 100644 macros/optex/base/fonts-select.opm create mode 100644 macros/optex/base/graphics.opm create mode 100644 macros/optex/base/hi-syntax.opm create mode 100644 macros/optex/base/hisyntax-c.opm create mode 100644 macros/optex/base/hisyntax-html.opm create mode 100644 macros/optex/base/hisyntax-python.opm create mode 100644 macros/optex/base/hisyntax-tex.opm create mode 100644 macros/optex/base/hyperlinks.opm create mode 100644 macros/optex/base/hyphen-lan.opm create mode 100644 macros/optex/base/if-macros.opm create mode 100644 macros/optex/base/keyval.opm create mode 100644 macros/optex/base/languages.opm create mode 100644 macros/optex/base/lists.opm create mode 100644 macros/optex/base/logos.opm create mode 100644 macros/optex/base/luatex-ini.opm create mode 100644 macros/optex/base/makeindex.opm create mode 100644 macros/optex/base/maketoc.opm create mode 100644 macros/optex/base/margins.opm create mode 100644 macros/optex/base/math-macros.opm create mode 100644 macros/optex/base/math-preload.opm create mode 100644 macros/optex/base/math-unicode.opm create mode 100644 macros/optex/base/mathclass.opm create mode 100644 macros/optex/base/more-macros.opm create mode 100644 macros/optex/base/multicolumns.opm create mode 100644 macros/optex/base/optex.ini create mode 100644 macros/optex/base/optex.lua create mode 100644 macros/optex/base/others.opm create mode 100644 macros/optex/base/outlines.opm create mode 100644 macros/optex/base/output.opm create mode 100644 macros/optex/base/parameters.opm create mode 100644 macros/optex/base/pdfuni-string.opm create mode 100644 macros/optex/base/plain-macros.opm create mode 100644 macros/optex/base/prefixed.opm create mode 100644 macros/optex/base/print-unimath.opm create mode 100644 macros/optex/base/ref-file.opm create mode 100644 macros/optex/base/references.opm create mode 100644 macros/optex/base/sections.opm create mode 100644 macros/optex/base/slides.opm create mode 100644 macros/optex/base/styles.opm create mode 100644 macros/optex/base/table.opm create mode 100644 macros/optex/base/uni-lcuc.opm create mode 100644 macros/optex/base/unimath-codes.opm create mode 100644 macros/optex/base/unimath-table.opm create mode 100644 macros/optex/base/usebib.opm create mode 100644 macros/optex/base/verbatim.opm create mode 100644 macros/optex/demo/op-biblist.bib create mode 100644 macros/optex/demo/op-demo.tex create mode 100644 macros/optex/demo/op-letter-cs.tex create mode 100644 macros/optex/demo/op-letter-en.tex create mode 100644 macros/optex/demo/op-ring.png create mode 100644 macros/optex/demo/op-slides-bg.png create mode 100644 macros/optex/demo/op-slides.tex create mode 100644 macros/optex/doc/omls.tex create mode 100644 macros/optex/doc/optex-doc.pdf create mode 100644 macros/optex/doc/optex-doc.tex create mode 100644 macros/optex/doc/optex-math.tex create mode 100644 macros/optex/doc/optex-techdoc.tex create mode 100644 macros/optex/doc/optex-userdoc.tex create mode 100644 macros/optex/doc/optex.1 create mode 100644 macros/optex/pkg/emoji.opm create mode 100644 macros/optex/pkg/plain-at.opm create mode 100644 macros/optex/pkg/qrcode.opm create mode 100644 macros/optex/pkg/vlna.opm (limited to 'macros/optex') diff --git a/macros/optex/README b/macros/optex/README new file mode 100644 index 0000000000..b8f925e47c --- /dev/null +++ b/macros/optex/README @@ -0,0 +1,120 @@ +OpTeX: the LuaTeX format based on Plain TeX and OPmac + +Author: Petr Olsak, + +This software is in public domain. + +See http://petr.olsak.net/optex + +Files: + +base/ ... basic set of macro files used when optex.fmt is generated + and more basic macros loaded on demand during document processing. +demo/ ... examples: short document: op-demo.tex, short letter: op-letter.tex, + presentation slides: op-slides.tex. +pkg/ ... external macros. Maybe, they can be created by other authors if + the macro file conforms to the rules given in the section 2.2.5 + in the OpTeX documentation. +doc/ ... PDF version of the OpTeX documentation and sources. + +History: + +<1.01> Mar. 2021 + Minor code fixes (thanks to reports from users). + LibreCaslon font file added. + two new callbacks from new LuaTeX 1.13 added to optex.lua + active * (in lists) works as normal in math mode. + f-heros(\slides): additional font XITSMath loaded (to the base FiraMath font). + \_xhsize seting added to \margins. +<1.00> Feb. 2021 + The OMLS (OpTeX Markup Language Standard) was developed. It helps to create + convertors from/to OpTeX documents and similar applications. + \pdfunidef re-imeplemted. + \thisoutline introduced. + \verbchar introduced instead \activettchar. + Bugs fixing. +<0.19> Jan. 2021 + emoji support as pkg/emoji.opm. + non-braakable places generated by luavlna, suported as pkg/vlna.opm. + \begblock...\endblock introduced. + comment character allowed after \begtt. + more robust macros: \replstring, \table. + complete revision of documentation, spelling corrections. + Several bugs fixed. +<0.18> Dec. 2020 + Font support for next 9 families added. + Font selection system improved. + Documentation (especially about font selection system) corrected. + Macros supporting key=value included to the format. + \foreach macro improved. + Concept of multilang in bib rewritten. + \opwarning format changed (line numbers are printed too). + Several bugs fixed. +<0.17> Nov. 2020 + optex.lua introduced (instead external ltluatex.lua) + hyph.patterns are loaded directly by \patterns, not using lua code + \commentchars introduced (comments which are able to interrupt verbatim mode) +<0.16> Oct. 2020 + callback.register_x introduced, namespaces for packages corrected + kerkis and EBGaramond fontfiles added + little corrections + optex-math manual: Index added +<0.15> Jun. 2020 + Release for Overleaf - TL2020. + More vertical space above in \chap and \secc. +<0.14> Jun. 2020 + Typeseting Math with OpTeX: new document added. + Math macros corrected. + In-line verbatim in section titles allowed. + \eqbox implemented. + "\mnote up", "\displaylines to" (new features implemented) +<0.13> May 2020 + \table have more features: \tabskip, \table to, \table pxto, \vspan + The \eqalign reimplemented to be more flexible. + The boundary character ":" introduced in the \table. + \| undefined in 8bit math: bug fixed. + \isnextchar: \let\tmp=#1 -> \let\tmp= #1 +<0.12> May 2020 + The external macro qrcode.opm introduced + New directory structure: base/, demo/, pkg/, doc/ introduced. + \load macro introduced + \newif: bug fixed, other bug fixed. +<0.11> Apr. 2020 + \phi, \varpi in Unicode: bug fixed + \mathstyles introduced. +<0.10> Apr. 2020 + Technical documentation added + \_famdecl instedad \_fontdecl in font family files (incompatible change). +<0.09> Syntax highlighting implemented. +<0.08> \numberedpar implmented. \emergencystretch=20pt added as default. + \inoval, \incircle, \clipinoval, \clipincircle imlemented. + \puttext, \putpic x,y instead -y,x (incompatible change!) + footnotes have separated color stack now. + \fnotelinks implemented. + Lists by \begitems...\enditems improved (\novspaces \_vspacehalf, \ilevel). +<0.07> demos: op-letter.tex and op-slides.tex added. + \inkinspic, \transformbox, \slides added. + documentation improved and updated. +<0.06> tables re-implemented, opmac-rest removed. + footnotes, marginal notes reimplemented. + sections.opm, graphics.opm, colors.opm, languages re-implemented + Cite-bib re-implemented. + Index, sorting re-implemented. +<0.05> \boldmath reimplemented + \fontcolor, \letterspacing implemented + font catalogue improved +<0.04> references.opl, hyperlinks.opl re-implemented. + \fontfam, f-* rewritten: no usage of boundary "..." in \_fontnamegen + \fnote{...} corrected: (parameter is not really parameter) + verbatim.opl re-implemented + doc added + file-ref.opl implemented (new \_Xrefversion{3}) + bugfixing +<0.03> optex-doc optex.1 included, + verbatim.opm re-implmented, + math-unicode implemented, + usebib.opm + bib-style.opm included + \catcodetable stack implemented + bugfixing of macros. + catcodes.opl: removed, one can use \catcodetable, ... primitives, + pdfuni-string: lua code for lua5.3 fixed. +<0.02> Released. diff --git a/macros/optex/base/alloc.opm b/macros/optex/base/alloc.opm new file mode 100644 index 0000000000..5d874134d4 --- /dev/null +++ b/macros/optex/base/alloc.opm @@ -0,0 +1,173 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \newdimen {Allocators for registers <2021-02-15>} % loaded in format + + \_doc ----------------------------- + The limits are set first. + \_cod ----------------------------- + +\_chardef\_maicount = 65535 % Max Allocation Index for counts registers in LuaTeX +\_let\_maidimen = \_maicount +\_let\_maiskip = \_maicount +\_let\_maimuskip = \_maicount +\_let\_maibox = \_maicount +\_let\_maitoks = \_maicount +\_chardef\_mairead = 15 +\_chardef\_maiwrite = 15 +\_chardef\_maifam = 255 + + \_doc ----------------------------- + Each allocation macro needs its own counter. + \_cod ----------------------------- + +\_countdef\_countalloc=10 \_countalloc=255 +\_countdef\_dimenalloc=11 \_dimenalloc=255 +\_countdef\_skipalloc=12 \_skipalloc=255 +\_countdef\_muskipalloc=13 \_muskipalloc=255 +\_countdef\_boxalloc=14 \_boxalloc=255 +\_countdef\_toksalloc=15 \_toksalloc=255 +\_countdef\_readalloc=16 \_readalloc=-1 +\_countdef\_writealloc=17 \_writealloc=-1 +\_countdef\_famalloc=18 \_famalloc=3 + + \_doc ----------------------------- + The common allocation macro + \`\_allocator` `\ {} \` + 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 +\_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` 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/optex/base/basic-macros.opm b/macros/optex/base/basic-macros.opm new file mode 100644 index 0000000000..4d465c3010 --- /dev/null +++ b/macros/optex/base/basic-macros.opm @@ -0,0 +1,130 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \sdef {Basic macros for OpTeX <2021-02-03>} % loaded in format + + \_doc ------------------------------ + \`\bgroup`, \`\egroup`, \`\empty`, \`\space`, \`\null` and \`\wlog` + are classical macros from plain \TeX/. + \_cod ------------------------------ + +\_let\_bgroup={ \_let\_egroup=} +\_def \_empty {} +\_def \_space { } +\_def \_null {\_hbox{}} +\_def \_wlog {\_immediate\_write-1 } % write on log file (only) +\_public \bgroup \egroup \empty \space \null \wlog ; + + \_doc ------------------------------ + \`\ignoreit` ignores next token or `{}`, + \`\useit``{}` expands to `` (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` `{}` is equivalent to `\def\`, where `\` is a control + sequence. You can use arbitrary parameter mask after `\sdef{}`, don't + put the (unwanted) space immediately after closing brace \code{\}}. + \nl + \`\sxdef` `{}` is equivalent to `\xdef\`. + \nl + \`\slet` `{}{}` is equivalent to `\let \ = \`. + \_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` `{}{}` puts the as active character and defines it + as `{}`. 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` `{}` is only a shortcut to `\csname \endcsname`, but you need + one more `\_ea` if you need to get the real control sequence `\`. + \nl + \`\trycs` `{}{}` expands to `\` + if it is defined else to the ``. + \_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{}` adds `` to your `\macro`, which must be defined. + \_cod ------------------------------ + +\_long\_def \_addto #1#2{\_ea\_def\_ea#1\_ea{#1#2}} +\_public \addto ; + + \_doc ----------------------------- + \`\incr``` increases `` by one globally. + \`\decr``` decreases `` by one globally. + \_cod ----------------------------- + +\_def\_incr #1{\_global\_advance#1by1 } +\_def\_decr #1{\_global\_advance#1by-1 } +\_public \incr \decr ; + + \_doc ------------------------------ + \`\opwarning` `{}` 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/optex/base/bib-iso690.opm b/macros/optex/base/bib-iso690.opm new file mode 100644 index 0000000000..c58709ce83 --- /dev/null +++ b/macros/optex/base/bib-iso690.opm @@ -0,0 +1,906 @@ +% This is part of the OpTeX project, see http://petr.olsak.net/optex + +% bibliography style (iso690), version <2020-03-10>, loaded on demand by \usebib + +\_ifx\_optexbibstyle\_undefined \_errmessage + {This file can be read by: \_string\usebib/? (iso690) bibfiles command only} + \_endinput \_fi + + \_doc ----------------------------- + \`\_maybetod` (alias `\.` in the style file group) does not put the second dot. + \_cod ----------------------------- + +\_def\_maybedot{\_ifnum\_spacefactor=\_sfcode`\.\_relax\_else.\_fi} +\_tmpnum=\_sfcode`\. \_advance\_tmpnum by-2 \_sfcode`\.=\_tmpnum +\_sfcode`\?=\_tmpnum \_sfcode`\!=\_tmpnum +\_let\.=\_maybedot % prevents from double periods + + \_doc ----------------------------- + Option field. + \_cod ----------------------------- + +\_CreateField {option} +\_def\_isbiboption#1#2{\_edef\_tmp{\_noexpand\_isbiboptionA{#1}}\_tmp} +\_def\_isbiboptionA#1{\_def\_tmp##1 #1 ##2\_relax{% + \_if^##2^\_csname iffalse\_ea\_endcsname \_else\_csname iftrue\_ea\_endcsname \_fi}% + \_ea\_tmp\_biboptionsi #1 \_relax} +\_def\_bibopt[#1]#2#3{\_isbiboption{#1}\_iftrue\_def\_tmp{#2}\_else\_def\_tmp{#3}\_fi\_tmp} +\_def\_biboptionvalue#1#2{\_def\_tmp##1 #1:##2 ##3\_relax{\_def#2{##2}}% + \_ea\_tmp\_biboptionsi #1: \_relax} + +\_def\_readbiboptions{% + \_RetrieveFieldIn{option}\_biboptionsi + \_toks1=\_ea{\_biboptionsi}% + \_edef\_biboptionsi{\_space \_the\_toks1 \_space \_the\_biboptions \_space}% +} +\_newtoks\_biboptions +\_public \biboptions ; + + \_doc ----------------------------- + Formating of Author/Editor lists. + \_cod ----------------------------- + +\_def\_firstauthorformat{% + \_upper{\_Lastname}\_bprintc\_Firstname{, *}\_bprintc\_Von{ *}\_bprintc\_Junior{, *}% +} +\_def\_otherauthorformat{% + \_bprintc\_Firstname{* }\_bprintc\_Von{* }\_upper{\_Lastname}\_bprintc\_Junior{, *}% +} +\_def\_commonname{% + \_ifnum\_NameCount=1 + \_firstauthorformat + \_ifx\_dobibmark\_undefined \_edef\_dobibmark{\_Lastname}\_fi + \_else + \_ifnum0\_namecount=\_NameCount + \_ifx\_maybeetal\_empty \_bibconjunctionand\_else , \_fi + \_else , \_fi + \_otherauthorformat + \_fi +} +\_def\_authorname{% + \_ifnum\_NameCount>0\_namecount\_relax\_else \_commonname \_fi + \_ifnum\_NameCount=0\_namecount\_relax \_maybeetal \_fi +} +\_let\_editorname=\_authorname + +\_def\_prepareauedoptions#1{% + \_def\_mabyetal{}\_csname lb@abbreviatefalse\_endcsname + \_biboptionvalue{#1max}\_authormax + \_biboptionvalue{#1min}\_authormin + \_biboptionvalue{#1pre}\_authorpre + \_biboptionvalue{#1print}\_authorprint + \_isbiboption{#1etal}\_iftrue \_def\_maybeetal{\_Mtext{bib.etal}}\_fi + \_biboptionvalue{#1trim}\_autrim + \_let\_namecountraw=\_namecount + \_ifx\_authormax\_empty \_else + \_ifnum 0\_authormax<0\_namecount + \_edef\_namecount{\_ifx\_authormin\_empty\_authormax\_else\_authormin\_fi}% + \_def\_maybeetal{\_Mtext{bib.etal}}% + \_fi\_fi + \_ifx\_autrim\_empty \_def\_autrim{10000}\_fi + \_ifnum\_autrim=0 \_def\_autrim{10000}\_fi + \_ifnum 0\_namecount<\_autrim\_relax \_else \_AbbreviateFirstname \_fi +} +\_def\_maybeetal{} + +\_ifx\upper\_undefined + \_ifx\caps \_undefined \_def\upper{\_uppercase\_ea}\_else + \_def\upper#1{{\caps\_rm #1}}\_fi +\_fi +\_let\_upper=\upper + + \_doc ----------------------------- + Preparing bib-mark (used when `\nonumcitations` is set). + \_cod ----------------------------- + +\_def\_setbibmark{% + \_ifx\_dobibmark\_undefined \_def\_dobibmark{}\_fi + \_RetrieveFieldIn{bibmark}\_tmp + \_ifx\_tmp\_empty \_RetrieveFieldIn{year}\_tmp \_edef\_tmp{\_dobibmark, \_tmp}\_fi + \_bibmark=\_ea{\_tmp}% +} + + \_doc ----------------------------- + Setting phrases. + \_cod ----------------------------- + +\_def\_bibconjunctionand{\_Mtext{bib.and}} +\_def\_preurl{\_Mtext{bib.available}} +\_let\_predoi=\_preurl +\_def\_postedition{\_mtext{bib.edition}} +\_def\_Inclause{In:~} +\_def\_prevolume{\_mtext{bib.volume}} +\_def\_prenumber{\_mtext{bib.number}} +\_def\_prepages{\_mtext{bib.prepages}} +\_def\_posteditor{\_ifnum0\_namecountraw>1 \_Mtext{bib.editors}\_else\_Mtext{bib.editor}\_fi} + + \_doc ---------------------------- + \`\_Mtext``{}` 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:`. The `` 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:` 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:` 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:{}` option. The will be printed instead of the +authors list. The 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:` 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 ``. 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:`, `edmin:`, +`edetal`, `edtrim:` and `edprint:{}` (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:{}`. 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:{}` option. The the 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:{}" option. If it is set then the +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{}` 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.}` 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: ... maximum number of printed authors +aumin: ... number of printed authors if aumax exceeds +autrim: ... full Firstnames iff number of authors are less than this +auprint:{} ... text instead authors list (\AU macro may be used) +edmax, edmin, edtrim ... similar as above for editors list +edprint:{} ... text instead editors list (\ED macro may be used) +titlepost:{} ... text after title +yearprint:{} ... text instead real year (\YEAR macro may be used) +editionprint:{} .. 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/optex/base/bib-simple.opm b/macros/optex/base/bib-simple.opm new file mode 100644 index 0000000000..dff747bd57 --- /dev/null +++ b/macros/optex/base/bib-simple.opm @@ -0,0 +1,164 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +% bibliography style (simple), version <2020-03-10>, loaded on demand by \usebib + +\_ifx\_optexbibstyle\_undefined \_errmessage + {This file can be read by: \_string\usebib/? (simple) bibfiles command only} + \_endinput \_fi + +% misc: + +\_def\_maybedot{\_ifnum\_spacefactor=\_sfcode`\.\_relax\_else.\_fi} +\_tmpnum=\_sfcode`\. \_advance\_tmpnum by-2 \_sfcode`\.=\_tmpnum +\_sfcode`\?=\_tmpnum \_sfcode`\!=\_tmpnum +\_let\.=\_maybedot % prevents from double periods + +% Formatting of Author/Editor lists: + +\_def\_authorname{% + \_ifnum\_NameCount>1 + \_ifnum0\_namecount=\_NameCount \_mtext{bib.and}\_else , \_fi + \_else + \_ifx\_dobibmark\_undefined \_edef\_dobibmark{\_Lastname}\_fi + \_fi + \_bprintc\_Firstname{* }\_bprintc\_Von{* }\_Lastname\_bprintc\_Junior{, *}% +} +\_let\_editorname=\_authorname + +% Preparing bib-mark (used when \nonumcitations is set): + +\_def\_setbibmark{% + \_ifx\_dobibmark\_undefined \_def\_dobibmark{}\_fi + \_RetrieveFieldIn{bibmark}\_tmp + \_ifx\_tmp\_empty \_RetrieveFieldIn{year}\_tmp \_edef\_tmp{\_dobibmark, \_tmp}\_fi + \_bibmark=\_ea{\_tmp}% +} + +\_def\_preurl{\_hfil\_break} + +% Non-standard fieldnames: + +\_CreateField {isbn} +\_CreateField {doi} +\_CreateField {url} +\_CreateField {bibmark} + +% Sorting: + +\_SortingOrder{name,year}{lfvj} +\_SpecialSort {key} + +% Entry types: + +\_sdef{_print:END}{% + \_bprinta [note] {*.}{}% + \_setbibmark +} +\_sdef{_print:book}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}.\ }{\_bibwarning}% + \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{}% + \_bprinta [address] {*: }{\_bibwarning}% + \_bprinta [publisher] {*, }{\_bibwarning}% + \_bprinta [year] {*.\ }{\_bibwarning}% + \_bprinta [isbn] {ISBN~*.\ }{\_bibwarning}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} +\_sdef{_print:article}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprinta [title] {*.\ }{\_bibwarning}% + \_bprintb [journal] {{\_em##1}.\ }{\_bibwarning}% + \_bprinta [year] {*, }{}% + \_bprinta [volume] {* }{}% + \_bprinta [number] {(*), }{}% + \_bprinta [pages] {*.\ }{}% + \_bprintb [doi] {DOI~\_ulink[http://dx.doi.org/##1]{##1}.\ }{}% +} +\_sdef{_print:inbook}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1.}\ }{\_bibwarning}% + In:~% + \_bprinta [!editor] {*,~eds.\ }{}% + \_bprintb [booktitle] {{\_em##1}.\ }{\_bibwarning}% + \_bprinta [address] {*: }{\_bibwarning}% + \_bprinta [publisher] {*, }{\_bibwarning}% + \_bprinta [year] {*.\ }{\_bibwarning}% + \_bprinta [chapter] {*.\ }{% + \_bprinta [pages] {*.\ }{}}% + \_bprinta [isbn] {ISBN~*.\ }{}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} +\_slet{_print:inproceedings}{_print:inbook} + +\_sdef{_print:incolection}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}.\ }{\_bibwarning}% + \_bprinta [crossreff] {In~\_cite[*]. }{% + \_bprinta [booktitle] {*. }{\_bibwarning}% + \_bprinta [!editor] {*,~eds.\ }{\_bibwarning}% + \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{\_bibwarning}% + \_bprinta [address] {*: }{\_bibwarning}% + \_bprinta [publisher] {*, }{\_bibwarning}% + \_bprinta [year] {*.\ }{\_bibwarning}% + \_bprinta [pages] {*.\ }{}% + \_bprintb [url] {\_preurl\_url{####1}. }{}}% +} +\_sdef{_print:conference}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% + \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{}% + \_bprinta [address] {*: }{\_bibwarning}% + \_bprinta [publisher] {*, }{\_bibwarning}% + \_bprinta [year] {*.\ }{\_bibwarning}% + \_bprinta [isbn] {ISBN~*.\ }{}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} +\_sdef{_print:thesis}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% + \_bprinta [type] {*,\ }{\_bibwarning}% + \_bprinta [school] {*.\ }{}% + \_bprinta [address] {*, }{}% + \_bprinta [year] {*.\ }{}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} +\_sdef{_print:proceedings}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% + \_bprinta [publisher] {*.\ }{% + \_bprinta [organization] {*.\ }{\_bibwarning}}% +} +\_sdef{_print:techreport}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% + \_mtext{bib.techreport}. + \_bprinta [institution] {*.\ }{}% +} +\_sdef{_print:booklet}{% + \_bprinta [!author] {*\.\ }{\_bibwarning}% + \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% + \_bprinta [howpublished] {*.\ }{\_bibwarning}% +} +\_sdef{_print:manual}{% + \_bprinta [!author] {*\.\ }{}% + \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}% + \_bprinta [year] {*.\ }{}% + \_bprinta [institution] {*.\ }{}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} +\_sdef{_print:misc}{% + \_bprinta [!author] {*\.\ }{}% + \_bprintb [title] {{\_em##1}\.\ }{}% + \_bprinta [howpublished] {*.\ }{}% + \_bprinta [institution] {*.\ }{}% + \_bprinta [series] {*.\ }{}% + \_bprinta [year] {*.\ }{}% + \_bprintb [url] {\_preurl\_url{##1}. }{}% +} + +%%% end of the style file + +\_endcode + +You can copy this file to bib-yourname.opm and modify it by your +needs... diff --git a/macros/optex/base/cite-bib.opm b/macros/optex/base/cite-bib.opm new file mode 100644 index 0000000000..26a5b17bd4 --- /dev/null +++ b/macros/optex/base/cite-bib.opm @@ -0,0 +1,271 @@ +%% This is part of the OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \cite {Cite, Biblioraphy <2020-03-09>} % loaded in format + + \_doc ----------------------------- + Registers used by `\cite`, `\bib` macros are declared here. + The \`\bibnum` counts the bibliography items from one. + The \`\bibmark` is used when `\nonumcitations` is set. + \_cod ----------------------------- + +\_newcount\_bibnum % the bibitem counter +\_newtoks\_bibmark % the bibmark used if \nonumcitations +\_newcount\_lastcitenum \_lastcitenum=0 % for \shortcitations +\_public \bibnum \bibmark ; + + \_doc ----------------------------- + \`\cite` `[