%% Copyright 2013-… Maïeul Rouquette % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2005/12/01 or later. % % This work has the LPPL maintenance status `maintained'. % % The Current Maintainer of this work is Maïeul Rouquette % % This work consists of the file biblatex-source-division.sty \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{biblatex-source-division}[2017/09/21 v2.4.2 source division for biblatex] \RequirePackage{xpatch} % The options \RequirePackage{kvoptions} \SetupKeyvalOptions{family=@biblatexsourcedivision@,prefix=biblatexsourcedivision@} \DeclareStringOption[maintitle]{after} \ProcessKeyvalOptions* % % Test if the package biblatex-true-citepages-omit is loaded \@ifpackageloaded{biblatex-true-citepages-omit}{\PackageError{biblatex-true-citepages-omit}{You must load biblatex-true-citepages-omit AFTER biblatex-source-division}{}}{} % Prepare in the case of volcite commands \newtoggle{volcite}{} \apptocmd{\volcitecmd}{\AtNextCite{\toggletrue{volcite}}}{}{} \apptocmd{\multivolcitecmd}{\AtNextMultiCite{\toggletrue{volcite}}}{}{} % Call the source division getting \AtEveryCitekey{% \usebibmacro{getsourcedivision}% }{}{} % Get source division, put in in titladdon field, and delete source division from the postnote field \newbibmacro{getsourcedivision}{% \iffieldundef{postnote}{}{% \global\undef\blxsd@volpostnote% \usefield{\getsourcedivision@}{postnote}% \ifdefempty{\blxsd@titleaddon}% {}% {% \ifboolexpr{test {\iffieldundef{maintitle}} or test{\ifdefstring{\biblatexsourcedivision@after}{title}}}% {\restorefield{titleaddon}{\blxsd@titleaddon}} {\restorefield{maintitleaddon}{\blxsd@titleaddon}}% }% \ifdefempty{\blxsd@postnote}% {\clearfield{postnote}}% {\restorefield{postnote}{\blxsd@postnote}}% }% } % Analyse of the source division %% Main command \newrobustcmd*{\getsourcedivision@}[1]{\getsourcedivision@i#1++} %% Are there parenthesis ? \def\getsourcedivision@i{% \@ifnextchar(%) {\getsourcedivision@ii}% {\getsourcedivision@ii()}} %% Put the source division and "true" postnote in macro \def\getsourcedivision@ii(#1)#2++{% \ifdefmacro{\blxsd@volpostnote}{% \gdef\blxsd@titleaddon{#1}% \gdef\blxsd@postnote{{\volvol}{#2}}% }{% \iftoggle{volcite}{% \volgetsourcedivision@#2% }% {% \gdef\blxsd@titleaddon{#1}% \gdef\blxsd@postnote{#2}% }% }% } \newrobustcmd*{\volgetsourcedivision@}[2]{% \gdef\blxsd@volpostnote{#2}% \gdef\volvol{#1}% \ifdefempty{\blxsd@volpostnote}% {\clearfield{volpostnote}}% {\restorefield{volpostnote}{\blxsd@volpostnote}}% \usefield{\getsourcedivision@}{volpostnote}% } % Insert source division in bibmacro for abreviated forms \newcommand{\sourcedivision@failtopatch}[1]{\PackageError{biblatex-source-division}{Fail to patch `#1` bibmacro}{}} \def\do#1{% \ifcsvoid{abx@macro@#1}{}{% \xapptobibmacro{#1}% {\newunit\printfield{titleaddon}\printfield{maintitleaddon}}% {}% {\sourcedivision@failtopatch{#1}}% } } \docsvlist{cite:ibid,cite:opcit,cite:short,cite:title} \endinput