summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/plain/zztex/zzbibtex.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/plain/zztex/zzbibtex.tex')
-rw-r--r--Master/texmf-dist/tex/plain/zztex/zzbibtex.tex290
1 files changed, 290 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/plain/zztex/zzbibtex.tex b/Master/texmf-dist/tex/plain/zztex/zzbibtex.tex
new file mode 100644
index 00000000000..a6179133f80
--- /dev/null
+++ b/Master/texmf-dist/tex/plain/zztex/zzbibtex.tex
@@ -0,0 +1,290 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Module: ZzTeX Interface to BibTeX
+%
+% Synopsis: This module provides the definitions necessary for ZzTeX to
+% interface to BibTeX.
+%
+% Author: Paul C. Anagnostopoulos
+% Created: 21 July 1992
+%
+% Copyright 1989--2020 by Paul C. Anagnostopoulos
+% under The MIT License (opensource.org/licenses/MIT)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Bibliography Preparation
+% ------------ -----------
+
+
+\def \zbiblioinit {}
+
+\ignore
+\setflag \zbiblioing = \false
+
+\def \preparebiblio {%
+ \setflag \zbiblioing = \true}
+
+\def \zbibfinal {%
+ \if \zbiblioing
+ \remark{[Generating auxiliary file for BibTeX.}%
+ {\immediate\openout \zwritea = \jobname.aux\relax
+ \immediate\write \zwritea
+ {\zcomment BibTeX auxiliary file for book `\jobname'.}%
+ \processdesign{\biblio}{}%
+ \immediate\write \zwritea {\string\bibstyle{\the\bibliostyle}}%
+ \immediate\write \zwritea {\string\bibdata{\the\bibliofiles}}%
+ \let \zxmodesave = \xrefmode
+ \let \xrefmode = \xrefloadauxmode
+ \input \jobname.zzc\relax
+ \let \xrefmode = \zxmodesave
+ \immediate\write \zwritea {\zcomment [end]}%
+ \immediate\closeout \zwritea}
+ \remark{Auxiliary file complete.]}%
+ \fi}
+
+\endignore
+
+% Citations
+% ---------
+
+
+%~ This citation command produces the key associated with
+%~ the specified tag. The key is usually the bibliography
+%~ entry number or the author/year combination.&/
+%~ *Note:* Some books do not allow this command to be used.
+
+\def \cite #1{% {tag} %^citation
+ \ensurepar
+ \if \definedp{\=zB:#1}%
+ \zcitetext{#1}{\expandafterthrice\zbibdata \name{\=zB:#1}0}%
+ \else
+ \zuncite{#1}%
+ \fi
+ \zxrefcite{\true}{#1}}
+
+%~ This citation command produces the author associated with
+%~ the specified tag.
+
+\def \citeauthor #1{% {tag} %^citation
+ \ensurepar
+ \if \definedp{\=zB:#1}%
+ \zcitetext{#1}{\expandafterthrice\zbibdata \name{\=zB:#1}1}%
+ \else
+ \zuncite{#1}%
+ \fi
+ \zxrefcite{\true}{#1}}
+
+%~ This citation command produces the year associated with
+%~ the specified tag.
+
+\def \citeyear #1{% {tag} %^citation
+ \ensurepar
+ \if \definedp{\=zB:#1}%
+ \zcitetext{#1}{\expandafterthrice\zbibdata \name{\=zB:#1}2}%
+ \else
+ \zuncite{#1}%
+ \fi
+ \zxrefcite{\true}{#1}}
+
+\def \nocite #1{% {tag}
+ \zxrefcite{\false}{#1}}
+
+\def \zcitetext #1#2{% {tag}{text}
+ \if \PDFhyperlinks
+ \tagbutton{#1}{#2}%
+ \else
+ #2%
+ \fi}
+
+\def \zxrefcite #1#2{%
+ \ifcase \xrefcites
+ \relax
+ \or
+ \xref{cite}{\folio}{}{}{#2}%
+ \else
+ \customcitexref{#1}{#2}% {boolean}{tag}
+ \fi}
+
+\def \zbibdata #1\zmark#2\zmark#3#4#5#6{% folio\zmark xxx\zmark
+ % {label}{author}{year}n
+ \if \DVIWindoinuse \colorspecial{ifview color push rgb .75 .35 0}\fi
+ \ifcase #6 #3\or #4\or #5\fi
+ \if \DVIWindoinuse \colorspecial{ifview color pop}\fi
+ \if \indexcites \xcite1{#4}\fi}
+
+\def \zuncite #1{%
+ \writelog{ZzTeX citation: undefined tag `#1'.}%
+ \zxwriteinfo{\false}{undef-tag}{#1}{}%
+ \global\increment \zuntagrefs
+ \zbibdata -\zmark-\zmark{???}--0}
+
+% Bibliography Cross-Reference
+% ------------ ---------------
+
+
+% When tags are loaded, define the name \=zB:tag to contain the
+% bibliographic info.
+
+\def \xrefbib #1#2#3#4{% {page}{???}{{label}{author}{year}}{tag}
+ \ifnum \xrefmode=\xrefloadtagmode
+ \if \definedp{\=zB:#4}\zduptag{#4}\fi
+ \withname\gdef{\=zB:#4}{#1\zmark#2\zmark#3}%
+ \fi}
+
+% This macro loads the cite cross-reference entries and invokes the
+% specified macro for each one.
+
+\def \mapxrefcites #1{% {\macro}
+ {\let \zmapcitemacro = #1\relax
+ \zxloadcomp{\xrefloadcitemode}}}
+
+\def \xrefcite #1#2#3#4{% {page}{}{}{tag}
+ \ifnum \xrefmode=\xrefloadcitemode
+ \zmapcitemacro{#1}{#4}%
+ \fi}
+
+% Biblio Block
+% ------ -----
+
+
+\defineblock{\biblio}{\endbiblio}{\false}{}
+
+%~block biblio
+% \bibliofiles = {file,...} % List of biblio database files.
+% \bibliostyle = {name} % Name of biblio style.
+% \setflag \citeself = boolean % If true, \bibitem cites itself.
+%~end
+
+\definetoks{\bibliofiles}
+\definetoks{\bibliostyle}
+
+\definecount{\zbiblionum}{0}
+
+
+\def \biblio {%
+ \blockcantbein{\biblio}{\biblio}%
+ \blockmustbein{\biblio}{\list}%
+ \beginblockscope{biblio}%
+ \global\increment \bibliodepth
+ \setflag \citeself = \false %~default soft
+ \processdesign{\biblio}{}%
+ \global\increment \biblionumber
+ \def \begin ##1##2{}%
+ \def \end ##1{}%
+ \let \bibitem = \zbibitem
+ \let \newblock = \relax
+ \let \em = \it
+ \zbiblionum = 0\relax}
+
+\def \endbiblio {%
+ \endgraf
+ \fakepar % In case biblio is empty.
+ \global\decrement \bibliodepth
+ \endblockscope{biblio}}
+
+% Bibliography Item
+% ------------ ----
+
+
+\definetoks{\zbibtoksa}
+\definetoks{\zbibtoksb}
+\definetoks{\zbibtoksc}
+\definetoks{\bibitemtag} % Tag of current \bibitem.
+
+
+% This supports items of the form `\bibitem[label][author][year]{tag}'.
+
+\def \zbibitem {%
+ \futurelet\znext \zbibitema}
+
+\def \zbibitema {%
+ \ifx \znext[%
+ \let \znext = \zbibitemb
+ \else
+ \increment \zbiblionum
+ % Expand \number\zbiblionum by hand.
+ \edef \znext {\noexpand\zbibitemb[\number\zbiblionum]}%
+ \fi
+ \znext}
+
+\def \zbibitemb[#1]{% [label]
+ \zbibtoksa = {#1}%
+ \futurelet\znext \zbibitemc}
+
+\def \zbibitemc {%
+ \if \tokeqlp{\znext}{[}%
+ \let \znext = \zbibitemd
+ \else
+ \def \znext {\zbibitemd[???]}%
+ \fi
+ \znext}
+
+\def \zbibitemd[#1]{% [author]
+ \zbibtoksb = {#1}%
+ \futurelet\znext \zbibiteme}
+
+\def \zbibiteme {%
+ \if \tokeqlp{\znext}{[}%
+ \let \znext = \zbibitemf
+ \else
+ \def \znext {\zbibitemf[???]}%
+ \fi
+ \znext}
+
+\def \zbibitemf[#1]#2{% [year]{tag}
+ \zbibtoksc = {#1}%
+ \bibitemtag = {#2}%
+ \item{\the\zbibtoksa}%
+ \if \PDFhyperlinks \PDFmark{T:#2}\fi
+ \if \notp{\emptyargp{#2}}%
+ \edef \znext{\noexpand\xref{bib}{\noexpand\folio}
+ {???}
+ {{\the\zbibtoksa}{\the\zbibtoksb}{\the\zbibtoksc}}
+ {#2}}%
+ \znext
+ \if \citeself \nocite{#2}\fi
+ \fi
+ \if \indexcites
+ \edef \znext {\noexpand\xbiblio1{\the\zbibtoksb}}%
+ \znext
+ \fi
+ \ignorespaces}
+
+% Bibliography Citation Page List
+% ------------ -------- ---- ----
+
+
+\setflag \zcitexrefsloaded = \false
+
+
+% If this macro is specified as the \endpartext of a bibliography
+% list, it will append a list of the citation pages to each entry.
+
+\def \citepagelist #1{% {button?}
+ \if \notp{\zcitexrefsloaded}%
+ \mapxrefcites{\zbibcitelist}%
+ \global\setflag \zcitexrefsloaded = \true
+ \fi
+ \setflag \zbibfirstpage = \true
+ \def \zbibprevpage {}%
+ \withname\maplistlf {\=citetag:\the\bibitemtag}
+ {\zbibcitepage{##1}{#1}}}
+
+\def \zbibcitelist #1#2{% {page}{tag}
+ \if \withname\undefinedp {\=citetag:#2}%
+ \withname\setlist {\=citetag:#2}={}%
+ \fi
+ \withname\appendlf {\=citetag:#2}{#1}}
+
+\def \zbibcitepage #1#2{% {page}{button?}
+ \stringeql{\zsamepage}{#1}{\zbibprevpage}%
+ \if \notp{\zsamepage}%
+ \if \notp{\emptydefp{\zbibprevpage}},\space \fi
+ \if #2%
+ \pagebutton{#1}{#1}%
+ \else
+ #1%
+ \fi
+ \def \zbibprevpage {#1}%
+ \fi}