summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/listbib/listbib.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/listbib/listbib.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/listbib/listbib.dtx')
-rw-r--r--macros/latex/contrib/listbib/listbib.dtx1099
1 files changed, 1099 insertions, 0 deletions
diff --git a/macros/latex/contrib/listbib/listbib.dtx b/macros/latex/contrib/listbib/listbib.dtx
new file mode 100644
index 0000000000..22f76e649e
--- /dev/null
+++ b/macros/latex/contrib/listbib/listbib.dtx
@@ -0,0 +1,1099 @@
+% \iffalse meta-comment
+% %%----------------------------------------------------------------------------
+%
+%% File: listbib.dtx Copyright (C) 2000 Volker Kuhlmann
+%% (based on biblist.sty version 1.4 copyright 1991 Joachim Schrod)
+%% All rights are reserved.
+%%
+%
+%<*dtx>
+ \NeedsTeXFormat{LaTeX2e}[1999/06/01]
+ \ProvidesFile{listbib.dtx}
+%</dtx>
+%<package|maindoc>\NeedsTeXFormat{LaTeX2e}[1998/06/01]
+%<package>\ProvidesPackage{listbib}
+%<driver> \ProvidesFile{listbib.drv}
+%<maindoc>\ProvidesFile{listbib.tex}
+%
+% \fi
+% \ProvidesFile{listbib.dtx}
+ [2000/08/28 v2.2 list contents of bibtex files (VK)]
+%
+%%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%
+% \iffalse
+%<*driver>
+
+\NeedsTeXFormat{LaTeX2e}[1999/06/01]
+\documentclass{ltxdoc}
+%%\IfFileExists{ltxdoc.cfg}{}{\OnlyDescription\RecordChanges\CodelineIndex}
+
+ %\OnlyDescription % uncomment to suppress code line listing
+ \RecordChanges % uncomment for a change history
+ %\CodelineIndex\EnableCrossrefs % uncomment for command index
+\GetFileInfo{listbib.dtx}
+
+\usepackage{listbib}
+
+\begin{document}
+\DocInput{listbib.dtx}
+%%\IfFileExists{ltxdoc.cfg}{}{\PrintChanges\PrintIndex}
+ \PrintChanges % uncomment for a change history
+ %\PrintIndex % uncomment for command index
+\end{document}
+
+%</driver>
+% \fi
+%
+%
+% \GetFileInfo{listbib.dtx}
+% \CheckSum{259}
+%
+% %^^A This command extracts all index entries:
+% %^^A sed < listbib.idx -e 's,indexentry{,,' -e 's,=.*$,,'
+%
+% \date{\filedate}
+% \title{The \textsf{listbib} Package\thanks
+% {This file has version number \fileversion,
+% last modified \filedate.}}
+% \author{Volker Kuhlmann\thanks{%^^A
+% Email:\ \url{v.kuhlmann@elec.canterbury.ac.nz}.
+% For a postal address refer to the license section.}}
+%
+%
+% \let\package\textsf
+% \let\env\textsf
+% \let\url\texttt
+% \newcommand\optmeta[1]{[\meta{#1}]}
+% \providecommand\MF{\textsc{meta-font}}
+% \providecommand\fixendverbatim{\vspace{-\bigskipamount}}
+% \renewenvironment{quote}{%
+% \list{}{\leftmargin=0.5\leftmargin\rightmargin\leftmargin}\item\relax
+% }{%
+% \endlist
+% }
+% \makeatletter
+% \providecommand\DescribeWord[1]{%
+% \leavevmode\@bsphack
+% \marginpar{\raggedleft\PrintDescribeEnv{#1}}%^^A
+% \@bsphack\index{#1\actualchar{\protect\ttfamily#1}\encapchar usage}\@esphack
+% \@esphack\ignorespaces
+% }
+% \makeatother
+%
+% %^^A We need listbib for the examples and do therefore include it. But it
+% %^^A sets the headline (see below ;-). So we just reset it again to the
+% %^^A value it had before. Well, it's a kind of a kludge, but it works...
+% \pagestyle{plain}
+%
+% %^^A The examples will consist of framed pseudo-output. We'll need a
+% %^^A variable for the width of these examples.
+% \newdimen\examplewidth
+%
+%
+% \changes{v2.2}{2000/08/28}
+% {Enhancements to the listbib shell script.
+% Example listbib.cfg.
+% Support for entry fields `URL' and `totalpages' (custom-bib uses them).}
+%
+% \changes{v2.1}{2000/03/17}
+% {Fixed bug in \cs{@citex}.
+% Removed silly \cs{listbibpreamble}.
+% listbib.cfg.
+% No longer adding \emph{.bib} to filenames in header.
+% Adding period after annote in listbib.bst.
+% Inherited fields are now not printed!
+% Shell script listbib.}
+%
+% \changes{v2.0}{2000/03/13}
+% {Renamed listbib from biblist version 1.4 by Volker Kuhlmann.
+% Complete revamp: for \LaTeXe, docstrip, etc.
+% Released under GPL.}
+%
+% \changes{1.4}{1992/01/13}
+% {Last version by Joachim Schrod, TU Darmstadt, Darmstadt, Germany.
+% \mbox{\$Date: 1992/01/13 16:35:56\$}
+% Added examples, repaired headline.
+% Called \cs{reset@font} where appropriate.
+% October 91 version of LaTeX was delayed until December 91. Readers
+% might be disturbed if there is the notion of a nonexistant version.
+% }
+%
+% \changes{1.3}{1991/10/14 14:10:21 schrod}
+% {mentioned that this option is supported.
+% moved local guide section to separate file.}
+%
+% \changes{1.2}{1991/10/10 16:13:31 schrod}
+% {changed email address.
+% mentioned LaTeX 2.09 $<$Oct 91${}$ (just announced).}
+%
+% \changes{1.1}{1991/04/13 15:03:08 schrod}
+% {Initial revision.}
+%
+%
+% \maketitle
+%
+% \begin{abstract}
+% This package typesets a listing of a (possibly large) \BibTeX{} input
+% file. With old implementations of texmf the string space could easily be
+% exceeded when trying to typeset large bibliographic databases. Contemporary
+% implementations are usually big and have much higher limits. However,
+% \package{listbib} works with arbitrarily large \BibTeX\ database files.
+%
+% In addition to that, \package{listbib} tries to show the full content of a
+% \BibTeX\ file without alterations introduced by the bibliographic style used.
+% The entry fields ISBN, ISSN, annote, library, totalpages and URL are added to
+% the standard ones.
+% \end{abstract}
+%
+% \tableofcontents
+%
+%
+% \section{License}
+%
+% This package is copyright \textcopyright\ 2000 by:
+%
+% \begin{quote}
+% Volker Kuhlmann,
+% c/o University of Canterbury,
+% ELEC Dept, Creyke Road,
+% Christchurch, New Zealand\\
+% E-Mail: \url{v.kuhlmann@elec.canterbury.ac.nz}
+% \end{quote}
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% To obtain a copy of the license, write to the
+% Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA,
+% or browse \url{http://www.fsf.org/}.
+%
+%
+% \section{History}
+%
+% This package is derived from |biblist|, version 1.4, 1992/01/13 by Joachim
+% Schrod. J.\ Schrod's association with the university of Darmstadt seems to no
+% longer exist. biblist is available from CTAN and is under the GNU general
+% public license, version 1 or later.
+%
+% \package{listbib} is the successor and will only work with \LaTeXe.
+% It uses the docstrip format for literate programming.
+% The bibliography style was regenerated from btxbst.doc (unsrt), and
+% then enhanced to be suitable for listbib. The fully commented |.bst| file is
+% in the distribution (extension |.doc|).
+%
+% This documentation has little left of the original |biblist| documentation.
+%
+%
+% \section{User manual}
+%
+% \subsection{Introduction}
+%
+% This package facilitates printing of large \BibTeX\ files. With such
+% large files --- especially if the cite keys are long --- the needed string
+% space is often exceeded. Often a Big\TeX{} is available which pushes the
+% limits further out, but with this package any \TeX{} will do it. Printing
+% complete \BibTeX\ files as they are is useful for record-keeping.
+%
+% \DescribeEnv{thebibliography}
+% The |\nocite{*}| command and |thebibliography| environment from \LaTeX\
+% are used to do the work. The |thebibliography| environment is modified
+% and eliminates huge |.aux| files and a second \LaTeX-run, although
+% cross-references used in the bibliography entries themselves may still
+% require a second \LaTeX-run.
+%
+% \DescribeMacro{\bibliography}
+% A minimal \LaTeX-document must be prepared which uses the article class,
+% loads the \package{listbib} package, and specifies the bibliography to be
+% printed with the |\bibliography| command. Other packages can be loaded as
+% well, for example to set margins or language-specific definitions.
+%
+% \DescribeMacro{\raggedbottom}
+% Other classes can perhaps be used, but \package{listbib} works on the
+% assumption that |\raggedbottom| is in effect, which is why it probably
+% won't work too well with |twocolumn| or |multicol|. A page break within
+% an entry is not allowed and the flexibility at the page bottom is needed.
+%
+% \DescribeMacro{\nocite}
+% \DescribeMacro{\bibliographystyle}
+% Unlike with normal \LaTeX\ documents, use of |\bibliographystyle| is not
+% required, although it is not prohibited. The default is the listbib.bst
+% bibliography style. It is also not necessary to use |\nocite{*}| as that is
+% the default. However |\nocite| can be used to select certain entries only to
+% be printed.
+%
+% A ``bug'' you may encounter is that |\cite| tags within \BibTeX{} entries will
+% not be processed. Instead the cite key itself will be printed. Note that this
+% is not a bug, this is a feature! You have to use |\nocite| for \emph{all}
+% entries that shall be included in the listing. If you do not give any
+% |\nocite| tag at all, a listing with all entries is created.
+%
+% \DescribeMacro{\BibTeX}
+% As a bonus, \package{listbib} defines the control sequence |\BibTeX| if it
+% is not already defined. The definition is copied from |btxdoc.tex|.
+%
+%
+% \subsection{Additional \BibTeX\ Entry Fields}
+%
+% In addition to the entry fields known by the standard \BibTeX\ styles,
+% \package{listbib} recognises these fields: |ISBN|, |ISSN|, |annote|,
+% |library|, |URL|, and |totalpages|.
+%
+% The use of |ISBN| and |ISSN| should be obvious.
+%
+% The |annote| field can be used for annotations or comments regarding this
+% particular entry. The standard \BibTeX\ styles do not make use of this
+% feature, however other styles might. With \package{listbib} it is useful to
+% store a short summary of the contents of this entry. As for |note|, the
+% first word should be capitalised. Punctuation at the end of the field
+% is added by the style if appropriate.
+%
+% The |library| field is not meant to be printed in final documents, and is
+% supplied to store e.g.\ the library location of a book. Useful for database
+% listings only.
+%
+% The |URL| field can be used to store a URL belonging to this bibliography
+% entry. It is also becoming more popular to have bibliography entries which
+% entirely consist of a URL. URLs are typeset as |\url{|\meta{URL}|}|, it is
+% recommended to use package \package{url} with documents referencing
+% bibliography entries which contain a URL. As an additional safeguard, the
+% listbib \BibTeX-style defines |\url| to exand to \meta{URL} if it is not
+% already defined. This field is supported by \package{custom-bib}.
+%
+% The |totalpages| field is meant to store the total number of pages of the
+% work. This field is supported by \package{custom-bib}.
+%
+% All 13 entry types take the |library|, |annote|, |totalpages| and |URL|
+% fields. They take the fields |ISBN| and |ISSN| as well, with these exceptions:
+% |article| only takes |ISSN|, and |unpublished| takes neither |ISBN| nor |ISSN|.
+%
+%
+% \subsection{Formatting of the entries in the resulting listing}
+%
+% \begin{description}
+% \item[\tt cite key]
+% \leavevmode \null \dotfill \quad {\sf\small (Library info)}\break
+% Author(s)/Editor(s).\\
+% {\em Title.}\\
+% Publication info.\\
+% Notes.\\
+% \null \qquad {\footnotesize Pages: 123 \ensuremath{\bullet}
+% URL: \texttt{http://my.url/file}}\\
+% \null \qquad {\footnotesize Annotation}
+% \end{description}
+%
+% I.e., an open format is used. Although this needs more space I think the
+% enhanced legibility pays back.
+%
+% Note that you will not get the `Library info' and the `Annotation' in the
+% above format if you use a bibliography style other than |listbib| which
+% does not supply this information with the assumed markup. The parenthesis
+% around the library info are produced by this style option, not by \BibTeX.
+%
+%
+% \subsection{Example}
+%
+% Suppose, there is a file |typography.bib| with references on typography.
+% %
+% \begin{quote}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \begin{verbatim}
+% % typography.bib 13 Jan 92
+% % References on Typography, Typesetting, and Book Design
+% %
+%
+% % make sure it's at least defined:
+% @preamble{"\providecommand\MF{\textsc{meta-font}}"}
+%
+% @book{typo:tschichold:selected,
+% author = {Jan Tschichold},
+% title = {Ausgew\"ahlte Aufs\"atze \"uber Fragen der Gestalt des
+% Buches und der Typographie},
+% publisher = {Birkh\"auser},
+% address = {Basel},
+% year = 1975,
+% isbn = {3-7643-1946-1},
+% note = {A second, unchanged, edition appeared in~1987.},
+% library = {},
+% annote = {A collection of his ``classic'' papers. The best book on
+% typographic principles read so far. A definitive `\emph{must
+% read}' for everyone interested in typography, book design,
+% or typesetting.}
+% }
+%
+% @article{typo:blostein:music,
+% author = {Dorothea Blostein},
+% title = {Justification of Printed Music},
+% journal = cacm,
+% volume = 34,
+% number = 3,
+% month = mar,
+% year = 1991,
+% pages = {88--99},
+% annote = {Presents problems and solutions of the task to create a
+% correct spacing while setting notes. The proposed method also
+% takes the temporal relationship of notes into account.
+% Handles two-dimensional layout, e.g., staffs and texts.}
+% }
+%
+% @book{typo:sta:zapf,
+% title = {Herrman Zapf and his Design Philosophy},
+% publisher = {Society of Typographic Arts},
+% address = {Chicago},
+% year = 1987,
+% isbn = {0-941447-00-6},
+% note = {},
+% library = {Lib MQ .B77},
+% annote = {A valuable book. A chapter on his work around \MF{} is
+% included. Was among the most beautiful books of the year.}
+% }
+% \end{verbatim}\fixendverbatim
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \end{quote}
+%
+% Furthermore assume that the bibliography style |listbib| is
+% available. Then the \LaTeX{} file
+%
+% \begin{verbatim}
+% \documentclass{article}
+% \usepackage{listbib}
+% \begin{document}
+% \bibliography{typography}
+% \end{document}
+% \end{verbatim}\fixendverbatim
+%
+% may be used to create a listing with all entries. You have to run
+% \LaTeX{}, \BibTeX{}, and \LaTeX{}. (Careful readers will note that
+% there will be a \BibTeX{} warning about a missing author or editor in
+% the Zapf entry.) You do {\it not\/} need to run \LaTeX{} twice after
+% the \BibTeX{} run. The result looks like this:
+% %
+% \begingroup
+% \examplewidth=\linewidth
+% \advance\examplewidth by -2\fboxrule
+% \advance\examplewidth by -2\fboxsep
+% ~\par\noindent\fbox{\begin{minipage}{\examplewidth}
+% \section*{References}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %^^A We must fake a little bit to include it here. \bibitem gobbles the
+% %^^A next character since it thinks it's a line end. (This might be a
+% %^^A problem for itself, but untill now all bibliography styles put
+% %^^A \bibitem on an own line.) We must supply a token which might be
+% %^^A eaten by \bibitem. Best to use a \relax for this.
+% %
+% \begin{thebibliography}{1}
+%
+% \bibitem{typo:tschichold:selected}\relax
+% Jan Tschichold.
+% \newblock {\it Ausgew\"ahlte Aufs\"atze \"uber Fragen der Gestalt des
+% Buches und der Typographie}.
+% \newblock Birkh\"auser, Basel, 1975. ISBN~3-7643-1946-1.
+% \newblock A second, unchanged, edition appeared in~1987.
+% \newblock
+% \annote A collection of his ``classic'' papers. The best book on
+% typographic principles read so far. A definitive `{\it must\/}' for
+% everyone interested in typography, book design, or typesetting.
+% \endannote.
+%
+% \bibitem{typo:blostein:music}\relax
+% Dorothea Blostein.
+% \newblock Justification of Printed Music.
+% \newblock {\it Communications of the ACM}, 34(3):88--99, March 1991.
+% \newblock
+% \annote Presents problems and solutions of the task to create a correct
+% spacing while setting notes. The proposed method also takes the
+% temporal relationship of notes into account. Handles two-dimensional
+% layout, e.g., staffs and texts.
+% \endannote.
+%
+% \bibitem{typo:sta:zapf}\relax
+% \library{Lib MQ .B77}
+% {\it Herrman Zapf and his Design Philosophy}.
+% \newblock Society of Typographic Arts, Chicago, 1987. ISBN~0-941447-00-6.
+% \newblock
+% \annote A valuable book. A chapter on his work around \MF{} is included.
+% Was among the most beautiful books of the year.
+% \endannote.
+%
+% \end{thebibliography}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \end{minipage}}
+% \endgroup
+%
+% \bigskip
+%
+% To use a bibliography style other than |listbib|, specify it in the usual way
+% with |\bibliographystyle|. For example, |unsrt| gives:
+% %
+% \begingroup
+% \examplewidth=\linewidth
+% \advance\examplewidth by -2\fboxrule
+% \advance\examplewidth by -2\fboxsep
+% ~\par\noindent\fbox{\begin{minipage}{\examplewidth}
+% \section*{References}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %^^A Here the same reason for inserting \relax'es as in the previous
+% %^^A example applies.
+% \begin{thebibliography}{1}
+%
+% \bibitem{typo:tschichold:selected}\relax
+% Jan Tschichold.
+% \newblock {\em Ausgew\"ahlte Aufs\"atze \"uber Fragen der Gestalt des
+% Buches und der Typographie}.
+% \newblock Birkh\"auser, Basel, 1975.
+% \newblock A second, unchanged, edition appeared in~1987.
+%
+% \bibitem{typo:blostein:music}\relax
+% Dorothea Blostein.
+% \newblock Justification of printed music.
+% \newblock {\em Communications of the ACM}, 34(3):88--99, March 1991.
+%
+% \bibitem{typo:sta:zapf}\relax
+% {\em Herrman Zapf and his Design Philosophy}.
+% \newblock Society of Typographic Arts, Chicago, 1987.
+%
+% \end{thebibliography}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \end{minipage}}
+% \endgroup
+%
+% \bigskip
+%
+% Of course, the ISBN/ISSN numbers, annotations, and library information is
+% missing, since |unsrt| does not extract them from the database. (Careful
+% readers will notice another difference: The |listbib| bibliography style does
+% not lower-case titles as the standard styles do.)
+%
+%
+% \subsection{Site Configuration File}
+%
+% The \package{listbib} package will input a site configuration file
+% \DescribeWord{listbib.cfg}
+% |listbib.cfg| if it exists. This is a good place for changing margins or the
+% document title, etc. The configuration file is |\input| at the end of the
+% \package{listbib} package.
+% Here is an example:
+% \begin{quote}
+% \begin{verbatim}
+% %% listbib.cfg VK 30 Jul 2000
+%
+% % Date format: 99 Month 9999
+% \newcommand\monthname{%
+% \ifcase \month \or
+% January\or February\or March\or April\or May\or June\or
+% July\or August\or September\or October\or November\or December\fi
+% }
+% \def\today{%
+% \number\day \space \monthname \space \number\year
+% }
+%
+% % Latin-1 input
+% % (There is currently no way to do this from within a .bib file.)
+% \usepackage[latin1]{inputenc}
+% \end{verbatim}\fixendverbatim
+% \end{quote}
+%
+%
+% \subsection{Inheriting Field Entries}
+%
+% As \BibTeX\ currently works, missing fields in all entries which
+% crossreference another entry are inherited from the crossreferenced entry. To
+% illustrate, in this .bib file
+%
+% \begin{quote}
+% \begin{verbatim}
+% @incollection{chapter,
+% crossref="book",
+% author="..", title=".."
+% }
+% @book{book,
+% editor="..", booktitle="..", note=".."
+% }
+% \end{verbatim}\fixendverbatim
+% \end{quote}
+%
+% the chapter entry inherits the |note| field from the |book| entry. The same is
+% true for all other fields which can possibly be inherited. \BibTeX\ does not
+% make the information of whether a field was inherited available in the style
+% file, so the inheritence can not be detected directly.
+%
+% \package{listbib} implements a workaround for this which can detect inherited
+% fields. A field is assumed to be inherited by a crossreferencing entry if its
+% value is identical to that of the crossreferenced entry. This assumption fails
+% when the field values are in fact identical. Please let me know of any cases
+% where that is a problem, and I will try and fix it or make a sepaarte style
+% which does not try to detect inherited fields. A quick fix might be to add
+% something like a |{}| at the end of the field.
+%
+% Currently inheritance is detected for the fields |note|, |annote|, |ISBN|,
+% |ISSN|, |library|, |totalpages| and |URL|. Inherited fields are not printed in
+% the listing.
+%
+%
+% \subsection{The listbib.tex Main Document Frame}
+%
+% \DescribeMacro{\listbibs}
+% The shortest way to to typeset a bibliography is to put something like this
+% into a \meta{file}|.tex| and to run it through \LaTeX, \BibTeX, and (possibly
+% more than once) \LaTeX\ again:
+% \begin{quote}
+% |\newcommand||\listbibs||{|\meta{bibliographies}|}|\\
+% |\AtBeginDocument{|\meta{preamblematerial}|}|\\
+% |\input||{||listbib||}|
+% \end{quote}
+% For \meta{bibliographies} list everything to be printed. Any \BibTeX\
+% files containing string definitions must also be specified (first).
+%
+% \DescribeMacro{\AtBeginDocument}
+% The use of |\AtBeginDocument| is completely optional. If used,
+% \meta{preamblematerial} will be inserted into the preamble of
+% |listbib.tex|.
+%
+% |listbib.tex| also loads the packages
+% \DescribeWord{vmargin}
+% \DescribeWord{url}
+% \package{vmargin} and \package{url} if
+% it can find them. \package{vmargin} sets up the page margins, and
+% \package{url} provides a |\url| command for typesetting urls.
+%
+% A configuration file \meta{file}|.cfg| will be loaded within the preamble of
+% |listbib.tex|, if it exists.
+%
+% This short document selects a document font size of 10pt, and double-sided
+% printing. Unfortunately it is not possible to override that in any of the two
+% configuration files.
+%
+%
+% \subsection{The listbib Shell Script}
+%
+% The |listbib| program can be used to quickly generate a listing of the
+% bibliographies given on the command line. The program is a Unix shell script;
+% sorry if you don't use Unix. You may still be able to port it, send me a copy
+% if you do.
+%
+% Here is its usage:
+% \begin{verbatim}
+% Usage: listbib [OPTIONS] [BIBFILE[.bib] ..] BIBFILE_N[.bib]
+% Version VK 1.2.3, 28 Aug 2000
+%
+% Options:
+% -h|--help shows help
+% -o|--output FILE generates FILE.dvi / FILE.ps (default listedbibs)
+% -O|--same as -o, but generate FILE.dvi and BIBFILE_N.ps
+% -p|--ps|--postscript generate PostScript as well as dvi
+% -d|--deltemp delete all generated files but .dvi
+% -P|--psonly generate only PostScript (delete all generated files
+% but .ps)
+% -- stop option processing; only .bib files remain
+% \end{verbatim}\fixendverbatim
+% A temporary .tex file is created which makes use of |listbib.tex|. latex,
+% bibtex, and possibly dvips are run on the .tex file to create the listing of
+% all .bib files specified. The .bib extension can be left out. Remember to
+% specify any .bib first which define any strings needed later.
+%
+% By default, the name of the .tex file is |listedbibs.tex|, this can be changed
+% with the |-o| option. Don't specify an extension here.
+%
+% To generate PostScript as well, use the |-p| option. This currently only
+% supports dvips. I can change that if there is demand. The |-d| option will
+% delete all temporary files when |listbib| is finished, and only leave the dvi
+% file. |-P| will create a PostScript file and then delete all others.
+%
+% To only generate a mybib.ps from mybib.bib, use |-P -O|.
+%
+% An error is displayed if the .tex file to be created already exists and is not
+% one generated by listbib.
+%
+%
+% \subsection{To Do and Bugs}
+%
+% Inheritance is currently only checked for the fields |note|, |annote|, |ISBN|,
+% |ISSN|, |library|, |totalpages| and |URL|. Printing of these fields is
+% suppressed for all entry types if inherited. Should printing of other
+% inherited fields be suppressed as well? I am less inclined to suppress
+% |volume|, and I am not sure about |year|, |month|, etc. Please let me know
+% what you think.
+%
+% As a future enhancement one could place a word from the starting and the
+% finishing entry on each page into the page header, like it is in a dictionary.
+%
+% Some kind of section title above each .bib file would be useful.
+%
+%
+% \DoNotIndex{\ ,\.,\_}%^^A DOES NOT WORK!!
+% \DoNotIndex{\@M,\@checkAnnote,\@citex,\@evenhead,\@for,\@gobble}
+% \DoNotIndex{\@highpenalty,\@m,\@ne,\@oddhead,\@tempdima,\@totalleftmargin}
+% \DoNotIndex{\AddBibliographystyle,\AddNocite,\IfFileExists}
+% \DoNotIndex{\InputIfFileExists,\advance,\afterassignment,\annote,\begin}
+% \DoNotIndex{\begingroup,\bib,\break,\catcode,\chardef,\check,\csname,\def}
+% \DoNotIndex{\do,\documentclass,\dotfill,\edef,\else,\end,\endannote}
+% \DoNotIndex{\endcsname,\enddescription,\endgraf,\endgroup,\endinput}
+% \DoNotIndex{\endthebibliography,\escapechar,\expandafter,\f@size,\fbox}
+% \DoNotIndex{\fboxsep,\fi,\fontsize,\footnotesize,\futurelet,\hbox,\hfil}
+% \DoNotIndex{\if@tempswa,\ifx,\ignorespaces,\interlinepenalty,\item,\jobname}
+% \DoNotIndex{\kern,\lb,\leavevmode,\leftmargin,\leftmark,\let,\linewidth}
+% \DoNotIndex{\lower,\mark,\markboth,\newblock,\newline,\next,\null,\obeylines}
+% \DoNotIndex{\parsep,\parshape,\penalty,\prepare,\providecommand,\quad,\relax}
+% \DoNotIndex{\reset@font,\rightmark,\rightskip,\rm,\section,\selectfont}
+% \DoNotIndex{\setmarginsrb,\sfcode,\small,\string,\textrm,\textsc,\textsf}
+% \DoNotIndex{\texttt,\today,\tt,\typeout,\uscode,\usepackage,\vmargin,\vskip}
+% \DoNotIndex{\z@,\z@skip}
+% \DoNotIndex{\thebibliography,\ttfamily}
+%
+% \StopEventually{}
+%
+%
+%
+% \section{Implementation}
+%
+%
+% \subsection{Main Document for Quick Use}
+%
+% %^^A NOTE: "latex listbib.ins" does not extract module <maindoc> if it
+% %^^A is after module <package> !!
+%
+% The intended usage is this:
+% \begin{quote}
+% |\newcommand||\listbibs||{|\meta{bibliographies}|}|\\
+% |\input||{||listbib||}|
+% \end{quote}
+%
+% \begin{macrocode}
+%<*maindoc>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\documentclass[10pt,twoside]{article}
+% \end{macrocode}
+%
+% Set document margins if package \package{vmargin} is installed. Load package
+% \package{url} if available; this package provides an excellent |\url| command
+% which can be used in bibliography entries.
+%
+% \begin{macrocode}
+%% Packages
+\IfFileExists{vmargin.sty}{% use if available
+ \usepackage{vmargin}%
+ \setmarginsrb{25mm}{12mm}{22mm}{8mm}{10pt}{8mm}{}{10mm}}{}
+\IfFileExists{url.sty}{\usepackage{url}}{} % load if installed
+% \end{macrocode}
+%
+% \begin{macrocode}
+%% Layout
+\fboxsep 0.8pt % normally 3pt
+% \end{macrocode}
+%
+% And yes, we want \package{listbib}\ldots
+%
+% \begin{macrocode}
+%% Package listbib
+\usepackage{listbib}
+% \end{macrocode}
+%
+% Further document setting can be placed into a per-job configuration file,
+% which will be loaded if found.
+%
+% \begin{macrocode}
+%% Load per-job configuration file if it exists
+\InputIfFileExists{\jobname.cfg}{\typeout
+ {*** listbib: per-job configuration file \jobname.cfg found. ***}}{}
+% \end{macrocode}
+%
+% ^^A Or, simple settings can be inserted with this command.
+% ^^A This is stupid. Use |\AtBeginDocument|!
+% \begin{macrocode}
+%\csname listbibpreamble\endcsname % call it if it is defined
+% \end{macrocode}
+%
+% \begin{macro}{\listbibs}
+% Main document part. The bibliographies to typeset are taken from |\listbibs|.
+%
+% \begin{macrocode}
+%% Main
+\begin{document}
+\bibliography{\listbibs}
+\end{document}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</maindoc>
+% \end{macrocode}
+%
+%
+% \subsection{Preliminary}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% The main work is to supply the environment |thebibliography|; in
+% fact, we implement it as a |description| environment. The environment
+% has an unused argument. In addition we have to supply a correct
+% definition for the |\bibitem| command which takes the cite key as its
+% argument. Of course, this will result in an |\item|. After the
+% |\bibitem| a |\library| tag may follow, with one parameter followed
+% by a period. Then comes the reference, the (optional) annotation is
+% a block of its own, enclosed in |\annote| and |\endannote|. After
+% |\endannote| comes a period which should be discarded. (This should
+% be done in the \BibTeX{} style, but nevertheless\dots)
+%
+% Before we start we declare some shorthands for category codes.
+% By declaring the underscore~`(|_|)' as letter we can use it in our
+% macros. (I agree with {\sc D.~Knuth} that
+% |\identifier_several_words_long| is more readable than
+% |\IdentifierSeveralWordsLong| and in every case better than
+% |\p@@@s|.) As this is a \LaTeX{} style option the at sign is a letter
+% anyhow; so we can use the ``private'' Plain and \LaTeX{} macros; and
+% with the underscore we can make our own macros more readable. But as
+% we have to restore this category code at the end of this macro file
+% we store its former value in the control sequence |\uscode|. This
+% method is better than using a group because not all macros have to
+% be defined global this way.
+%
+% \begin{macrocode}
+\chardef\uscode=\catcode`\_
+\catcode`\_=11
+% \end{macrocode}
+%
+%
+% \subsection{The Bibliography}
+%
+% \begin{environment}{thebibliography}
+% Within an entry we use a ragged right margin. To break within an
+% entry is always difficult and is made easier in this way. After all,
+% the open format we use gives a ragged impression anyhow. Within an
+% entry we dissallow page breaks and we do not treat periods as full
+% stops.
+%
+% \begin{macrocode}
+\def\thebibliography#1{%
+ \description
+ \rightskip \z@ plus 2em
+ \interlinepenalty\@M
+ \sfcode`\.=\@m
+ }
+\let\endthebibliography=\enddescription
+% \end{macrocode}
+% \end{environment}
+%
+% |\bibitem| should look for the next token: If a library info
+% exists it must go in the same line, otherwise a line break must be
+% issued.
+%
+% \begin{macro}{\@lbibitem}
+% \begin{macro}{\@bibitem}
+% But |\bibitem| itself is not of interest, it looks only for the
+% optional argument. We have to redefine |\@bibitem|. If a
+% bibliography style like |alpha| is used, |\bibitem| will be supplied with
+% an optional argument. We ignore this optional argument.
+%
+% After the argument(s) of |\bibitem| a line end occurs in any case. The
+% optional |\library| tag will follow on the next line. This means we
+% first have to gobble the line end char |^^M|, and have to check the
+% next token afterwards. If this next token is |\library| we will do
+% nothing since |\library| will itself end the line. Otherwise we do a
+% line break. Experiments have shown that the dotted line at the start
+% of every entry helps with finding the different entries.
+%
+% \begin{macrocode}
+\def\@lbibitem[#1]{\@bibitem}
+\def\@bibitem#1{%
+ \item[\texttt{\lb_sanitize{#1}}]\leavevmode
+ \null \dotfill
+ \begingroup
+ \obeylines
+ \afterassignment\prepare_check_library
+ \let\next % gobble following ^^M
+ }
+\def\prepare_check_library{%
+ \futurelet\next\check_library
+ }
+\def\check_library{%
+ \ifx \next\library \else \break \fi
+ \endgroup
+ }
+\def\lb_sanitize#1{{\escapechar=-1
+ \expandafter\string\csname#1\endcsname}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Library}
+%
+% \begin{macro}{\library}
+% We assume that the library info and the cite key will fit into
+% one line. If this is not true, a two line solution would have to be set up.
+%
+% We add |\@highpenalty| instead of |\@M| after the library part to avoid
+% an underfull hbox warning and an empty line if both author and editor are
+% empty (in which case there is a |\newblock| immediately following the
+% |\library{..}|. Alternativelly, we could implement more |\futurelet|
+% trickery.
+%
+% \begin{macrocode}
+\def\library#1{%
+ \quad\textsf{\small (#1)}\penalty -\@highpenalty
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Annotation}
+%
+% \begin{macro}{\newblock}
+% A reference is divided into blocks starting with |\newblock|.
+% Each block shall start a new line. We use |\newline| for this. A
+% special block is the one with an annotation in it. Since we want to
+% indent this block once more we must change the parshape. But then we
+% have to finish the paragraph first. The annotation block starts with
+% |\annote| and may be easily recognized in this way.
+%
+% \begin{macrocode}
+\def\newblock{%
+ \futurelet\next\@checkAnnote
+ }
+\def\@checkAnnote{%
+ \ifx \next\annote \else \newline \fi
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\annote}
+% The annotation is a paragraph on its own and indented by |\leftmargin|.
+% Since it is not a paragraph in the logical sense we do not insert
+% vertical glue (i.e., |\parskip|) at the top. The annotation is typeset
+% in a smaller size. We assume that it consists of full sentences which
+% might be made up in a proper way. Therefore we don't use a ragged
+% margin here.
+%
+% The change of |\parshape| has to be reset after the group --- these
+% changes are not local.
+%
+% \begin{macrocode}
+\def\annote{%
+ \endgraf
+ \vskip -\parsep
+ \begingroup
+ \reset@font\footnotesize
+ \rightskip\z@skip
+ \advance\linewidth -\leftmargin
+ \advance\@totalleftmargin \leftmargin
+ \parshape \@ne \@totalleftmargin \linewidth
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\endannote}
+% The period in the definition is used to gobble the period placed by \BibTeX.
+% \begin{macrocode}
+\def\endannote.{%
+ \endgraf
+ \endgroup
+ \parshape \@ne \@totalleftmargin \linewidth
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Citation Key}
+%
+% \begin{macro}{\@citex}
+% In our documents |\cite| will print the cite key in typewriter with a framed
+% box around. In fact, |\cite| expands to |\@citex|, which has an optional
+% argument. The flag |\if@tempswa| shows if this optional argument is there.
+% |\texttt{..}| will alter |\if@tempswa|. So might |\fbox| and |\ttfamily| in
+% the future. |\fbox| does not work inside |\if|, and |\lb_sanitize|
+% does not work inside a |\def|, so we save the flag in |\@cxt|.
+%
+% ^^A > \cite=macro:
+% ^^A ->\protect \cite .
+% ^^A > \cite =\long macro:
+% ^^A ->\@ifnextchar [{\@tempswatrue \@citex }{\@tempswafalse \@citex []}.
+%
+% \begin{macrocode}
+\def\@citex[#1]#2{\if@tempswa\def\@cxt{y}\else\let\@cxt\relax\fi
+ \fbox{{\ttfamily\lb_sanitize{#2}}%
+ \if y\@cxt , \ttfamily\lb_sanitize{#1}\fi}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Defaults for $\backslash$nocite and $\backslash$bibliographystyle}
+%
+% \begin{macro}{\@@nocite}
+% \begin{macro}{\@@bibliographystyle}
+% \begin{macro}{\@@bibliography}
+% First the original definitions of the to-be-redefined control sequences are
+% saved. We define two macros which will issue the default given above.
+% These macros are not private, but protected; a knowing user may redefine the
+% `default bibliography style' in this way.
+%
+% \begin{macrocode}
+\let\@@nocite=\nocite
+\let\@@bibliographystyle=\bibliographystyle
+\let\@@bibliography=\bibliography
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% ^^A\DescribeMacro{\nocite}
+% ^^A\DescribeMacro{\bibliographystyle}
+% \begin{macro}{\nocite}
+% \begin{macro}{\bibliographystyle}
+% If |\nocite| or |\bibliographystyle| is issued, the default
+% tags are discarded, the original meaning is restored, and the control
+% sequence is reissued again.
+%
+% \begin{macrocode}
+\def\AddNocite{\nocite{*}}
+\def\AddBibliographystyle{\bibliographystyle{listbib}}
+\def\nocite{%
+ \let\AddNocite\relax
+ \let\nocite\@@nocite
+ \nocite
+ }
+\def\bibliographystyle{%
+ \let\AddBibliographystyle\relax
+ \let\bibliographystyle\@@bibliographystyle
+ \bibliographystyle
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Bibliographies and Title}
+%
+% \begin{macro}{\bibliography}
+% The |\bibliography| command will first issue the missing default
+% tags, will produce a heading afterwards, will setup the headline, and
+% will create the bibliography itself.
+% \begin{macrocode}
+\def\bibliography#1{%
+ \AddNocite
+ \AddBibliographystyle
+ \section*{\refname}%
+ \mark_for_headline{#1}%
+ \@@bibliography{#1}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\refname}
+% The section heading text comes from |\refname|, which we give a new default.
+% ^^A using "\ " after "\BibTeX" causes the space command to be indexed,
+% ^^A even if it is listed with \DoNotIndex{}.
+% \begin{macrocode}
+\def\refname{\BibTeX{} Database Listing}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BibTeX}
+% Provide |\BibTeX| if it has not yet been defined.
+% This definition is taken from btxdoc.tex (compared with \LaTeX's definition
+% of |\TeX|, this one has the ``E'' not touch the ``T'' and ``X''.
+% Unfortunately the standard computer modern fonts do not supply a small caps
+% bold, so we expect a NFSS warning when |\BibTeX| appears in the bold-faced
+% section heading. That is, unless we do some trickery\ldots
+%
+% \begin{macrocode}
+\providecommand\BibTeX{%
+ \textrm{B\kern-.05em%
+ {\@tempdima\f@size pt\fontsize{0.83333\@tempdima}\z@\selectfont
+ I\kern-.025em B}%
+ \kern-.08em T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}%
+ }
+\providecommand\BibTeX{% one of the 2...
+ \textrm{B\kern-.05em\textsc{i\kern-.025em b}%
+ \kern-.08em T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Page header}
+%
+% The page header shows the database names given with the
+% |\bibliography| command and the current date.
+% We do not issue a warning if no file name is given; this will be
+% done by |\@@bibliography|. When a file name exists a comma and a
+% space will be prepended at the very beginning of |\bib_list|. The
+% comma is removed after the loop. When there was no file name
+% |\bib_list| will expand to an empty list, the |\relax| serves as a
+% catch-argument for |\@gobble|.
+%
+% A |.bib| is no longer added to each bibliography filename to make the line
+% shorter. If there are too many names the header won't fit on the page. This
+% should be fixed somehow.
+%
+% ^^A \@for \bib_file :=#1\do {\edef\bib_list{\bib_list, \bib_file.bib}}%
+% \begin{macrocode}
+\def\mark_for_headline#1{%
+ \def\bib_list{}%
+ \@for \bib_file :=#1\do {\edef\bib_list{\bib_list, \bib_file}}%
+ \edef\bib_list{\expandafter\@gobble\bib_list \relax}%
+ \markboth{{\reset@font\ttfamily\bib_list}}{{\reset@font\ttfamily\bib_list}}%
+ }
+\def\@oddhead{\reset@font\rmfamily \hfil \leftmark \quad (\today)}
+\def\@evenhead{\reset@font\rmfamily (\today)\quad \ignorespaces
+ \rightmark \hfil}
+% \end{macrocode}
+%
+%
+% \subsection{Site Configuration File}
+%
+% Further document settings can be placed into a site configuration file,
+% \DescribeWord{listbib.cfg}
+% which will be loaded if found. This is a good place to put some
+% default margin settings, for example.
+%
+% \begin{macrocode}
+\InputIfFileExists{listbib.cfg}{\typeout
+ {*** listbib: site configuration file listbib.cfg found. ***}}{}
+% \end{macrocode}
+%
+%
+% \subsection{Finish}
+%
+% We must restore our catcode and are finished.
+%
+% \begin{macrocode}
+\catcode`\_=\uscode
+\endinput
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+%
+% \Finale
+%
+% \iffalse
+% %% EOF listbib.dtx
+% %%----------------------------------------------------------------------------
+% \fi