asciidoctor-bibliography 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.adoc +23 -4
- data/asciidoctor-bibliography.gemspec +8 -8
- data/lib/asciidoctor-bibliography.rb +6 -0
- data/lib/asciidoctor-bibliography/asciidoctor/bibliographer_preprocessor.rb +35 -23
- data/lib/asciidoctor-bibliography/bibliographer.rb +0 -15
- data/lib/asciidoctor-bibliography/citation.rb +29 -22
- data/lib/asciidoctor-bibliography/databases/bibtex.rb +4 -1
- data/lib/asciidoctor-bibliography/formatter.rb +28 -0
- data/lib/asciidoctor-bibliography/index.rb +24 -16
- data/lib/asciidoctor-bibliography/options.rb +65 -32
- data/lib/asciidoctor-bibliography/version.rb +1 -1
- data/lib/citeproc/ruby/formats/adoc.rb +36 -0
- data/lib/csl/styles/tex-citealp-authoryear.csl +117 -0
- data/lib/csl/styles/tex-citealp-numeric.csl +116 -0
- data/lib/csl/styles/tex-citealps-authoryear.csl +117 -0
- data/lib/csl/styles/tex-citealps-numeric.csl +116 -0
- data/lib/csl/styles/tex-citealt-authoryear.csl +119 -0
- data/lib/csl/styles/tex-citealt-numeric.csl +119 -0
- data/lib/csl/styles/tex-citealts-authoryear.csl +119 -0
- data/lib/csl/styles/tex-citealts-numeric.csl +119 -0
- data/lib/csl/styles/tex-citeauthor-authoryear.csl +116 -0
- data/lib/csl/styles/tex-citeauthor-numeric.csl +116 -0
- data/lib/csl/styles/tex-citeauthors-authoryear.csl +116 -0
- data/lib/csl/styles/tex-citeauthors-numeric.csl +116 -0
- data/lib/csl/styles/tex-citep-authoryear.csl +117 -0
- data/lib/csl/styles/tex-citep-numeric.csl +116 -0
- data/lib/csl/styles/tex-citeps-authoryear.csl +117 -0
- data/lib/csl/styles/tex-citeps-numeric.csl +116 -0
- data/lib/csl/styles/tex-citet-authoryear.csl +119 -0
- data/lib/csl/styles/tex-citet-numeric.csl +119 -0
- data/lib/csl/styles/tex-citets-authoryear.csl +119 -0
- data/lib/csl/styles/tex-citets-numeric.csl +119 -0
- data/lib/csl/styles/tex-citeyear-authoryear.csl +116 -0
- data/lib/csl/styles/tex-citeyear-numeric.csl +116 -0
- data/lib/csl/styles/tex-citeyearpar-authoryear.csl +116 -0
- data/lib/csl/styles/tex-citeyearpar-numeric.csl +116 -0
- data/samples/tex/sample-numbers.adoc +1 -1
- data/samples/tex/sample-sort.adoc +1 -1
- data/spec/citation_helper.rb +46 -0
- data/spec/citation_item_spec.rb +0 -2
- data/spec/csl/styles/tex_citealp_authoryear_spec.rb +42 -0
- data/spec/csl/styles/tex_citealp_numeric_spec.rb +42 -0
- data/spec/csl/styles/tex_citealps_authoryear_spec.rb +42 -0
- data/spec/csl/styles/tex_citealps_numeric_spec.rb +42 -0
- data/spec/csl/styles/tex_citealt_authoryear_spec.rb +42 -0
- data/spec/csl/styles/tex_citealt_numeric_spec.rb +42 -0
- data/spec/csl/styles/tex_citealts_authoryear_spec.rb +42 -0
- data/spec/csl/styles/tex_citealts_numeric_spec.rb +42 -0
- data/spec/csl/styles/tex_citeauthor_authoryear_spec.rb +42 -0
- data/spec/csl/styles/tex_citeauthor_numeric_spec.rb +42 -0
- data/spec/csl/styles/tex_citeauthors_authoryear_spec.rb +42 -0
- data/spec/csl/styles/tex_citeauthors_numeric_spec.rb +42 -0
- data/spec/csl/styles/tex_citep_authoryear_spec.rb +42 -0
- data/spec/csl/styles/tex_citep_numeric_spec.rb +42 -0
- data/spec/csl/styles/tex_citeps_authoryear_spec.rb +42 -0
- data/spec/csl/styles/tex_citeps_numeric_spec.rb +42 -0
- data/spec/csl/styles/tex_citet_authoryear_spec.rb +42 -0
- data/spec/csl/styles/tex_citet_numeric_spec.rb +42 -0
- data/spec/csl/styles/tex_citets_authoryear_spec.rb +42 -0
- data/spec/csl/styles/tex_citets_numeric_spec.rb +42 -0
- data/spec/csl/styles/tex_citeyear_authoryear_spec.rb +42 -0
- data/spec/csl/styles/tex_citeyear_numeric_spec.rb +42 -0
- data/spec/csl/styles/tex_citeyearpar_authoryear_spec.rb +42 -0
- data/spec/csl/styles/tex_citeyearpar_numeric_spec.rb +42 -0
- data/spec/database_spec.rb +20 -1
- data/spec/macros_spec.rb +21 -0
- data/spec/options_spec.rb +105 -1
- metadata +72 -24
- data/lib/asciidoctor-bibliography/formatters/csl.rb +0 -28
- data/lib/asciidoctor-bibliography/formatters/tex.rb +0 -187
- data/lib/asciidoctor-bibliography/helpers.rb +0 -41
- data/spec/helpers_spec.rb +0 -73
@@ -8,6 +8,7 @@ module AsciidoctorBibliography
|
|
8
8
|
|
9
9
|
DEFAULTS = {
|
10
10
|
"bibliography-database" => nil,
|
11
|
+
"bibliography-locale" => "en-US",
|
11
12
|
"bibliography-style" => "apa",
|
12
13
|
"bibliography-hyperlinks" => "true",
|
13
14
|
"bibliography-order" => "alphabetical", # TODO: deprecate
|
@@ -19,16 +20,47 @@ module AsciidoctorBibliography
|
|
19
20
|
merge DEFAULTS
|
20
21
|
end
|
21
22
|
|
23
|
+
def self.new_from_reader(reader)
|
24
|
+
header_attributes = get_header_attributes_hash reader
|
25
|
+
header_attributes.select! { |key, _| DEFAULTS.keys.include? key }
|
26
|
+
new.merge header_attributes
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.get_header_attributes_hash(reader)
|
30
|
+
# We peek at the document attributes we need, without perturbing the parsing flow.
|
31
|
+
# NOTE: we'll use this in a preprocessor and they haven't been parsed yet, there.
|
32
|
+
tmp_document = ::Asciidoctor::Document.new
|
33
|
+
tmp_reader = ::Asciidoctor::PreprocessorReader.new(tmp_document, reader.source_lines)
|
34
|
+
|
35
|
+
::Asciidoctor::Parser.
|
36
|
+
parse(tmp_reader, tmp_document, header_only: true).
|
37
|
+
attributes
|
38
|
+
end
|
39
|
+
|
22
40
|
def style
|
23
41
|
# Error throwing delegated to CSL library. Seems to have nice messages.
|
24
42
|
self["bibliography-style"] || DEFAULTS["bibliography-style"]
|
25
43
|
end
|
26
44
|
|
45
|
+
def locale
|
46
|
+
value = self["bibliography-locale"] || DEFAULTS["bibliography-locale"]
|
47
|
+
unless CSL::Locale.list.include? value
|
48
|
+
raise Errors::Options::Invalid, <<~MESSAGE
|
49
|
+
Option :bibliography-locale: has an invalid value (#{value}).
|
50
|
+
Allowed values are #{CSL::Locale.list.inspect}.
|
51
|
+
MESSAGE
|
52
|
+
end
|
53
|
+
|
54
|
+
value
|
55
|
+
end
|
56
|
+
|
27
57
|
def hyperlinks?
|
28
58
|
value = self["bibliography-hyperlinks"] || DEFAULTS["bibliography-hyperlinks"]
|
29
59
|
unless %w[true false].include? value
|
30
|
-
|
31
|
-
|
60
|
+
raise Errors::Options::Invalid, <<~MESSAGE
|
61
|
+
Option :bibliography-hyperlinks: has an invalid value (#{value}).
|
62
|
+
Allowed values are 'true' and 'false'.
|
63
|
+
MESSAGE
|
32
64
|
end
|
33
65
|
|
34
66
|
value == "true"
|
@@ -37,8 +69,10 @@ module AsciidoctorBibliography
|
|
37
69
|
def database
|
38
70
|
value = self["bibliography-database"] || DEFAULTS["bibliography-database"]
|
39
71
|
if value.nil?
|
40
|
-
|
41
|
-
|
72
|
+
raise Errors::Options::Missing, <<~MESSAGE
|
73
|
+
Option :bibliography-database: is mandatory.
|
74
|
+
A bibliographic database is required.
|
75
|
+
MESSAGE
|
42
76
|
end
|
43
77
|
|
44
78
|
value
|
@@ -48,50 +82,49 @@ module AsciidoctorBibliography
|
|
48
82
|
begin
|
49
83
|
value = YAML.safe_load self["bibliography-sort"].to_s
|
50
84
|
rescue Psych::SyntaxError => psych_error
|
51
|
-
|
52
|
-
|
85
|
+
raise Errors::Options::Invalid, <<~MESSAGE
|
86
|
+
Option :bibliography-sort: is not a valid YAML string: \"#{psych_error}\".
|
87
|
+
MESSAGE
|
53
88
|
end
|
54
89
|
|
55
|
-
value =
|
56
|
-
value =
|
90
|
+
value = validate_parsed_sort_type! value
|
91
|
+
value = validate_parsed_sort_contents! value unless value.nil?
|
57
92
|
value
|
58
93
|
end
|
59
94
|
|
60
95
|
def tex_style
|
61
|
-
self["bibliography-tex-style"] || DEFAULTS["bibliography-tex-style"]
|
96
|
+
value = self["bibliography-tex-style"] || DEFAULTS["bibliography-tex-style"]
|
97
|
+
unless %w[authoryear numeric].include? value
|
98
|
+
raise Errors::Options::Invalid, <<~MESSAGE
|
99
|
+
Option :bibliography-tex-style: has an invalid value (#{value}).
|
100
|
+
Allowed values are 'authoryear' (default) and 'numeric'.
|
101
|
+
MESSAGE
|
102
|
+
end
|
103
|
+
|
104
|
+
value
|
62
105
|
end
|
63
106
|
|
64
|
-
|
107
|
+
private
|
108
|
+
|
109
|
+
def validate_parsed_sort_type!(value)
|
65
110
|
return value if value.nil?
|
66
111
|
return value if value.is_a?(Array) && value.all? { |v| v.is_a? Hash }
|
67
112
|
return [value] if value.is_a? Hash
|
68
|
-
|
69
|
-
|
113
|
+
raise Errors::Options::Invalid, <<~MESSAGE
|
114
|
+
Option :bibliography-sort: has an invalid value (#{value}).
|
115
|
+
Please refer to manual for more info.
|
116
|
+
MESSAGE
|
70
117
|
end
|
71
118
|
|
72
|
-
def
|
119
|
+
def validate_parsed_sort_contents!(array)
|
73
120
|
# TODO: should we restrict these? Double check the CSL spec.
|
74
121
|
allowed_keys = %w[variable macro sort names-min names-use-first names-use-last]
|
75
122
|
return array unless array.any? { |hash| (hash.keys - allowed_keys).any? }
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
header_attributes = get_header_attributes_hash reader
|
82
|
-
header_attributes.select! { |key, _| DEFAULTS.keys.include? key }
|
83
|
-
new.merge header_attributes
|
84
|
-
end
|
85
|
-
|
86
|
-
def self.get_header_attributes_hash(reader)
|
87
|
-
# We peek at the document attributes we need, without perturbing the parsing flow.
|
88
|
-
# NOTE: we'll use this in a preprocessor and they haven't been parsed yet, there.
|
89
|
-
tmp_document = ::Asciidoctor::Document.new
|
90
|
-
tmp_reader = ::Asciidoctor::PreprocessorReader.new(tmp_document, reader.source_lines)
|
91
|
-
|
92
|
-
::Asciidoctor::Parser.
|
93
|
-
parse(tmp_reader, tmp_document, header_only: true).
|
94
|
-
attributes
|
123
|
+
raise Errors::Options::Invalid, <<~MESSAGE
|
124
|
+
Option :bibliography-sort: has a value containing invalid keys (#{array}).
|
125
|
+
Allowed keys are #{allowed_keys.inspect}.
|
126
|
+
Please refer to manual for more info.
|
127
|
+
MESSAGE
|
95
128
|
end
|
96
129
|
end
|
97
130
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "citeproc/ruby/format"
|
2
|
+
|
3
|
+
module CiteProc
|
4
|
+
module Ruby
|
5
|
+
module Formats
|
6
|
+
class Adoc < Format
|
7
|
+
# TODO
|
8
|
+
# def bibliography(bibliography)
|
9
|
+
# end
|
10
|
+
|
11
|
+
def apply_font_style
|
12
|
+
output.replace "_#{output}_" if options[:'font-style'] == "italic"
|
13
|
+
end
|
14
|
+
|
15
|
+
# TODO
|
16
|
+
# def apply_font_variant
|
17
|
+
# output.replace "*#{output}*" if options[:'font-variant'] == 'small-caps'
|
18
|
+
# end
|
19
|
+
|
20
|
+
def apply_font_weight
|
21
|
+
output.replace "*#{output}*" if options[:'font-weight'] == "bold"
|
22
|
+
end
|
23
|
+
|
24
|
+
# TODO
|
25
|
+
# def apply_text_decoration
|
26
|
+
# output.replace "*#{output}*" if options[:'text-decoration'] == 'underline'
|
27
|
+
# end
|
28
|
+
|
29
|
+
def apply_vertical_align
|
30
|
+
output.replace "^#{output}^" if options[:vertical_align] == "sup"
|
31
|
+
output.replace "~#{output}~" if options[:vertical_align] == "sub"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="never">
|
3
|
+
<info>
|
4
|
+
<title>TeX style for macro citealp with authoryear style</title>
|
5
|
+
<id>tex-citealp-authoryear</id>
|
6
|
+
</info>
|
7
|
+
<macro name="author-long">
|
8
|
+
<names variable="author">
|
9
|
+
<name form="short" and="text" initialize="false" sort-separator=""/>
|
10
|
+
</names>
|
11
|
+
</macro>
|
12
|
+
<macro name="author-short">
|
13
|
+
<names variable="author">
|
14
|
+
<name form="short" and="text" et-al-min="2" et-al-use-first="1" et-al-subsequent-min="2" et-al-subsequent-use-first="1"/>
|
15
|
+
</names>
|
16
|
+
</macro>
|
17
|
+
<macro name="locators">
|
18
|
+
<choose>
|
19
|
+
<if type="article-journal article-magazine" match="any">
|
20
|
+
<group prefix=", " delimiter=", ">
|
21
|
+
<group>
|
22
|
+
<text variable="volume" font-style="italic"/>
|
23
|
+
<text variable="issue" prefix="(" suffix=")"/>
|
24
|
+
</group>
|
25
|
+
<text variable="page"/>
|
26
|
+
</group>
|
27
|
+
<choose>
|
28
|
+
<if variable="issued">
|
29
|
+
<choose>
|
30
|
+
<if variable="page issue" match="none">
|
31
|
+
<text variable="status" prefix=". "/>
|
32
|
+
</if>
|
33
|
+
</choose>
|
34
|
+
</if>
|
35
|
+
</choose>
|
36
|
+
</if>
|
37
|
+
<else-if type="article-newspaper">
|
38
|
+
<group delimiter=" " prefix=", ">
|
39
|
+
<label variable="page" form="short"/>
|
40
|
+
<text variable="page"/>
|
41
|
+
</group>
|
42
|
+
</else-if>
|
43
|
+
<else-if type="book graphic motion_picture report song chapter paper-conference entry-encyclopedia entry-dictionary" match="any">
|
44
|
+
<group prefix=" (" suffix=")" delimiter=", ">
|
45
|
+
<choose>
|
46
|
+
<if type="report" match="none">
|
47
|
+
<text macro="edition"/>
|
48
|
+
</if>
|
49
|
+
</choose>
|
50
|
+
<choose>
|
51
|
+
<if variable="volume" match="any">
|
52
|
+
<group>
|
53
|
+
<text term="volume" form="short" text-case="capitalize-first" suffix=" "/>
|
54
|
+
<number variable="volume" form="numeric"/>
|
55
|
+
</group>
|
56
|
+
</if>
|
57
|
+
<else>
|
58
|
+
<group>
|
59
|
+
<text term="volume" form="short" plural="true" text-case="capitalize-first" suffix=" "/>
|
60
|
+
<number variable="number-of-volumes" form="numeric" prefix="1–"/>
|
61
|
+
</group>
|
62
|
+
</else>
|
63
|
+
</choose>
|
64
|
+
<group>
|
65
|
+
<label variable="page" form="short" suffix=" "/>
|
66
|
+
<text variable="page"/>
|
67
|
+
</group>
|
68
|
+
</group>
|
69
|
+
</else-if>
|
70
|
+
<else-if type="legal_case">
|
71
|
+
<group prefix=" (" suffix=")" delimiter=" ">
|
72
|
+
<text variable="authority"/>
|
73
|
+
<choose>
|
74
|
+
<if variable="container-title" match="any">
|
75
|
+
<date variable="issued" form="numeric" date-parts="year"/>
|
76
|
+
</if>
|
77
|
+
<else>
|
78
|
+
<date variable="issued" form="text"/>
|
79
|
+
</else>
|
80
|
+
</choose>
|
81
|
+
</group>
|
82
|
+
</else-if>
|
83
|
+
<else-if type="bill legislation" match="any">
|
84
|
+
<date variable="issued" prefix=" (" suffix=")">
|
85
|
+
<date-part name="year"/>
|
86
|
+
</date>
|
87
|
+
</else-if>
|
88
|
+
</choose>
|
89
|
+
</macro>
|
90
|
+
<macro name="citation-locator">
|
91
|
+
<group>
|
92
|
+
<choose>
|
93
|
+
<if locator="chapter">
|
94
|
+
<label variable="locator" form="long" text-case="capitalize-first"/>
|
95
|
+
</if>
|
96
|
+
<else>
|
97
|
+
<label variable="locator" form="short"/>
|
98
|
+
</else>
|
99
|
+
</choose>
|
100
|
+
<text variable="locator" prefix=" "/>
|
101
|
+
</group>
|
102
|
+
</macro>
|
103
|
+
<citation>
|
104
|
+
<layout delimiter="; ">
|
105
|
+
<group>
|
106
|
+
<text variable="prefix" suffix=" "/>
|
107
|
+
<group delimiter=", ">
|
108
|
+
<text macro="author-short"/>
|
109
|
+
<date date-parts="year" form="numeric" variable="issued"/>
|
110
|
+
<text macro="citation-locator"/>
|
111
|
+
</group>
|
112
|
+
<text variable="suffix" prefix=", "/>
|
113
|
+
</group>
|
114
|
+
</layout>
|
115
|
+
</citation>
|
116
|
+
<bibliography/>
|
117
|
+
</style>
|
@@ -0,0 +1,116 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="never">
|
3
|
+
<info>
|
4
|
+
<title>TeX style for macro citealp with numeric style</title>
|
5
|
+
<id>tex-citealp-numeric</id>
|
6
|
+
</info>
|
7
|
+
<macro name="author-long">
|
8
|
+
<names variable="author">
|
9
|
+
<name form="short" and="text" initialize="false" sort-separator=""/>
|
10
|
+
</names>
|
11
|
+
</macro>
|
12
|
+
<macro name="author-short">
|
13
|
+
<names variable="author">
|
14
|
+
<name form="short" and="text" et-al-min="2" et-al-use-first="1" et-al-subsequent-min="2" et-al-subsequent-use-first="1"/>
|
15
|
+
</names>
|
16
|
+
</macro>
|
17
|
+
<macro name="locators">
|
18
|
+
<choose>
|
19
|
+
<if type="article-journal article-magazine" match="any">
|
20
|
+
<group prefix=", " delimiter=", ">
|
21
|
+
<group>
|
22
|
+
<text variable="volume" font-style="italic"/>
|
23
|
+
<text variable="issue" prefix="(" suffix=")"/>
|
24
|
+
</group>
|
25
|
+
<text variable="page"/>
|
26
|
+
</group>
|
27
|
+
<choose>
|
28
|
+
<if variable="issued">
|
29
|
+
<choose>
|
30
|
+
<if variable="page issue" match="none">
|
31
|
+
<text variable="status" prefix=". "/>
|
32
|
+
</if>
|
33
|
+
</choose>
|
34
|
+
</if>
|
35
|
+
</choose>
|
36
|
+
</if>
|
37
|
+
<else-if type="article-newspaper">
|
38
|
+
<group delimiter=" " prefix=", ">
|
39
|
+
<label variable="page" form="short"/>
|
40
|
+
<text variable="page"/>
|
41
|
+
</group>
|
42
|
+
</else-if>
|
43
|
+
<else-if type="book graphic motion_picture report song chapter paper-conference entry-encyclopedia entry-dictionary" match="any">
|
44
|
+
<group prefix=" (" suffix=")" delimiter=", ">
|
45
|
+
<choose>
|
46
|
+
<if type="report" match="none">
|
47
|
+
<text macro="edition"/>
|
48
|
+
</if>
|
49
|
+
</choose>
|
50
|
+
<choose>
|
51
|
+
<if variable="volume" match="any">
|
52
|
+
<group>
|
53
|
+
<text term="volume" form="short" text-case="capitalize-first" suffix=" "/>
|
54
|
+
<number variable="volume" form="numeric"/>
|
55
|
+
</group>
|
56
|
+
</if>
|
57
|
+
<else>
|
58
|
+
<group>
|
59
|
+
<text term="volume" form="short" plural="true" text-case="capitalize-first" suffix=" "/>
|
60
|
+
<number variable="number-of-volumes" form="numeric" prefix="1–"/>
|
61
|
+
</group>
|
62
|
+
</else>
|
63
|
+
</choose>
|
64
|
+
<group>
|
65
|
+
<label variable="page" form="short" suffix=" "/>
|
66
|
+
<text variable="page"/>
|
67
|
+
</group>
|
68
|
+
</group>
|
69
|
+
</else-if>
|
70
|
+
<else-if type="legal_case">
|
71
|
+
<group prefix=" (" suffix=")" delimiter=" ">
|
72
|
+
<text variable="authority"/>
|
73
|
+
<choose>
|
74
|
+
<if variable="container-title" match="any">
|
75
|
+
<date variable="issued" form="numeric" date-parts="year"/>
|
76
|
+
</if>
|
77
|
+
<else>
|
78
|
+
<date variable="issued" form="text"/>
|
79
|
+
</else>
|
80
|
+
</choose>
|
81
|
+
</group>
|
82
|
+
</else-if>
|
83
|
+
<else-if type="bill legislation" match="any">
|
84
|
+
<date variable="issued" prefix=" (" suffix=")">
|
85
|
+
<date-part name="year"/>
|
86
|
+
</date>
|
87
|
+
</else-if>
|
88
|
+
</choose>
|
89
|
+
</macro>
|
90
|
+
<macro name="citation-locator">
|
91
|
+
<group>
|
92
|
+
<choose>
|
93
|
+
<if locator="chapter">
|
94
|
+
<label variable="locator" form="long" text-case="capitalize-first"/>
|
95
|
+
</if>
|
96
|
+
<else>
|
97
|
+
<label variable="locator" form="short"/>
|
98
|
+
</else>
|
99
|
+
</choose>
|
100
|
+
<text variable="locator" prefix=" "/>
|
101
|
+
</group>
|
102
|
+
</macro>
|
103
|
+
<citation>
|
104
|
+
<layout delimiter=", ">
|
105
|
+
<group>
|
106
|
+
<text variable="prefix" suffix=" "/>
|
107
|
+
<group delimiter=", ">
|
108
|
+
<text variable="citation-number"/>
|
109
|
+
<text macro="citation-locator"/>
|
110
|
+
</group>
|
111
|
+
<text variable="suffix" prefix=", "/>
|
112
|
+
</group>
|
113
|
+
</layout>
|
114
|
+
</citation>
|
115
|
+
<bibliography/>
|
116
|
+
</style>
|
@@ -0,0 +1,117 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="never">
|
3
|
+
<info>
|
4
|
+
<title>TeX style for macro citealp* with authoryear style</title>
|
5
|
+
<id>tex-citealps-authoryear</id>
|
6
|
+
</info>
|
7
|
+
<macro name="author-long">
|
8
|
+
<names variable="author">
|
9
|
+
<name form="short" and="text" initialize="false" sort-separator=""/>
|
10
|
+
</names>
|
11
|
+
</macro>
|
12
|
+
<macro name="author-short">
|
13
|
+
<names variable="author">
|
14
|
+
<name form="short" and="text" et-al-min="2" et-al-use-first="1" et-al-subsequent-min="2" et-al-subsequent-use-first="1"/>
|
15
|
+
</names>
|
16
|
+
</macro>
|
17
|
+
<macro name="locators">
|
18
|
+
<choose>
|
19
|
+
<if type="article-journal article-magazine" match="any">
|
20
|
+
<group prefix=", " delimiter=", ">
|
21
|
+
<group>
|
22
|
+
<text variable="volume" font-style="italic"/>
|
23
|
+
<text variable="issue" prefix="(" suffix=")"/>
|
24
|
+
</group>
|
25
|
+
<text variable="page"/>
|
26
|
+
</group>
|
27
|
+
<choose>
|
28
|
+
<if variable="issued">
|
29
|
+
<choose>
|
30
|
+
<if variable="page issue" match="none">
|
31
|
+
<text variable="status" prefix=". "/>
|
32
|
+
</if>
|
33
|
+
</choose>
|
34
|
+
</if>
|
35
|
+
</choose>
|
36
|
+
</if>
|
37
|
+
<else-if type="article-newspaper">
|
38
|
+
<group delimiter=" " prefix=", ">
|
39
|
+
<label variable="page" form="short"/>
|
40
|
+
<text variable="page"/>
|
41
|
+
</group>
|
42
|
+
</else-if>
|
43
|
+
<else-if type="book graphic motion_picture report song chapter paper-conference entry-encyclopedia entry-dictionary" match="any">
|
44
|
+
<group prefix=" (" suffix=")" delimiter=", ">
|
45
|
+
<choose>
|
46
|
+
<if type="report" match="none">
|
47
|
+
<text macro="edition"/>
|
48
|
+
</if>
|
49
|
+
</choose>
|
50
|
+
<choose>
|
51
|
+
<if variable="volume" match="any">
|
52
|
+
<group>
|
53
|
+
<text term="volume" form="short" text-case="capitalize-first" suffix=" "/>
|
54
|
+
<number variable="volume" form="numeric"/>
|
55
|
+
</group>
|
56
|
+
</if>
|
57
|
+
<else>
|
58
|
+
<group>
|
59
|
+
<text term="volume" form="short" plural="true" text-case="capitalize-first" suffix=" "/>
|
60
|
+
<number variable="number-of-volumes" form="numeric" prefix="1–"/>
|
61
|
+
</group>
|
62
|
+
</else>
|
63
|
+
</choose>
|
64
|
+
<group>
|
65
|
+
<label variable="page" form="short" suffix=" "/>
|
66
|
+
<text variable="page"/>
|
67
|
+
</group>
|
68
|
+
</group>
|
69
|
+
</else-if>
|
70
|
+
<else-if type="legal_case">
|
71
|
+
<group prefix=" (" suffix=")" delimiter=" ">
|
72
|
+
<text variable="authority"/>
|
73
|
+
<choose>
|
74
|
+
<if variable="container-title" match="any">
|
75
|
+
<date variable="issued" form="numeric" date-parts="year"/>
|
76
|
+
</if>
|
77
|
+
<else>
|
78
|
+
<date variable="issued" form="text"/>
|
79
|
+
</else>
|
80
|
+
</choose>
|
81
|
+
</group>
|
82
|
+
</else-if>
|
83
|
+
<else-if type="bill legislation" match="any">
|
84
|
+
<date variable="issued" prefix=" (" suffix=")">
|
85
|
+
<date-part name="year"/>
|
86
|
+
</date>
|
87
|
+
</else-if>
|
88
|
+
</choose>
|
89
|
+
</macro>
|
90
|
+
<macro name="citation-locator">
|
91
|
+
<group>
|
92
|
+
<choose>
|
93
|
+
<if locator="chapter">
|
94
|
+
<label variable="locator" form="long" text-case="capitalize-first"/>
|
95
|
+
</if>
|
96
|
+
<else>
|
97
|
+
<label variable="locator" form="short"/>
|
98
|
+
</else>
|
99
|
+
</choose>
|
100
|
+
<text variable="locator" prefix=" "/>
|
101
|
+
</group>
|
102
|
+
</macro>
|
103
|
+
<citation>
|
104
|
+
<layout delimiter="; ">
|
105
|
+
<group>
|
106
|
+
<text variable="prefix" suffix=" "/>
|
107
|
+
<group delimiter=", ">
|
108
|
+
<text macro="author-long"/>
|
109
|
+
<date date-parts="year" form="numeric" variable="issued"/>
|
110
|
+
<text macro="citation-locator"/>
|
111
|
+
</group>
|
112
|
+
<text variable="suffix" prefix=", "/>
|
113
|
+
</group>
|
114
|
+
</layout>
|
115
|
+
</citation>
|
116
|
+
<bibliography/>
|
117
|
+
</style>
|