diff options
author | Norbert Preining <preining@logic.at> | 2008-01-17 07:17:14 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2008-01-17 07:17:14 +0000 |
commit | ec36cd5eb45e097b964e96cad5ae7c83dc2930f2 (patch) | |
tree | 5eda590759b563e600d50c87dcc3ca5a8ef970e2 /Master/texmf-dist/doc | |
parent | 1ff881bb9b27e1bfc797ed8ce04608954c87548b (diff) |
new package mciteplus (reimpl of mcite), incl. in latexextra like mcite
git-svn-id: svn://tug.org/texlive/trunk@6274 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc')
-rw-r--r-- | Master/texmf-dist/doc/latex/mciteplus/README | 118 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/mciteplus/mciteplus_code.txt | 218 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/mciteplus/mciteplus_doc.pdf | bin | 0 -> 486432 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/mciteplus/mciteplus_doc.tex | 2319 |
4 files changed, 2655 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/mciteplus/README b/Master/texmf-dist/doc/latex/mciteplus/README new file mode 100644 index 00000000000..d4f5fd652cf --- /dev/null +++ b/Master/texmf-dist/doc/latex/mciteplus/README @@ -0,0 +1,118 @@ + + +January 15, 2008 + +The mciteplus LaTeX package is an enhanced reimplementation of +Thorsten Ohl's mcite package: + +http://www.ctan.org/tex-archive/macros/latex/contrib/mcite/ + +which provides support for the grouping of multiple citations together +as is often done in physics journals. An extensive set of features +provide for other applications such as reference sublisting. + +Mciteplus offers the following features, many of which are not available +with the original mcite: + + 1. Entry punctuation can be controlled by the bibstyle (.bst) as well + as the user. + + 2. No "double periods" when an entry already ends with a period + (e.g., an abbreviated journal name). + + 3. Support for sublists. + + 4. Support for multiple bibliographies and/or auxiliary files. + + 5. The bibliography sample label width is automatically updated to + account for the changes in the numbering due to the grouped entries. + Maximum label width information is available to user. + + 6. Compatible with the natbib package. (The bibstyle must support both + mciteplus as well as natbib.) + + 7. Compatible with the REVTeX4 class. (The bibstyle must support both + mciteplus as well as natbib.) + + 8. Support for the optional argument of \cite[]{}. + + 9. Provides a means to allow users to use almost any cite command via + custom command wrappers and the ability to manually disable all + automatic internal hooks. + +10. Mciteplus compatible sorting bibstyles are possible via the use of a + "mcitetail" field in the BibTeX database entries. + + +Please note that existing mcite bibstyles (.bst files) are not compatible +with mciteplus. They will have to be remodified as explained in the +mciteplus documentation. + +See the mciteplus_doc.pdf user manual for full details. + +For helpful tips, answers to frequently asked questions and other support, +visit the Mciteplus home page at my website: + +http://www.michaelshell.org/tex/mciteplus/ + + +Enjoy! + +Michael Shell + + +******* +Version 1.0 (2008/01/15) initial release + +********************************** Files ********************************** + +README - This file. + +mciteplus.sty - The mciteplus LaTeX package. + +mciteplus_doc.pdf - The mciteplus user manual. + +mciteplus_doc.tex - LaTeX source code for the user manual. + +mciteplus_code.txt - Selected .bst modification and other code listings. + +apsrevM.bst - An mciteplus compatible version of REVTeX4's + apsrev.bst. + +apsrmpM.bst - An mciteplus compatible version of REVTeX4's + apsrmp.bst. Note: This is a sorting style. For it to + work properly, you must set the "mcitetail" BibTeX + database field for every tail entry. + +IEEEtranM.bst - An mciteplus compatible version of IEEEtran.bst. + +IEEEtranMN.bst - An mciteplus compatible version of IEEEtranN.bst + (natbib compatible). + +*************************************************************************** +Legal Notice: +This code is offered as-is without any warranty either expressed or +implied; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE! +User assumes all risk. +In no event shall any contributor to this code be liable for any damages or +losses, including, but not limited to, incidental, consequential, or any +other damages, resulting from the use or misuse of any information contained +here. + +All comments are the opinions of their respective authors. + +This work is distributed under the LaTeX Project Public License (LPPL) +( http://www.latex-project.org/ ) version 1.3, and may be freely used, +distributed and modified. A copy of the LPPL, version 1.3, is included +in the base LaTeX documentation of all distributions of LaTeX released +2003/12/01 or later. +Retain all contribution notices and credits. +** Modified files should be clearly indicated as such, including ** +** renaming them and changing author support contact information. ** + +File list of work: mciteplus.sty, mciteplus_doc.pdf, mciteplus_doc.tex, + mciteplus_code.txt, apsrevM.bst, apsrmpM.bst, + IEEEtranM.bst, IEEEtranMN.bst + +*************************************************************************** diff --git a/Master/texmf-dist/doc/latex/mciteplus/mciteplus_code.txt b/Master/texmf-dist/doc/latex/mciteplus/mciteplus_code.txt new file mode 100644 index 00000000000..5ecf2455b29 --- /dev/null +++ b/Master/texmf-dist/doc/latex/mciteplus/mciteplus_code.txt @@ -0,0 +1,218 @@ + +Bst modification and other code listings for the mciteplus package +Version 1.0, 2008/01/15 + +Copyright (c) 2008 Michael Shell +Support site: +http://www.michaelshell.org/tex/mciteplus/ + + +************************************************************************* + Legal Notice: + This code is offered as-is without any warranty either expressed or + implied; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE! User assumes all risk. + In no event shall any contributor to this code be liable for any damages + or losses, including, but not limited to, incidental, consequential, or + any other damages, resulting from the use or misuse of any information + contained here. + + All comments are the opinions of their respective authors. + + This work is distributed under the LaTeX Project Public License (LPPL) + ( http://www.latex-project.org/ ) version 1.3, and may be freely used, + distributed and modified. A copy of the LPPL, version 1.3, is included + in the base LaTeX documentation of all distributions of LaTeX released + 2003/12/01 or later. + Retain all contribution notices and credits. + ** Modified files should be clearly indicated as such, including ** + ** renaming them and changing author support contact information. ** +********************************************************************** + + + + + +***** start mciteplus begin.bib **** + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\ifx\mcitethebibliography\mciteundefinedmacro" + write$ newline$ + "\PackageError{unsrtM.bst}{mciteplus.sty has not been loaded}" + write$ newline$ + "{This bibstyle requires the use of the mciteplus package.}\fi" + write$ newline$ + "\begin{mcitethebibliography}{" longest.label * "}" * write$ newline$ +} + +***** end mciteplus begin.bib **** + + + + +***** start mciteplus begin.bib, more advanced example **** + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\ifx\mcitethebibliography\mciteundefinedmacro" + write$ newline$ + "\PackageError{unsrtM.bst}{mciteplus.sty has not been loaded}" + write$ newline$ + "{This bibstyle requires the use of the mciteplus package.}\fi" + write$ newline$ + "\begin{mcitethebibliography}{" longest.label * "}" * write$ newline$ + "\mciteSetBstSublistMode{b}" + write$ newline$ + "\mciteSetBstMaxWidthForm{subitem}{\alph{mcitesubitemcount})}" + write$ newline$ + "\mciteSetBstSublistLabelBeginEnd{\mcitemaxwidthsubitemform\space}" + write$ newline$ + "{\relax}{\relax}" + write$ newline$ +} + +***** end mciteplus begin.bib, more advanced example **** + + + + +***** start mciteplus end.bib **** + +FUNCTION {end.bib} +{ newline$ + "\end{mcitethebibliography}" write$ newline$ +} + +***** end mciteplus end.bib **** + + + + + +***** start mciteplus fin.entry **** + +% mciteplus fin.entry +% +% pushes true (1), if add.period$ would add a period to the string on the stack +% pushes false (0), otherwise +% Uses text.length$ to avoid full string comparison and two copies of string. +% Requires one copy of string on stack. +INTEGERS {would.add.period.textlen} +FUNCTION {would.add.period} +{ duplicate$ + add.period$ + text.length$ + 'would.add.period.textlen := + duplicate$ + text.length$ + would.add.period.textlen = + { #0 } + { #1 } + if$ +} + +FUNCTION {fin.entry} +{ would.add.period + { "\relax" * write$ newline$ + "\mciteBstWouldAddEndPuncttrue" write$ newline$ + "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" + write$ newline$ + "{\mcitedefaultendpunct}{\mcitedefaultseppunct}\relax" + } + { "\relax" * write$ newline$ + "\mciteBstWouldAddEndPunctfalse" write$ newline$ + "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" + write$ newline$ + "{}{\mcitedefaultseppunct}\relax" + } + if$ + write$ + newline$ + "\EndOfBibitem" write$ +} +% end mciteplus fin.entry + +***** end mciteplus fin.entry **** + + + + + +***** start mciteplus mcitetail field and sort key adjust support **** + +% mciteplus mcitetail field and sort key adjust support +INTEGERS {mcitetailcnt is.mcitetail} +STRINGS {mciteheadsortkey} +% convert the strings "yes" or "no" to #1 or #0 respectively +FUNCTION {mciteplus.yes.no.to.int} +{ "l" change.case$ duplicate$ + "yes" = + { pop$ #1 } + { duplicate$ "no" = + { pop$ #0 } + { "unknown boolean " quote$ * swap$ * quote$ * + " in " * cite$ * warning$ + #0 + } + if$ + } + if$ +} +FUNCTION {mciteplustail.adj.sort.key} +{ mcitetail + empty$ + { #0 'is.mcitetail := } + { mcitetail + mciteplus.yes.no.to.int + 'is.mcitetail := + } + if$ + is.mcitetail + { #1 mcitetailcnt + + 'mcitetailcnt := + mciteheadsortkey + "__" * + "000000000" + mcitetailcnt + int.to.str$ + * + #-1 #10 substring$ + * + 'sort.key$ := + } + { #0 'mcitetailcnt := + sort.key$ 'mciteheadsortkey := + } + if$ +} +% END mciteplus mcitetail field support + +***** end mciteplus mcitetail field and sort key adjust support **** + + + + + +***** REVTeX Patch code to prevent BibTeX from seeing endnotes ***** + + +% Patch REVTeX to prevent BibTeX from seeing endnotes as citations +% Insert just after REVTeX is loaded +\makeatletter +\let\@ORGREVTEXendnotemark\@endnotemark +\let\@ORGREVTEX@makefnmark@cite\@makefnmark@cite +\def\@endnotemark{\bgroup\@fileswfalse\@ORGREVTEXendnotemark\egroup} +\def\@makefnmark@cite{\bgroup\@fileswfalse\@ORGREVTEX@makefnmark@cite\egroup} +\makeatother + + +***** END REVTeX Patch Code ***** + +EOF diff --git a/Master/texmf-dist/doc/latex/mciteplus/mciteplus_doc.pdf b/Master/texmf-dist/doc/latex/mciteplus/mciteplus_doc.pdf Binary files differnew file mode 100644 index 00000000000..5ee97e7a78f --- /dev/null +++ b/Master/texmf-dist/doc/latex/mciteplus/mciteplus_doc.pdf diff --git a/Master/texmf-dist/doc/latex/mciteplus/mciteplus_doc.tex b/Master/texmf-dist/doc/latex/mciteplus/mciteplus_doc.tex new file mode 100644 index 00000000000..2f042834c2d --- /dev/null +++ b/Master/texmf-dist/doc/latex/mciteplus/mciteplus_doc.tex @@ -0,0 +1,2319 @@ +%% mciteplus_doc.tex +%% V1.0 +%% 2008/01/15 +%% Copyright (c) 2008 by Michael Shell +%% See: +%% http://www.michaelshell.org/ +%% for current contact information. +%% +%% This is the documentation for the mciteplus.sty package. +%% +%% Support sites: +%% http://www.michaelshell.org/tex/mciteplus/ +%% http://www.ctan.org/tex-archive/macros/latex/contrib/mciteplus/ +%% +%%************************************************************************* +%% Legal Notice: +%% This code is offered as-is without any warranty either expressed or +%% implied; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE! +%% User assumes all risk. +%% In no event shall IEEE or any contributor to this code be liable for +%% any damages or losses, including, but not limited to, incidental, +%% consequential, or any other damages, resulting from the use or misuse +%% of any information contained here. +%% +%% All comments are the opinions of their respective authors and are not +%% necessarily endorsed by the IEEE. +%% +%% This work is distributed under the LaTeX Project Public License (LPPL) +%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used, +%% distributed and modified. A copy of the LPPL, version 1.3, is included +%% in the base LaTeX documentation of all distributions of LaTeX released +%% 2003/12/01 or later. +%% Retain all contribution notices and credits. +%% ** Modified files should be clearly indicated as such, including ** +%% ** renaming them and changing author support contact information. ** +%% +%% File list of work: mciteplus.sty, mciteplus_doc.pdf, mciteplus_doc.tex, +%% mciteplus_code.txt, apsrevM.bst, apsrmpM.bst, +%% IEEEtranM.bst, IEEEtranMN.bst +%%************************************************************************* + +\documentclass[10pt,letterpaper]{article} + + +% tweak article.cls +\makeatletter + +\newcommand\tableofcontentssectiononly{% + \section*{\contentsname + \@mkboth{% + \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}} +\newcommand\tableofcontentsstarttoc{\@starttoc{toc}} + + +\def\@maketitle{% + \newpage + \null + \vspace{-3em}% + \begin{center}% + \let \footnote \thanks + {\LARGE \@title \par}% + \vskip 1em% + {\large + \lineskip .5em% + \begin{tabular}[t]{c}% + \@author + \end{tabular}\par}% + \vskip 1em% + {\large \@date}% + \end{center} + \par + \vskip 1em} + +\makeatother + + + +\usepackage{multicol} + + + +\parskip 1ex plus 1ex minus 0.75ex + +\parindent 1.0em + +\topmargin -49.0pt +\headheight 12pt +\headsep 0.25in +\footskip 0.4in + +% want 1in margins +\setlength{\topmargin}{-\headsep}% +\addtolength{\topmargin}{-\headheight}% +% we want 1in side margins regardless of paper type +\oddsidemargin 0in +\evensidemargin 0in +% set the text width +\setlength{\textwidth}{\paperwidth}% +\addtolength{\textwidth}{-2.0in}% +\setlength{\textheight}{\paperheight}% +\addtolength{\textheight}{-2.0in}% +% digitize textheight to be an integer number of lines. +% this may cause the bottom margin to be off a tad +\addtolength{\textheight}{-1\topskip}% +\divide\textheight by \baselineskip% +\multiply\textheight by \baselineskip% +\addtolength{\textheight}{\topskip}% + + +\newcommand{\MYdocversion}{1.1} + +\usepackage{type1ec} +%\usepackage{type1cm} +\usepackage[T1]{fontenc} + +\usepackage{ifpdf} +\usepackage{notoccite} + +%\usepackage[retainorgcmds]{IEEEtrantools} +% use roman url style +\usepackage{url} + +\csname url@rmstyle\endcsname +\ifpdf + \usepackage[pdftex]{graphicx} + \graphicspath{{.}} + \DeclareGraphicsExtensions{.pdf} +\else + \usepackage[dvips]{graphicx} + \graphicspath{{.}} + \DeclareGraphicsExtensions{.eps} +\fi + +\ifpdf + \usepackage[pdftex]{thumbpdf} +\else + \usepackage[dvips]{thumbpdf} +\fi + +\newcommand\MYhyperrefoptions{hypertexnames=false,bookmarks=true, +bookmarksnumbered=true, pdfpagemode={UseOutlines},plainpages=false, +pdfpagelabels=true,colorlinks=true,linkcolor={darkred}, +citecolor={darkgreen},pagecolor={black},urlcolor={darkblue}, +pdftitle={Mciteplus: Enhanced Multicitations}, +pdfsubject={Typesetting}, +pdfauthor={Michael D. Shell}, +pdfkeywords={bibliography, BibTeX, collapsed entries, LaTeX, mcite, +mciteplus, multicitations, physics journals, references, typesetting}} +\ifpdf + \usepackage[\MYhyperrefoptions,pdftex]{hyperref} +\else + \usepackage[\MYhyperrefoptions,dvips]{hyperref} + \usepackage{breakurl} +\fi + +\usepackage{color} +\definecolor{darkred}{rgb}{0.8,0.0,0.0} +\definecolor{darkgreen}{rgb}{0.0,0.5,0.0} +\definecolor{darkblue}{rgb}{0.0,0.0,0.7} + + +\providecommand{\texorpdfstring}[2]{#1} + + +% Improved \textunderscore to provide a much better fake _ when used with +% OT1 encoding. Under OT1, detect use of pcr or cmtt \ttfamily and use +% available true _ glyph for those two typewriter fonts. +\makeatletter +\def\@MYstringptm{ptm} % Times Roman family +\def\@MYstringppl{ppl} % Palatino Roman family +\def\@MYstringphv{phv} % Helvetica Sans Serif family +\def\@MYstringpcr{pcr} % Courier typewriter family +\def\@MYstringcmtt{cmtt} % Computer Modern typewriter family +\DeclareTextCommandDefault{\textunderscore}{\leavevmode +\ifx\f@family\@MYstringpcr\string_\else +\ifx\f@family\@MYstringcmtt\string_\else +\ifx\f@family\@MYstringptm\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else +\ifx\f@family\@MYstringppl\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else +\ifx\f@family\@MYstringphv\kern -0.03em\vbox{\hrule\@width 0.62em\@height 0.52pt\kern -0.33ex}\kern -0.03em\else +\kern 0.09em\vbox{\hrule\@width 0.6em\@height 0.44pt\kern -0.63pt\kern -0.42ex}\kern 0.09em\fi\fi\fi\fi\fi\relax} +\makeatother + +\makeatletter +\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}} +\def\@bstctlcite[#1]#2{\@bsphack + \@for\@citeb:=#2\do{% + \edef\@citeb{\expandafter\@firstofone\@citeb}% + \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}% + \@esphack} +\makeatother + +\makeatletter +%% ***** Start ZAX defs ***** +%% based on unreleased zax.sty, not ready yet for formal use +%% V0.9 +%% 2005/05/02 +%% Copyright (c) 2005 by Michael Shell +%% see http://www.michaelshell.org/contact.html +%% for current contact information. +% +% +% Showing LaTeX source code poses some difficulties. I probably could have +% done things with \verbatim. But, I don't like it for a number of reasons. +% For me, the main drawbacks are: +% +% 1. hyphenates words +% 2. does not perfectly left and right justify the \ttfamily text +% 3. does not allow the use of active LaTeX commands within the displayed +% code +% +% Basically, I wanted a little more control. +% +% So, I developed a set of commands that will display LaTeX code. +% The \ZAXlong and \ZAXshort commands allow the direct +% display of LaTeX commands. The difference between the two is that +% \ZAXlong will retain spaces and allows the inter-letter spacing +% to expand slightly so that the text will always be justified while +% \ZAXshort ignores spaces and uses no inter-letter space. +% Variations of these two can be created by the user to provide +% fo different font sizes and styles. +% +% When one of these commands is issued: +% +% | becomes the control character: |relax +% ( use |ZAXbar to get a | character) +% +% { } becomes like punctuation +% (use |bgroup and |egroup instead) +% +% + prevents a break between the characters it appears between +% (use |ZAXplus to get a + character) +% +% ~ nonbreaking spaces become visible tildes +% +% breaks are not allowed right after a "\" or a space +% +% For the long form, since normal spaces are not ignored: +% & becomes an (ignored) space character for use after commands. +% e.g., " |mbox|bgroup&Unbro|egroup&ken and " +% +% to stop the action of a \ZAX command, issue an |end. +% +% The trick is to read all the input characters and to insert a "sliver" +% of hspace glue between them! TeX will be happy to make a break at any +% glue, and it will never hyphenate at the break. With the long form, +% this interletter glue is also allowed to stretch a very small amount - +% because a long sequence could stretch across the entire column without +% any spaces to break on. +% When real spaces are encountered, we replace them with \hspace* commands +% of the same nominal length, but that can stretch and shrink a fair +% amount. The \hspace* form ensures that the space will not be lost +% at the start/end of the lines. By using \penalty10000 at the end of +% the artificial spaces, we ensure that TeX will not break right after a +% space - the user will be able to explicitly see the space at the +% beginning of the next line. +% +% This command family can be thought of as implementing a type of "backward" +% line breaking world in which breaks are assumed to possible everywhere except +% were indicated as prohibited. Furthermore, hyphenation is not used as spaces +% are not implicit with line breaks, but must be carried to the start of the +% next line. In other words, commands are not thought of as words, but rather +% as sequences of letters. +% +% +% Note: TeX parser tokenizes commands and special characters when acquiring +% an argument for a command. Thus, when used within an argument to a command, +% the code in the \ZAX never gets a chance to alter "\", "|", "{", "}", +% etc., before TeX acquires the argument. For such use, the syntax is reversed, +% i.e., call the commands using the "\" as one normally would. The "+", "~" will +% still operate as described above: +% \footnote{\ZAXlong this\ZAXplus is+a\ZAXbar big\_\ZAXbsl mbox% +% \ZAXobrace~\ZAXcbrace\ test\end.} +% Future versions of this code may use this latter approach exclusively so +% as to unify the syntax (although entering LaTeX code will then take longer +% command sequences in the main text). + + +\def\ZAXplus{\mbox{+}} % a plus sign +\def\ZAXbar{\mbox{|}} % a vert bar +\def\ZAXvtilde{\~{}} % a visible tilde +%\def\ZAXvtilde{\textasciitilde} % another form of a visible tilde + +% define \ZAXbsl which is a "\" character +\catcode`\|=0 \catcode`\\=12 +|edef|ZAXbsl{|mbox{\}} +|catcode`|\=0 |catcode`||=12 + +% define \ZAXbslnobrk macro that gives an unbreakable backslash character +% this is used only in \ZAXrun to prevent breaks around \ +\catcode`\|=0\catcode`\\=12 |def|ZAXbslnobrk{\} |catcode`|\=0 |catcode`||=12 + +% define \ZAXobrace which is a "{" character +\catcode`\$=1 \catcode`\{=12 +\edef\ZAXobrace$\mbox${}} +\catcode`\$=3 \catcode`\{=1 + +% define \ZAXcbrace which is a "}" character +\catcode`\$=2 \catcode`\}=12 +\edef\ZAXcbrace{\mbox{}$$ +\catcode`\$=3 \catcode`\}=2 + +% define \ZAXmath which is the "$" math shift character +\edef\ZAXmath{$} + +% makes spaces visible +\def\ZAXvspon{\catcode`\ =12} +% makes spaces invisible +\def\ZAXvspoff{\catcode`\ =10} + +% \ZAXvsp is a macro that produces a visible space +% can be used to show spaces within the short or long cmdword forms +\ZAXvspon\def\ZAXvsp{ }\ZAXvspoff + +% \\ does not work in ZAX environments do to the change in +% cat codes. We provide it here as \ZAXnl - this definition +% is updated as ZAX starts. +\let\ZAXnl=\\ + +% fat space nominal factor (multiplied by width of \ ) +\def\ZAXfatspacenorm{1} +% fat space stretch factor +\def\ZAXfatspacestretch{0.43} +% fat space shrink factor +\def\ZAXfatspaceshrink{0.24} +% slim space +\def\ZAXslimspacelen{0pt plus 0.15pt minus 0pt} + + + +% these are determined in the start code, but provide dummys here so they are defined +\def\ZAXfatspace{\hspace*{10pt}\penalty10000} +\def\ZAXslimspace{\penalty0\hspace{0pt plus 0pt minus 0pt}} + + +% flag to indicate if font was saved +\newif\if@ZAXsavedfont \@ZAXsavedfontfalse + +% saves all the properties of the given font +% use global in case font save is set within a group +\def\ZAXsavefont{\global\let\@ZAXfontENCODINGsave\f@encoding% +\global\let\@ZAXfontFAMILYsave\f@family\global\let\@ZAXfontSERIESsave\f@series% +\global\let\@ZAXfontSHAPEsave\f@shape\global\let\@ZAXfontSIZEsave\f@size% +\global\let\@ZAXfontBASELINESKIPsave\f@baselineskip\global\@ZAXsavedfonttrue} +% restores font back to saved value +\def\ZAXrestorefont{\fontencoding{\@ZAXfontENCODINGsave}\fontfamily{\@ZAXfontFAMILYsave}% +\fontseries{\@ZAXfontSERIESsave}\fontshape{\@ZAXfontSHAPEsave}% +\fontsize{\@ZAXfontSIZEsave}{\@ZAXfontBASELINESKIPsave}\selectfont} + + +% lengths +\newskip\@ZAXtemplen +\newskip\@ZAXfatspacelen + + +% Setup for the longcmdword form +% make a stretchable fat spacer equal in length to the nominal space length +% use penalty's to ensure easy breaks before and impossible breaks after spaces +% allow the inter-letter slim "sliver" space to stretch a tad +% make | the control character, & a space, and \{}, $ and blank characters +% equal to punctuation +\def\ZAXstartLong{\let\@ZAXnextbrk=0% no sliver before start +\settowidth{\@ZAXfatspacelen}{\ }% +\setlength{\@ZAXfatspacelen}{\ZAXfatspacenorm\@ZAXfatspacelen}% +\setlength{\@ZAXtemplen}{\ZAXfatspacestretch\@ZAXfatspacelen}% +\addtolength{\@ZAXfatspacelen}{0pt plus \the\@ZAXtemplen}% +\setlength{\@ZAXtemplen}{\ZAXfatspaceshrink\@ZAXfatspacelen}% +\addtolength{\@ZAXfatspacelen}{0pt minus \the\@ZAXtemplen}% +\def\ZAXfatspace{\penalty0\hspace*{\@ZAXfatspacelen}\penalty10000}% +\def\ZAXslimspace{\hspace{\ZAXslimspacelen}}% +\let\ZAXnl=\\% +\catcode`\|=0 \catcode`\\=12 \catcode`\{=12 \catcode`\}=12 \catcode`\ =12 \catcode`\&=10% +\catcode`\^=12 \catcode`\$=12 \catcode`\#=12% +\ZAXrun} + + +% Setup for the shortcmdword form +% make a stretchable fat spacer equal in length to the nominal space length +% use penalty's to ensure impossible breaks after spaces +% the inter-letter slim "sliver" space is rigid at 0pt +% make | the control character and \{}, $, # and characters equal to punctuation +\def\ZAXstartShort{\let\@ZAXnextbrk=0%% no sliver before start +\settowidth{\@ZAXfatspacelen}{\ }% +\setlength{\@ZAXtemplen}{\ZAXfatspacestretch\@ZAXfatspacelen}% +\addtolength{\@ZAXfatspacelen}{0pt plus \the\@ZAXtemplen}% +\setlength{\@ZAXtemplen}{\ZAXfatspaceshrink\@ZAXfatspacelen}% +\addtolength{\@ZAXfatspacelen}{0pt minus \the\@ZAXtemplen}% +\def\ZAXfatspace{\hspace*{\@ZAXfatspacelen}\penalty10000}% +\def\ZAXslimspace{\hspace{0pt plus 0pt minus 0pt}}% +\let\ZAXnl=\\% +\catcode`\|=0 \catcode`\\=12 \catcode`\{=12 \catcode`\}=12 \catcode`\$=12 \catcode`\#=12% +\ZAXrun} + + +\def\ZAXrun#1{\ifx#1\end\catcode`\{=1 \catcode`\}=2 \catcode`\\=0% stop if we hit an |end +\catcode`\|=12 \catcode`\ =10 \catcode`\&=4 \catcode`\^=7 \catcode`\$=3 \catcode`\#=6% +\if@ZAXsavedfont\ZAXrestorefont\fi\global\@ZAXsavedfontfalse\let\@ZAXnext=\relax% +\else% +\def\@ZAXtokenout{#1}% save the token as a macro +\let\@ZAXout=1\relax% assume we wish to output this character +\let\@ZAXbrk=1\relax% assume this is a breakable point +\ifx\@ZAXnextbrk0\let\@ZAXbrk=0\fi% unless prev char wants no break here +\let\@ZAXnextbrk=1\relax% we assume this char will allow the next char to break +\let\@ZAXoutspace=\ZAXslimspace% assume the output spacer is a sliver +\ifx\@ZAXtokenout\ZAXvsp\let\@ZAXout=0\let\@ZAXoutspace=\ZAXfatspace\let\@ZAXnextbrk=0\fi% visible space, output the space instead +\ifx#1\ \let\@ZAXout=0\let\@ZAXoutspace=\ZAXfatspace\let\@ZAXnextbrk=0\fi% control space, output the spacer instead +\ifx#1+\let\@ZAXout=0\let\@ZAXbrk=0\let\@ZAXnextbrk=0\fi% a + means not to break here or at the next, discard token and no spacer +\ifx\@ZAXtokenout\ZAXbslnobrk\let\@ZAXnextbrk=0\fi% we don't want breaks right after \ +\ifx#1~\def\@ZAXtokenout{\ZAXvtilde}\fi% make nonbreaking spaces visible +%\ifx#1\ZAXobrace\def\@ZAXtokenout{{\catcode`\{=1\{}}\typeout{obrace}\fi% +%\ifx#1\ZAXcbrace\def\@ZAXtokenout{\}}\fi% +\ifx\@ZAXbrk1\@ZAXoutspace\else\penalty10000\relax\@ZAXoutspace\fi% output spacer, stop breaks if needed +\ifx\@ZAXout1\ifx\@ZAXbrk1\relax\@ZAXtokenout\relax\else\penalty10000\relax\@ZAXtokenout\relax\fi\fi% output the token if desired +\let\@ZAXnext=\ZAXrun% ready to get next token +\fi% now get the next token +\@ZAXnext} + + +\def\ZAXlong#1{\ZAXsavefont#1\ZAXstartLong} +\def\ZAXshort#1{\ZAXsavefont#1\ZAXstartShort} + + +% to define custom commands, do like: +% \def\ZAXlongSTT{\ZAXsavefont\small\ttfamily\ZAXstartLong} + + +%% ***** End ZAX defs ***** +\makeatother + + +% Bogus thebibliography for apsrev.bst extracts +\makeatletter +\newenvironment{MYapsrevthebibliography}[1]{\relax +\list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \@openbib@code + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \sloppy + \clubpenalty4000 + \@clubpenalty \clubpenalty + \widowpenalty4000% + \sfcode`\.\@m\relax +\expandafter\ifx\csname bibnamefont\endcsname\relax + \def\bibnamefont##1{##1}\fi +\expandafter\ifx\csname bibfnamefont\endcsname\relax + \def\bibfnamefont##1{##1}\fi +\expandafter\ifx\csname citenamefont\endcsname\relax + \def\citenamefont##1{##1}\fi +\expandafter\ifx\csname url\endcsname\relax + \def\url##1{\texttt{##1}}\fi +\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi +\providecommand{\bibinfo}[2]{##2}\relax +\providecommand{\eprint}[2][]{\url{##2}}\relax +\def\@MYapsrevbogusbibitem{\@ifnextchar[{\@@MYapsrevbogusbibitem}{\@@MYapsrevbogusbibitem[\relax]}}\relax +\def\@@MYapsrevbogusbibitem[##1]##2{\item}\relax +\let\bibitem\@MYapsrevbogusbibitem}{\endlist} +\makeatother + + +\def\BibTeX{{\rmfamily B\kern-.05em{\scshape i\kern-.025em b}\kern-.08em + T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}} + +% needed only when not using the CM super fonts as they do not +% have bold small caps needed for a bold \BibTeX +%\newcommand{\MYfontfix}[1]{\textmd{#1}} +% +\newcommand{\MYfontfix}[1]{\relax #1} + +\newenvironment{MYlistblk}{\parindent=0pt\trivlist\item\relax\small}{\endtrivlist} + +\newcommand{\MYemdash}{\,---\,} + +\newcommand{\MYshortcmd}{\ZAXshort{\ttfamily\small}} +\newcommand{\MYlongcmd}{\ZAXlong{\ttfamily\small}} + +\newcommand{\MYsmalltt}[1]{\texttt{\small #1}} + +\newcommand{\MYsecref}[1]{section~\ref{#1}} +\newcommand{\MYSecref}[1]{Section~\ref{#1}} + + +\pagestyle{headings} + +%\vskip -20em + + +\title{Mciteplus: Enhanced Multicitations} +\author{Michael Shell\thanks{See \url{http://www.michaelshell.org/} for +current contact information.\hfil\break +\indent\ Manuscript originally created on +January 15, 2008. The latest version of this +package can be obtained at \mbox{CTAN} \cite{ctan:mciteplus}. This work is distributed +under the \LaTeX\ Project Public License (LPPL) ( \url{http://www.latex-project.org/} ) +version 1.3. A copy of the LPPL, version 1.3, is included in the base \LaTeX\ +documentation of all distributions of \LaTeX\ released 2003/12/01 or later. +The opinions expressed here are entirely that of the author. No warranty is expressed +or implied. User assumes all risk.}\\ +{\small\hfill\textit{with special thanks to Joseph Wright}\hfill\mbox{}}} + +\date{Version 1.0, January 15, 2008\\[0.5\baselineskip] +{\normalfont\normalsize\url{http://www.michaelshell.org/tex/mciteplus/}}} + + +\flushbottom + +\begin{document} + +\bstctlcite{BSTcontrol} + +\thispagestyle{empty} + +\maketitle +\begin{abstract} +This \LaTeXe{} package is an enhanced reimplementation of Thorsten Ohl's mcite package +which provides support for the grouping of multiple citations together as is +often done in physics journals. An extensive set of features provide for +other applications such as reference sublisting. +\end{abstract} + +\tableofcontentssectiononly +\begin{multicols}{2} +\tableofcontentsstarttoc +\end{multicols} + + + +\section{Introduction} +Mciteplus is a reimplementation of Thorsten Ohl's +(\url{http://theorie.physik.uni-wuerzburg.de/~ohl/}) mcite \LaTeX\ package +\cite{ctan:mcite}, which +provides for ``collapsed'' citations (i.e., a grouping of multiple references +under a single collective reference) as is often done in physics journals. +Using Thorsten Ohl's example in the documentation for mcite: +\begin{MYapsrevthebibliography}{3} +\bibitem[{\citenamefont{Glashow}(1961)}]{Glashow} +\bibinfo{author}{\bibfnamefont{S.~L.} \bibnamefont{Glashow}}, + \bibinfo{journal}{Nucl. Phys.} \textbf{\bibinfo{volume}{22}}, + \bibinfo{pages}{579} (\bibinfo{year}{1961}). + +\bibitem[{\citenamefont{Salam}(1968)}]{Salam} +\bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Salam}}, in + \emph{\bibinfo{booktitle}{Elementary Particle Theory}}, edited by + \bibinfo{editor}{\bibfnamefont{N.}~\bibnamefont{Svartholm}} + (\bibinfo{publisher}{Almquist and Wiksell}, \bibinfo{address}{Stockholm}, + \bibinfo{year}{1968}), pp. \bibinfo{pages}{367--377}. + +\bibitem[{\citenamefont{Weinberg}(1967)}]{Weinberg} +\bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Weinberg}}, + \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{19}}, + \bibinfo{pages}{1264} (\bibinfo{year}{1967}). +\end{MYapsrevthebibliography} +becomes:\footnote{Formatting produced by the apsrevM.bst bibstyle.}\relax +\begin{MYapsrevthebibliography}{1} +\bibitem[{\citenamefont{Glashow}(1961)}]{Glashow} +\bibinfo{author}{\bibfnamefont{S.~L.} \bibnamefont{Glashow}}, + \bibinfo{journal}{Nucl. Phys.} \textbf{\bibinfo{volume}{22}}, + \bibinfo{pages}{579} (\bibinfo{year}{1961}); +\bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Salam}}, in + \emph{\bibinfo{booktitle}{Elementary Particle Theory}}, edited by + \bibinfo{editor}{\bibfnamefont{N.}~\bibnamefont{Svartholm}} + (\bibinfo{publisher}{Almquist and Wiksell}, \bibinfo{address}{Stockholm}, + \bibinfo{year}{1968}), pp. \bibinfo{pages}{367--377}; +\bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Weinberg}}, + \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{19}}, + \bibinfo{pages}{1264} (\bibinfo{year}{1967}). +\end{MYapsrevthebibliography} + + +\subsection{Features} +Mciteplus offers the following features many of which are not available with the +original mcite: +\begin{itemize} +\item Entry punctuation can be controlled by the bibstyle (.bst) as well as the user. +\item No ``double periods'' when an entry already ends with a period (e.g., an +abbreviated journal name). +\item Support for sublists. +\item Support for multiple bibliographies and/or auxiliary files. +\item The bibliography sample label width is automatically updated to account for the changes + in the numbering due to the grouped entries. Maximum label width information is + available to user. +\item Compatible with the natbib package. (The bibstyle must support both +mciteplus as well as natbib.) +\item Compatible with the REV\TeX4 class. (The bibstyle must support both +mciteplus as well as natbib.) +\item Support for the optional argument of \MYshortcmd\cite[]{}|end. +\item Provides a means to allow users to use almost any cite command via custom command +wrappers and the ability to manually disable all automatic internal hooks. +\item Mciteplus compatible sorting bibstyles are possible via the use of a ``mcitetail'' +field in the \BibTeX\ database entries. See \MYsecref{sec:sortingbibstyles} for details. +\end{itemize} + + +\subsection{File List} +The files in this package are as follows: +\begin{description} +\item[\ttfamily mciteplus.sty] The mciteplus \LaTeX\ package. +\item[\ttfamily mciteplus\_doc.pdf] The user manual (this document). +\item[\ttfamily mciteplus\_doc.tex] The \LaTeX\ source of the user manual. +\item[\ttfamily mciteplus\_code.txt] Selected .bst modification and other code listings. +\item[\ttfamily apsrevM.bst] An mciteplus compatible version of REV\TeX4's apsrev.bst \cite{ctan:revtex}. +\item[\ttfamily apsrmpM.bst] An mciteplus compatible version of REV\TeX4's apsrmp.bst \cite{ctan:revtex}. +\textbf{Note: This is a sorting style. For it to work properly, you must set the +``mcitetail'' \BibTeX\ database field for every tail entry as mentioned in +\MYsecref{sec:sortingbibstyles}.} +\item[\ttfamily IEEEtranM.bst] An mciteplus compatible version of IEEEtran.bst \cite{ctan:ieeetranbst}. +\item[\ttfamily IEEEtranMN.bst] An mciteplus compatible version of IEEEtranN.bst (natbib compatible) \cite{ctan:ieeetranbst}. + +\end{description} + + + +\section{Basic Usage} + + +\subsection{Bibstyle (.bst) Requirements} +Mciteplus does require an mciteplus compatible bibstyle (.bst file). +\textbf{Unfortunately, bibstyles designed for use with mcite will not +work with mciteplus.} See \MYsecref{sec:bibstylemods} for +information on how to convert existing bibstyles for use with mciteplus. + + +\subsection{Package Loading and Options} +Mciteplus is invoked in the standard \LaTeX\ way: +\begin{MYlistblk} +\MYlongcmd +\usepackage[|itshape+options|upshape]{mciteplus}|end +\end{MYlistblk} +{\bfseries As mciteplus installs command wrappers over existing \MYshortcmd\cite|end\ commands, +it should be loaded last, even after other packages that normally are loaded last such +as hyperref \cite{ctan:hyperref}.} + +Be aware that LaTeX may have to be run twice in order for the correct label +width to be calculated and used after entries are collapsed. When this happens, +mciteplus will issue the warning +``Rerun to ensure correct mciteplus label max width/count''. + +\subsubsection{Package Options} +\label{sec:packageoptions} +Valid options are: + +\indent\textbf{chapterbibrootbib}\MYemdash +This option must be specified when using the rootbib option/mode of the chapterbib package +\cite{ctan:chapterbib}. Mciteplus is not able to auto-detect the rootbib mode +of chapterbib directly because when invoking that mode, the user must run \LaTeX\ a second time +without the rootbib option. For all of these \LaTeX\ runs, keep this mciteplus option +enabled (i.e., as long as there is, or is going to be, a jobname.bbl file under +chapterbib). Beware of the possibility of an mciteplus status (i.e., head or tail) +conflict in an overall bibliography if the same entry is cited differently in +different parts of the document. See \MYsecref{sec:chapterbib} for more details on +the use of chapterbib. + +\indent\textbf{debug}\MYemdash +Invoking this option will cause mciteplus to issue debugging information +to the console whenever it processes: (1) a citation list; (2) an mciteplus aware +bibliography; and (3) entries within the mciteplus bibliography. This may be helpful to +diagnose problems or to learn what tracking IDs, etc., mciteplus is using. + +\indent\textbf{nohooks}\MYemdash +This option will prevent mciteplus from automatically hooking into \LaTeX's +\MYshortcmd\cite|end\ internals and/or autodetecting and interfacing with +external packages. The intended use is for advanced users who want to create +their own mciteplus' \MYshortcmd\cite|end\ wrappers. When using this option, +users will then have to manually define their own cite wrappers using the internal +mciteplus engine (which is always available to users regardless of whether this +option is selected or not). See \MYsecref{sec:customwrappers} for how to do this. +Beware that this option can cause some packages to issue errors when used with +mciteplus, especially those that alter the bibliography environments (e.g., +citeref.sty, pageref.sty, etc.) + + +\subsection{Cite Format} +In the example given at the start of the introduction, the Glashow entry is +known as the ``head'' entry and those of Salam and +Weinberg are known as ``tails''. As with mcite, tails are declared within +the \MYshortcmd\cite|end\ command immediately after their head entry by prefixing them with a *: +\begin{MYlistblk} +\MYlongcmd +\cite{Glashow,*Salam,*Weinberg}|end +\end{MYlistblk} +Head entries may or may not have tails. However, every tail must have a head entry. +The tail entries for a group must all be declared (without duplication) when their +head entry is first cited. After that, the head entry may be recited as often as desired. +It is possible, though bad practice, to redeclare the tails (or a subset thereof) when +reciting the head. This allows for the case of overall bibliographies in which the +same citation group is defined in multiple local bibliographies, all the entries +of which are later combined into a single overall bibliography. +However, new tails cannot be later added to an existing citation group. + +Thus, each of the following lines will generate an error as they are \textbf{invalid}: +\begin{MYlistblk} +\MYlongcmd +\cite{*Salam} |% missing head declaration |\ +| |\ +\cite{Glashow,*Salam} \cite{Glashow,*Salam,*Weinberg} |% tails added after initial definition|\ +| |\ +\cite{Glashow,*Salam,*Salam} |% duplicate tails in initial definition|end +\end{MYlistblk} +Each of the following lines is \textbf{valid}: +\begin{MYlistblk} +\MYlongcmd +\cite{Glashow,*Salam,*Weinberg,Smith,*Jones} |% multiple groups OK |\ +| |\ +\cite{Glashow,*Salam,*Weinberg} \cite{Glashow} |% head can be recited anytime |\ +| |\ +\cite{Glashow,*Salam,*Weinberg} \cite{Glashow,*Salam,*Weinberg} |% restate previous definition |\ +| |\ +\cite{Glashow,*Salam,*Weinberg} \cite{Glashow,*Weinberg} |% restate part of previous definition |\ +| |\ +\cite[page 580 of Glashow]{Glashow,*Salam} |% optional argument is supported |\ +| |\ +\nocite{*} |% BibTeX wildcard OK, but use with caution |end +\end{MYlistblk} +The \BibTeX\ ``wildcard'' entry ``*'' for \MYshortcmd\nocite|end\ is allowed. However, +it is important to ensure that the entries \BibTeX\ will automatically add to the +bibliography from its databases will not get ``in between'' any head/tail groupings. This +will not be a problem with unsorted bibstyles as long as the head/tail groups are +cited prior to the invocation of the wildcard entry or as long as the head/tail group +entries are listed together and in the correct order in the \BibTeX\ databases. However, with +sorting bibstyles extra care must be taken to keep the head/tail groups together in +spite of the reordering process. See \MYsecref{sec:sortingbibstyles} for more information. + +By default, mciteplus will issue an error message if it encounters +bibliography\footnote{Well, only those in a \texttt{mcitethebibliography} environment.} +entries that it has no record of. This will almost certainly be the case if the +\BibTeX\ wildcard entry is used. To disable the error messages and allow +mciteplus to automatically assume that all unknown entries are heads, just issue +the \TeX\ conditional: +\begin{MYlistblk} +\MYlongcmd +\mciteErrorOnUnknownfalse|end +\end{MYlistblk} +before the bibliography it is to affect. Mciteplus will issue a warning message +to the console as a reminder if it detects the use of the \BibTeX\ wildcard entry. + + +\subsection{Punctuation Controls} +There are three kinds of punctuation/spacing mciteplus uses in the formatting of entries +in the bibliography: (1) Middle punctuation which is used between entries within a +collapsed group (typically ``; ''); (2) End punctuation which is used at the end +of each entry group (typically ``.''); and (3) separation punctuation/spacing +which is inserted before each head entry after the very first. Separation +punctuation/spacing is usually not used (it is typically ``\MYshortcmd\relax|end''), +but it is provided for because some bibliography styles may require unusual spacing +or a \MYshortcmd\par|end\ between the entries, but under mciteplus, bibstyles cannot +directly insert such things as \BibTeX\ does not know at run time which +entries are heads and which are tails. + +Mciteplus defines the package defaults of each as:\footnote{{\ttfamily\ZAXbsl providecommand} is +used so that class files can declare their own mciteplus defaults.} +\begin{MYlistblk} +\MYlongcmd +\providecommand{\mcitedefaultmidpunct}{;\space}|\ +\providecommand{\mcitedefaultendpunct}{.}|\ +\providecommand{\mcitedefaultseppunct}{\relax}|end +\end{MYlistblk} +However, both the bibstyle and the user can override the defaults with the user having +the final say in the matter. + +Bibstyles can override the package defaults via issuing the command: +\begin{MYlistblk} +\MYlongcmd +\mciteSetBstMidEndSepPunct{|bgroup|itshape+middle punctuation|egroup}{|bgroup|itshape+end punctuation|egroup}{|bgroup|itshape+separation punctuation|egroup}|end +\end{MYlistblk} +\MYshortcmd\mciteSetBstMidEndSepPunct|end\ must be issued at the end of the entry it is to +affect (prior to the next \MYshortcmd\bibitem|end) and the values given will remain in effect +until specified again. + +The user can override the bibstyle by issuing the command: +\begin{MYlistblk} +\MYlongcmd +\mciteSetMidEndSepPunct{|bgroup|itshape+middle punctuation|egroup}{|bgroup|itshape+end punctuation|egroup}{|bgroup|itshape+separation punctuation|egroup}|end +\end{MYlistblk} +before the bibliography it is to affect. However, this poses a problem because +the bibstyle may or may not specify end punctuation for each entry (e.g., such +as when an entry ends with a URL or an abbreviated journal name). To provide for +this, mciteplus provides a \TeX\ conditional \MYshortcmd\ifmciteBstWouldAddEndPunct|end, +that a bibstyle can set to true if and only if \BibTeX\ would add end punctuation +to the given entry. (See \MYsecref{sec:bibstylemods} for how bibstyle designers +should implement this feature.) If the bibstyle provides this feature, and it is +recommended that they do, then users can take advantage of this conditional in their use +of \MYshortcmd\mciteSetMidEndSepPunct|end: +\begin{MYlistblk} +\MYlongcmd +\mciteSetMidEndSepPunct{;\space}{\ifmciteBstWouldAddEndPunct.\else\fi}{\relax}|end +\end{MYlistblk} +and thus still avoid the ``double period'' problem under their +own custom punctuation. + +After issuing a user defined \MYshortcmd\mciteSetMidEndSepPunct|end\ for a bibliography, +a user can restore control back to the bibstyle for later bibliographies by issuing: +\begin{MYlistblk} +\MYlongcmd +\mciteSetMidEndSepPunct{\mcitebstmidpunct}{\mcitebstendpunct}{\mcitebstseppunct}|end +\end{MYlistblk} +before the bibliography(ies) to be affected. + + + +\subsection{Counters} +\label{sec:counters} +Mciteplus provides two \LaTeX\ counters, \MYshortcmd+mcitebibitemcount|end\ and +\MYshortcmd+mcitesubitemcount|end, which track the number of head, and tail entries +for each head, respectively. At each head entry, \MYshortcmd+mcitebibitemcount|end\ is +incremented and \MYshortcmd+mcitesubitemcount|end\ is reset, by/to one. +At each tail entry (or sublisted head entry under sublist modes ``b'', ``f'' and ``h'' +as described in \MYsecref{sec:sublistlabelbeginend}), \MYshortcmd+mcitesubitemcount|end\ +is incremented by one after each subitem label is rendered. +Be aware that \MYshortcmd+mcitebibitemcount|end\ is \emph{not} what is used to +actually generate the entry labels in the bibliography as \LaTeX\ handles this +the same way it normally does (typically using it's own counter, +\MYsmalltt{enumiv}). + +These counters can be referenced by the user to generate sublist labels +(\MYsecref{sec:sublistlabelbeginend}), to determine maximum label +widths (\MYsecref{sec:maxwidths}) as well as to control +other counters (e.g., \MYsecref{sec:mcitethebibliographyhooks}). + + +\subsubsection{Bibitem Counter Reset} +\label{sec:bibitemcounterreset} +By default, mciteplus resets \MYshortcmd+mcitebibitemcount|end\ at the +start of each bibliography. However, in some documents with multiple bibliographies, +the entries are to be numbered consecutively throughout the document and, thus, +the entry count should not reset at the start of each bibliography. For +such cases, you can issue a: +\begin{MYlistblk} +\MYlongcmd +\mciteResetBibitemCountfalse|end +\end{MYlistblk} +before a bibliography to disable the counter reset (so that the maximum +label widths and counts will be correct, see \MYsecref{sec:labelwidths}). +There is also a \MYshortcmd\mciteResetBibitemCounttrue|end\ which reenables the +resetting of the counter. + + + + +\subsection{Sublists} +\label{sec:sublists} +Sublisting within entry groups is supported by mciteplus. For example: +\begin{MYapsrevthebibliography}{1} +\bibitem[{\citenamefont{Glashow}(1961)}]{Glashow} +\bibinfo{author}{\bibfnamefont{S.~L.} \bibnamefont{Glashow}}, + \bibinfo{journal}{Nucl. Phys.} \textbf{\bibinfo{volume}{22}}, + \bibinfo{pages}{579} (\bibinfo{year}{1961}); +a) \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Salam}}, in + \emph{\bibinfo{booktitle}{Elementary Particle Theory}}, edited by + \bibinfo{editor}{\bibfnamefont{N.}~\bibnamefont{Svartholm}} + (\bibinfo{publisher}{Almquist and Wiksell}, \bibinfo{address}{Stockholm}, + \bibinfo{year}{1968}), pp. \bibinfo{pages}{367--377}; +b) \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Weinberg}}, + \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{19}}, + \bibinfo{pages}{1264} (\bibinfo{year}{1967}). +\end{MYapsrevthebibliography} +The sublist labels (e.g., ``a)'', ``b)'', etc.) are based on the mciteplus +provided \LaTeX\ counter, +\MYshortcmd+mcitesubitemcount|end, which is reset at the start +of each head. + +\subsubsection{Sublist Modes} +\label{sec:sublistmodes} +The standard sublist mode ``s'' (as show above) is to +begin numbering with the first tail. + +Mciteplus can begin numbering with the head entries, but +omit the sublabel for the heads via sublist mode ``b'': +\begin{MYapsrevthebibliography}{1} +\bibitem[{\citenamefont{Glashow}(1961)}]{Glashow} +\bibinfo{author}{\bibfnamefont{S.~L.} \bibnamefont{Glashow}}, + \bibinfo{journal}{Nucl. Phys.} \textbf{\bibinfo{volume}{22}}, + \bibinfo{pages}{579} (\bibinfo{year}{1961}); +b) \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Salam}}, in + \emph{\bibinfo{booktitle}{Elementary Particle Theory}}, edited by + \bibinfo{editor}{\bibfnamefont{N.}~\bibnamefont{Svartholm}} + (\bibinfo{publisher}{Almquist and Wiksell}, \bibinfo{address}{Stockholm}, + \bibinfo{year}{1968}), pp. \bibinfo{pages}{367--377}; +c) \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Weinberg}}, + \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{19}}, + \bibinfo{pages}{1264} (\bibinfo{year}{1967}). +\end{MYapsrevthebibliography} + +To sublabel the first entries of each group (heads) use +the sublist mode ``f'': +\begin{MYapsrevthebibliography}{1} +\bibitem[{\citenamefont{Glashow}(1961)}]{Glashow} +a) \bibinfo{author}{\bibfnamefont{S.~L.} \bibnamefont{Glashow}}, + \bibinfo{journal}{Nucl. Phys.} \textbf{\bibinfo{volume}{22}}, + \bibinfo{pages}{579} (\bibinfo{year}{1961}); +b) \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Salam}}, in + \emph{\bibinfo{booktitle}{Elementary Particle Theory}}, edited by + \bibinfo{editor}{\bibfnamefont{N.}~\bibnamefont{Svartholm}} + (\bibinfo{publisher}{Almquist and Wiksell}, \bibinfo{address}{Stockholm}, + \bibinfo{year}{1968}), pp. \bibinfo{pages}{367--377}; +c) \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Weinberg}}, + \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{19}}, + \bibinfo{pages}{1264} (\bibinfo{year}{1967}). +\end{MYapsrevthebibliography} +Entries without tails (single heads) are not sublisted under sublist +mode ``f''. To enable that, use sublist mode ``h''. + +As with punctuation, the sublist mode can be specified by both the bibstyle +as well as the user with the latter overriding the former: +\begin{MYlistblk} +\MYlongcmd +\mciteSetBstSublistMode{|itshape+mode|upshape} |% for use by bibstyles|\ +| |\ +\mciteSetSublistMode{|itshape+mode|upshape} |% for use by the user in the document|end +\end{MYlistblk} +where \textit{mode} is one of: +\begin{enumerate} +\item[\textbf{d}] \MYemdash ``Default'', do not alter whatever mode is currently in effect. +For bibstyles, this is essentially a NOOP, but when invoked by the user, the bibstyle is +allowed to alter the sublist mode. +\item[\textbf{n}] \MYemdash No sublist, do not sublist the entries. +\item[\textbf{s}] \MYemdash Sublist mode ``s'', sublist the tail entries. +\item[\textbf{b}] \MYemdash Sublist mode ``b'', sublist the tail entries, start the count with their +head, but omit labeling the head. +\item[\textbf{f}] \MYemdash Sublist mode ``f'', sublist the tail entries including their head. +\item[\textbf{h}] \MYemdash Sublist mode ``h'', implies sublist mode ``f'', but sublist all entries, +even heads without tails. +\end{enumerate} +Unless specified otherwise, sublisting will not be done. + +\subsubsection{Sublist Label, Begin and End} +\label{sec:sublistlabelbeginend} +Mciteplus allows bibstyles and users to specify the sublist label form used, +the code that gets executed at the start of the sublist and the code +that ends a sublist. Mciteplus defines the package defaults of each as: +\begin{MYlistblk} +\MYlongcmd +\providecommand{\mcitedefaultsublistlabel}{\alph{mcitesubitemcount})\space}|\ +\providecommand{\mcitedefaultsublistbegin}{\relax}|\ +\providecommand{\mcitedefaultsublistend}{\relax}|end +\end{MYlistblk} +The result of which is as shown in the previous examples. +However, both the bibstyle and the user can override the defaults with the user having +the final say in the matter. The sublist label/begin/end code can be specified by both +the bibstyle as well as the user with the latter overriding the former: +\begin{MYlistblk} +\MYlongcmd +\mciteSetBstSublistLabelBeginEnd{|itshape+label|upshape}{|itshape+begin|upshape}{|itshape+end|upshape} |% for use by bibstyles|\ +| |\ +\mciteSetSublistLabelBeginEnd{|itshape+label|upshape}{|itshape+begin|upshape}{|itshape+end|upshape} |% for use by the user in the document|end +\end{MYlistblk} +This flexibility provides a way to use customized environments for the sublists: +\begin{MYlistblk} +\MYlongcmd +\mciteSetSublistMode{s}|\ +\mciteSetSublistLabelBeginEnd{\item[\arabic{mcitebibitemcount}.\alph{mcitesubitemcount})]}{\begin{enumerate}}{\end{enumerate}}|end +\end{MYlistblk} +which yields: +\begin{MYapsrevthebibliography}{1} +\bibitem[{\citenamefont{Glashow}(1961)}]{Glashow} +\bibinfo{author}{\bibfnamefont{S.~L.} \bibnamefont{Glashow}}, + \bibinfo{journal}{Nucl. Phys.} \textbf{\bibinfo{volume}{22}}, + \bibinfo{pages}{579} (\bibinfo{year}{1961}); +\begin{enumerate} +\item[1.a)] \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Salam}}, in + \emph{\bibinfo{booktitle}{Elementary Particle Theory}}, edited by + \bibinfo{editor}{\bibfnamefont{N.}~\bibnamefont{Svartholm}} + (\bibinfo{publisher}{Almquist and Wiksell}, \bibinfo{address}{Stockholm}, + \bibinfo{year}{1968}), pp. \bibinfo{pages}{367--377}; +\item[1.b)] \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Weinberg}}, + \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{19}}, + \bibinfo{pages}{1264} (\bibinfo{year}{1967}). +\end{enumerate} +\end{MYapsrevthebibliography} + +After issuing a user defined \MYshortcmd\mciteSetSublistLabelBeginEnd|end\ for a bibliography, +a user can restore control back to the bibstyle for later bibliographies by issuing: +\begin{MYlistblk} +\MYlongcmd +\mciteSetSublistLabelBeginEnd{\mcitebstsublistlabel}{\mcitebstsublistbegin}{\mcitebstsublistend}|end +\end{MYlistblk} +before the bibliography(ies) to be affected. + + + +\subsubsection{Referencing Sublist Labels} +\label{sec:refsublistlabel} +It is not possible to reference the tails using \MYshortcmd\cite|end: +\begin{MYlistblk} +\MYlongcmd +\cite{Salam} |% invalid, tail redeclared as a head|\ +\cite{*Salam} |% invalid, tail cannot be referenced|end +\end{MYlistblk} +and even if it were allowed, it would likely cause problems with packages +that compress and sort citation numbers. + +However, mciteplus does provide two commands that work much like \MYshortcmd\ref|end\ +and \MYshortcmd\pageref|end\ that can be used to reference the sublabeled entries +and the page numbers they appear on: +\begin{MYlistblk} +\MYlongcmd +\mciteSubRef[|itshape+track ID|upshape]{|itshape+cite key|upshape}|\ +\mciteSubPageRef[|itshape+track ID|upshape]{|itshape+cite key|upshape}|end +\end{MYlistblk} +where \textit{cite key} is a (single) citation key and \textit{track ID} is +the tracking ID (\MYsecref{sec:trackingandaux}) string which mciteplus uses +to uniquely identify bibliographies. Please note that these commands will not work +for entries that are not sublabeled (e.g., heads with tails if the sublist +mode is not ``f'' or ``h''). The tracking IDs used by each bibliography can be +displayed by loading mciteplus with the ``debug'' package option (\MYsecref{sec:packageoptions}). +For virtually all single bibliography documents, the default tracking ID should work +fine. However, when multiple bibliographies are in use, the tracking ID may +have to be specified so that mciteplus will know which bibliography entry to +reference. Some packages such as chapterbib, may even put the same citation +in multiple bibliographies. + +For the part/chapter bibliographies of chapterbib.sty, there is no need to specify a +tracking ID as mciteplus will automatically use the correct one within each part. +The tracking ID of the duplicate bibliographies of chapterbib (produced by +chapterbib's ``duplicate'' package option) is given by ``chapterbib\textit{inputfile}.bbl'', +where ``\textit{inputfile}'' is the include file the given citation occurred in. +For the rootbib bibliography (produced by chapterbib's ``rootbib'' package option), +the tracking ID is of the form ``chapterbib\textit{jobname}'', where +``\textit{jobname}'' is the name of the main .tex document file (without the .tex +suffix). + +For multibib.sty, the tracking ID is given by ``multibib\textit{secname}'', where +``\textit{secname}'' is the multibib bibliography section name (as declared +via \MYshortcmd\newcites|end). + +For multibbl.sty, the tracking ID is given by ``multibbl\textit{secname}'', where +``\textit{secname}'' is the multibbl bibliography section name. + +For bibunits.sty, mciteplus will automatically use the correct tracking ID within +each bibunit, but to reference an entry outside of a bibunit, the tracking ID of +each bibunit is given by ``bibunits\textit{unitname}'', where ``\textit{unitname}'' +is the name of the auxiliary file of the desired bibunit without the .aux suffix +(e.g., ``bu1'', ``bu2'', etc.). + +The form of the replacement text of \MYshortcmd\mciteSubRef|end\ is defined by +mciteplus as: +\begin{MYlistblk} +\MYlongcmd +\providecommand{\mcitesubrefform}{\arabic{mcitebibitemcount}.\alph{mcitesubitemcount}}|end +\end{MYlistblk} +which can be redefined (via \MYshortcmd\renewcommand|end) by the user as desired. + + +\subsubsection{Bibitem Argument Macros} +\label{sec:bibitemarguments} +When creating sublist labels (or the maximum width forms discussed in +\MYsecref{sec:maxwidths}), the user may wish to have access to the +argument(s) of the \MYshortcmd\bibitem|end\ of the entries. Mciteplus +provides these as macros. The required argument of the current +\MYshortcmd\bibitem|end, which is usually the citation key, is provided +as \MYshortcmd\mciteBibitemArgI|end. The optional argument of the current +\MYshortcmd\bibitem|end, which, if present, is provided as +\MYshortcmd\mciteBibitemOptArgI|end. There is also the \TeX\ conditional +\MYshortcmd\ifmciteBibitemOptArgI|end, which will evaluate true if the +optional argument to \MYshortcmd\bibitem|end\ is present. + +Lastly, there are \MYshortcmd\mciteCurheadBibitemArgI|end, +\MYshortcmd\mciteCurheadBibitemOptArgI|end\ and +\MYshortcmd\ifmciteCurheadBibitemOptArgI|end\ which contain the +same argument information, but for the head of the current entry +group. + + + +\subsection{Label Widths} +\label{sec:labelwidths} + +\textbf{Note: Problems with incorrect label widths will usually manifest themselves +as incorrect label spacing and/or bibliography entry text that is not properly +aligned, but often will not otherwise generate warning messages or errors.} + + +\subsubsection{The Bibliography Sample Label} +\label{sec:bibsamplelabel} +With most bibstyles, \BibTeX\ produces what is known as a ``sample label,'' +which is the widest label used by the bibliography entries. This sample label is +recorded as the argument to \MYshortcmd\thebibliography|end\ when \BibTeX\ creates +the .bbl bibliography file so as to provide a way for the \MYshortcmd\thebibliography|end\ +environment to know in advance how much space to reserve for the labels. + +For example, \BibTeX\ may produce something like this in the .bbl file for a +bibliography with ten entries:\footnote{Some bibstyles use a number equal to the +number of entries, others use a form such as ``1X'', where ``X'' is a number of zeros +such that the sample label length matches that of the number of entries (e.g., +``10'' if there are 10--99 entries). With most fonts, the numerical digits +all have the same width so ``10'' has the same width as ``99''.} +\begin{MYlistblk} +\MYlongcmd +\begin{thebibliography}{10}|end +\end{MYlistblk} +Mciteplus provides users access to the original \BibTeX-produced sample label +as the macro \MYshortcmd\mciteorgbibsamplelabel|end. + +A problem arises with the sample label system when mciteplus combines multiple entries in +that the \BibTeX\ generated sample label in the .bbl file will not be +correct after the tail entries are no longer counted as actual entries. With the +original mcite package, this would often result in incorrect label spacing. Mciteplus +addresses this problem by actively tracking the maximum width label used in each bibliography. + +The sample label form that mciteplus forwards to \MYshortcmd+thebibliography|end\ +is defined as: +\begin{MYlistblk} +\MYlongcmd +\def\mcitebibsamplelabel{\rule{\mcitemaxwidthbibitem sp}{0.2pt}}|end +\end{MYlistblk} +which is simply a rule with a width equal to the widest label as determined +by the maximum width system discussed in \MYsecref{sec:maxwidths}. +If necessary, this can be redefined by the user via \MYshortcmd\renewcommand|end. + +Most class files will not be bothered by the fact that a rule rather than +actual digits is being used for the sample label. However, if this becomes +a problem, something like: +\begin{MYlistblk} +\MYlongcmd +\renewcommand{\mcitebibsamplelabel}{\mcitemaxcountbibitem}|end +\end{MYlistblk} +can be tried where \MYshortcmd\mcitemaxcountbibitem|end\ will contain +the number of the last entry in the current bibliography as discussed +in \MYsecref{sec:maxcounts}. + +The \MYshortcmd+thebibliography|end\ environments of some \LaTeX\ classes +(e.g., REV\TeX) perform their own label width calculations and ignore the sample +label entirely making the issue a moot point. However, the most common \LaTeX\ +classes do depend on the sample label being accurate. + + +\subsubsection{Maximum Widths} +\label{sec:maxwidths} +The problem of knowing the widest of a group of labels in advance of their +actual rendering\footnote{Obviously, solving this problem requires more than one +\LaTeX\ pass as well as the use of the auxiliary file to store information about the +widest label which will be read during the second pass.} is commonly encountered +in \LaTeX\ (e.g., lists, section numbering within the table of contents, etc.) and +is an issue that, in this author's opinion, has not been dealt with adequately by +the base \LaTeX\ system.\footnote{Packages such as Scott Pakin's eqparbox.sty +\cite{ctan:eqparbox} are most welcome solutions to this type of problem.} With +regard to mciteplus bibliographies, not only is the width of the head entries (i.e., +the sample label) an issue, but potentially so are the sublist (tail) labels if +they are rendered in enumerated list form rather than inline. + +To assist the user in determining the required width of labels, mciteplus provides +its own maximum width and count tracking facilities. Both the bibitem (main entry) and +subitem (sublist entry) label widths can tracked independently of each other. + +In order to measure widths, mciteplus must know what exactly it is to measure. +This is specified by macros that contain the ``width forms'' which are simply +``text'' whose width will be measured for each bibitem or subitem. The package +defaults of each are defined as: +\begin{MYlistblk} +\MYlongcmd +\providecommand{\mcitedefaultmaxwidthbibitemform}{\arabic{mcitebibitemcount}}|\ +\providecommand{\mcitedefaultmaxwidthsubitemform}{\alph{mcitesubitemcount})}|end +\end{MYlistblk} +There are also the initial width forms that will be used only during the very first +\LaTeX\ run before the maximum label widths are actually known (i.e., when the +auxiliary file is absent): +\begin{MYlistblk} +\MYlongcmd +\providecommand{\mcitedefaultmaxwidthbibitemforminit}{\mciteorgbibsamplelabel}|\ +\providecommand{\mcitedefaultmaxwidthsubitemforminit}{a)}|end +\end{MYlistblk} +The initial width forms will be evaluated with the bibitem and subitem counters both set to one. +The purpose of the initial width forms is just to provide a rough guess as to the +label widths to try to avoid large formatting changes or errors within label +formatting code that cannot deal with unknown, or zero, widths. + +As with the punctuation and sublist controls, both the bibstyle and the user can +specify the width forms with the latter overriding the former: +\begin{MYlistblk} +\MYlongcmd +\mciteSetBstMaxWidthForm[|itshape+init|upshape]{|itshape+type|upshape}{|itshape+form|upshape} |% for use by bibstyles|\ +| |\ +\mciteSetMaxWidthForm[|itshape+init|upshape]{|itshape+type|upshape}{|itshape+form|upshape} |% for use by the user in the document|end +\end{MYlistblk} +where \textit{type} is ``\texttt{bibitem}'' or ``\texttt{subitem}''. The optional argument +\textit{init} is used to specify the initial width form that will be used. If it is not specified, +the current initial width form in use will not be altered. The code specified in the forms +should be self contained (i.e., not have commands which require an external environment +such as \MYshortcmd+\item|end) as well as allow reevaluation at any time (e.g., should +not do things such as alter counters). Note that these restrictions +do not apply to the actual sublist code (\MYsecref{sec:sublistlabelbeginend}) and is +one reason why mciteplus distinguishes between that which measures the width of the +a label (discussed in this section) and that which actually forms the label +(\MYsecref{sec:sublistlabelbeginend}). If desired, the current width forms (see below) +can be used within the actual sublist code. + +After issuing a user defined \MYshortcmd\mciteSetMaxWidthForm|end\ for a bibliography, +a user can restore control back to the bibstyle for later bibliographies by issuing: +\begin{MYlistblk} +\MYlongcmd +\mciteSetMaxWidthForm[\mcitebstmaxwidthbibitemforminit]{bibitem}{\mcitebstmaxwidthbibitemform}|\ +\mciteSetMaxWidthForm[\mcitebstmaxwidthsubitemforminit]{subitem}{\mcitebstmaxwidthsubitemform}|end +\end{MYlistblk} +before the bibliography(ies) to be affected. + +Please note that for bibstyles, there +is no use in specifying an initial width form via \MYshortcmd+\mciteSetBstMaxWidthForm[]|end\ +after the bibliography begins because, by that point, it is too late as the sample label +has already been forwarded. However, this is not a problem because by default, the initial +width form is the original sample label as given by the bibstyle.\footnote{Another +possible approach would be to specify the bibitem width form before the bibliography begins, +possibly surrounding the entire environment in a group to keep the changes local.} +This is not an issue for the normal bibitem width form or the subitem width forms as +they are not evaluated until the first \MYshortcmd\bibitem|end. + +The user has access to the currently used bibitem and subitem width forms and +their maximum widths as the macros: +\begin{MYlistblk} +\MYlongcmd +\mcitemaxwidthbibitemform |% current bibitem width form |\ +\mcitemaxwidthsubitemform |% current subitem width form |\ +\mcitemaxwidthbibitem |% the maximum width of the bibitem form|\ +\mcitemaxwidthsubitem |% the maximum width of the subitem form|end +\end{MYlistblk} +The maximum widths are macros containing an integer which is the width +in \TeX\ scaled points (sp).\footnote{In \TeX, a scaled point is the smallest +dimensional unit available and is equal to $\frac{1}{65536}$ of a point.} The +widths are not length commands (e.g., a dimension or skip register), but their +values can be assigned to a length command by appending a ``sp'' to the +length specification: +\begin{MYlistblk} +\MYlongcmd +\newlength{\MYlength}|\ +\setlength{\MYlength}{\mcitemaxwidthsubitem sp}|end +\end{MYlistblk} + + +\subsubsection{Maximum Counts} +\label{sec:maxcounts} +Also available are the macros: +\begin{MYlistblk} +\MYlongcmd +\mcitemaxcountbibitem|\ +\mcitemaxcountsubitem|end +\end{MYlistblk} +which contain the value of the highest count of the bibitem or subitem\footnote{For +subitems, it is the highest count that occurred \textit{during} the generation of the +sublist labels. Because the subitem counter is advanced by one \textit{after} each +sublist label is rendered, the actual counter itself does reach one count higher than +its maxcount, but that value was not actually used.} +counters, respectively, in the current bibliography. The maxcount +macros are not counters, but they can be used to set them, among other things. +There are no ``forms'' associated with the maxcounts and their initial values +(during the very first \LaTeX\ run in the absence of an auxiliary file) will be zero. +So, any code that references them should be able to handle (without error) the case +of zero. + +If, at the end of the bibliography, the correct maximum widths and counts +do not match what mciteplus used at the start of the run, mciteplus will issue +a package warning to request that \LaTeX\ be rerun. + + +\subsubsection{Non-Numerical Labels} +\label{sec:nonnumericallabels} +The maxwidth forms may have to be changed for some non-numerical bibstyles. +For example, under alpha.bst \cite{ctan:alphabst}, the entry labels are +carried within the optional arguments of the \MYshortcmd+bibitem|end, in +which case +\begin{MYlistblk} +\MYlongcmd +\mciteSetMaxWidthForm{bibitem}{\mciteBibitemOptArgI}|end +\end{MYlistblk} +would be appropriate when using such a bibstyle under mciteplus. Actually, +it is better to do such setup within the bibliography code of the +bibstyle (.bst) so that the maxwidth form will be correct by default +without any effort on the part of the user: +\begin{MYlistblk} +\MYlongcmd +\mciteSetBstMaxWidthForm{bibitem}{\mciteBibitemOptArgI}|end +\end{MYlistblk} +This should not be an issue with natbib compatible bibstyles, even +under the author-date mode, as natbib automatically does its own label +generation and management. + + + +\subsection{Example of Use} +\label{sec:exampleofuse} +Perhaps the maxwidth system is easiest to understand from an example: +\begin{MYlistblk} +\MYlongcmd +\mciteSetSublistMode{f}|% start numbering with the first item|\ +\mciteSetMaxWidthForm{subitem}{\scriptsize\textbf{\roman{mcitesubitemcount})}}|% small, bold, roman|\ +| |\ +\newcommand{\MYlistsetup}{\relax|\ +\setlength{\labelwidth}{\mcitemaxwidthsubitem sp}|% reserve room for widest label|\ +\setlength{\labelsep}{5pt}|% 5pt label/text separation|\ +\setlength{\itemindent}{0pt}% no indent|\ +\setlength{\leftmargin}{\labelwidth}|% text to left of label|\ +\addtolength{\leftmargin}{\labelsep}}|% and separation space|\ +| |\ +\mciteSetSublistLabelBeginEnd{\item}{\begin{list}{\hfill\mcitemaxwidthsubitemform}{\MYlistsetup}}{\end{list}}|end +\end{MYlistblk} +which produces a sublist via a customized list with small, bold and right aligned +roman numerals as labels and with block indented text. Note that in the list setup +code, we need to know the amount of room to reserve for the labels. Mciteplus provides this as +\MYshortcmd\mcitemaxwidthsubitem|end\ (to which the units ``sp'' must be appended when +assigning it to a length command). The maxwidth form itself, +\MYshortcmd\mcitemaxwidthsubitemform|end\ was used in the specification of the +labels within the list setup, but its definition (as used within +\MYshortcmd\mciteSetMaxWidthForm|end) could have been respecified in the list +setup code if desired. Once the list is setup, each sublabel is generated by a +simple call to \MYshortcmd\item|end. So, this example shows a case in which the code +actually used to produced the sublabels at run time (\MYshortcmd\item|end) +is not (directly) the same as that code which is used to measure the sublabel +widths. Indeed, as it is not self contained, \MYshortcmd\item|end\ cannot +even be used in the definition of a maxwidth form. + + + + +\section{Bibstyle (.bst) Modification} +\label{sec:bibstylemods} +Original mcite bibstyles cannot be used with mciteplus. They will have to be remodified +as described below. + +To modify a standard bibstyle (.bst) for use with mciteplus (unsrt.bst +is used as an example here), find the instances of \MYshortcmd\begin{thebibliography}|end\ +and \MYshortcmd\end{thebibliography}|end\ in the \MYshortcmd+begin.bib|end\ +and \MYshortcmd+end.bib|end\ functions and change them to use +\MYshortcmd+mcitethebibliography|end. It may also be a good idea to test for +the existence of \MYshortcmd+mcitethebibliography|end\ in case the user ever +forgets to load mciteplus.sty. + +{\bfseries Note: Many of the functions, +or parts of functions, shown below are listed in the included file \MYsmalltt{mciteplus\_code.txt}, +which can be used to cut and paste from. Beware of slight code differences between the different bibstyles. +For example, some use \MYshortcmd+longest.label|end\ like this example, but others may +use something else like \MYshortcmd+number.label| int.to.str$|end\ and/or may have extra code +after the \MYshortcmd\begin{mcitethebibliography}|end\ line. Leave these other things as they are.} + +Thus, +\begin{MYlistblk} +\MYlongcmd +FUNCTION {begin.bib}|\ +{ preamble$ empty$|\ + 'skip$|\ + { preamble$ write$ newline$ }|\ + if$|\ + "\begin{thebibliography}{" longest.label * "}" * write$ newline$|\ +}|\ +| |\ +.|\ +.|\ +| |\ +FUNCTION {end.bib}|\ +{ newline$|\ + "\end{thebibliography}" write$ newline$|\ +}|end +\end{MYlistblk} +becomes (change the string "unsrtM.bst" to the name of your new .bst file): +\begin{MYlistblk} +\MYlongcmd +FUNCTION {begin.bib}|\ +{ preamble$ empty$|\ + 'skip$|\ + { preamble$ write$ newline$ }|\ + if$|\ + "\ifx\mcitethebibliography\mciteundefinedmacro"|\ + write$ newline$|\ + "\PackageError{unsrtM.bst}{mciteplus.sty has not been loaded}"|\ + write$ newline$|\ + "{This bibstyle requires the use of the mciteplus package.}\fi"|\ + write$ newline$ + "\begin{mcitethebibliography}{" longest.label * "}" * write$ newline$|\ +}|\ +| |\ +.|\ +.|\ +| |\ +FUNCTION {end.bib}|\ +{ newline$|\ + "\end{mcitethebibliography}" write$ newline$|\ +}|end +\end{MYlistblk} + +You may also want to declare the sublist mode via a +\MYshortcmd\mciteSetBstSublistMode|end, as mentioned in \MYsecref{sec:sublists}, +just after the \MYshortcmd+mcitethebibliography|end\ environment +begins, that will be used if the user does not otherwise specify a sublist mode, +as well as other bibliography setup commands. + +For example: +\begin{MYlistblk} +\MYlongcmd +FUNCTION {begin.bib}|\ +{ preamble$ empty$|\ + 'skip$|\ + { preamble$ write$ newline$ }|\ + if$|\ + "\ifx\mcitethebibliography\mciteundefinedmacro"|\ + write$ newline$|\ + "\PackageError{unsrtM.bst}{mciteplus.sty has not been loaded}"|\ + write$ newline$|\ + "{This bibstyle requires the use of the mciteplus package.}\fi"|\ + write$ newline$|\ + "\begin{mcitethebibliography}{" longest.label * "}" * write$ newline$|\ + "\mciteSetBstSublistMode{b}"|\ + write$ newline$|\ + "\mciteSetBstMaxWidthForm{subitem}{\alph{mcitesubitemcount})}"|\ + write$ newline$|\ + "\mciteSetBstSublistLabelBeginEnd{\mcitemaxwidthsubitemform\space}"|\ + write$ newline$|\ + "{\relax}{\relax}"|\ + write$ newline$|\ +}|end +\end{MYlistblk} +will specify a \MYshortcmd+mcitethebibliography|end\ that defaults to using the sublist +``b'' mode and enumerates the subentries using letters. The middle and end punctuation +was not be specified via \MYshortcmd\mciteSetBstMidEndSepPunct|end\ and so the package +defaults will be used. In this example, the subitem maxwidth form is not so +important as the labels are rendered inline, but other types of lists may require it. + +Next, find the \MYshortcmd+fin.entry|end\ function: +\begin{MYlistblk} +\MYlongcmd +FUNCTION {fin.entry}|\ +{ add.period$|\ + write$|\ + newline$|\ +}|end +\end{MYlistblk} +and change it to (which you can cut and paste from \MYsmalltt{mciteplus\_code.txt}): +\begin{MYlistblk} +\MYlongcmd +|% mciteplus fin.entry|\ +|%|\ +|% pushes true (1), if add.period$ would add a period to the string on the stack|\ +|% pushes false (0), otherwise|\ +|% Uses text.length$ to avoid full string comparison and two copies of string.|\ +|% Requires one copy of string on stack.|\ +INTEGERS {would.add.period.textlen}|\ +FUNCTION {would.add.period}|\ +{ duplicate$|\ + add.period$|\ + text.length$|\ + 'would.add.period.textlen :=|\ + duplicate$|\ + text.length$|\ + would.add.period.textlen =|\ + { #0 }|\ + { #1 }|\ + if$|\ +}|\ +| |\ +FUNCTION {fin.entry}|\ +{ would.add.period|\ + { "\relax" * write$ newline$|\ + "\mciteBstWouldAddEndPuncttrue" write$ newline$|\ + "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}"|\ + write$ newline$|\ + "{\mcitedefaultendpunct}{\mcitedefaultseppunct}\relax"|\ + }|\ + { "\relax" * write$ newline$|\ + "\mciteBstWouldAddEndPunctfalse" write$ newline$|\ + "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}"|\ + write$ newline$|\ + "{}{\mcitedefaultseppunct}\relax"|\ + }|\ + if$|\ + write$|\ + newline$|\ + "\EndOfBibitem" write$|\ +}|\ +|% end mciteplus fin.entry|end +\end{MYlistblk} + +The \MYshortcmd\mciteSetBstMidEndSepPunct|end\ line is broken into two lines (after the first argument) +to prevent \BibTeX\ from breaking what would be a long single line (over 80 +columns) at an unacceptable place. + +By providing a way for the .bst to tell mciteplus not to use an end period +if \BibTeX's \MYshortcmd+add.period$|end\ command would not, we avoid the double end period +problem. The \MYshortcmd\mciteBstWouldAddEndPuncttrue/false|end\ flag does not in itself +do anything. However, if set appropriately by the .bst, it can be employed +by the user in the definition custom punctuation via \MYshortcmd\mciteSetMidEndSepPunct|end. + +Other .bst files may hardcode values other than the defaults and/or use +more complex conditions as is needed for that particular bibstyle. + +The \MYshortcmd\EndOfBibitem|end\ is defined by mciteplus.sty as a macro containing +\MYshortcmd\relax|end. Although it does nothing at present, it's purpose is to make it +easier to identify the end of each bibliography entry for the purposes of inspection +or parsing. + + +\subsection{Sorting Bibstyles} +\label{sec:sortingbibstyles} +Perhaps surprisingly, it is possible to use mciteplus with sorting bibstyles. +The difficulty is that \BibTeX\ must keep an entry group together, in citation +order with the tails immediately following their respective head, despite +sorting the entries. This is possible with the use of special bibstyle code +if the user is willing and able to declare all the tails via a special entry +field ``mcitetail'', which should be set to ``yes'' for each tail, in the +\BibTeX\ database.\footnote{Thus, we have to specify the tails +twice\MYemdash once for \LaTeX\ and once for \BibTeX\ because there is no +other way to get the information to \BibTeX. This limitation +helped to inspire \LaTeX-based bibliography processing as is done with the +amsrefs \cite{ctan:amsrefs} and biblatex \cite{ctan:biblatex} packages.} Entries without this +field, or that have it set to ``no'', will be sorted normally (as head entries). +Of course, bibstyles that do not recognize the ``mcitetail'' field will silently ignore it. + +Thus, for the example used in the introduction, the database entries might look like: +\begin{MYlistblk} +\MYlongcmd +@article{Glashow,|\ + author = "Sheldon Lee Glashow",|\ + title = "Partial-symmetries of Weak Interactions",|\ + journal = "Nucl. Phys.",|\ + volume = "22",|\ + number = "4",|\ + month = feb,|\ + year = "1961",|\ + pages = "579-588"|\ +}|\ +| |\ +@incollection{Salam,|\ + author = "Abdus Salam",|\ + editor = "Nils Svartholm",|\ + title = "Weak and Electromagnetic Interactions",|\ + booktitle = "Elementary Particle Theory",|\ + publisher = "Almquist and Wiksell",|\ + address = "Stockholm",|\ + year = "1968",|\ + pages = "367-377",|\ + mcitetail = "yes"|\ +}|\ +| |\ +@article{Weinberg,|\ + author = "Steven Weinberg",|\ + title = "A Model of Leptons",|\ + journal = "Phys. Rev. Lett.",|\ + volume = "19",|\ + number = "21",|\ + month = nov,|\ + year = "1967",|\ + pages = "1264-1266",|\ + mcitetail = "yes"|\ +}|end +\end{MYlistblk} +The basic idea is for \BibTeX\ to use the sorting key of the head, +but with an appended tail count, as the sorting key for all the tails +of that head. If the bibstyle properly generates unique sorting keys, then the +entries in each group will be kept together and in order despite +the sorting process. For example, apsrmpM.bst uses the following +sort keys for the above three entries: +\begin{MYlistblk} +\MYlongcmd +glashow s l 1961 partial symmetries of weak interactions|\ +glashow s l 1961 partial symmetries of weak interactions|_|_0000000001|\ +glashow s l 1961 partial symmetries of weak interactions|_|_0000000002|end +\end{MYlistblk} +The sorting modification to the bibstyle consists of three parts which must be +done in addition to the mciteplus compatibility modifications previously +described. + +First of all, add an ``mcitetail'' field to the list of entry fields (usually +located near the beginning of the bibstyle): +\begin{MYlistblk} +\MYlongcmd +ENTRY|\ + { address|\ + archive|\ + author|\ + booktitle|\ + .|\ + .|\ + key|\ + mcitetail|\ + month|\ + .|\ + .|end +\end{MYlistblk} + +Then, add the following code (which you can cut and paste from \MYsmalltt{mciteplus\_code.txt}) +somewhere near the start of the bibstyle code (after the first ``STRINGS'' +definition(s) is fine): +\begin{MYlistblk} +\MYlongcmd +|% mciteplus mcitetail field and sort key adjust support|\ +INTEGERS {mcitetailcnt is.mcitetail}|\ +STRINGS {mciteheadsortkey}|\ +|% convert the strings "yes" or "no" to |#1 or |#0 respectively|\ +FUNCTION {mciteplus.yes.no.to.int}|\ +{ "l" change.case$ duplicate$|\ + "yes" =|\ + { pop$ |#1 }|\ + { duplicate$ "no" =|\ + { pop$ |#0 }|\ + { "unknown boolean " quote$ * swap$ * quote$ *|\ + " in " * cite$ * warning$|\ + |#0|\ + }|\ + if$|\ + }|\ + if$|\ +}|\ +FUNCTION {mciteplustail.adj.sort.key}|\ +{ mcitetail|\ + empty$|\ + { |#0 'is.mcitetail := }|\ + { mcitetail|\ + mciteplus.yes.no.to.int|\ + 'is.mcitetail :=|\ + }|\ + if$|\ + is.mcitetail|\ + { |#1 mcitetailcnt +|\ + 'mcitetailcnt :=|\ + mciteheadsortkey|\ + "|_|_" *|\ + "000000000"|\ + mcitetailcnt|\ + int.to.str$|\ + *|\ + |#-1 |#10 substring$|\ + *|\ + 'sort.key$ :=|\ + }|\ + { |#0 'mcitetailcnt :=|\ + sort.key$ 'mciteheadsortkey :=|\ + }|\ + if$|\ +}|\ +|% END mciteplus mcitetail field support|end +\end{MYlistblk} + +Lastly, you have to locate the place(s) where the +bibstyle makes the (final) assignment to \MYshortcmd+sort.key$|end\ +(typically of the form \MYshortcmd+'sort.key$| :=|end\ ) before +sorting is performed and add a call to \MYshortcmd+mciteplustail.adj.sort.key|end\ +(which will modify the sort keys of the tails as needed to keep the groups +together) just after it. With apsrmpM.bst, this is at the end of the +\MYshortcmd+FUNCTION {presort}|end: +\begin{MYlistblk} +\MYlongcmd +.|\ +.|\ + 'sort.key$ :=|\ + mciteplustail.adj.sort.key|\ +}|end +\end{MYlistblk} +as well as at the end of \MYshortcmd+FUNCTION {bib.sort.order}|end. + + + + +\section{Advanced Usage} +The vast majority of users will not need to know the details of the internal +operation of mciteplus. However, the following information may be of use to +those who are interested in it or who need to interface other packages to mciteplus. + +Mciteplus consists of two main parts: (1) a part that intercepts and records the +status of entries the user has cited; and (2) a part that acts on this +information when formatting the entries in the bibliography. + +Upon the start of the \MYshortcmd\begin{document}|end, mciteplus stores the original +\MYshortcmd\cite|end\ and \MYshortcmd\nocite|end\ as \MYshortcmd\mciteOrgcite|end\ +and \MYshortcmd\mciteOrgnocite|end, respectively, and replaces the originals with +its own versions. The mciteplus versions of the citation commands: (1) process the citation +list, recording which entries are heads and which are tails; (2) writes out the +citation list to the auxiliary file, much like \MYshortcmd\nocite|end\ does, to ensure +that all the given entries will appear in the bibliography as well as being in the correct +order; and (3) forwards the list of heads in the citation list to the original cite +command. Thus, \LaTeX\ remains unaware that the tail entries were ever cited. + +The second part of mciteplus operates inside the +\MYshortcmd+mcitethebibliography|end\ environment where mciteplus: (1) intercepts +and adjusts the bibliography sample label as needed; (2) forwards to +the original \MYshortcmd+thebibliography|end; and (3) places a wrapper +around \MYshortcmd\bibitem|end, storing the original \MYshortcmd\bibitem|end\ as +\MYshortcmd\mciteOrgbibitem|end. For head entries, the mciteplus +\MYshortcmd\bibitem|end\ behaves in fairly normal fashion and forwards +to the original \MYshortcmd\bibitem|end. However, for tail entries, the +mciteplus \MYshortcmd\bibitem|end, does not forward them to the original +\MYshortcmd\bibitem|end. Thus, the tail entries become part of the +previous entry. To \LaTeX, it is as if the \MYshortcmd\bibitem|end\ of the +tails never happened. + + +\subsection{Tracking ID and Aux. Files} +\label{sec:trackingandaux} +Things get more complicated when a document has more than one bibliography. +To support multiple bibliographies, mciteplus uses a ``tracking ID'' which +is simply an identification string which is unique to each bibliography. +Thus, the same citation key can be used in different ways in different +bibliographies (e.g., serving as a head in one and a tail in another) +without conflict because each instance will be considered different +as their tracking IDs are different.\footnote{Of course, a ``status conflict'' +is still possible for ``overall'' bibliographies.} + +The standard tracking ID is simply the string ``main'' which is carried as: +\begin{MYlistblk} +\MYlongcmd +\def\mcitetrackID{main}|\ +\def\mcitebibtrackID{main}|end +\end{MYlistblk} +the former of which is used by the mciteplus citation commands and the +latter of which is used by the \MYshortcmd+mcitethebibliography|end\ environment. +However, these definitions may be automatically altered depending on the specific +needs of other \LaTeX\ packages that have been loaded +(\MYsecref{sec:externalpackages}). Some packages that provide support for +multiple bibliographies require that the tracking ID be closely coupled +with the individual citation commands. In such cases, mciteplus may not +even refer to \MYshortcmd\mcitetrackID|end\ or \MYshortcmd\mcitebibtrackID|end. + +For the normal part/chapter bibliographies of chapterbib.sty, the tracking ID form +``chapterbib\textit{inputfile}'' is used, where ``\textit{inputfile}'' is +the include file (without the .tex suffix) the given citation occurred in. +The tracking ID of the duplicate bibliographies of chapterbib (produced by +chapterbib's ``duplicate'' package option) is given by ``chapterbib\textit{inputfile}.bbl''. +For the rootbib bibliography (produced by chapterbib's ``rootbib'' package option), +the tracking ID is of the form ``chapterbib\textit{jobname}'', where +``\textit{jobname}'' is the name of the main .tex document file (without the +.tex suffix). + +For multibib.sty, the tracking ID is given by ``multibib\textit{secname}'', where +``\textit{secname}'' is the multibib bibliography section name (as declared +via \MYshortcmd\newcites|end). + +For multibbl.sty, the tracking ID is given by ``multibbl\textit{secname}'', where +``\textit{secname}'' is the multibbl bibliography section name. + +For bibunits.sty, the tracking ID of each bibunit is given by +``bibunits\textit{unitname}'', where ``\textit{unitname}'' is the name of the +auxiliary file of the desired bibunit without the .aux suffix +(e.g., ``bu1'', ``bu2'', etc.). Outside of the bibunits, where the global +bibliography is in effect, the tracking ID of ``main'' is used. + +Likewise, mciteplus must know which auxiliary file(s) to write its citation lists +and bibliography maximum widths and counts to. The standard auxiliary file handles, which +are simply integers that represent files \TeX\ has opened, are defined as: +\begin{MYlistblk} +\MYlongcmd +\def\mciteauxout{\@auxout}|\ +\def\mcitebibauxout{\@mainaux}|end +\end{MYlistblk} +the former of which is used by the mciteplus citation commands and the +latter of which is used by the \MYshortcmd+mcitethebibliography|end\ environment. +As with the tracking ID, these may be altered to support other packages +that have been loaded. Under some packages, such as chapterbib, \LaTeX\ may +reuse the same file handle number during the course of processing the document. +Thus, a given file handle number may not refer to the same file in +different parts of the document. + +Note that mciteplus writes all of its maximum width and count +information to the main auxiliary file even though multiple +auxiliary files may be in use because it is not certain +that the other auxiliary files will be read in during \LaTeX\ runs. +As the tracking ID is written along with the maximum width and count information, +there will be no confusion as to which bibliography the information pertains to. + + +\subsection{Custom Command Wrappers} +\label{sec:customwrappers} +Mciteplus provides two rather complex commands that allow users to define their +own mciteplus citation command wrappers: +\begin{MYlistblk} +\MYlongcmd +\mciteCiteA*{|itshape+aux out|upshape}{|itshape+track ID|upshape}{|itshape+prehandler|upshape}{|itshape+posthandler|upshape}{|itshape+fwd|upshape}*[|itshape+opt1|upshape][|itshape+opt2|upshape]{|itshape+cite list|upshape}|\ +\mciteCiteB*{|itshape+aux out|upshape}{|itshape+track ID|upshape}{|itshape+prehandler|upshape}{|itshape+posthandler|upshape}{|itshape+fwd|upshape}*[|itshape+opt1|upshape][|itshape+opt2|upshape]{|itshape+sec ID|upshape}{|itshape+cite list|upshape}|end +\end{MYlistblk} +Both of these are ``robust'' and can safely be called within footnotes, +etc. The difference between the two is that the ``B'' form supports citation commands +that use two arguments, as is the case with the \MYshortcmd\cite|end\ of +multibbl.sty. \MYshortcmd\mciteCiteA/B|end\ acquires all of the arguments +listed above (the ``*'' and ``[]'' are optional arguments), but those that appear +after the \textit{fwd} argument are forwarded (possibly with modification) +to the command named in the \textit{fwd} argument. The arguments before +\textit{fwd} are only seen and used by \MYshortcmd\mciteCiteA/B|end. + +The meaning of each of the options from left to right is as follows: +\begin{description} +\item[*] The star forms (e.g., \MYshortcmd\mciteCiteA/B*|end) disable automatic +internal processing (via \MYshortcmd\mciteDoList|end\ as discussed below). +The presence of the star form is indicated by the \TeX\ conditional +\MYshortcmd\ifmciteMacroStarForm|end. +\item[\textit{aux out}] The auxiliary file handle number to be used when +writing out the citation list. Use of the special string ``noauxwrite'' will +disable auxiliary writes.\footnote{As will the traditional \TeX\ conditional, +which is defined and used by \LaTeX, \texttt{\mbox{\ZAXbsl if@filesw}}, if it is false.} +This argument is stored in the macro \MYshortcmd\mciteCiteAuxArg|end. +\item[\textit{track ID}] The tracking ID to be used. This argument is +stored in the macro \MYshortcmd\mciteCiteTrackArg|end. +\item[\textit{prehandler}] The user's prehandler code which will be +executed before internal \MYshortcmd\mciteDoList|end\ processing. This +argument is stored in the macro \MYshortcmd\mciteCitePrehandlerArg|end. +The purpose of the prehandler code is to provide the user a way to alter +the arguments as needed before further processing. +\item[\textit{posthandler}] The user's posthandler code which will be +executed after internal \MYshortcmd\mciteDoList|end\ processing. This +argument is stored in the macro \MYshortcmd\mciteCitePosthandlerArg|end. +\item[\textit{fwd}] The citation command the later arguments will be forwarded +to. This argument is stored in the macro \MYshortcmd\mciteCiteFwdArg|end. +\item[*] The star for the star form of the forward command. +The presence of the star form is indicated by the \TeX\ conditional +\MYshortcmd\ifmciteCiteStarFwdArg|end. +\item[\textit{opt1}] The first optional argument of the forwarded citation +command. The presence of this optional argument is +indicated by the \TeX\ conditional \MYshortcmd\ifmciteMacroOptArgI|end. +This argument, if present, is stored in the macro \MYshortcmd\mciteCiteOptArgI|end. +\item[\textit{opt2}] The second optional argument of the forwarded citation +command. The presence of this optional argument is +indicated by the \TeX\ conditional \MYshortcmd\ifmciteMacroOptArgII|end. +This argument, if present, is stored in the macro \MYshortcmd\mciteCiteOptArgII|end. +\item[\textit{sec ID}] Only used for \MYshortcmd\mciteCiteB|end, this +is the first argument of two used by the forwarded citation command. +Under multibbl.sty, this contains the bibliography section name. +This argument is stored in the macro \MYshortcmd\mciteCiteSecIDArg|end. +\item[\textit{cite list}] This is the citation list and is +stored in the macro \MYshortcmd\mciteCiteListArg|end. It is important +to know that \MYshortcmd\mciteCiteListArg|end\ is \emph{not} forwarded +as-is, but rather only after the tails are removed. The forwarded +citation list is the macro \MYshortcmd\mciteFwdCiteListArg|end. +\end{description} +\subsubsection{The MciteDoList Engine} +\label{sec:mcitedolistengine} +After acquiring its arguments, \MYshortcmd\mciteCiteA/B|end\ executes +the prehandler code. This is to allow the prehandler code to alter the +arguments as needed, specifically if the contents of one argument need +to be based on another. For example, under multibbl.sty, the tracking +ID has to be based in part on \MYshortcmd\mciteCiteSecIDArg|end. + +After the prehandler, the \MYshortcmd\mciteDoList|end\ +command, which forms the core engine of mciteplus, is executed: +\begin{MYlistblk} +\MYlongcmd +\mciteDoList{|itshape+aux out|upshape}{|itshape+track ID|upshape}{|itshape+cite list|upshape}|end +\end{MYlistblk} +as: +\begin{MYlistblk} +\MYlongcmd +\mciteDoList{\mciteCiteAuxArg}{\mciteCiteTrackArg}{\mciteCiteListArg}|end +\end{MYlistblk} +\MYshortcmd\mciteDoList|end\ records the status of each of the entries, writes the +citations to the auxiliary file, and then creates \MYshortcmd\mciteheadlist|end\ +which contains only the head entries. A copy of \MYshortcmd\mciteheadlist|end\ +called \MYshortcmd\mciteFwdCiteListArg|end\ is made. This will be +the actual citation list that is forwarded to the \textit{fwd} command. + +Next, \MYshortcmd\mciteExtraDoLists|end\ is +called. This command is normally, just \MYshortcmd\relax|end, but it can be +used to create additional sets of entry status, such as when duplicate/global +bibliographies are being used. + +Then, the user's posthandler code is executed. + +Finally, the forward command is executed with the (rightmost) +\MYshortcmd\mciteCiteA/B|end\ arguments forwarded to it, but +using \MYshortcmd\mciteFwdCiteListArg|end\ for the citation list. + +As a practical example, a standard \MYshortcmd\cite|end\ wrapper can be +created via: +\begin{MYlistblk} +\MYlongcmd +\newcommand{\MYcite}{\mciteCiteA{\mciteauxout}{\mcitetrackID}{\relax}{\relax}{\mciteOrgcite}}|end +\end{MYlistblk} +If \MYshortcmd\MYcite|end\ is invoked as: +\begin{MYlistblk} +\MYlongcmd +\MYcite{Glashow,*Salam,*Weinberg}|end +\end{MYlistblk} +mciteplus will do a: +\begin{MYlistblk} +\MYlongcmd +\mciteCiteA{\mciteCiteAuxArg}{\mciteCiteTrackArg}{\relax}{\relax}{\mciteOrgcite}{\mciteCiteListArg}|end +\end{MYlistblk} +which is the same as: +\begin{MYlistblk} +\MYlongcmd +\mciteCiteA{\mciteauxout}{\mcitetrackID}{\relax}{\relax}{\mciteOrgcite}{Glashow,*Salam,*Weinberg}|end +\end{MYlistblk} +which in turn would call: +\begin{MYlistblk} +\MYlongcmd +\mciteDoList{\mciteauxout}{\mcitetrackID}{Glashow,*Salam,*Weinberg}|end +\end{MYlistblk} +which will create a \MYshortcmd\mciteheadlist|end\ and +\MYshortcmd\mciteFwdCiteListArg|end\ containing ``Glashow'', which +will then be forwarded to the original \LaTeX\ \MYshortcmd\cite|end: +\begin{MYlistblk} +\MYlongcmd +\mciteOrgcite{\mciteFwdCiteListArg}|end +\end{MYlistblk} +which is effectively the same as: +\begin{MYlistblk} +\MYlongcmd +\mciteOrgcite{Glashow}|end +\end{MYlistblk} +Mciteplus carefully builds up the forwarded arguments using token lists +so that the forward cite command isn't even aware that it has been +wrapped within an earlier command. Thus, even cite.sty's automatic +punctuation and spacing adjustments will work as normal. + +Note that command structures that result in ``double calls'' to the miteplus +engine (i.e., a cite command goes through mciteplus and then forwards to +another cite command that also goes through mciteplus) although undesirable, +will still work as intended without error. + +\subsection{Mcitethebibliography Hooks} +\label{sec:mcitethebibliographyhooks} +Mciteplus supplies the macros \MYshortcmd\mciteBIBdecl|end\ and +\MYshortcmd\mciteBIBenddecl|end\ +which are executed at the beginning and ending of the +\MYshortcmd+mcitethebibliography|end\ environment, respectively, before the the normal +\MYshortcmd+thebibliography|end\ environment is begun or ended. By default they are +both defined as macros containing only \MYshortcmd\relax|end, but a +user may redefine them as needed to alter the +\MYshortcmd+mcitethebibliography|end\ environment setup. + +There is also a \MYshortcmd\mcitefwdBIBdecl|end\ which is executed +just after the original \MYshortcmd+thebibliography|end\ has been +started (i.e., forwarded) by \MYshortcmd+mcitethebibliography|end. +This can be used to adjust the setup of \MYshortcmd+thebibliography|end\ +before the first bibliography entry. One potential application is +to sync the \MYshortcmd+thebibliography|end\ counter to +\MYshortcmd+mcitebibitemcount|end. This trick can be used to obtain +continuous numbering of the references under multibbl.sty even though +that package does not normally provide this feature: +\begin{MYlistblk} +\MYlongcmd +\documentclass{article}|\ +\usepackage{multibbl}|\ +\usepackage{mciteplus}|\ +\mciteResetBibitemCountfalse|\ +\renewcommand{\mcitefwdBIBdecl}{\setcounter{enumiv}{\value{mcitebibitemcount}}}|\ +\begin{document}|\ +.|\ +.|end +\end{MYlistblk} + + + + +\section{Use With External Packages} +\label{sec:externalpackages} +Unless the ``nohooks'' option is invoked, mciteplus will automatically +reconfigure itself and hook into the compatible packages it detects. +Mciteplus should be loaded after other packages so that it can detect +the other packages and to ensure that the definitions of the system +cite commands have been finalized before mciteplus installs its +wrappers at the beginning of the document. + +It is not possible to test or list all of the possible interactions +among all the various packages. Remember, just because the packages +below are compatible with mciteplus, does not mean they all are +compatible with each other, even in the absence of mciteplus. Here +are some notes regarding the compatibility +and use of mciteplus with some of the more common \LaTeX\ +bibliography related packages. + + + +\subsection{Bibunits} +\label{sec:bibunits} +Mciteplus is fully compatible with Thorsten Hansen's bibunits +package \cite{ctan:bibunits}. When using the global bibliography via +the ``globalcitecopy'' and/or the star form of \MYshortcmd\cite|end, +beware of the possibility of an mciteplus status (i.e., head or tail) +conflict if the same entry is cited differently in different parts of +the document. + + +\subsection{Chapterbib} +\label{sec:chapterbib} +Mciteplus is fully compatible with Donald Arseneau's chapterbib +package \cite{ctan:chapterbib} including the use of the chapterbib +``duplicate'' and ``rootbib'' package options. \textbf{When using the +``rootbib'' option, be sure and enable mciteplus' +``chapterbibrootbib'' option.} Mciteplus is not able to auto-detect +the rootbib mode of chapterbib directly because when invoking that mode, +the user must run \LaTeX\ a second time without the rootbib option. +For all of these \LaTeX\ runs, keep this mciteplus option enabled (i.e., +as long as there is, or is going to be, a jobname.bbl file under chapterbib). +When using the rootbib option, beware of the possibility of an mciteplus +status (i.e., head or tail) conflict if the same entry is cited differently +in different parts of the document. + + +\subsection{Cite} +\label{sec:cite} +Mciteplus is fully compatible with Donald Arseneau's cite +package \cite{ctan:citesty}, including cite's \MYshortcmd\citen|end, +\MYshortcmd\citenum|end\ and \MYshortcmd\citeonline|end\ +variants. + + +\subsection{Citeref} +\label{sec:citeref} +Mciteplus will work with Bj\"{o}rn Briel and Uni Oldenburg's citeref +package \cite{ctan:citeref}. + + +\subsection{Drftcite} +\label{sec:drftcite} +Mciteplus is fully compatible with Donald Arseneau's +drftcite package \cite{ctan:drftcite}, including drftcite's +\MYshortcmd\citen|end\ variant. To get block aligned entry text +in the bibliography, set the bibitem maximum width form +to use the citation keys drftcite uses for the bibliography labels: +\begin{MYlistblk} +\MYlongcmd +\mciteSetMaxWidthForm{bibitem}{\mciteBibitemArgI}|end +\end{MYlistblk} +which, in turn, will revise the bibliography sample label +accordingly. This is not done automatically by mciteplus because +drftcite does not update the bibliography sample label (even +in the absence of mciteplus). + + +\subsection{Hyperref/Backref} +\label{sec:hyperrefbackref} +Mciteplus should work fine with Sebastian Rahtz and Heiko Oberdiek's +hyperref package \cite{ctan:hyperref} including it's backref option. + +\subsection{Multibbl} +\label{sec:multibbl} +Mciteplus is fully compatible with Apostolos Syropoulos's +multibbl package \cite{ctan:multibbl}. + + +\subsection{Multibib} +\label{sec:multibib} +Mciteplus is fully compatible with Thorsten Hansen's multibib +package \cite{ctan:multibib}. Under mciteplus with natbib, +multibib is patched to support all of natbib's \MYshortcmd\cite|end\ +variants even though the original multibib only supported +\MYshortcmd\citep|end, \MYshortcmd\citet|end, \MYshortcmd\citealp|end\ and +\MYshortcmd\citealt|end. Multibib's internal command name list hook +\MYshortcmd\@mb@citenamelist|end\ is ignored. + + +\subsection{Natbib} +\label{sec:natbib} +Mciteplus is fully compatible with Patrick W. Daly's natbib package +\cite{ctan:natbib} as long as the bibstyle supports both. +All of natbib's \MYshortcmd\cite|end\ variants are supported +including: +\MYshortcmd\citep|end, \MYshortcmd\Citep|end, \MYshortcmd\citet|end, +\MYshortcmd\Citet|end, \MYshortcmd\citealp|end, \MYshortcmd\Citealp|end, +\MYshortcmd\citealt|end, \MYshortcmd\Citealt|end, \MYshortcmd\citeauthor|end, +\MYshortcmd\Citeauthor|end, \MYshortcmd\citeyear|end, \MYshortcmd\citeyearpar|end, +\MYshortcmd\citepalias|end\ and \MYshortcmd\citetalias|end. + + +\subsection{Notes2bib} +\label{sec:notes2bib} +Mciteplus is fully compatible with Joseph Wright's notes2bib package \cite{ctan:notes2bib}. +However, version 1.3 (January 2008) or later must be used for the notes2bib + ``tail'' or ``head'' options to work with mciteplus. + + +\subsection{REV\TeX} +\label{sec:revtex} +Mciteplus is fully compatible with Arthur Ogawa and David Carlisle's REV\TeX\ (Version 4) +class \cite{ctan:revtex}, including support for end notes in the bibliography. +Note that to support this feature, REV\TeX\ uses its own internal bibliography sample +label and ignores the ones provided by \BibTeX\ and mciteplus. One annoyance is +that REV\TeX\ writes the footnote ``citations'' to the auxiliary file which causes +\BibTeX\ to complain that it can't find these ``entries'' in its database (e.g., +``\texttt{Warning--I didn't find a database entry for "endnote7"}''. To stop this +problem, add the following patch code (which you can cut and paste from \MYsmalltt{mciteplus\_code.txt}) +right after REV\TeX\ is loaded: +\begin{MYlistblk} +\MYlongcmd +|% Patch REVTeX to prevent BibTeX from seeing endnotes as citations|\ +|% Insert just after REVTeX is loaded|\ +\makeatletter|\ +\let\@ORGREVTEXendnotemark\@endnotemark|\ +\let\@ORGREVTEX@makefnmark@cite\@makefnmark@cite|\ +\def\@endnotemark{\bgroup\@fileswfalse\@ORGREVTEXendnotemark\egroup}|\ +\def\@makefnmark@cite{\bgroup\@fileswfalse\@ORGREVTEX@makefnmark@cite\egroup}|\ +\makeatother|end +\end{MYlistblk} + + +\subsection{Partially Supported Packages} +\label{sec:partiallysupportedpackages} + +\noindent\textbf{Footbib:} Eric Domenjoud's footbib package \cite{ctan:footbib} +``peacefully coexists'' with mciteplus in the sense that they do not interact. +At present, an mciteplus compatible bibstyle cannot be used for the footbibliography. + + +\subsection{Incompatible Packages} +\label{sec:incompatiblepackages} +Unfortunately, the following packages are currently known not to work with mciteplus. +Many of them clash with mciteplus on a fundamental level. However, others may be +supported in the future. + +\noindent\textbf{Amsrefs:} David Jones' amsrefs package \cite{ctan:amsrefs}. + +\noindent\textbf{Apacite:} Erik Meijer's apacite package \cite{ctan:apacite}. + +\noindent\textbf{Biblatex:} Philipp Lehman's biblatex package \cite{ctan:biblatex}. +Future versions of biblatex may well offer features like those of mciteplus. + +\noindent\textbf{Bibtopic:} Stefan Ulrich and Pierre Basso's bibtopic package \cite{ctan:bibtopic}. + +\noindent\textbf{Inlinebib:} Ren{\'e} Seindal's inlinebib package \cite{ctan:inlinebib}. + +\noindent\textbf{Jurabib:} Jens Berger's jurabib package \cite{ctan:jurabib}. + +\noindent\textbf{Opcit:} Federico Garcia's opcit package \cite{ctan:opcit}. + +\noindent\textbf{Splitbib:} Nicolas Markey's splitbib package \cite{ctan:splitbib}. + + +\section*{Acknowledgments} +\addcontentsline{toc}{section}{Acknowledgments} +First and foremost, the author would like to thank Joseph Wright. +Joseph beta tested prototype versions as well as provided many +ideas that improved the final architecture of mciteplus. + +Thorsten Ohl's mcite package identified the need for a \LaTeX\ +package that provides this type of bibliography handling and set +the standard for so doing. Although coded differently, mciteplus +uses the same basic approach to the problem (i.e., wrap the +citation command, drop the tails, forward the head list to the +original cite command, and selectively drop items in the +bibliography) as originally implemented in mcite.sty. + + +\newcommand{\BIBdecl}{\addcontentsline{toc}{section}{\refname}} + + + +%\bibliographystyle{IEEEtran} +%\bibliography{mciteplus_doc} + + +% Generated by IEEEtran.bst, version: 1.12 (2007/01/11) +\begin{thebibliography}{10} +\providecommand{\url}[1]{#1} +\csname url@samestyle\endcsname +\providecommand{\newblock}{\relax} +\providecommand{\bibinfo}[2]{#2} +\providecommand{\BIBentrySTDinterwordspacing}{\spaceskip=0pt\relax} +\providecommand{\BIBentryALTinterwordstretchfactor}{4} +\providecommand{\BIBentryALTinterwordspacing}{\spaceskip=\fontdimen2\font plus +\BIBentryALTinterwordstretchfactor\fontdimen3\font minus + \fontdimen4\font\relax} +\providecommand{\BIBforeignlanguage}[2]{{% +\expandafter\ifx\csname l@#1\endcsname\relax +\typeout{** WARNING: IEEEtran.bst: No hyphenation pattern has been}% +\typeout{** loaded for the language `#1'. Using the pattern for}% +\typeout{** the default language instead.}% +\else +\language=\csname l@#1\endcsname +\fi +#2}} +\providecommand{\BIBdecl}{\relax} +\BIBdecl +\renewcommand{\BIBentryALTinterwordstretchfactor}{4} + +\bibitem{ctan:mciteplus} +\BIBentryALTinterwordspacing +M.~Shell. (2007, Dec.) The mciteplus.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/mciteplus/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:mcite} +\BIBentryALTinterwordspacing +T.~Ohl. (1996, Jan.) The mcite.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/mcite/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:revtex} +\BIBentryALTinterwordspacing +A.~Ogawa and D.~Carlisle. (2001, Aug.) The {REV\TeX} package. [Online]. + Available: \url{http://www.ctan.org/tex-archive/macros/latex/contrib/revtex/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:ieeetranbst} +\BIBentryALTinterwordspacing +M.~Shell. (2007, Jan.) The {IEEE}tran {{\BibTeX}} style. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/bibtex/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:hyperref} +\BIBentryALTinterwordspacing +S.~Rahtz and H.~Oberdiek. (2008, Jan.) The hyperref.sty package. [Online]. + Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/hyperref/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:chapterbib} +\BIBentryALTinterwordspacing +D.~Arseneau. (2004, Mar.) The chapterbib.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/cite/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:eqparbox} +\BIBentryALTinterwordspacing +S.~Pakin. (2004, Aug.) The eqparbox.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/eqparbox/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:alphabst} +\BIBentryALTinterwordspacing +O.~Patashnik. (1988, Feb.) The alpha.bst bibstyle. [Online]. Available: + \url{http://www.ctan.org/tex-archive/biblio/bibtex/distribs/styles/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:amsrefs} +\BIBentryALTinterwordspacing +M.~Downes and D.~M. Jones. (2007, Oct.) The amsrefs package. [Online]. + Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/amsrefs/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:biblatex} +\BIBentryALTinterwordspacing +P.~Lehman. (2007, Dec.) The biblatex package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/exptl/biblatex/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:bibunits} +\BIBentryALTinterwordspacing +T.~Hansen. (2004, May) The bibunits.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/bibunits/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:citesty} +\BIBentryALTinterwordspacing +D.~Arseneau. (2006, Sep.) The cite.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/cite/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:citeref} +\BIBentryALTinterwordspacing +B.~Briel and U.~Oldenburg. (1999, May) The citeref.sty package. [Online]. + Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/citeref/citeref.st% +y} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:drftcite} +\BIBentryALTinterwordspacing +D.~Arseneau. (2007, Dec.) The drftcite.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/cite/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:multibbl} +\BIBentryALTinterwordspacing +A.~Syropoulos. (2004, Jul.) The multibbl.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/multibbl/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:multibib} +\BIBentryALTinterwordspacing +T.~Hansen. (2004, Jan.) The multibib.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/multibib/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:natbib} +\BIBentryALTinterwordspacing +P.~W. Daly. (2007, Oct.) The natbib.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/natbib/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:notes2bib} +\BIBentryALTinterwordspacing +J.~Wright. (2008, Jan.) The notes2bib.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/notes2bib/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:footbib} +\BIBentryALTinterwordspacing +E.~Domenjoud. (2005, May) The footbib.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/footbib/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:apacite} +\BIBentryALTinterwordspacing +E.~Meijer. (2007, Sep.) The apacite package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/biblio/bibtex/contrib/apacite/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:bibtopic} +\BIBentryALTinterwordspacing +S.~Ulrich and P.~Basso. (2006, Sep.) The bibtopic.sty package. [Online]. + Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/bibtopic/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:inlinebib} +\BIBentryALTinterwordspacing +R.~Seindal. (1999, Jul.) The inlinebib.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/biblio/bibtex/contrib/inlinebib/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:jurabib} +\BIBentryALTinterwordspacing +J.~Berger. (2004, Jan.) The jurabib.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/jurabib/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:opcit} +\BIBentryALTinterwordspacing +F.~Garcia. (2007, Jun.) The opcit.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/opcit/} +\BIBentrySTDinterwordspacing + +\bibitem{ctan:splitbib} +\BIBentryALTinterwordspacing +N.~Markey. (2005, Dec.) The splitbib.sty package. [Online]. Available: + \url{http://www.ctan.org/tex-archive/macros/latex/contrib/splitbib/} +\BIBentrySTDinterwordspacing + +\end{thebibliography} + + + + + +\end{document} |