summaryrefslogtreecommitdiff
path: root/biblio/citation-style-language/citation-style-language-compatible.sty
blob: db70f54c1ce789798570aa2f31802d67768eed56 (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
%
% Copyright (c) 2021-2023 Zeping Lee
% Released under the MIT License.
% Repository: https://github.com/zepinglee/citeproc-lua
%

% ## Compatibilities with other packages

% ### `babel`

% This should be disabled.
\AtEndOfPackageFile* { babel }
  {
    \RenewDocumentCommand \nocite { m }
      {
        % \@safe@activestrue\org@nocite{#1}\@safe@activesfalse
        \@safe@activestrue
        \__csl_no_cite:n {#1}
        \@safe@activesfalse
      }
    \cs_set_eq:NN \bbl@cite@choice \relax
    \cs_set_eq:NN \@lbibitem \__csl_lbibitem_plain:nn
    \cs_set_eq:NN \@bibitem \__csl_bibitem_plain:n
  }


% ### `biblatex`
% The following doesn't really make `csl` compatible with `biblatex`.
% It just provides commands to make it accepting `biblatex`'s database.

\ProvideDocumentCommand { \hyphen } { }
  {
    \nobreak - \nobreak
    \hskip \z@skip
  }


% ### `csquotes`

\AtEndOfPackageFile* { csquotes }
  {
    \BlockquoteDisable
      {
        \cs_set_eq:NN \__csl_process_citation_info:NN \use_none:nn
        \cs_set_eq:NN \__csl_make_citation:N \use_none:n
      }
  }


% ### `hyperref`

% The hyperref package also patches \bibcite but it cannot provide hyperlinks
% when used with csl.
\bool_new:N \l__csl_hyperref_loaded_bool
\AtEndOfPackageFile* { hyperref }
  {
    \bool_set_true:N \l__csl_hyperref_loaded_bool
    % Pakcage "hyperref" redefines \@lbibitem and \bibitem and we need to
    % recover them.
    \cs_gset_eq:NN \@lbibitem \__csl_lbibitem:
    \cs_gset_eq:NN \@bibitem \__csl_bibitem:
    \cs_gset_eq:NN \__csl_lbibitem_plain:nn \__csl_hyperref_lbibitem:nn
    \cs_gset_eq:NN \__csl_bibitem_plain:n \__csl_hyperref_bibitem:n
    \cs_gset_eq:NN \cslcite \__csl_hyperref_cite_item:nn
  }

\cs_set:Npn \__csl_hyperref_cite_item:nn #1#2
  { \hyper@@link [ cite ] { } { cite. #1 \@extra@b@citeb } { #2 } }

\cs_new:Npn \__csl_hyperref_lbibitem:nn [#1]#2
  {
    \clist_gput_right:Nn \g__csl_bib_items_clist {#2}
    \@skiphyperreftrue
    \H@item[%
      \ifx\Hy@raisedlink\@empty
        \hyper@anchorstart{cite.#2\@extra@b@citeb}%
          \@BIBLABEL{#1}%
        \hyper@anchorend
      \else
        \Hy@raisedlink{%
          \hyper@anchorstart{cite.#2\@extra@b@citeb}\hyper@anchorend
        }%
        \@BIBLABEL{#1}%
      \fi
      \hfill
    ]%
    \@skiphyperreffalse
    \ignorespaces
  }

\cs_new:Npn \__csl_hyperref_bibitem:n #1
  {
    \clist_gput_right:Nn \g__csl_bib_items_clist {#1}
    \@skiphyperreftrue \H@item \@skiphyperreffalse
    \Hy@raisedlink
      {
        \hyper@anchorstart
        { cite. #1 \@extra@b@citeb } \relax
        \hyper@anchorend
      }
    \ignorespaces
  }