diff options
Diffstat (limited to 'macros/luatex/optex/base/usebib.opm')
-rw-r--r-- | macros/luatex/optex/base/usebib.opm | 398 |
1 files changed, 0 insertions, 398 deletions
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 - |