diff options
author | Karl Berry <karl@freefriends.org> | 2013-03-18 22:34:58 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-03-18 22:34:58 +0000 |
commit | b69db11a2c4cf8cfa09e22acfda740d4f68b2e73 (patch) | |
tree | d5539f53b3640a9f6df5166aeea31b0db317cff3 /Master/texmf-dist/tex/latex/enotez | |
parent | 4d143d0c210aafd1947183a5829e6256adc77cee (diff) |
enotez (18mar13)
git-svn-id: svn://tug.org/texlive/trunk@29422 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/enotez')
-rw-r--r-- | Master/texmf-dist/tex/latex/enotez/enotez.sty | 651 |
1 files changed, 420 insertions, 231 deletions
diff --git a/Master/texmf-dist/tex/latex/enotez/enotez.sty b/Master/texmf-dist/tex/latex/enotez/enotez.sty index 10ea9a1bc5b..18430f8f35b 100644 --- a/Master/texmf-dist/tex/latex/enotez/enotez.sty +++ b/Master/texmf-dist/tex/latex/enotez/enotez.sty @@ -8,7 +8,7 @@ % Web: https://bitbucket.org/cgnieder/enotez/ % E-Mail: contact@mychemistry.eu % -------------------------------------------------------------------------- -% Copyright 2011-2012 Clemens Niederberger +% Copyright 2011-2013 Clemens Niederberger % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 @@ -28,51 +28,79 @@ % If you have any ideas, questions, suggestions or bugs to report, please % feel free to contact me. % -------------------------------------------------------------------------- -\RequirePackage{ expl3 , xparse , l3keys2e , xtemplate } +\RequirePackage{ expl3 , xparse , l3keys2e , xtemplate , etoolbox , xpatch , scrlfile } \ProvidesExplPackage {enotez} - {2012/12/30} - {0.4} + {2013/03/18} + {0.5a} {Endnotes for LaTeX2e} % -------------------------------------------------------------------------- +% messages +\msg_new:nnnn { enotez } { captions } + { Endnotes~might~not~work~in~captions. } + { + Endnotes~might~not~work~inside~captions.~You~might~try~to~use~the~caption~ + package~if~you~encounter~problems~but~that's~not~a~promise~that~things~ + will~work~then. + } + +% -------------------------------------------------------------------------- % variables: -\bool_new:N \l_enotez_print_note_bool -\bool_new:N \l_enotez_reset_bool -\bool_new:N \l_enotez_totoc_bool -\bool_new:N \l_enotez_hyperref_bool -\bool_new:N \l_enotez_hyperfootnotes_bool -\bool_new:N \l_enotez_split_bool - -\tl_new:N \l_enotez_tmpa_tl -\tl_new:N \l_enotez_tmpb_tl -\tl_new:N \l_enotez_tmpc_tl -\tl_new:N \l_enotez_totoc_tl -\tl_new:N \l_enotez_list_name_tl -\tl_set:Nn \l_enotez_list_name_tl { Notes } -\tl_new:N \l_enotez_endnote_text_tl -\tl_new:N \l_enotez_endnote_mark_tl -\tl_new:N \l_enotez_list_instance_tl -\tl_set:Nn \l_enotez_list_instance_tl { plain } -\tl_new:N \l_enotez_split_tl -\tl_new:N \l_enotez_splitted_list_sectioning_tl -\tl_new:N \l_enotez_splitted_title_tl -\tl_set:Nn \l_enotez_splitted_title_tl { Notes~from~<name>~<ref> } -\tl_new:N \l_enotez_list_splitted_title_tl - -\int_new:N \g_enotez_endnote_id_int -\int_zero:N \g_enotez_endnote_id_int -\int_new:N \g_enotez_endnote_mark_int -\int_zero:N \g_enotez_endnote_mark_int -\int_new:N \g_enotez_list_printed_int -\int_zero:N \g_enotez_list_printed_int -\int_new:N \l_enotez_tmpa_int - -\prop_new:N \g_enotez_endnote_text_prop -\prop_new:N \g_enotez_endnote_mark_prop -\prop_new:N \g_enotez_endnote_split_prop -\prop_new:N \g_enotez_endnote_sect_prop -\prop_new:N \g_enotez_endnote_man_prop +\bool_new:N \l__enotez_print_note_bool +\bool_new:N \l__enotez_reset_bool +\bool_new:N \l__enotez_totoc_bool +\bool_new:N \l__enotez_hyperref_bool +\bool_new:N \l__enotez_hyperfootnotes_bool +\bool_new:N \l__enotez_split_bool +\bool_new:N \l__enotez_caption_patched_bool +\bool_new:N \l__enotez_koma_patched_bool +\bool_new:N \l__enotez_memoir_patched_bool + +\tl_new:N \l__enotez_tmpa_tl +\tl_new:N \l__enotez_tmpb_tl +\tl_new:N \l__enotez_tmpc_tl +\tl_new:N \l__enotez_totoc_tl +\tl_new:N \l__enotez_list_name_tl +\tl_set:Nn \l__enotez_list_name_tl { Notes } +\tl_new:N \l__enotez_endnote_text_tl +\tl_new:N \l__enotez_endnote_mark_tl +\tl_new:N \l__enotez_list_instance_tl +\tl_set:Nn \l__enotez_list_instance_tl { plain } +\tl_new:N \l__enotez_split_tl +\tl_new:N \l__enotez_splitted_list_sectioning_tl +\tl_new:N \l__enotez_splitted_title_tl +\tl_set:Nn \l__enotez_splitted_title_tl { Notes~for~<name>~<ref> } +\tl_new:N \l__enotez_section_tl +\tl_set:Nn \l__enotez_section_tl { Section } +\tl_new:N \l__enotez_chapter_tl +\tl_set:Nn \l__enotez_chapter_tl { Chapter } +\tl_new:N \l__enotez_actual_sectioning_tl +\tl_new:N \l__enotez_list_splitted_title_tl +\tl_new:N \g__enotez_list_next_preamble_tl +\tl_new:N \g__enotez_list_every_preamble_tl +\tl_new:N \g__enotez_list_next_postamble_tl +\tl_new:N \g__enotez_list_every_postamble_tl +\tl_new:N \l__enotez_footnotes_tl + +\skip_new:N \l__enotez_list_preamble_skip +\skip_new:N \l__enotez_list_postamble_skip +\skip_set_eq:NN \l__enotez_list_preamble_skip \medskipamount +\skip_set_eq:NN \l__enotez_list_postamble_skip \medskipamount + +\int_new:N \g__enotez_endnote_id_int +\int_zero:N \g__enotez_endnote_id_int +\int_new:N \g__enotez_endnote_mark_int +\int_zero:N \g__enotez_endnote_mark_int +\int_new:N \g__enotez_list_printed_int +\int_zero:N \g__enotez_list_printed_int +\int_new:N \l__enotez_tmpa_int + +\prop_new:N \g__enotez_endnote_text_prop +\prop_new:N \g__enotez_endnote_mark_prop +\prop_new:N \g__enotez_endnote_split_prop +\prop_new:N \g__enotez_endnote_sect_prop +\prop_new:N \g__enotez_endnote_man_prop % -------------------------------------------------------------------------- % options: @@ -81,35 +109,39 @@ \keys_define:nn { enotez } { - list-name .tl_set:N = \l_enotez_list_name_tl , - reset .bool_set:N = \l_enotez_reset_bool , + footnotes .bool_set:N = \l__enotez_footnotes_tl , + list-name .tl_set:N = \l__enotez_list_name_tl , + reset .bool_set:N = \l__enotez_reset_bool , + % TODO: add symbols and other possible formats, use cntformats? counter-format .choice_code:n = - \cs_set_eq:Nc \enotez_counter_format:n { int_to_ \l_keys_choice_tl :n } , + \cs_set_eq:Nc \enotez_counter_format:n { int_to_ \l_keys_choice_tl :n } , counter-format .generate_choices:n = - { arabic , alph , Alph , roman , Roman } , + { arabic , alph , Alph , roman , Roman } , mark-format .code:n = - \cs_set:Npn \enmarkstyle { #1 } , + \cs_set:Npn \enmarkstyle { #1 } , mark-cs .code:n = - \cs_set:Npn \enotezwritemark { #1 } , + \cs_set:Npn \enotezwritemark { #1 } , totoc .choice_code:n = \tl_if_eq:VnTF \l_keys_choice_tl { false } - { \bool_set_false:N \l_enotez_totoc_bool } + { \bool_set_false:N \l__enotez_totoc_bool } { - \bool_set_true:N \l_enotez_totoc_bool - \tl_set_eq:NN \l_enotez_totoc_tl \l_keys_choice_tl - } , + \bool_set_true:N \l__enotez_totoc_bool + \tl_set_eq:NN \l__enotez_totoc_tl \l_keys_choice_tl + } , totoc .generate_choices:n = - { section , chapter , false } , + { section , chapter , false } , split .choice_code:n = \tl_if_eq:VnTF \l_keys_choice_tl { false } - { \bool_set_false:N \l_enotez_split_bool } - { \bool_set_true:N \l_enotez_split_bool } - \tl_set_eq:NN \l_enotez_split_tl \l_keys_choice_tl , + { \bool_set_false:N \l__enotez_split_bool } + { \bool_set_true:N \l__enotez_split_bool } + \tl_set_eq:NN \l__enotez_split_tl \l_keys_choice_tl , split .generate_choices:n = - { section , chapter , false } , - split-sectioning .tl_set:N = \l_enotez_splitted_list_sectioning_tl , - split-title .tl_set:N = \l_enotez_splitted_title_tl , - list-style .tl_set:N = \l_enotez_list_instance_tl , + { section , chapter , false } , + split-sectioning .tl_set:N = \l__enotez_splitted_list_sectioning_tl , + split-title .tl_set:N = \l__enotez_splitted_title_tl , + list-style .tl_set:N = \l__enotez_list_instance_tl , + list-preamble-skip .skip_set:N = \l__enotez_list_preamble_skip , + list-postamble-skip .skip_set:N = \l__enotez_list_postamble_skip } \cs_generate_variant:Nn \tl_if_eq:nnTF { Vn , nx } \cs_generate_variant:Nn \tl_if_eq:nnT { xx } @@ -120,7 +152,7 @@ % #2: mark \cs_new:Npn \enotez_write_mark:nn #1#2 { - \bool_if:NTF \l_enotez_hyperfootnotes_bool + \bool_if:NTF \l__enotez_hyperfootnotes_bool { \enotezwritemark { \hyperlink { enz.#1 } { \enmarkstyle #2 } } } { \enotezwritemark { \enmarkstyle #2 } } } @@ -128,54 +160,54 @@ % the internal endnote: \cs_new:Npn \enotez_endnote:nn #1#2 { - \int_gincr:N \g_enotez_endnote_id_int + \int_gincr:N \g__enotez_endnote_id_int \quark_if_no_value:nTF { #1 } { - \int_gincr:N \g_enotez_endnote_mark_int + \int_gincr:N \g__enotez_endnote_mark_int \enotez_write_mark:nn - { \int_use:N \g_enotez_endnote_id_int } - { \enotez_counter_format:V \g_enotez_endnote_mark_int } - \tl_set:Nn \l_tmpa_tl { chapter } + { \int_use:N \g__enotez_endnote_id_int } + { \enotez_counter_format:V \g__enotez_endnote_mark_int } + \tl_set:Nn \l__enotez_tmpa_tl { chapter } \bool_if:nTF - { \l_enotez_split_bool && \tl_if_eq_p:NN \l_enotez_split_tl \l_tmpa_tl } + { \l__enotez_split_bool && \tl_if_eq_p:NN \l__enotez_split_tl \l__enotez_tmpa_tl } { \enotez_save_note:xxxxnn - { \int_use:N \g_enotez_endnote_id_int } - { \int_use:N \g_enotez_endnote_mark_int } - { \int_use:N \g_enotez_list_printed_int } + { \int_use:N \g__enotez_endnote_id_int } + { \int_use:N \g__enotez_endnote_mark_int } + { \int_use:N \g__enotez_list_printed_int } { \thechapter } { a } { #2 } } { \enotez_save_note:xxxxnn - { \int_use:N \g_enotez_endnote_id_int } - { \int_use:N \g_enotez_endnote_mark_int } - { \int_use:N \g_enotez_list_printed_int } + { \int_use:N \g__enotez_endnote_id_int } + { \int_use:N \g__enotez_endnote_mark_int } + { \int_use:N \g__enotez_list_printed_int } { \thesection } { a } { #2 } } } { - \enotez_write_mark:nn { \int_use:N \g_enotez_endnote_id_int } { #1 } - \tl_set:Nn \l_tmpa_tl { chapter } + \enotez_write_mark:nn { \int_use:N \g__enotez_endnote_id_int } { #1 } + \tl_set:Nn \l__enotez_tmpa_tl { chapter } \bool_if:nTF - { \l_enotez_split_bool && \tl_if_eq_p:NN \l_enotez_split_tl \l_tmpa_tl } + { \l__enotez_split_bool && \tl_if_eq_p:NN \l__enotez_split_tl \l__enotez_tmpa_tl } { \enotez_save_note:xnxxnn - { \int_use:N \g_enotez_endnote_id_int } + { \int_use:N \g__enotez_endnote_id_int } { #1 } - { \int_use:N \g_enotez_list_printed_int } + { \int_use:N \g__enotez_list_printed_int } { \thechapter } { m } { #2 } } { \enotez_save_note:xnxxnn - { \int_use:N \g_enotez_endnote_id_int } + { \int_use:N \g__enotez_endnote_id_int } { #1 } - { \int_use:N \g_enotez_list_printed_int } + { \int_use:N \g__enotez_list_printed_int } { \thesection } { m } { #2 } @@ -185,72 +217,92 @@ % -------------------------------------------------------------------------- % in some cases caption making commands need to be patched. preparations: -\cs_new:Npn \enotez_tmp_endnote:nn {} +\cs_new:Npn \__enotez_tmp_endnote:nn {} -\cs_new:Npn \enotez_caption_endnote:nn #1#2 +\cs_new_protected:Npn \enotez_caption_endnote:nn #1#2 { \quark_if_no_value:nTF { #1 } { \enotez_write_mark:nn - { \int_use:N \g_enotez_endnote_id_int } - { \enotez_counter_format:V \g_enotez_endnote_mark_int } + { \int_use:N \g__enotez_endnote_id_int } + { \enotez_counter_format:V \g__enotez_endnote_mark_int } } - { \enotez_write_mark:nn { \int_use:N \g_enotez_endnote_id_int } { #1 } } + { \enotez_write_mark:nn { \int_use:N \g__enotez_endnote_id_int } { #1 } } } -\cs_new:Npn \enotez@koma@disable +\cs_new_protected:Npn \enotez@koma@disable { \cs_set_eq:NN \enotez_endnote:nn \enotez_caption_endnote:nn } -\cs_new:Npn \enotez@memoir@disable +\cs_new_protected:Npn \enotez@memoir@disable { - \cs_set_eq:NN \enotez_tmp_endnote:nn \enotez_endnote:nn + \cs_set_eq:NN \__enotez_tmp_endnote:nn \enotez_endnote:nn \cs_set_eq:NN \enotez_endnote:nn \enotez_caption_endnote:nn } -\cs_new:Npn \enotez@memoir@enable - { \cs_set_eq:NN \enotez_endnote:nn \enotez_tmp_endnote:nn } +\cs_new_protected:Npn \enotez@memoir@enable + { \cs_set_eq:NN \enotez_endnote:nn \__enotez_tmp_endnote:nn } -\cs_new:Npn \enotez@caption@disable +\cs_new_protected:Npn \enotez@caption@disable { - \patchcmd \caption@@make + \xpatchcmd \caption@@make { \caption@@@make } { \enotez@koma@disable\caption@@@make } - {}{} + { \bool_set_true:N \l__enotez_caption_patched_bool } + { \bool_set_false:N \l__enotez_caption_patched_bool } } % if we're in a KOMA class, \@@makecaption needs to be patched: -\AtBeginDocument +\cs_if_free:NF \KOMAClassName { - \@ifpackageloaded { caption } - { \RequirePackage { etoolbox } \enotez@caption@disable } - { - \cs_if_free:NF \KOMAClassName - { - \RequirePackage { etoolbox } - \patchcmd \@@makecaption - { \setlength{\@tempdima}{\cap@width} } - { \enotez@koma@disable\setlength{\@tempdima}{\cap@width} }{}{} - } - } + \xpatchcmd \@@makecaption + { \setlength{\@tempdima}{\cap@width} } + { \enotez@koma@disable\setlength{\@tempdima}{\cap@width} } + { \bool_set_true:N \l__enotez_koma_patched_bool } + { \bool_set_false:N \l__enotez_koma_patched_bool } + \AfterPackage+ { caption } { \enotez@caption@disable } } % if we're in memoir, \@makecaption needs to be patched: -\@ifclassloaded { memoir } +% TODO: fails when caption has been loaded, needs to be reworked +\AfterClass+ { memoir } { - \AtBeginDocument + \AtEndPreamble { - \@ifpackageloaded { caption } { } + \cs_if_exist:cF { ver@caption.sty } { - \RequirePackage { etoolbox } - \patchcmd \@makecaption + \xpatchcmd \@makecaption { \let\@contfnote\footnote } - { \enotez@memoir@disable\let\@contfnote\footnote }{}{} - \patchcmd \@makecaption + { \enotez@memoir@disable\let\@contfnote\footnote } + { \bool_set_true:N \l__enotez_memoir_patched_bool } + { \bool_set_false:N \l__enotez_memoir_patched_bool } + \xpatchcmd \@makecaption { \let\footnote\@contfnote } - { \enotez@memoir@enable\let\footnote\@contfnote }{}{} + { \enotez@memoir@enable\let\footnote\@contfnote } + { \bool_set_true:N \l__enotez_memoir_patched_bool } + { \bool_set_false:N \l__enotez_memoir_patched_bool } } } - }{} + } + +\AtBeginDocument + { + \bool_if:nT + { \cs_if_exist_p:c { ver@caption.sty } && !\l__enotez_caption_patched_bool } + { \AfterPackage+ { caption } { \enotez@caption@disable } } + \bool_if:nT + { + ( \cs_if_exist_p:c { ver@memoir.cls } && !\l__enotez_memoir_patched_bool ) + || + ( + !\cs_if_exist_p:c { ver@memoir.cls } && + \cs_if_exist_p:c { ver@caption.sty } && + !\l__enotez_caption_patched_bool + ) + || + ( \cs_if_exist_p:N \KOMAClassName && !\l__enotez_koma_patched_bool ) + } + { \msg_warning:nn { enotez } { captions } } + } % -------------------------------------------------------------------------- % save the notes to the aux file: @@ -260,28 +312,33 @@ % #4 section/chapter % #5 a/m (automatic/manually) % #6 text -\cs_new:Npn \enotez_save_note:nnnnnn #1#2#3#4#5#6 +\cs_new_protected:Npn \enotez_save_note:nnnnnn #1#2#3#4#5#6 { \iow_now:Nn \@auxout { \enotez@note { #1 } { #2 } { #3 } { #4 } { #5 } { #6 } } } \cs_generate_variant:Nn \enotez_save_note:nnnnnn { xxxxnn , xnxxnn } -\cs_new:Npn \enotez@note #1#2#3#4#5#6 +\cs_new_protected:Npn \enotez@note #1#2#3#4#5#6 { \expandafter \xdef \csname enotez@#1@note \endcsname { #2 } - \prop_gput:Nnn \g_enotez_endnote_mark_prop { #1 } { #2 } - \prop_gput:Nnn \g_enotez_endnote_split_prop { #1 } { #3 } - \prop_gput:Nnn \g_enotez_endnote_sect_prop { #1 } { #4 } - \prop_gput:Nnn \g_enotez_endnote_man_prop { #1 } { #5 } - \prop_gput:Nnn \g_enotez_endnote_text_prop { #1 } { #6 } + \prop_gput:Nnn \g__enotez_endnote_mark_prop { #1 } { #2 } + \prop_gput:Nnn \g__enotez_endnote_split_prop { #1 } { #3 } + \prop_gput:Nnn \g__enotez_endnote_sect_prop { #1 } { #4 } + \prop_gput:Nnn \g__enotez_endnote_man_prop { #1 } { #5 } + \prop_gput:Nnn \g__enotez_endnote_text_prop { #1 } { #6 } } % a try to check if a rerun is necessary: +\tl_new:N \l__enotez_change_tl + \AtEndDocument { - \cs_set:Npn \enotez@note #1#2#3#4#5#6 + \cs_set_protected:Npn \enotez@note #1#2#3#4#5#6 { - \def\reserved@a{#2} - \expandafter\ifx\csname enotez@#1@note \endcsname\reserved@a\else - \@tempswatrue\fi + \tl_set:Nn \l__enotez_change_tl { #2 } + \tl_if_eq:cNF { enotez@#1@note } \l__enotez_change_tl + { + \@latex@warning@no@line + { Endnotes~may~have~changed.~Rerun~to~get~them~right. } + } } } @@ -314,62 +371,64 @@ \DeclareTemplateCode { enotez-list } { paragraph } { 1 } { heading = \enotez_list_heading:n , - format = \l_enotez_list_format_tl , + format = \l__enotez_list_format_tl , number = \enotez_list_number:n , - number-format = \l_enotez_list_number_format_tl , - notes-sep = \l_enotez_list_notes_sep_dim , + number-format = \l__enotez_list_number_format_tl , + notes-sep = \l__enotez_list_notes_sep_dim , } { \AssignTemplateKeys - \bool_if:NT \l_enotez_totoc_bool + \bool_if:NT \l__enotez_totoc_bool { - \bool_if:NT \l_enotez_hyperref_bool { \phantomsection } - \addcontentsline { toc } { \l_enotez_totoc_tl } { \l_enotez_list_name_tl } + \bool_if:NT \l__enotez_hyperref_bool { \phantomsection } + \addcontentsline { toc } { \l__enotez_totoc_tl } { \l__enotez_list_name_tl } } - \enotez_list_heading:n { \l_enotez_list_name_tl } - \group_begin: - \tl_use:N \l_enotez_list_format_tl - \int_zero:N \l_enotez_tmpa_int - \int_do_while:nn { \l_enotez_tmpa_int <= \g_enotez_list_printed_int } + \enotez_list_heading:n { \l__enotez_list_name_tl } + \enotez_list_preamble: + \group_begin: + \tl_use:N \l__enotez_list_format_tl + \int_zero:N \l__enotez_tmpa_int + \int_do_while:nn { \l__enotez_tmpa_int <= \g__enotez_list_printed_int } { - \prop_map_inline:Nn \g_enotez_endnote_mark_prop + \prop_map_inline:Nn \g__enotez_endnote_mark_prop { \tl_if_eq:xxT - { \int_use:N \l_enotez_tmpa_int } - { \prop_get:Nn \g_enotez_endnote_split_prop { ##1 } } + { \int_use:N \l__enotez_tmpa_int } + { \prop_get:Nn \g__enotez_endnote_split_prop { ##1 } } { \enotez_get_split_title:n { ##1 } \enotez_get_note:nn { #1 } { ##1 } - \bool_if:NT \l_enotez_print_note_bool + \bool_if:NT \l__enotez_print_note_bool { \par\noindent \llap { \enotez_list_number:n { - \bool_if:NT \l_enotez_hyperfootnotes_bool + \bool_if:NT \l__enotez_hyperfootnotes_bool { \box_move_up:nn { 1em } { \hbox:n { \hypertarget { enz.##1 } { } } } } - \tl_use:N \l_enotez_list_number_format_tl + \tl_use:N \l__enotez_list_number_format_tl \tl_if_eq:nxTF { a } - { \prop_get:Nn \g_enotez_endnote_man_prop { ##1 } } - { \enotez_counter_format:V \l_enotez_endnote_mark_tl } - { \tl_use:N \l_enotez_endnote_mark_tl } + { \prop_get:Nn \g__enotez_endnote_man_prop { ##1 } } + { \enotez_counter_format:V \l__enotez_endnote_mark_tl } + { \tl_use:N \l__enotez_endnote_mark_tl } } \tl_use:N \c_space_tl } - \tl_use:N \l_enotez_endnote_text_tl + \tl_use:N \l__enotez_endnote_text_tl } } \par - \dim_compare:nT { \l_enotez_list_notes_sep_dim != 0pt } - { \addvspace { \l_enotez_list_notes_sep_dim } } + \dim_compare:nT { \l__enotez_list_notes_sep_dim != 0pt } + { \addvspace { \l__enotez_list_notes_sep_dim } } } - \int_incr:N \l_enotez_tmpa_int + \int_incr:N \l__enotez_tmpa_int } \group_end: + \enotez_list_postamble: } \DeclareTemplateInterface { enotez-list } { list } { 1 } @@ -384,67 +443,69 @@ \DeclareTemplateCode { enotez-list } { list } { 1 } { heading = \enotez_list_heading:n , - format = \l_enotez_list_format_tl , + format = \l__enotez_list_format_tl , number = \enotez_list_number:n , - number-format = \l_enotez_list_number_format_tl , - list-type = \l_enotez_list_type_tl + number-format = \l__enotez_list_number_format_tl , + list-type = \l__enotez_list_type_tl } { \AssignTemplateKeys - \bool_if:NT \l_enotez_totoc_bool + \bool_if:NT \l__enotez_totoc_bool { - \bool_if:NT \l_enotez_hyperref_bool { \phantomsection } - \addcontentsline { toc } { \l_enotez_totoc_tl } { \l_enotez_list_name_tl } + \bool_if:NT \l__enotez_hyperref_bool { \phantomsection } + \addcontentsline { toc } { \l__enotez_totoc_tl } { \l__enotez_list_name_tl } } - \enotez_list_heading:n { \l_enotez_list_name_tl } + \enotez_list_heading:n { \l__enotez_list_name_tl } + \enotez_list_preamble: \group_begin: - \tl_use:N \l_enotez_list_format_tl - \int_zero:N \l_enotez_tmpa_int - \int_do_while:nn { \l_enotez_tmpa_int <= \g_enotez_list_printed_int } + \tl_use:N \l__enotez_list_format_tl + \int_zero:N \l__enotez_tmpa_int + \int_do_while:nn { \l__enotez_tmpa_int <= \g__enotez_list_printed_int } { - \prop_map_inline:Nn \g_enotez_endnote_mark_prop + \prop_map_inline:Nn \g__enotez_endnote_mark_prop { - \tl_clear:N \l_enotez_tmpc_tl + \tl_clear:N \l__enotez_tmpc_tl \tl_if_eq:xxT - { \int_use:N \l_enotez_tmpa_int } - { \prop_get:Nn \g_enotez_endnote_split_prop { ##1 } } - { \tl_put_right:Nn \l_enotez_tmpc_tl { ##1 } } - \tl_if_blank:VF \l_enotez_tmpc_tl + { \int_use:N \l__enotez_tmpa_int } + { \prop_get:Nn \g__enotez_endnote_split_prop { ##1 } } + { \tl_put_right:Nn \l__enotez_tmpc_tl { ##1 } } + \tl_if_blank:VF \l__enotez_tmpc_tl { \enotez_get_split_title:n { ##1 } - \begin{\l_enotez_list_type_tl} + \begin{\l__enotez_list_type_tl} } \tl_if_eq:xxT - { \int_use:N \l_enotez_tmpa_int } - { \prop_get:Nn \g_enotez_endnote_split_prop { ##1 } } + { \int_use:N \l__enotez_tmpa_int } + { \prop_get:Nn \g__enotez_endnote_split_prop { ##1 } } { \enotez_get_note:nn { #1 } { ##1 } - \bool_if:NT \l_enotez_print_note_bool + \bool_if:NT \l__enotez_print_note_bool { \item [ \enotez_list_number:n { - \bool_if:NT \l_enotez_hyperfootnotes_bool + \bool_if:NT \l__enotez_hyperfootnotes_bool { \box_move_up:nn { 1em } { \hbox:n { \hypertarget { enz.##1 } { } } } } - \tl_use:N \l_enotez_list_number_format_tl + \tl_use:N \l__enotez_list_number_format_tl \tl_if_eq:nxTF { a } - { \prop_get:Nn \g_enotez_endnote_man_prop { ##1 } } - { \enotez_counter_format:V \l_enotez_endnote_mark_tl } - { \tl_use:N \l_enotez_endnote_mark_tl } + { \prop_get:Nn \g__enotez_endnote_man_prop { ##1 } } + { \enotez_counter_format:V \l__enotez_endnote_mark_tl } + { \tl_use:N \l__enotez_endnote_mark_tl } } ] - \tl_use:N \l_enotez_endnote_text_tl + \tl_use:N \l__enotez_endnote_text_tl } } - \tl_if_blank:VF \l_enotez_tmpc_tl { \end{\l_enotez_list_type_tl} } + \tl_if_blank:VF \l__enotez_tmpc_tl { \end{\l__enotez_list_type_tl} } } - \int_incr:N \l_enotez_tmpa_int + \int_incr:N \l__enotez_tmpa_int } \group_end: + \enotez_list_postamble: } % some default styles: @@ -453,74 +514,78 @@ \DeclareInstance { enotez-list } { itemize } { list } { list-type = itemize } % the titles in between the splits: -\cs_new:Npn \enotez_read_splitted_title:nn #1#2 +\cs_new_protected:Npn \enotez_read_splitted_title:nn #1#2 { \group_begin: - \tl_set:Nn \l_tmpa_tl { #1 } - \tl_replace_all:Nnn \l_tmpa_tl { <name> } - { \enotez_first_upper:V \l_enotez_split_tl } - \tl_replace_all:Nnn \l_tmpa_tl { <ref> } - { \prop_get:Nn \g_enotez_endnote_sect_prop { #2 } } - \tl_use:N \l_tmpa_tl + \tl_set:Nn \l__enotez_tmpa_tl { #1 } + \tl_replace_all:Nnx \l__enotez_tmpa_tl { <name> } + { \l__enotez_actual_sectioning_tl } + \tl_replace_all:Nnx \l__enotez_tmpa_tl { <ref> } + { \prop_get:Nn \g__enotez_endnote_sect_prop { #2 } } + \tl_gset_eq:NN \l__enotez_tmpb_tl \l__enotez_tmpa_tl \group_end: } -\cs_generate_variant:Nn \enotez_read_splitted_title:nn { V } +\cs_generate_variant:Nn \enotez_read_splitted_title:nn { V , x } +\cs_generate_variant:Nn \tl_replace_all:Nnn { Nnx } -\cs_new:Npn \enotez_first_upper:n #1 +\cs_new_protected:Npn \enotez_first_upper:n #1 { \tl_to_uppercase:n { \tl_head:n { #1 } } \tl_tail:n { #1 } } \cs_generate_variant:Nn \enotez_first_upper:n { V } % determine which note's next: -\cs_new:Npn \enotez_get_note:nn #1#2 +\cs_new_protected:Npn \enotez_get_note:nn #1#2 { \IfBooleanTF { #1 } { - \prop_get:NnN \g_enotez_endnote_mark_prop { #2 } \l_enotez_endnote_mark_tl - \prop_get:NnN \g_enotez_endnote_text_prop { #2 } \l_enotez_endnote_text_tl - \bool_set_true:N \l_enotez_print_note_bool + \prop_get:NnN \g__enotez_endnote_mark_prop { #2 } \l__enotez_endnote_mark_tl + \prop_get:NnN \g__enotez_endnote_text_prop { #2 } \l__enotez_endnote_text_tl + \bool_set_true:N \l__enotez_print_note_bool } { - \prop_get:NnN \g_enotez_endnote_split_prop { #2 } \l_enotez_tmpa_tl - \bool_if:NTF \l_enotez_split_bool + \prop_get:NnN \g__enotez_endnote_split_prop { #2 } \l__enotez_tmpa_tl + \bool_if:NTF \l__enotez_split_bool { - \bool_set_true:N \l_enotez_print_note_bool - \prop_gpop:NnN \g_enotez_endnote_mark_prop { #2 } \l_enotez_endnote_mark_tl - \prop_gpop:NnN \g_enotez_endnote_text_prop { #2 } \l_enotez_endnote_text_tl + \bool_set_true:N \l__enotez_print_note_bool + \prop_gpop:NnN \g__enotez_endnote_mark_prop { #2 } \l__enotez_endnote_mark_tl + \prop_gpop:NnN \g__enotez_endnote_text_prop { #2 } \l__enotez_endnote_text_tl } { - \int_compare:nTF { \l_enotez_tmpa_tl = \g_enotez_list_printed_int } + \int_compare:nTF { \l__enotez_tmpa_tl = \g__enotez_list_printed_int } { - \bool_set_true:N \l_enotez_print_note_bool - \prop_gpop:NnN \g_enotez_endnote_mark_prop { #2 } \l_enotez_endnote_mark_tl - \prop_gpop:NnN \g_enotez_endnote_text_prop { #2 } \l_enotez_endnote_text_tl - \prop_gdel:Nn \g_enotez_endnote_split_prop { #2 } + \bool_set_true:N \l__enotez_print_note_bool + \prop_gpop:NnN \g__enotez_endnote_mark_prop { #2 } \l__enotez_endnote_mark_tl + \prop_gpop:NnN \g__enotez_endnote_text_prop { #2 } \l__enotez_endnote_text_tl + \prop_gremove:Nn \g__enotez_endnote_split_prop { #2 } } - { \bool_set_false:N \l_enotez_print_note_bool } + { \bool_set_false:N \l__enotez_print_note_bool } } } } -\cs_new:Npn \enotez_get_split_title:n #1 +\cs_new_protected:Npn \enotez_get_split_title:n #1 { - \prop_get:NnN \g_enotez_endnote_split_prop { #1 } \l_enotez_tmpa_tl - \bool_if:NT \l_enotez_split_bool + \prop_get:NnN \g__enotez_endnote_split_prop { #1 } \l__enotez_tmpa_tl + \bool_if:NT \l__enotez_split_bool { - \tl_if_eq:NNF \l_enotez_tmpa_tl \l_enotez_tmpb_tl + \tl_if_eq:NNF \l__enotez_tmpa_tl \l__enotez_tmpb_tl { - \tl_if_blank:VTF \l_enotez_splitted_list_sectioning_tl + \tl_if_eq:VnTF \l__enotez_split_tl { section } + { \tl_set_eq:NN \l__enotez_actual_sectioning_tl \l__enotez_section_tl } + { \tl_set_eq:NN \l__enotez_actual_sectioning_tl \l__enotez_chapter_tl } + \enotez_read_splitted_title:xn + { \l__enotez_splitted_title_tl } + { #1 } + \tl_if_blank:VTF \l__enotez_splitted_list_sectioning_tl { - \tl_if_eq:VnTF \l_enotez_split_tl { section } + \tl_if_eq:VnTF \l__enotez_split_tl { section } { \subsection* } { \section* } } - { \use:c { \l_enotez_splitted_list_sectioning_tl } } - { - \enotez_read_splitted_title:Vn - \l_enotez_splitted_title_tl { #1 } - } + { \use:c { \l__enotez_splitted_list_sectioning_tl } } + { \exp_not:V \l__enotez_tmpb_tl } } } - \prop_get:NnN \g_enotez_endnote_split_prop { #1 } \l_enotez_tmpb_tl + \prop_get:NnN \g__enotez_endnote_split_prop { #1 } \l__enotez_tmpb_tl } % the marks in the list: @@ -531,66 +596,130 @@ \cs_new_eq:NN \enotezwritemark \textsuperscript % internal printendnotes: -\cs_new:Npn \enotez_print_endnotes:nn #1#2 +\cs_new_protected:Npn \enotez_print_endnotes:nn #1#2 { \IfNoValueTF { #2 } - { \UseInstance { enotez-list } { \l_enotez_list_instance_tl } } + { \UseInstance { enotez-list } { \l__enotez_list_instance_tl } } { \UseInstance { enotez-list } { #2 } } { #1 } - \bool_if:NF \l_enotez_split_bool + \bool_if:NF \l__enotez_split_bool { - \bool_if:NTF \l_enotez_reset_bool - { \int_gzero:N \g_enotez_endnote_mark_int } - \int_gincr:N \g_enotez_list_printed_int + \bool_if:NTF \l__enotez_reset_bool + { \int_gzero:N \g__enotez_endnote_mark_int } + \int_gincr:N \g__enotez_list_printed_int } } % the user command: \NewDocumentCommand \printendnotes { so } { - \bool_if:NTF \l_enotez_split_bool + \bool_if:NTF \l__enotez_split_bool { \enotez_print_endnotes:nn { \BooleanFalse } { #2 } } { \enotez_print_endnotes:nn { #1 } { #2 } } } % -------------------------------------------------------------------------- +% preamble and postamble to the list: +\cs_new_protected:Npn \enotez_list_preamble: + { + \tl_if_empty:NTF \g__enotez_list_next_preamble_tl + { + \tl_if_empty:NF \g__enotez_list_every_preamble_tl + { + \tl_use:N \g__enotez_list_every_preamble_tl + \par + \skip_vertical:N \l__enotez_list_preamble_skip + } + } + { + \tl_use:N \g__enotez_list_next_preamble_tl + \par + \skip_vertical:N \l__enotez_list_preamble_skip + } + \tl_gclear:N \g__enotez_list_next_preamble_tl + } + +\cs_new_protected:Npn \enotez_list_postamble: + { + \tl_if_empty:NTF \g__enotez_list_next_postamble_tl + { + \tl_if_empty:NF \g__enotez_list_every_postamble_tl + { + \par + \skip_vertical:N \l__enotez_list_postamble_skip + \tl_use:N \g__enotez_list_every_postamble_tl + } + } + { + \par + \skip_vertical:N \l__enotez_list_postamble_skip + \tl_use:N \g__enotez_list_next_postamble_tl + } + \tl_gclear:N \g__enotez_list_next_postamble_tl + } + +\cs_new_protected:Npn \enotez_set_next_preamble:n #1 + { \tl_gset:Nn \g__enotez_list_next_preamble_tl { #1 } } + +\cs_new_protected:Npn \enotez_set_every_preamble:n #1 + { \tl_gset:Nn \g__enotez_list_every_preamble_tl { #1 } } + +\cs_new_protected:Npn \enotez_set_next_postamble:n #1 + { \tl_gset:Nn \g__enotez_list_next_postamble_tl { #1 } } + +\cs_new_protected:Npn \enotez_set_every_postamble:n #1 + { \tl_gset:Nn \g__enotez_list_every_postamble_tl { #1 } } + +\NewDocumentCommand \AtNextEndnotesList { m } + { \enotez_set_next_preamble:n { #1 } } + +\NewDocumentCommand \AtEveryEndnotesList { m } + { \enotez_set_every_preamble:n { #1 } } + +\NewDocumentCommand \AfterNextEndnotesList { m } + { \enotez_set_next_postamble:n { #1 } } + +\NewDocumentCommand \AfterEveryEndnotesList { m } + { \enotez_set_every_postamble:n { #1 } } + +% -------------------------------------------------------------------------- % process the options: \ProcessKeysOptions { enotez } \AtBeginDocument { - \bool_if:NT \l_enotez_split_bool + \bool_if:NT \l__enotez_split_bool { - \tl_if_eq:VnTF \l_enotez_split_tl { section } + \tl_if_eq:VnTF \l__enotez_split_tl { section } { \tl_put_left:Nn \section { - \int_gincr:N \g_enotez_list_printed_int - \bool_if:NT \l_enotez_reset_bool - { \int_gzero:N \g_enotez_endnote_mark_int } + \int_gincr:N \g__enotez_list_printed_int + \bool_if:NT \l__enotez_reset_bool + { \int_gzero:N \g__enotez_endnote_mark_int } } } { \tl_put_left:Nn \chapter { - \int_gincr:N \g_enotez_list_printed_int - \bool_if:NT \l_enotez_reset_bool - { \int_gzero:N \g_enotez_endnote_mark_int } + \int_gincr:N \g__enotez_list_printed_int + \bool_if:NT \l__enotez_reset_bool + { \int_gzero:N \g__enotez_endnote_mark_int } } } } \@ifpackageloaded { hyperref } { - \bool_set_true:N \l_enotez_hyperref_bool + \bool_set_true:N \l__enotez_hyperref_bool \ifHy@hyperfootnotes - \bool_set_true:N \l_enotez_hyperfootnotes_bool + \bool_set_true:N \l__enotez_hyperfootnotes_bool \else - \bool_set_false:N \l_enotez_hyperfootnotes_bool + \bool_set_false:N \l__enotez_hyperfootnotes_bool \fi } { - \bool_set_false:N \l_enotez_hyperref_bool - \bool_set_false:N \l_enotez_hyperfootnotes_bool + \bool_set_false:N \l__enotez_hyperref_bool + \bool_set_false:N \l__enotez_hyperfootnotes_bool } } @@ -599,6 +728,58 @@ \NewDocumentCommand \setenotez { +m } { \keys_set:nn { enotez } { #1 } \ignorespaces } +% -------------------------------------------------------------------------- +% language support +\RequirePackage { translations } +\DeclareTranslationFallback { enotez-title } { Notes } +\DeclareTranslation { Catalan } { enotez-title } { Notes } +\DeclareTranslation { Croatian } { enotez-title } { Bilje\v{s}ke } +\DeclareTranslation { English } { enotez-title } { Notes } +\DeclareTranslation { French } { enotez-title } { Remarques } +\DeclareTranslation { German } { enotez-title } { Anmerkungen } +\DeclareTranslation { Hungarian } { enotez-title } { Megjegyz\'{e}sek } +\DeclareTranslation { Italian } { enotez-title } { Note } +\DeclareTranslation { Spanish } { enotez-title } { Notas } +\DeclareTranslation { Turkish } { enotez-title } { Notlar } + +\DeclareTranslationFallback { enotez-splitted-title } { Notes~for~<name>~<ref> } +\DeclareTranslation { Catalan } { enotez-splitted-title } { Notes~del~<name>~<ref> } +\DeclareTranslation { Croatian } { enotez-splitted-title } { Bilje\v{s}ke~uz~<name>~<ref> } +\DeclareTranslation { English } { enotez-splitted-title } { Notes~for~<name>~<ref> } +\DeclareTranslation { French } { enotez-splitted-title } { Remarques~aux~<name>~<ref> } +\DeclareTranslation { German } { enotez-splitted-title } { Anmerkungen~zu~<name>~<ref> } +\DeclareTranslation { Hungarian } { enotez-splitted-title } { Megjegyz\'{e}sek~a~<ref>.~<name> } +\DeclareTranslation { Italian } { enotez-splitted-title } { Note~per~il~<name>~<ref> } +\DeclareTranslation { Spanish } { enotez-splitted-title } { Notas~del~<name>~<ref> } +\DeclareTranslation { Turkish } { enotez-splitted-title } { <name>~<ref>~notlar } + +\DeclareTranslationFallback { enotez-section } { section } +\DeclareTranslation { Catalan } { enotez-section } { secci\'{o} } +\DeclareTranslation { Croatian } { enotez-section } { odjeljak } +\DeclareTranslation { English } { enotez-section } { section } +\DeclareTranslation { French } { enotez-section } { section } +\DeclareTranslation { German } { enotez-section } { Abschnitt } +\DeclareTranslation { Hungarian } { enotez-section } { szakasz } +\DeclareTranslation { Italian } { enotez-section } { sezione } +\DeclareTranslation { Spanish } { enotez-section } { secci\'{o}n } +\DeclareTranslation { Turkish } { enotez-section } { B\"{o}l\"{u}m } + +\DeclareTranslationFallback { enotez-chapter } { chapter } +\DeclareTranslation { Catalan } { enotez-chapter } { cap\'{\i}tol } +\DeclareTranslation { Croatian } { enotez-chapter } { poglavlje } +\DeclareTranslation { English } { enotez-chapter } { chapter } +\DeclareTranslation { French } { enotez-chapter } { chapitre } +\DeclareTranslation { German } { enotez-chapter } { Kapitel } +\DeclareTranslation { Hungarian } { enotez-chapter } { fejezet } +\DeclareTranslation { Italian } { enotez-chapter } { capitolo } +\DeclareTranslation { Spanish } { enotez-chapter } { cap\'{\i}tulo } +\DeclareTranslation { Turkish } { enotez-chapter } { B\"{o}l\"{u}m } + +\tl_set:Nn \l__enotez_splitted_title_tl { \GetTranslation { enotez-splitted-title } } +\tl_set:Nn \l__enotez_list_name_tl { \GetTranslation { enotez-title } } +\tl_set:Nn \l__enotez_section_tl { \GetTranslation { enotez-section } } +\tl_set:Nn \l__enotez_chapter_tl { \GetTranslation { enotez-chapter } } + \tex_endinput:D % -------------------------------------------------------------------------- % HISTORY: @@ -614,7 +795,15 @@ endnote is used inside a caption 2012/12/30 v0.4 - new options `mark-cs' and `mark-format', redefinable commands \enmarkstyle and \enotezwritemark +2012/01/18 v0.4a - added beginnings of internationalization -- this will need + help from users speaking the actual languages +2013/03/12 v0.5 - \AtNextEndnotesList, \AtEveryEndnotesList + - use protected internal commands where appropriate + - fix wrong endnote marks when used with the `caption' + package +2013/03/18 v0.5a - adapt to deprecated expl3 commands % -------------------------------------------------------------------------- % TODO: +- add \endnotemark and \endnotetext - make the headings obey the `totoc' option?
\ No newline at end of file |