diff options
Diffstat (limited to 'macros/latex/contrib/koma-script/scrkernel-bibliography.dtx')
-rw-r--r-- | macros/latex/contrib/koma-script/scrkernel-bibliography.dtx | 746 |
1 files changed, 746 insertions, 0 deletions
diff --git a/macros/latex/contrib/koma-script/scrkernel-bibliography.dtx b/macros/latex/contrib/koma-script/scrkernel-bibliography.dtx new file mode 100644 index 0000000000..17b9b610bd --- /dev/null +++ b/macros/latex/contrib/koma-script/scrkernel-bibliography.dtx @@ -0,0 +1,746 @@ +% \iffalse meta-comment +% ====================================================================== +% scrkernel-bibliography.dtx +% Copyright (c) Markus Kohm, 2002-2022 +% +% This file is part of the LaTeX2e KOMA-Script bundle. +% +% This work may be distributed and/or modified under the conditions of +% the LaTeX Project Public License, version 1.3c of the license. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2005/12/01 or later and of this work. +% +% This work has the LPPL maintenance status "author-maintained". +% +% The Current Maintainer and author of this work is Markus Kohm. +% +% This work consists of all files listed in MANIFEST.md. +% ====================================================================== +%%% From File: $Id: scrkernel-bibliography.dtx 3874 2022-06-05 10:38:02Z kohm $ +%<option>%%% (run: option) +%<body>%%% (run: body) +%<*dtx> +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\begingroup + \def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#2/#3/#4}} + \filedate$Date: 2022-06-05 12:38:02 +0200 (So, 05. Jun 2022) $ + \def\filerevision$#1: #2 ${\gdef\filerevision{r#2}} + \filerevision$Revision: 3874 $ + \edef\reserved@a{% + \noexpand\endgroup + \noexpand\ProvidesFile{scrkernel-bibliography.dtx}% + [\filedate\space\filerevision\space + KOMA-Script source + (bibliography)]% + }% +\reserved@a +\documentclass[USenglish]{koma-script-source-doc} +\usepackage{babel} +\usepackage{hvlogos} +\setcounter{StandardModuleDepth}{2} +\begin{document} +\DocInput{scrkernel-bibliography.dtx} +\end{document} +%</dtx> +% \fi^^A meta-comment +% +% \changes{v2.95}{2002/06/30}{new by splitting \file{scrclass.dtx}} +% \changes{v3.36}{2022/02/21}{switch over from \cls*{scrdoc} to +% \cls*{koma-script-source-doc}} +% \changes{v3.36}{2022/02/21}{whole implementation documentation in English} +% +% \GetFileInfo{scrkernel-bibliography.dtx} +% \title{Bibliography and References with +% \href{https://komascript.de}{\KOMAScript} Classes and Packages} +% \author{\href{mailto:komascript@gmx.info}{Markus Kohm}} +% \date{Revision \fileversion{} of \filedate} +% \maketitle +% \begin{abstract} +% \file{scrkernel-bibliography.dtx} provides the usual functionality for the +% bibliography or references. In comparison with the standard classes +% several additions are available. Nevertheless it is fully compatible with +% the known features of the standard classes. +% \end{abstract} +% \tableofcontents +% +% \section{User Manual} +% +% You can find the user documentation of the commands implemented in +% \file{scrkernel-bibliography.dtx} in the \KOMAScript{} manual, either the +% German \file{scrguide} or the English \file{scrguien}. +% +% +% \MaybeStop{\PrintIndex} +% +% \section{Implementation of Bibliography or References} +% +% Bibliography or references are not available with the \KOMAScript{} letter +% class. +% \begin{macrocode} +%<*!letter> +% \end{macrocode} +% +% +% \subsection{Bibliography styles} +% +% \KOMAScript{} provides styles for the bibliography or references. This is +% similar to the redefinition of \cs{@openbib@code} and \cs{newblock} with the +% standard classes, but much more configurable. +% +% \begin{command}{\newbibstyle} +% \changes{v2.98c}{2008/02/15}{added} +% \changes{v3.17}{2015/03/12}{using internal storage of options \opt{bibliography}} +% Defining new bibliography style: +% \begin{quote} +% \cs{newbibstyle}\oarg{parent style}\marg{style name}\marg{style code} +% \end{quote} +% The command defines an internal command \cs{scr@bibstyle@\meta{style name}}, +% that can be used to activate a bibliography style. If the \meta{parent +% style} is given, the code of the \meta{parent style} is executed before the +% \meta{style code}. +% \begin{macro}{\@openbib@code} +% \changes{v2.3g}{1996/01/14}{added} +% \changes{v2.98c}{2008/02/15}{earlier definition} +% Typically the \meta{style code} redefines the macro \cs{@openbib@code} and +% \cs{newblock}. +% The \cs{@openbib@code} is executed at the very beginning of a +% bibliography. Originally it has been used to implement the standard option +% \opt{openbib}. \KOMAScript{} uses it for compatibility for all bibliography +% styles. +% \begin{command}{\newblock} +% \changes{v2.3g}{1996/01/14}{initialization changed} +% \changes{v2.98c}{2008/02/15}{earlier definition} +% The command \cs{newblock} is used inside bibliography entries to mark a +% \emph{new block}. Usually such new blocks are inserted after the author and +% after the title. But the user or \BibTeX{} style is free to use it different. +% Both are initialized empty (before the code of a parent +% style is executed. +% \begin{macro}{\bib@beginhook,\bib@endhook} +% \changes{v2.98c}{2008/02/15}{added} +% Also \cs{bib@beginhook} and \cs{bib@endhook} are initialized empty. So +% activation of a new bibliography style always removes the hook +% code. Redefining an already existing style is not supported and results in +% an error. +% \begin{macrocode} +%<*option> +\newcommand{\newbibstyle}[3][]{% + \scr@ifundefinedorrelax{scr@bibstyle@#2}{% + \scr@ifundefinedorrelax{scr@bibstyle@#1}{% + \ClassError{\KOMAClassName}{% + parent bibliography style `#1' does not exist}{% + You've told me to define the new bibliography style `#2'\MessageBreak + to be a child of bibliography style `#1', but bibliography + style\MessageBreak + `#1' does not exist.\MessageBreak + You have to remove the parent declaration or use an existing parent! + See the KOMA-Script manual for more information.% + }% + }{% + \@namedef{scr@bibstyle@#2}{% + \let\@openbib@code\@empty + \let\newblock\@empty + \let\bib@beginhook\@empty + \let\bib@endhook\@empty +% \end{macrocode} +% \begin{macro}{\scr@current@bibstyle} +% \changes{v3.17}{2015/03/12}{added} +% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}} +% \changes{v3.36}{2022/02/21}{add expanded name to list} +% To be able to change the current value of option \opt{bibliography} we need +% to know the current style and save it in \cs{scr@current@bibstyle}. We also +% have to correct the value in the storage by activating a style. +% \begin{macrocode} + \@ifundefined{scr@current@bibstyle}{}{% + \Ifstr{\scr@current@bibstyle}{}{}{% + \edef\reserved@a{% + \noexpand\KOMA@kav@remove{.\KOMAClassFileName}{bibliography}% + {\scr@current@bibstyle}% + }\reserved@a + }% + }% + \def\scr@current@bibstyle{#2}% +% \end{macrocode} +% \end{macro} +% \begin{macrocode} + \KOMA@kav@xadd{.\KOMAClassFileName}{bibliography}{#2}% + \csname scr@bibstyle@#1\endcsname + #3% + }% + \ifx\scr@bibstylelist\@empty + \edef\scr@bibstylelist{`#2'}% + \else + \edef\scr@bibstylelist{\scr@bibstylelist, `#2'}% + \fi + }% + }{% + \ClassError{\KOMAClassName}{bibliography style `#2' already exists}{% + You've told me to define the new bibliography style `#2',\MessageBreak + but this style already exists.\MessageBreak + You have to use another bibliography style name.\MessageBreak + See the KOMA-Script manual for more information.% + }% + }% +} +% \end{macrocode} +% \begin{macro}{\scr@bibstyle@} +% \changes{v2.98c}{2008/02/15}{added} +% Dummy of the empty parent style. +% \begin{macrocode} +\newcommand*{\scr@bibstyle@}{} +% \end{macrocode} +% \end{macro}^^A \scr@bibstyle@ +% The hook macros are reserved. +% \begin{macrocode} +\newcommand*{\bib@beginhook}{} +\newcommand*{\bib@endhook}{} +% \end{macrocode} +% \end{macro}^^A \bib@beginhook,\bib@endhook +% \begin{macro}{\scr@bibstylelist} +% \changes{v2.98c}{2008/02/15}{added} +% \changes{v3.36}{2022/02/21}{\cs{@gobble} removed} +% \cs{scr@bibstylelist} is a printable comma-separated list of all known +% styles. Single quotes are used to quote the single styles. It is designated +% to be used in messages. +% \begin{macrocode} +\newcommand*{\scr@bibstylelist}{} +% \end{macrocode} +% And also \cs{@openbib@code} and \cs{newblock} are reserved. +% \begin{macrocode} +\newcommand*{\@openbib@code}{} +\newcommand*{\newblock}{} +% \end{macrocode} +% \end{macro}^^A \scr@bibstylelist +% \begin{macro}{\scr@bibstyle@openstyle,\scr@bibstyle@oldstyle} +% \changes{v2.98c}{2008/02/15}{added} +% The bibliography style \texttt{openstyle} corresponds to standard option +% \opt{openbib}. The \cs{newblock} starts a new paragraph. +% Style \texttt{oldstyle} is the default style where \cs{newblock} inserts a +% small horizontal distance only. +% \begin{macrocode} +\newbibstyle{openstyle}{% + \renewcommand*{\@openbib@code}{% + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + }% + \renewcommand*{\newblock}{\par}% +} +\newbibstyle{oldstyle}{% + \renewcommand*{\newblock}{\hskip .11em\@plus.33em\@minus.07em}% +} +\scr@bibstyle@oldstyle +% \end{macrocode} +% \end{macro}^^A \scr@bibstyle@openstyle,\scr@bibstyle@oldstyle +% \end{command}^^A \newblock +% \end{macro}^^A \@openbib@code +% \end{command}^^A \newbibstyle +% +% +% \subsection{Bibliography heading} +% +% \begin{macro}{\bib@heading} +% \changes{v2.3h}{1995/01/21}{added} +% \changes{v2.6c}{2000/06/10}{printing preamble} +% \changes{v2.7b}{2001/01/05}{using \cs{setchapterpreamble}} +% \changes{v2.7j}{2001/06/27}{printing preamble moved to \env{thebibliography}} +% \changes{v2.98c}{2008/02/15}{defined ealier} +% \changes{v3.10}{2011/08/31}{using \cs{MakeMarkcase}} +% \changes{v3.12}{2012/02/06}{using \cs{ifbib@leveldown}} +% \changes{v3.13b}{2014/10/10}{running head with \texttt{leveldown} fixed} +% \changes{v3.25}{2017/10/13}{using always \cs{@mkright} and \cs{@mkdouble}} +% \changes{v3.25}{2017/10/13}{using \cs{bibliography@heading}} +% \begin{macro}{\bibliography@heading} +% \changes{v3.25}{2017/10/13}{added} +% \changes{v3.26}{2018/09/03}{using \cs{addsecmark} or \cs{subsectionmark} +% instead of \cs{@mkright}} +% \cs{bib@heading} runs the more generic \cs{bibliography@heading} with text +% \cs{refname} resp. \cs{bibname}. This indirect approach has been +% implemented, to that \pkg{biblatex} can simply call \cs{bibliography} with +% different texts for multiple bibliographies. +% \begin{macrocode} +\newcommand*{\bib@heading}{% +%<article> \bibliography@heading{\refname}% +%<book|report> \bibliography@heading{\bibname}% +} +\newcommand*{\bibliography@heading}[1]{% + \ifbib@leveldown +%<article> \subsection*{#1}% +%<book|report> \section*{#1}% +%<book|report> \addsecmark{#1}% +%<*article> + \begingroup + \c@secnumdepth=-\maxdimen + \subsectionmark{#1}% + \endgroup +%</article> + \else +%<article> \section*{#1}% +%<book|report> \chapter*{#1}% + \@mkdouble{\MakeMarkcase{#1}}% + \fi +}% +% \end{macrocode} +% \end{macro}^^A \bibliography@heading +% \end{macro}^^A \bib@heading +% +% +% \subsection{Options} +% +% \begin{option}{bibliography} +% \changes{v2.98c}{2008/02/15}{added} +% \changes{v3.10}{2011/08/31}{using \cs{MakeMarkcase}} +% \changes{v3.12}{2013/02/06}{new value \opt{leveldown}} +% \changes{v3.12}{2013/02/06}{new value \opt{standardlevel}} +% \changes{v3.12}{2013/03/05}{adapted to changes of \pkg*{scrbase}} +% \changes{v3.12}{2013/09/28}{using \cs{addxcontentsline} instead of +% \cs{addcontentsline}} +% \changes{v3.12}{2013/09/28}{do not write chapter entries to other directories} +% \changes{v3.17}{2015/03/12}{using internal value storage} +% \changes{v3.25}{2017/10/13}{using always \cs{@mkright} and \cs{@mkdouble}} +% \changes{v3.25}{2017/10/13}{redefining \cs{bibliography@heading} instead of +% \cs{bib@heading}} +% \KOMAScript provides several configurations for the bibliography or +% references using a single option. +% \begin{macro}{\bib@leveldownfalse,\bib@leveldowntrue,\ifbib@leveldown} +% \changes{v3.12}{2013/02/06}{added} +% The boolean \cs{ifbib@leveldown} is used to allow the +% bibliography/references have a lower heading level. +% \begin{macrocode} +\newif\ifbib@leveldown +% \end{macrocode} +% \end{macro} +% The supported values for option \opt{bibliography} are: +% \begin{macrocode} +\KOMA@key{bibliography}{% + \scr@ifundefinedorrelax{scr@bibstyle@#1}{% + \KOMA@set@ncmdkey{bibliography}{@tempa}{% +% \end{macrocode} +% \begin{description} +% \item[\opt{=notoc}:] (default) don't add the bibliography/references to the +% table of contents. +% \end{description} +% \begin{macrocode} + {notoc}{0},{nottotoc}{0},{plainheading}{0},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=totoc}:] add the bibliography/references to the table of +% contents, but do not number it. +% \end{description} +% \begin{macrocode} + {totoc}{1},{toc}{1},{notnumbered}{1},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=numbered}:] number the bibliography/references and so also add +% it to the table of contents. +% \end{description} +% \begin{macrocode} + {numbered}{2},{totocnumbered}{2},{tocnumbered}{2},{numberedtotoc}{2},% + {numberedtoc}{2},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=leveldown}:] don't use the top heading level (chapters with +% \cls*{scrbook} or \cls*{scrreprt}, sections with \cs*{scrartcl}) but one +% level lower (sections with \cls*{scrbook} or \cls*{scrreprt}, subsection +% with \cs*{scrartcl}) for the bibliography/references. +% \end{description} +% \begin{macrocode} + {leveldown}{3},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=standardlevel}:] use the top heading level (chapters with +% \cls*{scrbook} or \cls*{scrreprt}, sections with \cs*{scrartcl}) for the +% bibliography/references. +% \end{description} +% \begin{macrocode} + {standardlevel}{4}% + }{#1}% + \ifcase \@tempa\relax % notoc + \KOMA@kav@remove{.\KOMAClassFileName}{toc}{nobibliography}% + \KOMA@kav@remove{.\KOMAClassFileName}{toc}{bibliography}% + \KOMA@kav@remove{.\KOMAClassFileName}{toc}{bibliographynumbered}% + \KOMA@kav@add{.\KOMAClassFileName}{toc}{nobibliography}% + \KOMA@kav@remove{.\KOMAClassFileName}{bibliography}{notoc}% + \KOMA@kav@remove{.\KOMAClassFileName}{bibliography}{totoc}% + \KOMA@kav@remove{.\KOMAClassFileName}{bibliography}{numbered}% + \KOMA@kav@add{.\KOMAClassFileName}{bibliography}{notoc}% + \renewcommand*{\bibliography@heading}[1]{% + \ifbib@leveldown +%<article> \subsection*{##1}% +%<book|report> \section*{##1}% + \@mkright{\MakeMarkcase{##1}}% + \else +%<article> \section*{##1}% +%<book|report> \chapter*{##1}% + \@mkdouble{\MakeMarkcase{##1}}% + \fi + }% + \or% totoc + \KOMA@kav@remove{.\KOMAClassFileName}{toc}{nobibliography}% + \KOMA@kav@remove{.\KOMAClassFileName}{toc}{bibliography}% + \KOMA@kav@remove{.\KOMAClassFileName}{toc}{bibliographynumbered}% + \KOMA@kav@add{.\KOMAClassFileName}{toc}{bibliography}% + \KOMA@kav@remove{.\KOMAClassFileName}{bibliography}{notoc}% + \KOMA@kav@remove{.\KOMAClassFileName}{bibliography}{totoc}% + \KOMA@kav@remove{.\KOMAClassFileName}{bibliography}{numbered}% + \KOMA@kav@add{.\KOMAClassFileName}{bibliography}{totoc}% + \renewcommand*{\bibliography@heading}[1]{% +%<*article> + \ifbib@leveldown +% \end{macrocode} +% \changes{v3.23}{2017/02/23}{using \cs{ext@toc}} +% \changes{v3.25}{2017/10/13}{using \cs{addsubsectiontocentry} instead of +% \cs{addxcontentsline}} +% From version 3.23 \cs{ext@toc} of \pkg*{tocbasic} is used instead of hard +% coded |toc|. +% \begin{macrocode} + \subsection*{% + \addsubsectiontocentry{}{##1}% + ##1% + }% + \@mkright{\MakeMarkcase{##1}}% + \else + \addsec{##1}% + \@mkdouble{\MakeMarkcase{##1}}% + \fi +%</article> +%<*book|report> + \ifbib@leveldown + \addsec{##1}% + \else + \if@chaptertolists + \@chaptertolistsfalse\addchap{##1}\@chaptertoliststrue + \else + \addchap{##1}% + \fi + \@mkdouble{\MakeMarkcase{##1}}% + \fi +%</book|report> + }% + \or% numbered + \KOMA@kav@remove{.\KOMAClassFileName}{toc}{nobibliography}% + \KOMA@kav@remove{.\KOMAClassFileName}{toc}{bibliography}% + \KOMA@kav@remove{.\KOMAClassFileName}{toc}{bibliographynumbered}% + \KOMA@kav@add{.\KOMAClassFileName}{toc}{bibliographynumbered}% + \KOMA@kav@remove{.\KOMAClassFileName}{bibliography}{notoc}% + \KOMA@kav@remove{.\KOMAClassFileName}{bibliography}{totoc}% + \KOMA@kav@remove{.\KOMAClassFileName}{bibliography}{numbered}% + \KOMA@kav@add{.\KOMAClassFileName}{bibliography}{numbered}% + \renewcommand*{\bibliography@heading}[1]{% +%<*article> + \ifbib@leveldown + \subsection{##1}% + \else + \section{##1}% + \@mkdouble{\MakeMarkcase{\sectionmarkformat ##1}}% + \fi +%</article> +%<*book|report> + \ifbib@leveldown + \section{##1}% + \else + \if@chaptertolists + \@chaptertolistsfalse\chapter{##1}\@chaptertoliststrue + \else + \chapter{##1} + \fi + \@mkdouble{\MakeMarkcase{\chaptermarkformat ##1}}% + \fi +%</book|report> + } + \or% leveldown + \KOMA@kav@remove{.\KOMAClassFileName}{bibliography}{leveldown}% + \KOMA@kav@remove{.\KOMAClassFileName}{bibliography}{standardlevel}% + \KOMA@kav@add{.\KOMAClassFileName}{bibliography}{leveldown}% + \bib@leveldowntrue + \or% standardlevel + \KOMA@kav@remove{.\KOMAClassFileName}{bibliography}{leveldown}% + \KOMA@kav@remove{.\KOMAClassFileName}{bibliography}{standardlevel}% + \KOMA@kav@add{.\KOMAClassFileName}{bibliography}{standardlevel}% + \bib@leveldownfalse + \fi + }{% +% \end{macrocode} +% \begin{description} +% \item[\opt{=\meta{style}}:] all other values are names of styles. +% \begin{description} +% \item[ToDo:] Here we should test for valid style names and report an +% unknown value for unknown styles. +% \end{description} +% \end{description} +% \begin{macrocode} + \FamilyKeyStateProcessed + \edef\reserved@a{% + \noexpand\KOMA@kav@remove{.\KOMAClassFileName}{bibliography}% + {\scr@current@bibstyle}% + }\reserved@a + \csname scr@bibstyle@#1\endcsname + }% +} +% \end{macrocode} +% \end{option} +% +% \begin{option}{openbib} +% \begin{macro}{\@openbibfalse,\@openbibtrue,\if@openbib} +% \changes{v2.3g}{1996/01/14}{removed} +% \end{macro} +% \changes{v2.3g}{1996/01/14}{re-implemented} +% \changes{v2.98c}{2008/02/15}{obsolete} +% \changes{v3.01a}{2008/11/21}{standard instead of obsolete} +% The standard option \opt{openbib} is mapped to \opt{bibliography=openstyle}. +% \begin{macrocode} +\KOMA@DeclareStandardOption{openbib}{bibliography=openstyle} +% \end{macrocode} +% \end{option} +% +% \begin{option}{bibtotoc} +% \changes{v2.3h}{1995/01/21}{added} +% \changes{v2.6b}{2000/05/26}{\cs{@mkboth} added} +% \changes{v2.6c}{2000/06/10}{\cs{bibpreamble} added} +% \changes{v2.7}{2001/01/03}{braces fixed} +% \changes{v2.7j}{2001/06/27}{preamble printing moved to \env{thebibliography}} +% \changes{v2.98c}{2008/02/15}{obsolete} +% \changes{v3.01a}{2008/11/20}{deprecated} +% \begin{option}{bibtotocnumbered} +% \changes{v2.3h}{1995/01/21}{added} +% \changes{v2.6b}{2000/05/26}{\cs{@mkboth} added} +% \changes{v2.6c}{2000/06/10}{\cs{bibpreamble} added} +% \changes{v2.7}{2001/01/03}{braces fixed} +% \changes{v2.7b}{2001/01/05}{using \cs{setchapterpreamble}} +% \changes{v2.7i}{2001/05/17}{\cs{chapter} instead of \cs{addchap}} +% \changes{v2.7j}{2001/06/27}{preamble printing moved to \env{thebibliography}} +% \changes{v2.9p}{2003/07/07}{number in running head} +% \changes{v2.98c}{2008/02/15}{obsolete} +% \changes{v3.01a}{2008/11/20}{deprecated} +% Deprecated options \opt{bibtotoc} and \opt{bibtotocnumbered} are mapped to +% \opt{bibliography=totoc} resp. \opt{bibliography=totocnumbered}. +% \begin{macrocode} +\KOMA@DeclareDeprecatedOption{bibtotoc}{bibliography=totoc} +\KOMA@DeclareDeprecatedOption{bibtotocnumbered}{bibliography=totocnumbered} +%</option> +% \end{macrocode} +% \end{option}^^A bibtotocnumbered +% \end{option}^^A bibtotoc +% +% +% \subsection{Names} +% +% \begin{command}{\refname,\bibname} +% \changes{v3.36}{2022/02/15}{explicit definition for English languages} +% Depending on the class either \cs{refname} or \cs{bibname} is used. +% \begin{macrocode} +%<*body> +%<*article> +\newcommand*\refname{References} +\providecaptionname{american,australian,british,canadian,english,newzealand,% + UKenglish,ukenglish,USenglish,usenglish}\refname{References} +%</article> +%<*book|report> +\newcommand*\bibname{Bibliography} +\providecaptionname{american,australian,british,canadian,english,newzealand,% + UKenglish,ukenglish,USenglish,usenglish}\bibname{Bibliography} +%</book|report> +% \end{macrocode} +% \end{command} +% +% +% \subsection{Printing the bibliography or references} +% +% \begin{command}{\setbibpreamble} +% \changes{v2.6c}{2000/06/10}{added} +% \changes{v2.7j}{2001/05/27}{\cs{renewcommand} replaced by \cs{def} for +% better \pkg{natbib} compatibility} +% \begin{macro}{\bibpreamble} +% \changes{v2.6c}{2000/06/10}{neue (intern)} +% \changes{v2.6d}{2000/07/20}{\cs{let} replaced by \cs{newcommand*}} +% \changes{v2.8q}{2002/01/10}{\cs{newcommand*} replaced by \cs{let}} +% \changes{v2.7j}{2001/05/27}{preamble printing moved to \env{thebibliography}} +% \cs{bibpreamble} should be interpreted as an internal macro. The user +% command name space has been used for compatibility with \pkg{natbib} +% only. The official \KOMAScript{} user interface is using +% \begin{quote} +% \cs{setbibpreamble}\marg{preamble} +% \end{quote} +% Also for compatibility \cs{bibpreamble} is not set by \cs{bib@heading} but +% inside environment \env{theenvironment}. +% \begin{macrocode} +\newcommand*{\bibpreamble}{\relax} +\let\bibpreamble\relax +\newcommand{\setbibpreamble}[1]{\def\bibpreamble{#1}} +% \end{macrocode} +% \end{macro}^^A \bibpreamble +% \end{command}^^A \setbibpreamble +% +% \begin{length}{bibindent} +% The indent of entries with option \opt{bibliography=openstyle}. Default is 1.5\,em. +% \begin{macrocode} +\newdimen\bibindent +\bibindent=1.5em +% \end{macrocode} +% \end{length} +% +% \begin{environment}{thebibliography} +% \changes{v2.2a}{1995/02/01}{for \cls*{scrartcl} \cs{bibname} replaced by +% \cs{refname}} +% \changes{v2.3h}{1995/01/21}{using \cs{bib@heading}} +% \changes{v2.8q}{2002/01/10}{handling empty preamble} +% \changes{v2.9o}{2003/03/06}{fix of comparing \cs{bibpreamble} with \cs{@empty}} +% \changes{v2.98c}{2008/02/15}{new hooks \cs{bib@before@hook} and +% \cs{bib@after@hook}} +% This environment is used to print the bibliography or references. Note: This +% environment is redefined by almost all bibliography packages like +% \pkg{natbib} or \pkg{biblatex}. No one of these supports all features of +% \KOMAScript{}. So if such a package is used, users should consult the +% package manual instead of using a \KOMAScript{} feature. +% \begin{macrocode} +\newenvironment{thebibliography}[1]{% + \if@bib@break@ + \bib@beginhook + \else +%<*book|report> + \ifx\bibpreamble\relax\else\ifx\bibpreamble\@empty\else + \setchapterpreamble{\bibpreamble}% + \fi\fi +%</book|report> + \bib@heading +%<*article> + \ifx\bibpreamble\relax\else\ifx\bibpreamble\@empty\else + \noindent\bibpreamble\par\nobreak + \fi\fi +%</article> + \bib@beginhook + \bib@before@hook + \fi +% \end{macrocode} +% \begin{command}{\BreakBibliography} +% \changes{v2.98c}{2008/02/15}{added} +% Redefining \cs{BreakBibliography} to work with our definition of +% \env{thebibliography}. +% \begin{macrocode} + \renewcommand{\BreakBibliography}[1]{% + \@bib@break + \end{thebibliography}% + \begingroup ##1\endgroup + \begin{thebibliography}{#1} + }% +% \end{macrocode} +% \end{command} +% \begin{macrocode} +% Start the list for the entries. + \list{% + \@biblabel{\@arabic\c@enumiv}% + }{% + \settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \@openbib@code + \if@bib@break@ + \edef\@tempa{% + \noexpand\usecounter{enumiv}% + \noexpand\setcounter{enumiv}{\the\c@enumiv}% + }\@tempa + \no@bib@break + \else + \usecounter{enumiv}% + \fi + \let\p@enumiv\@empty + \renewcommand*\theenumiv{\@arabic\c@enumiv}% + }% + \sloppy\clubpenalty4000 \widowpenalty4000 + \sfcode`\.=\@m +}{% + \if@bib@break@ + \def\@noitemerr{% + \@latex@warning{% + \string\BreakBibliography\space at begin of `thebibliography' + environment\MessageBreak + or following \string\BreakBibliography}% + }% + \else + \def\@noitemerr{% + \@latex@warning{% + Empty `thebibliography' environment or + \string\BreakBibliography\MessageBreak + before end of `thebibliography' environment}% + }% + \fi + \endlist + \if@bib@break@ + \else + \bib@after@hook + \let\bib@before@hook\@empty + \let\bib@after@hook\@empty + \fi + \bib@endhook +} +% \end{macrocode} +% \begin{macro}{\if@bib@break@,\no@bib@break,\@bib@break} +% \changes{v2.98c}{2008/02/15}{added} +% To be used as global switch. +% \begin{description} +% \item[ToDo:] Maybe redefine \cs{@bib@break@true} and \cs{@bib@break@false}. +% \end{description} +% \begin{macrocode} +\newif\if@bib@break@ +\newcommand{\no@bib@break}{\global\let\if@bib@break@\iffalse} +\newcommand*{\@bib@break}{\global\let\if@bib@break@\iftrue} +% \end{macrocode} +% \end{macro}^^A \if@bib@break@,\no@bib@break,\@bib@break +% \begin{macro}{\bib@before@hook,\bib@after@hook} +% \changes{v2.98c}{2008/02/15}{added} +% \begin{macrocode} +\newcommand*{\bib@before@hook}{} +\newcommand*{\bib@after@hook}{} +% \end{macrocode} +% \end{macro}^^A \bib@before@hook,\bib@after@hook +% \end{environment}^^A thebibliography +% +% \begin{command}{\BreakBibliography} +% \changes{v2.98c}{2008/02/15}{added} +% The initial definition is a do nothing but warn, because the command makes +% sense only inside \env{thebibliography}. +% \begin{macrocode} +\newcommand{\BreakBibliography}[1]{% + \ClassWarning{\KOMAClassName}{% + You've used \string\BreakBibliography\space either outside of\MessageBreak + the bibliography or `thebibliography' was redefined\MessageBreak + incompatible, e.g., using a bibliography package.\MessageBreak + \string\BreakBibliography\space ignored% + }% +} +% \end{macrocode} +% \end{command}^^A \BreakBibliography +% +% \begin{command}{\AfterBibliographyPreamble,\AtEndBibliography} +% \changes{v2.98c}{2008/02/15}{added} +% Add code to the two new hooks inside our definition of +% \env{thebibliography}. So any bibliography package can break this +% functionality. +% Note: The hooks are always emptied by selecting a style using +% \opt{bibliography=\meta{style name}}. +% \begin{macrocode} +\newcommand{\AfterBibliographyPreamble}{\g@addto@macro\bib@before@hook} +\newcommand{\AtEndBibliography}{\g@addto@macro\bib@after@hook} +%</body> +% \end{macrocode} +% \end{command} +% +% +% \begin{macrocode} +%</!letter> +% \end{macrocode} +% +% \Finale +% \PrintChanges +% +\endinput +% Local Variables: +% mode: doctex +% ispell-local-dictionary: "en_US" +% eval: (flyspell-mode 1) +% TeX-master: t +% TeX-engine: luatex-dev +% eval: (setcar (or (cl-member "Index" (setq-local TeX-command-list (copy-alist TeX-command-list)) :key #'car :test #'string-equal) (setq-local TeX-command-list (cons nil TeX-command-list))) '("Index" "mkindex %s" TeX-run-index nil t :help "makeindex for dtx")) +% End: |