summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/biblatex-contrib/biblatex-claves/claves.bbx
blob: ccf5fcd16ebe8a0cb825d4cc36f8cd21d3ff461e (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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
%% Copyright 2016-… 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 files claves.dbx, claves.bbx
% 0. Preamble

\ProvidesFile{claves.dbx}[2017/04/09 v1.2.0 biblatex bibliography style (MR)]

\ifdef{\biblatexmultipledm@bibstyle}
	{\RequireBibliographyStyle{\biblatexmultipledm@bibstyle}}
	{\RequireBibliographyStyle{verbose}}


\RequirePackage{xpatch}

% 1. Tools to declare new clavis
\newcommand{\AddBiblatexClavis}[1]{%
  \appto\biblatex@claves{#1,}%
  \DeclareStyleSourcemap{%
  	\maps[datatype=bibtex]{%
  		\map[overwrite]{%
  			\step[fieldsource=#1,final]%
  			\step[fieldset=claves,fieldvalue={\string\multiclavesseparator\space\string\clavisformat{#1}\string\clavisseparator{}},append]%
  			\step[fieldset=claves,origfieldval, append]
  			}%
			\map[overwrite]{%
  			 \step[fieldsource=entrykey,match=\regexp{^#1$},final]
				 \step[fieldset=claves_definition, origfieldval]
  			}%
    }%
  }%
}

% 2. Format
\newcommand{\multiclavesseparator}{\addsemicolon\ifpunct{\addspace}{}}
\newcommand{\clavisseparator}{\addspace}
\DeclareFieldFormat{claves}{\mkbibparens{#1}}
\DeclareFieldFormat{claves_definition}{\clavisformat{#1}}
\newcommand{\clavisformat}[1]{#1}

% 3. Patching macro standard to add claves

\newcommand{\@biblatex@claves@bibmacronotpatched}[1]{%
  \PackageError{biblatex-claves}{Fail when patching `#1' bibmacro}%
}%

\xpatchbibmacro{title}
  {\newunit}
  {\usebibmacro{claves}}
  {}
  {\@biblatex@claves@bibmacronotpatched{title}}
  
\newbibmacro{claves}{%
	\iffieldundef{claves}%
	  {}%
	  {
	  \nopunct%
		\setunit{\addspace}%
		\printfield{claves}
		}%
	\newunit%
}

%4. List of claves

\newcommand{\citeallclaves}{\nocite{\biblatex@claves}}

\newcommand{\@biblatex@claves@bibdrivernotpatched}[1]{%
  \PackageError{biblatex-claves}{Fail when patching `#1' bibdriver}%
}%

\newcommand{\clavesadddashinset}{%
  \xpatchbibdriver{set}
    {\booltrue{bbx@inset}}
    {}%
    {}%
    {\@biblatex@claves@bibdrivernotpatched{claves}}%
}
\defbibenvironment{claves}%Inspired from shorthand environment
  {\list
     {\printtext[claves_definition]{\printfield[labelwidth]{entrykey}}}
     {\setlength{\labelwidth}{\shorthandwidth}%
      \setlength{\leftmargin}{\labelwidth}%
      \setlength{\labelsep}{\biblabelsep}%
      \addtolength{\leftmargin}{\labelsep}%
      \setlength{\itemsep}{\bibitemsep}%
      \setlength{\parsep}{\bibparsep}%
      \renewcommand*{\makelabel}[1]{##1\hss}%
	    \renewcommand{\entrysetpunct}{\endgraf}%Break between set of an enty
	    \clavesadddashinset%Add the dash inside set (modify default style)
	    }%
	   }
  {\endlist}
  {\item}

\DeclareSortingScheme{claves}{
  \sort{
    \field{entrykey}
  }
}


%5. Inheritance
  \DeclareDataInheritance{*}{*}{%
	  \noinherit{claves_definition}%
  }%

  \DeclareDataInheritance{*}{inbook}{%
	  \noinherit{claves}%
  }%

\endinput