diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/natbib/bibentry.dtx |
Initial commit
Diffstat (limited to 'macros/latex/contrib/natbib/bibentry.dtx')
-rw-r--r-- | macros/latex/contrib/natbib/bibentry.dtx | 554 |
1 files changed, 554 insertions, 0 deletions
diff --git a/macros/latex/contrib/natbib/bibentry.dtx b/macros/latex/contrib/natbib/bibentry.dtx new file mode 100644 index 0000000000..cbf396d4b6 --- /dev/null +++ b/macros/latex/contrib/natbib/bibentry.dtx @@ -0,0 +1,554 @@ +% \iffalse THIS IS A META-COMMENT +%<*dtx> +\ProvidesFile +%======================================================================== + {BIBENTRY.DTX} +%======================================================================== +%</dtx> +%% Copyright 1997-2007 Patrick W Daly +%% Max-Planck-Institut f\"ur Sonnensystemforschung +%% Max-Planck-Str. 2 +%% D-37191 Katlenburg-Lindau +%% Germany +%% E-mail: daly@mps.mpg.de +% +% This program can be redistributed and/or modified under the terms +% of the LaTeX Project Public License Distributed from CTAN +% archives in directory macros/latex/base/lppl.txt; either +% version 1 of the License, or any later version. +% +% This is a contributed file to the LaTeX2e system. +% ------------------------------------------------- +% This is a LaTeX package to all bibliography entries to be placed +% anywhere in text. +% Installation: +% LaTeX this file: creates docstrip installation file bibentry.ins +% AND the LaTeX documentation +% (La)TeX bibentry.ins: creates package file bibentry.sty, and optionally +% the documentation driver bibentry.drv +% (bibentry.ins and bibentry.drv may be edited as needed) +% Docstrip options available: +% package - to produce a (LaTeX2e) package .sty file +% driver - to produce a driver file to print the documentation +%-------------------------------------------------------------------------- +% *** Identify the package file:- +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{bibentry} +% +% *** Identify the driver file:- +%<driver>\NeedsTeXFormat{LaTeX2e} +%<driver>\ProvidesFile{bibentry.drv} +% +% *** The DATE, VERSION, and other INFO +%\fi +%\ProvidesFile{bibentry} + [2007/10/30 1.5 (PWD)] +% \changes{1.0}{1997 Jun 13}{Initial version} +% \changes{1.1}{1997 Nov 11}{Refine for use with \cs{bibliography}} +% \changes{1.1a}{1998 Mar 2}{Fix bug by using \cs{ifx} instead of \cs{if}} +% \changes{1.2}{1999 Feb 23}{Update copyright notice} +% \changes{1.3}{1999 Aug 26}{Works with \texttt{url} package} +% \changes{1.4}{2000 Jun 20}{Add \texttt{hyperref} compatibility} +% \changes{1.5}{2007 Oct 30}{Add \cs{doi} definition} +% +% \CheckSum{135} +% \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 +%<*install> +%^^A ============================================= +%^^A Here is the docstrip installation file +%^^A It is written on first LaTeX run if it +%^^A does not already exist +%^^A ============================================= +\begin{filecontents*}{bibentry.ins} +% File: bibentry.ins +% Copyright 1999,2000 Patrick W. Daly +% +% This file can be redistributed and/or modified under the terms +% of the LaTeX Project Public License Distributed from CTAN +% archives in directory macros/latex/base/lppl.txt; either +% version 1 of the License, or any later version. +% +% It is an installation file for extracting package and driver +% files from the original source file. Simply process it under +% TeX or LaTeX. It works with Docstrip versions before and after +% December 1995. + +\def\batchfile{bibentry.ins} +\input docstrip + +\preamble +============================================= +IMPORTANT NOTICE: + +This program can be redistributed and/or modified under the terms +of the LaTeX Project Public License Distributed from CTAN +archives in directory macros/latex/base/lppl.txt; either +version 1 of the License, or any later version. + +This is a generated file. +It may not be distributed without the original source file \inFileName. + +Full documentation can be obtained by LaTeXing that original file. +Only a few abbreviated comments remain here to describe the usage. +============================================= +\endpreamble +\postamble + +<<<<< End of generated file <<<<<< +\endpostamble +\keepsilent + +% Docstrip before Dec 95 does not have \generate syntax, nor +% \declarepreamble. Must redefine them. The \generateFile called +% for each output file individually. +% Docstrip before Dec 96 cannot interprete multiline \if..\fi +% Thus for maximum compatibility, have only one-line conditionals + +\let\oldDS F\relax +\expandafter\ifx\csname generate\endcsname\relax \let\oldDS T\relax\fi +\if\oldDS T \def\declarepreamble#1{\preamble}\fi +\if\oldDS T \def\declarepostamble#1{\postamble}\fi +\if\oldDS T \generateFile{bibentry.sty}{f}{\from{bibentry.dtx}{package}} \fi + +\declarepreamble\driver +============================================ +This is the driver file to produce the LaTeX documentation +from the original source file \inFileName. + +Make changes to it as needed. (Never change the file \inFileName!) +============================================ +\endpreamble + +\declarepostamble\driverq + +End of documentation driver file. +\endpostamble + +\ifx\oldDS T \generateFile{bibentry.drv}{f}{\from{bibentry.dtx}{driver}}\fi + +\ifx\oldDS T \let\askforoverwritefalse\relax\def\generate#1{}\fi + +\askforoverwritefalse +\generate{\file{bibentry.sty}{\from{bibentry.dtx}{package}} + \file{bibentry.drv}{\usepreamble\driver\usepostamble\driverq + \from{bibentry.dtx}{driver}} + } + +\obeyspaces +\Msg{*******************************************}% +\Msg{* For documentation, process bibentry.dtx *}% +\Msg{* or the driver file bibentry.drv *}% +\Msg{*******************************************} +\end{filecontents*} +%</install> +%<*driver> +\documentclass{ltxdoc} +%<driver>%\documentclass[twoside]{ltxdoc} +%<driver>%\documentclass[a4paper]{ltxdoc} +%<driver>%\documentclass[twoside,a4paper]{ltxdoc} +\raggedbottom + + %** To include the detailed explanation of the coding, comment out + %** the next line +\OnlyDescription + + %** To produce a command index: add the following line for one run, + %** then run makeindex -s gind.ist bibentry + %** and reprocess, with or without this line (much faster without) +%<driver>% \EnableCrossrefs\CodelineIndex + + %** To produce a change history: add the following line for one run, + %** then run makeindex -s gglo.ist -o bibentry.gls bibentry.glo + %** and reprocess, with or without this line (faster without) +%<driver>% \RecordChanges + +\DisableCrossrefs %May stay; zapped by \EnableCrossrefs +\CodelineNumbered %May stay + +\begin{document} + \DocInput{bibentry.dtx} +\end{document} +%</driver> +%\fi +% +% \DoNotIndex{\begin,\CodelineIndex,\CodelineNumbered,\def,\DisableCrossrefs} +% \DoNotIndex{\DocInput,\documentclass,\EnableCrossrefs,\end,\GetFileInfo} +% \DoNotIndex{\NeedsTeXFormat,\OnlyDescription,\RecordChanges,\usepackage} +% \DoNotIndex{\ProvidesClass,\ProvidesPackage,\ProvidesFile,\RequirePackage} +% \DoNotIndex{\filename,\fileversion,\filedate,\let} +% \DoNotIndex{\@listctr,\@nameuse,\csname,\else,\endcsname,\expandafter} +% \DoNotIndex{\gdef,\global,\if,\item,\newcommand,\nobibliography} +% \DoNotIndex{\par,\providecommand,\relax,\renewcommand,\renewenvironment} +% \DoNotIndex{\stepcounter,\usecounter,\nocite,\fi} +% \DoNotIndex{\@fileswfalse,\@gobble,\@ifstar,\@unexpandable@protect} +% \DoNotIndex{\AtBeginDocument,\AtEndDocument,\begingroup,\endgroup} +% \DoNotIndex{\frenchspacing,\MessageBreak,\newif,\PackageWarningNoLine} +% \DoNotIndex{\protect,\string,\xdef,\ifx,\texttt,\@biblabel,\bibitem} +% +% \setcounter{IndexColumns}{2} +% \setlength{\IndexMin}{10cm} +% \setcounter{StandardModuleDepth}{1} +% +% \GetFileInfo{bibentry} +% +% \title{\bfseries A \LaTeX\ Package to Place Bibliography Entries in Text} +% +% \author{Patrick W. Daly} +% +% \date{This paper describes package \texttt{\filename}\\ +% version \fileversion{} from \filedate +% } +% +% \maketitle +% +% \pagestyle{myheadings} +% \markboth{P. W. Daly}{Bibliography Entries in Text} +% +%^^A In order to keep all marginal notes on the one (left) side: +%^^A (otherwise they switch sides disasterously with twoside option) +% \makeatletter \@mparswitchfalse \makeatother +% +%\begin{small}\begin{center}\textbf{Summary}\end{center} +% The stripped version of this file contains the following brief description: +%\iffalse +%<*package> +%\fi +% \begin{verbatim} + % Bibliography Entries in Text + % + % In place of \bibliography{database}, enter \nobibliography{database} + % No bibliography is written at this point, but afterwards, + % \bibentry{key} prints the bibliography entry for citation <key> + % (whereas \cite{key} prints the citation, not the bib entry) + % + % If \bibliography is also to be given, then issue the starred variant + % \nobibliography* (without argument). +% \end{verbatim} +%\iffalse + %----------------------------------------------------------- + % See documentation in the source .dtx file for more details. +%</package> +%\fi +%\end{small} +% +% \section{Introduction} +% This package allows one to be able to place bibliographic entries anywhere +% in the text. It is to be used to produce annotated bibliographies, such as +% \begin{quote} +% For an intoduction to this topic, see Jones, J.~R., Basics on this topic, +% {\it J.\ Last Resorts}, \textbf{13}, 234--254, 1994. For more advanced +% information, see \dots. +% \end{quote} +% +% The idea is that the full reference is used, not just the citation Jones +% [1994]. +% +% \section{Invoking the Package} +% The macros in this package are included in the main document +% with the |\usepackage| command of \LaTeXe, +% \begin{quote} +% |\documentclass[..]{...}|\\ +% |\usepackage{|\texttt{\filename}|}| +% \end{quote} +% +% \section{Usage} +% +% \newcommand\btx{\textsc{Bib}\TeX} +% This package must be used with \btx, not with a hand-written +% \texttt{thebibliography} environment. +% +% More precisely, there must be a \texttt{.bbl} file external to the \LaTeX\ +% file; whether this is written by hand or by \btx\ is unimportant. +% +% \DescribeMacro{\nobibliography} +% The bibliography entries are stored with the command +% |\nobibliography|\marg{bibfiles}, which is like the usual +% |\bibliography|\marg{bibfiles} except no bibliography is printed. The +% \texttt{.bbl} file is read in as usual but the \texttt{thebibliography} is +% redefined so that all the entries are stored, not printed. +% +% \DescribeMacro{\bibentry} +% The text of the entries may be printed with the command +% \begin{quote} +% |\bibentry|\marg{key} +% \end{quote} +% These commands may only be issued after |\nobibliography|, for otherwise +% the reference texts are not known. +% +% The final period of the original text will be missing, so that one can add +% punctuation as one pleases. +% +% Regular |\cite| (or the \texttt{natbib} versions) may be issued anywhere as +% usual. +% +% \DescribeMacro{\nobibliography*} +% If a regular list of references is to be given too, with the +% |\bibliography|\marg{bibfiles} command, issue the starred version +% |\nobibliography*| (without argument) in order to store the bib entry texts. +% This will load the same \texttt{.bbl} file as |\bibliography|, but will avoid +% messages from \btx\ about multiple |\bibdata| commands and warnings from +% \LaTeX\ about multiply defined citations. +% +% The processing procedure is as usual: +% \begin{enumerate} +% \item \LaTeX\ the file; +% \item Run \btx; +% \item \LaTeX\ the file twice. +% \end{enumerate} +% +% \noindent +% \textbf{Note:} it is highly recommended to make use of the \texttt{url} +% package, which will nicely format both url and doi addresses; in particular, +% they will break at convenient locations without a hyphen. +% +% \section{Caveats} +% +% The entries in the \texttt{.bbl} must be of the form +% \begin{quote} +% |\bibitem|\oarg{label}\marg{key}\\ +% \emph{Text of the reference entry.}\\[1ex] +% |\bibitem|\dots +% \end{quote} +% That is, there must be a new line after the \marg{key} (or at least a space) +% and a blank line before the next |\bibitem|. The final period in the text +% will be removed, if present, allowing one to place the |\bibentry| commands +% in mid-sentence. Of course, there may be other periods within the text that +% might look funny. +% +% The \texttt{\filename} package will work with \texttt{natbib} with its +% native |\bibitem| format, and with standard \LaTeX. Nothing else can be +% guaranteed. +% +% It will also work with Donald Arseneau's \texttt{url} package. This is +% highly recommended (almost obligatory) if the references contain Internet +% addresses (URLs) and any of my bibliography styles are being used. My styles +% pack the URL text into the |\url| command. Without the \texttt{url} package, +% this command defaults to |\texttt| which does a horrible job of printing URL +% addresses, especially if they contain special characters. +% +% The use of both |\nobibliography*| and |\bibliography| together is limited and +% perhaps unsatisfactory. There is only one \texttt{.bbl} file, and hence one +% list of references. Since |\nobibliography*| does not have its own list of +% database files, one cannot take the |\bibentry| citations from separate +% databases. Also, any |\bibentry| citation must appear in the list of +% references, something that one might reasonably not care for. (It must be +% in the \texttt{.bbl} file else its text cannot be stored for |\bibentry| +% use.) +% +% It would be better if |\nobibliography| and |\bibliography| could be used +% independently of each other, with different databases, different +% \texttt{.bbl} files. However, this involves enormous complications, with +% separate \texttt{.aux} files and naming problems for the \texttt{.bbl}s. +% +% \StopEventually{\PrintIndex\PrintChanges} +% +% \section{Options with \texttt{docstrip}} +% The source \texttt{.dtx} file is meant to be processed with +% \texttt{docstrip}, for which a number of options are available: +% \begin{description} +% \item[\ttfamily package] to produce a \texttt{.sty} package file with most +% comments removed; +% +% \item[\ttfamily driver] to produce a driver \texttt{.drv} file that will +% print out the documentation under \LaTeXe. The documentation cannot +% be printed under \LaTeX~2.09. +% +% \end{description} +% The source file \texttt{\filename.dtx} is itself a driver file and can +% be processed directly by \LaTeXe. +% +% \section{The Coding} +% This section presents and explains the actual coding of the macros. +% It is nested between |%<*package>| and |%</package>|, which +% are indicators to \texttt{docstrip} that this coding belongs to the package +% file. +% +% \begin{macro}{\nobibliography} +% \changes{1.1}{1997 Nov 11}{Add starred version; make changes local} +% The |\nobibliography| is used just as |\bibliography|; it locally redefines +% the \texttt{thebibliography} environment to do nothing, while |\bibitem| is +% redefined to save the ensuring entry text. Then |\bibliography| is called to +% input the |\jobname.bbl| file. +% +% The business with the counters is just for standard \LaTeX; \texttt{natbib} +% does not need it. +% +% The starred form is to be used when a true |\bibliography| command is also +% given. Thus we want to prevent writing duplicate |\bibdata| and |\bibcite| +% commands to the auxiliary file. Setting the |\ifBR@star| flag accomplishes +% this by turning off |\if@filesw| and |\BR@bibitem|. +% \begin{macrocode} +%<*package> +\newif\ifBR@star +\newcommand\nobibliography{\@ifstar{\BR@nobib{}}{\BR@nobib}} +\newcommand\BR@nobib[1]{% + \ifx\relax#1\relax\global\BR@startrue\else\global\BR@starfalse\fi + \begingroup + \ifBR@star\@fileswfalse\fi + \renewenvironment{thebibliography}[1]{% + \usecounter{enumiv}% + \renewcommand\item[1][]{% + \ifx\relax####1\relax\stepcounter\@listctr\fi}% + \ifBR@star \newcommand\BR@bibitem[2][]{}\else + \let\BR@bibitem=\bibitem\fi + \let\bibitem=\BR@b@bibitem}{}% + \let\@biblabel\@gobble + \bibliography{#1}\endgroup + \ifx\relax#1\relax\global\BR@startrue\else\global\BR@starfalse\fi} +% \end{macrocode} +% Note: |\BR@star| must be set once again at the end since |\bibliography| +% always sets it to \meta{false}. +% \end{macro} +% +% \begin{macro}{\BR@b@bibitem} +% The new |\bibitem|; test for optional argument, call the old |\bibitem| +% (stored as |\BR@bibitem|) and then call the macro to store the remaining +% text. The old |\bibitem| must be called so the |\cite| can work. +% +% In the case of the starred |\nobibliography|, |\BR@bibitem| is not the old +% |\bibitem|, but one that throws away its arguments. This prevents an entry +% being made to the auxiliary file, an entry that is made by the real +% |\bibliography| command. +% \begin{macrocode} +\newcommand\BR@b@bibitem[2][]{\ifx\relax#1\relax\BR@bibitem{#2}% + \else \BR@bibitem[#1]{#2}\fi \BR@c@bibitem{#2}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\BR@c@bibitem} +% \changes{1.1}{1997 Nov 11}{Remove need for reference to end with period} +% This macro stores all the text that follows up to ``space newpar'', removing a +% final period if present. It is assumed that a new line ($\equiv$space) comes +% between the |\bibitem| \marg{key} and the text, and that a blank line +% ($\equiv$|\par|) comes between references. These conditions are generally met +% by all bibliography styles. +% +% \changes{1.3}{1999 Aug 26}{Store with \cs{gdef} instead of \cs{xdef}} +% Originally I used |\xdef| to store the text, but this causes problems with +% the |\url| command of the \texttt{url} package. The simplest solution is to +% use |\gdef| instead so that |\url| is executed when the text is printed, +% not when it is stored. +% \begin{macrocode} +\def\BR@c@bibitem#1 #2 \par{{\let\protect\@unexpandable@protect + \expandafter \gdef\csname BR@r@#1\@extra@b@citeb\endcsname + {\BR@nodot#2\relax.\relax\relax}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\BR@nodot} +% \changes{1.1}{1997 Nov 11}{Add macro} +% To remove a possible final period. This macro always adds a terminal +% |\relax|. +% \begin{macrocode} +\def\BR@nodot#1.\relax#2\relax{#1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bibentry} +% \changes{1.4}{2000 Jun 20}{Add \texttt{hyperref} commands} +% The macro that prints the stored text. It also calls |\nocite| in order +% that the reference be entered in the \texttt{.aux} file for \btx\ +% processing. +% \begin{macrocode} +\newcommand\bibentry[1]{\nocite{#1}{\frenchspacing + \hyper@natanchorstart{#1\@extra@b@citeb}% + \@nameuse{BR@r@#1\@extra@b@citeb}\hyper@natanchorend}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@extra@b@citeb} +% This macro is provided to work with the \texttt{chapterbib} package. +% \begin{macrocode} +\providecommand\@extra@b@citeb{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hyper@natanchorstart} +% \changes{1.4}{2000 Jun 20}{Add default definition} +% \begin{macro}{\hyper@natanchorend} +% \changes{1.4}{2000 Jun 20}{Add default definition} +% Provide dummy definitions for when \texttt{hyperref} package not present. +% \begin{macrocode} +\providecommand\hyper@natanchorstart[1]{} +\providecommand\hyper@natanchorend{} +% \end{macrocode} +% \end{macro}\end{macro} +% \begin{macro}{\urlprefix} +% \changes{1.3}{1999 Aug 26}{Add macro} +% \begin{macro}{\url} +% \changes{1.3}{1999 Aug 26}{Add macro} +% My \texttt{bst} files that support URL addresses make use of commands +% |\url| and |\urlprefix|, which are given default definitions in the +% \texttt{bbl} file. However, these definitions are local to the +% \texttt{thebibliography} environment. Since the bibliography text is stored +% unexpanded (|\gdef| instead of |\xdef|) these default definitions are lost +% when the text is printed. Thus they must be provided in this package as well. +% +% Define |\url| after the preamble in case \texttt{url} is loaded +% after \texttt{\filename}. +% \begin{macrocode} +\AtBeginDocument{% + \providecommand*{\urlprefix}{URL } + \providecommand*{\url}[1]{\texttt{#1}} +} +% \end{macrocode} +% Note: it is highly recommended always to use the \texttt{url} package; this +% default for |\url| will not allow line breaks within the URL text and any +% special characters like |$ _ #| will create serious problems. +% \end{macro}\end{macro} +% +% \begin{macro}{bibliography} +% \changes{1.1}{1997 Nov 11}{Add warning for missing \cs{bibliography}} +% \changes{1.3}{1999 Aug 26}{Set flag via \cs{bibliography} +% not \cs{thebibliography}} +% Finally, test at the end of the document if |\nobibliography*| was used +% without a following |\bibliography| and issue a warning. Is this useful? +% Strictly speaking, the order could be interchanged and then a warning would +% be erroneously given. Or, one could produce the \texttt{.bbl} file and then +% remove the |\bibliography| command, and the |\bibentry| commands will still +% function. (Hence the warning is only that \btx\ will not process, not the +% |\bibentry| will not work.) Will there be problems with \texttt{chapterbib}? +% +% For all these reasons, this warning could be questionable. Keep it for now +% anyway. +% \begin{macrocode} +\AtBeginDocument{\let\BR@bib\bibliography + \def\bibliography{\global\BR@starfalse\BR@bib}} +\AtEndDocument{\ifBR@star\PackageWarningNoLine{bibentry} + {You have used \string\nobibliography* \MessageBreak + without a following \string\bibliography.\MessageBreak + You may not be able to run BibTeX}\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\doi} +% \changes{1.5}{2007 Oct 30}{Add macro} +% The |\doi| command is used in the modern \texttt{.bst} files, and is in fact +% defined inside the |thebibliography| environment for these styles. However, +% that means, it is undefined outside where |\bibentry| is used. So it is +% necessary to provide a definition globally. +% \begin{macrocode} +\AtBeginDocument{\@ifpackageloaded{url} + {\providecommand{\doi}{doi: \begingroup \urlstyle{rm}\Url}} + {\providecommand{\doi}[1]{doi: #1}}} +%</package> +% \end{macrocode} +% \end{macro} +% +% \Finale |