%%
%% This is file `notes2bib.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% notes2bib.dtx  (with options: `package')
%% ---------------------------------------------------------------
%% notes2bib --- Integrating notes into the bibliography
%% Maintained by Joseph Wright
%% E-mail: joseph.wright@morningstar2.co.uk
%% Released under the LaTeX Project Public License v1.3c or later
%% See http://www.latex-project.org/lppl.txt
%% ---------------------------------------------------------------
%% 
\RequirePackage{xparse}
 %\section{Introduction}
\ProvidesExplPackage {notes2bib} {2019-09-28} {2.0m}
  {Integrating notes into the bibliography}
\RequirePackage{l3keys2e}
\tl_const:Nn \c__notestobib_file_message_tl
  {
    \iow_char:N \% ~
    This~is~an~auxiliary~file~used~by~the~'notes2bib'~package.
      \iow_newline:
    \iow_char:N \% ~
    This~file~may~safely~be~deleted.
      \iow_newline:
    \iow_char:N \% ~
    It~will~be~recreated~as~required.
      \iow_newline:
  }
\clist_new:N \g__notestobib_after_clist
\clist_new:N \g__notestobib_before_clist
\clist_new:N \g__notestobib_all_after_clist
\clist_new:N \g__notestobib_all_before_clist
\int_new:N \g__notestobib_note_int
\tl_new:N \l__notestobib_presort_tl
\tl_new:N \l__notestobib_sortkey_tl
\clist_new:N \g__notestobib_previous_after_clist
\clist_new:N \g__notestobib_previous_before_clist
\int_new:N \g__notestobib_previous_notes_int
\tl_new:N \g__notestobib_notes_tl
\tl_new:N \l__notestobib_sortkey_field_tl
\int_new:N \g__notestobib_total_notes_int
\cs_new:Npn \__notestobib_cite:w { }
\keys_define:nn { notes2bib }
  {
    cite-function        .code:n      =
      { \AtBeginDocument { \cs_set_eq:NN \__notestobib_cite:w #1 } }     ,
    file-name            .tl_gset_x:N = \g__notestobib_filename_tl      ,
    convert-endnotes     .choice:                              ,
    convert-endnotes
      / false   .code:n =
      { \AtBeginDocument { \__notestobib_from_bibnote:n { endnote } } }  ,
    convert-endnotes
      / true   .code:n  =
      { \AtBeginDocument { \__notestobib_to_bibnote:n { endnote } } }    ,
    convert-footnotes    .choice:                              ,
    convert-footnotes
      / false   .code:n =
      { \AtBeginDocument { \__notestobib_from_bibnote:n { footnote } } }  ,
    convert-footnotes
      / true   .code:n =
      { \AtBeginDocument { \__notestobib_to_bibnote:n { footnote } } }    ,
    keyword-entry        .tl_set:N    = \l__notestobib_keyword_tl        ,
    note-field           .tl_set:N    = \l__notestobib_note_field_tl     ,
    note-name            .tl_set:N    = \l__notestobib_note_name_tl      ,
    placement            .choice:                               ,
    placement
      / after  .code:n =
      {
        \cs_set_eq:NN \__notestobib_mark_note:n \__notestobib_mark_note_after:n
        \tl_set_eq:NN \l__notestobib_presort_tl \l__notestobib_presort_after_tl
        \tl_set_eq:NN \l__notestobib_sortkey_tl \l__notestobib_sortkey_after_tl
      },
    placement
      / before .code:n =
      {
        \cs_set_eq:NN \__notestobib_mark_note:n \__notestobib_mark_note_before:n
        \tl_set_eq:NN \l__notestobib_presort_tl \l__notestobib_presort_before_tl
        \tl_set_eq:NN \l__notestobib_sortkey_tl \l__notestobib_sortkey_before_tl
      },
    placement
      / mixed  .code:n =
      {
        \cs_set_eq:NN \__notestobib_mark_note:n \__notestobib_mark_note_mixed:n
        \tl_set_eq:NN \l__notestobib_presort_tl \l__notestobib_presort_mixed_tl
        \tl_set_eq:NN \l__notestobib_sortkey_tl \l__notestobib_sortkey_mixed_tl
      },
    presort-after        .tl_set:N    = \l__notestobib_presort_after_tl   ,
    presort-before       .tl_set:N    = \l__notestobib_presort_before_tl  ,
    presort-mixed        .tl_set:N    = \l__notestobib_presort_mixed_tl   ,
    record-type          .tl_set:N    = \l__notestobib_record_type_tl     ,
    refsection-name      .tl_set:N    = \l__notestobib_refsection_name_tl ,
    refsection-separator .tl_set:N    = \l__notestobib_refsection_sep_tl  ,
    sort-key-after       .tl_set:N    = \l__notestobib_sortkey_before_tl  ,
    sort-key-before      .tl_set:N    = \l__notestobib_sortkey_after_tl   ,
    sort-key-mixed       .tl_set:N    = \l__notestobib_sortkey_mixed_tl   ,
    use-sort-key         .bool_set:N  = \l__notestobib_write_sortkey_bool
  }
\keys_set:nn { notes2bib }
  {
    cite-function        = \cite              ,
    file-name            = notes2bib-\jobname ,
    keyword-entry        = note               ,
    note-field           = note               ,
    note-name            = Note               ,
    presort-after        = mn                 ,
    presort-before       = ml                 ,
    presort-mixed        = mm                 ,
    record-type          = misc               ,
    refsection-name      = Refsection         ,
    refsection-separator = -                  ,
    sort-key-after       = zzz                ,
    sort-key-before      = aaa                ,
    use-sort-key         = true
}
\AtBeginDocument
  {
    \@ifpackageloaded { biblatex }
      {
        \@ifpackagelater { biblatex } { 2011/01/08 }
          {
            \keys_set:nn { notes2bib } { record-type = bibnote }
            \DeclareBibliographyDriver { bibnote }
              {
                \usebibmacro { begentry }
                \printfield  { note }
                \setunit { \bibpagerefpunct }
                \newblock
                \usebibmacro { pageref }
                \usebibmacro { finentry }
              }
          }
          { }
      }
      { }
    \keys_define:nn { notes2bib }
      {
        cite-function     .code:n      =
          { \cs_set_eq:NN \__notestobib_cite:w #1 }                                 ,
        file-name .code:n =
          { \msg_info:nnn { notes2bib } { preamble-only } { file-name } } ,
        convert-endnotes / false .code:n =
          { \__notestobib_from_bibnote:n { endnote } }                              ,
        convert-endnotes / true .code:n  =
          { \__notestobib_to_bibnote:n { endnote } }                                ,
        convert-footnotes / false .code:n =
          { \__notestobib_from_bibnote:n { footnote } }                             ,
        convert-footnotes / true .code:n =
          { \__notestobib_to_bibnote:n { footnote } }
      }
  }
\msg_new:nnn { notes2bib } { preamble-only }
  { The~option~'#1'~can~only~be~used~in~the~preamble. }
\cs_new:Npn \__notestobib_insert_refsection: { }
\AtBeginDocument
  {
    \@ifpackageloaded { biblatex }
      {
        \cs_set:Npn \__notestobib_insert_refsection:
          {
            \int_compare:nNnT { \value { refsection } } > { 0 }
              {
                \tl_use:N \l__notestobib_refsection_name_tl
                \arabic { refsection }
                \tl_use:N \l__notestobib_refsection_sep_tl
            }
          }
      }
      { }
  }
\keys_define:nn { notes2bib }
  {
    cite        .code:n =
      {
        \use:x
          { \keys_set:nn { notes2bib } { cite-function = \exp_not:c {#1} } }
      } ,
    debug       .code:n = { }                                 ,
    endnotes    .meta:n = { convert-footnotes = #1 }          ,
    etex        .code:n = { }                                 ,
    field       .meta:n = { note-field        = #1 }          ,
    footnotes   .meta:n = { convert-footnotes = #1 }          ,
    head        .meta:n = { placement         = before }      ,
    keyhead     .meta:n = { sort-key-before   = #1 }          ,
    keytail     .meta:n = { sort-key-after    = #1 }          ,
    keynone     .meta:n = { sort-key-mixed    = #1 }          ,
    keyword     .meta:n = { keyword-entry     = #1 }          ,
    log         .meta:n = { }                                 ,
    name        .meta:n = { note-name         = #1 }          ,
    prefix      .meta:n = { file-name         = #1 \jobname } ,
    presorthead .meta:n = { presort-before    = #1 }          ,
    presorttail .meta:n = { presort-after     = #1 }          ,
    presortnone .meta:n = { presort-mixed     = #1 }          ,
    record      .meta:n = { record-type       = #1 }          ,
    sort        .choice:                                      ,
    sort / head .meta:n = { placement         = before }      ,
    sort / none .meta:n = { placement         = after }       ,
    sort / tail .meta:n = { placement         = mixed }       ,
    tail        .meta:n = { placement         = after }       ,
    writekey    .meta:n = { use-sort-key      = #1 }
  }
\cs_new:Npn \__notestobib_note_name:
  {
    \__notestobib_insert_refsection:
    \tl_use:N \l__notestobib_note_name_tl
    \int_compare:nNnT \g__notestobib_previous_notes_int > 9
      { \int_compare:nNnT \g__notestobib_note_int < { 10 } { 0 } }
    \int_to_arabic:n { \g__notestobib_note_int }
  }
\cs_new_eq:NN \__notestobib_filesw: \tex_iftrue:D
\cs_new_protected:Npn \__notestobib_mark_note:n #1 { }
\cs_generate_variant:Nn \__notestobib_mark_note:n { x }
\cs_new_protected:Npn \__notestobib_mark_note_after:n #1
  {
    \int_gincr:N \g__notestobib_total_notes_int
    \clist_gput_right:Nx \g__notestobib_after_clist {#1}
    \__notestobib_mark_note_after_aux:n {#1}
  }
\cs_new_protected:Npn \__notestobib_mark_note_after_aux:n #1 { }
\cs_new_protected:Npn \__notestobib_mark_note_before:n #1
  {
    \int_gincr:N \g__notestobib_total_notes_int
    \clist_gput_right:Nx \g__notestobib_before_clist {#1}
    \__notestobib_cite:w {#1}
  }
\cs_new_protected:Npn \__notestobib_mark_note_mixed:n #1
  {
    \int_gincr:N \g__notestobib_total_notes_int
    \__notestobib_cite:w {#1}
  }
\cs_new:Npn \__notestobib_write_field:nn #1#2
  {
    \c_space_tl \c_space_tl #1 \c_space_tl = \c_space_tl {#2} ,
    \iow_newline:
  }
\cs_generate_variant:Nn \__notestobib_write_field:nn { V }
\cs_new_protected:Npn \notestobib_write_note:nn
  {
    \if@filesw
      \exp_after:wN \__notestobib_write_note:nn
    \else:
      \exp_after:wN \use_none:nn
    \fi:
  }
\cs_generate_variant:Nn \notestobib_write_note:nn { x }
\cs_new_protected:Npn \__notestobib_write_note:nn #1#2
  {
    \tl_gput_right:Nx \g__notestobib_notes_tl
      {
        @ \l__notestobib_record_type_tl
          {
            #1 , \iow_newline:
            \__notestobib_write_field:Vn \l__notestobib_note_field_tl { \exp_not:n {#2} }
            \bool_if:NT \l__notestobib_write_sortkey_bool
              {
                \__notestobib_write_field:Vn \l__notestobib_sortkey_field_tl
                  { \l__notestobib_sortkey_tl #1 }
              }
            \__notestobib_write_field:nn { keywords } { \l__notestobib_keyword_tl }
            \__notestobib_write_field:nn { presort } { \l__notestobib_presort_tl }
          }
        \iow_newline:
        \iow_newline:
      }
  }

\cs_new_protected:Npn \__notestobib_record_notes:
  {
    \if@filesw
      \exp_after:wN \__notestobib_flush_notes_aux:
    \fi
  }
\cs_new_protected:Npn \__notestobib_flush_notes_aux:
  {
    \clist_if_empty:NF \g__notestobib_before_clist
      {
        \iow_now:Nx \@auxout
          { \NotesBeforeCitations { \exp_not:V \g__notestobib_before_clist } }
        \clist_gput_right:NV \g__notestobib_all_before_clist \g__notestobib_before_clist
        \clist_gclear:N \g__notestobib_before_clist
      }
    \clist_if_empty:NF \g__notestobib_after_clist
      {
        \iow_now:Nx \@auxout
          { \NotesAfterCitations { \exp_not:V \g__notestobib_after_clist } }
        \exp_args:NV \nocite \g__notestobib_after_clist
        \clist_gput_right:NV \g__notestobib_all_after_clist \g__notestobib_after_clist
        \clist_gclear:N \g__notestobib_after_clist
      }
  }
\cs_new_protected:Npn \__notestobib_to_bibnote:n #1
  {
    \cs_set_eq:cN {#1}        \bibnote
    \cs_set_eq:cN { #1 mark } \bibnotemark
    \cs_set_eq:cN { #1 text } \bibnotetext
  }
\cs_new_protected:Npn \__notestobib_from_bibnote:n #1
  {
    \cs_set_eq:cc {#1}        { __notestobib_ #1 :w }
    \cs_set_eq:cc { #1 mark } { __notestobib_ #1 mark:w }
    \cs_set_eq:cc { #1 text } { __notestobib_ #1 text:w }
  }
\AtBeginDocument
  {
    \cs_new_eq:NN \__notestobib_endnote:w     \endnote
    \cs_new_eq:NN \__notestobib_endnotemark:w \endnotemark
    \cs_new_eq:NN \__notestobib_endnotetext:w \endnotetext
    \cs_new_eq:NN \__notestobib_footnote:w     \footnote
    \cs_new_eq:NN \__notestobib_footnotemark:w \footnotemark
    \cs_new_eq:NN \__notestobib_footnotetext:w \footnotetext
  }
\AtBeginDocument
  {
    \@ifpackageloaded { biblatex }
      {
        \cs_new_protected:Npn \__notestobib_print_notes:
          {
            \cs_set:Npx \__notestobib_create_print_notes:
              {
                \printbibliography
                  [ keyword = \exp_not:V \l__notestobib_keyword_tl ]
              }
              \__notestobib_create_print_notes:
          }
      }
      {
        \cs_new_protected:Npn \__notestobib_print_notes:
          { \exp_args:NV \__notestobib_bibliography:n \g__notestobib_filename_tl }
      }
  }
\cs_new_protected:Npn \__notestobib_create_print_notes: { }
\cs_new_protected:Npn \__notestobib_attach_bibliography:
  {
    \@ifpackageloaded { biblatex }
      {
        \@ifpackagelater { biblatex } { 2011/01/08 }
          {
            \@ifpackagelater { biblatex } { 2011/02/12 }
              { \exp_args:No \addglobalbib { \g__notestobib_filename_tl .bib } }
              { \exp_args:NNV \bibliography * \g__notestobib_filename_tl }
          }
          { \exp_args:NV \bibliography \g__notestobib_filename_tl }
      }
      {
        \cs_new_eq:NN \__notestobib_bibliography:n \bibliography
        \RenewDocumentCommand \bibliography { m }
          {
            \int_compare:nNnTF \g__notestobib_total_notes_int = 0
              { \__notestobib_bibliography:n {##1} }
              {
                \cs_set:Npx \__notestobib_attach_bibliography:
                  {
                    \exp_not:N \__notestobib_bibliography:n
                      { \exp_not:n {##1} , \exp_not:V \g__notestobib_filename_tl }
                  }
                \__notestobib_attach_bibliography:
              }
          }
      }
  }
\@ifpackageloaded { biblatex }
  {
    \@ifpackagelater { biblatex } { 2011/01/08 }
      {
        \@ifpackagelater { biblatex } { 2011/02/12 }
          { \exp_args:No \addglobalbib { \g__notestobib_filename_tl .bib } }
          { \exp_args:NNV \bibliography * \g__notestobib_filename_tl }
      }
      { \exp_args:NV \bibliography \g__notestobib_filename_tl }
  }
  { \AtBeginDocument { \__notestobib_attach_bibliography: } }
\AtBeginDocument
  {
    \@ifpackageloaded { biblatex }
      { \tl_set:Nn \l__notestobib_sortkey_field_tl { sortkey } }
      { \tl_set:Nn \l__notestobib_sortkey_field_tl { key } }
  }
\AtBeginDocument
  {
    \@ifpackageloaded { biblatex }
      {
        \cs_set_protected:Npn \__notestobib_mark_note_after_aux:n #1
          {
            \AtNextCite { \@fileswfalse }
            \__notestobib_cite:w {#1}
          }
      }
      {
        \cs_set_protected:Npn \__notestobib_mark_note_after_aux:n #1
          {
            \cs_set_eq:NN \__notestobib_filesw: \if@filesw
            \@fileswfalse
            \__notestobib_cite:w {#1}
            \cs_set_eq:NN \if@filesw \__notestobib_filesw:
          }
      }
  }
\AtBeginDocument
  {
    \@ifpackageloaded { cite }
      {
        \cs_set_protected:Npn \__notestobib_mark_note_after_aux:n #1
          {
            \cs_set_eq:NN \__notestobib_filesw: \if@filesw
            \@fileswfalse
            \cs_set:Npn \__notestobib_aux_hook:
              {
                \cs_set_eq:NN \if@filesw \__notestobib_filesw:
                \cs_set:Npn \__notestobib_aux_hook: { }
              }
            \__notestobib_cite:w {#1}
          }
        \cs_new:Npn \__notestobib_aux_hook: { }
        \tl_gput_right:Nn \g__notestobib_document_hook_tl
          {
            \cs_if_exist:NF \@restore@auxhandle
              { \tl_new:N \@restore@auxhandle }
            \tl_put_right:Nn \@restore@auxhandle { \__notestobib_aux_hook: }
          }
      }
      { }
  }
\NewDocumentCommand \bibnote { o +m }
  {
    \IfNoValueTF {#1}
      {
        \int_gincr:N \g__notestobib_note_int
        \__notestobib_bibnote:xn { \__notestobib_note_name: } {#2}
      }
      { \__notestobib_bibnote:xn { \__notestobib_insert_refsection: #1 } {#2} }
  }
\cs_new_protected:Npn \__notestobib_bibnote:nn #1#2
  {
    \notestobib_write_note:nn {#1} {#2}
    \__notestobib_mark_note:n {#1}
  }
\cs_generate_variant:Nn \__notestobib_bibnote:nn { x }
\NewDocumentCommand \bibnotemark { o }
  {
    \IfNoValueTF {#1}
      {
        \int_gincr:N \g__notestobib_note_int
        \__notestobib_mark_note:x { \__notestobib_note_name: }
      }
      { \__notestobib_mark_note:x { \__notestobib_insert_refsection: #1 } }
  }
\NewDocumentCommand \bibnotetext { o +m }
  {
    \IfNoValueTF {#1}
      { \notestobib_write_note:xn { \__notestobib_note_name: } {#2} }
      { \notestobib_write_note:xn { \__notestobib_insert_refsection: #1 } {#2} }
  }
\NewDocumentCommand \recordnotes { }
  { \__notestobib_record_notes: }
\NewDocumentCommand \bibnotesetup { m }
  { \keys_set:nn { notes2bib } {#1} }
\NewDocumentCommand \printbibnotes { }
  { \__notestobib_print_notes: }
\NewDocumentCommand \citenote { m }
  { \__notestobib_mark_note:n {#1} }
\cs_new_eq:NN \flushnotestack \recordnotes
\cs_new_eq:NN \niibsetup      \bibnotesetup
\cs_new_protected:Npn \NotesAfterCitations #1
  { \clist_gput_right:Nn \g__notestobib_previous_after_clist {#1} }
\cs_new_protected:Npn \NotesBeforeCitations #1
  {
    \clist_gput_right:Nn \g__notestobib_previous_after_clist {#1}
    \tl_gput_right:Nn \g__notestobib_document_hook_tl { \nocite {#1} }
  }
\cs_new_protected:Npn \TotalNotes #1
  { \int_gset:Nn \g__notestobib_previous_notes_int {#1} }
\tl_gput_right:Nn \document { \g__notestobib_document_hook_tl }
\tl_new:N \g__notestobib_document_hook_tl
\AtEndDocument { \__notestobib_record_notes: }
\AtEndDocument
  {
    \tl_if_eq:NNTF \g__notestobib_all_before_clist \g__notestobib_previous_before_clist
      {
        \tl_if_eq:NNF \g__notestobib_all_after_clist \g__notestobib_previous_after_clist
          { \msg_info:nn { notes2bib } { rerun } }
      }
      { \msg_info:nn { notes2bib } { rerun } }
  }
\msg_new:nnn { notes2bib } { rerun }
  {
    To~get~notes~in~the~correct~order,~please~run: \\%
    \c_space_tl 1)~LaTeX  \\
    \c_space_tl 2)~BibTeX \\
    \c_space_tl 3)~LaTeX
  }
\AtEndDocument
  {
    \if@filesw
      \exp_after:wN \__notestobib_write_note_file:
    \fi:
  }
\cs_new_protected:Npn \__notestobib_write_note_file:
  {
    \tl_if_empty:NF \g__notestobib_notes_tl
      {
        \iow_open:Nn \g__notestobib_file_iow { \g__notestobib_filename_tl .bib }
        \iow_now:Nx \g__notestobib_file_iow { \c__notestobib_file_message_tl }
        \iow_now:Nx \g__notestobib_file_iow { \exp_not:V \g__notestobib_notes_tl }
        \iow_close:N \g__notestobib_file_iow
      }
  }
\iow_new:N \g__notestobib_file_iow
\AtEndDocument
  {
    \int_compare:nNnT \g__notestobib_note_int > 0
      {
        \iow_now:Nx \@auxout
          { \TotalNotes { \int_to_arabic:n { \g__notestobib_note_int } } }
      }
  }
\cs_set:Npn \thanks #1
  {
    \__notestobib_footnotemark:w
    \protected@xdef \@thanks
      {
        \@thanks
        \protect \__notestobib_footnotetext:w [ \the \c@footnote ] {#1}
      }
  }
\keys_set:nn { notes2bib } { placement = mixed }
\ProcessKeysOptions { notes2bib }
%% 
%% Copyright (C) 2007-2013,2016,2019 by
%%   Joseph Wright <joseph.wright@morningstar2.co.uk>
%% 
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version.  The latest
%% version of this license is in the file:
%% 
%%    http://www.latex-project.org/lppl.txt
%% 
%% This work is "maintained" (as per LPPL maintenance status) by
%%   Joseph Wright.
%% 
%% This work consists of the file  notes2bib.dtx
%%           and the derived files notes2bib.ins,
%%                                 notes2bib.pdf and
%%                                 notes2bib.sty.
%% 
%%
%% End of file `notes2bib.sty'.
