summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/biblatex-source-division/biblatex-source-division.sty
blob: 135ee8f6c84ae5d3d4a47601209e7396fc602c49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
%% 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}[2016/06/07 v2.4.0 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 <x>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\volpostnote%
     \usefield{\getsourcedivision@}{postnote}%
     \ifboolexpr{test {\iffieldundef{maintitle}} or test{\ifdefstring{\biblatexsourcedivision@after}{title}}}%
       {\restorefield{titleaddon}{\titleaddon}}
       {\restorefield{maintitleaddon}{\titleaddon}}%
     \ifdefempty{\postnote}%
       {\clearfield{postnote}}%
       {\restorefield{postnote}{\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{\volpostnote}{%
    \gdef\titleaddon{#1}%
    \gdef\postnote{{\volvol}{#2}}%   
   }{%
     \iftoggle{volcite}{%
		   \volgetsourcedivision@#2%
		}%
		{%
		  \gdef\titleaddon{#1}%
		  \gdef\postnote{#2}%
		}%
	}%
 }
\newrobustcmd*{\volgetsourcedivision@}[2]{%
  \gdef\volpostnote{#2}%
  \gdef\volvol{#1}%
  \ifdefempty{volpostnote}%
    {\clearfield{volpostnote}}%
    {\restorefield{volpostnote}{\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