diff options
author | Karl Berry <karl@freefriends.org> | 2013-05-06 22:03:16 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-05-06 22:03:16 +0000 |
commit | d3df91a3632548c96324059eb602b185dd93b149 (patch) | |
tree | ca899936eab87c9bf6795fb97d27984d4e449d69 /Master/texmf-dist/tex/latex/acro | |
parent | 3cc021afee4ab842395ab6c2e6149770382699c6 (diff) |
acro (6may13)
git-svn-id: svn://tug.org/texlive/trunk@30248 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/acro')
-rw-r--r-- | Master/texmf-dist/tex/latex/acro/acro.sty | 1036 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/acro/acro1.def | 124 |
2 files changed, 694 insertions, 466 deletions
diff --git a/Master/texmf-dist/tex/latex/acro/acro.sty b/Master/texmf-dist/tex/latex/acro/acro.sty index 5b56c7c2318..aacff0250f5 100644 --- a/Master/texmf-dist/tex/latex/acro/acro.sty +++ b/Master/texmf-dist/tex/latex/acro/acro.sty @@ -31,10 +31,25 @@ \RequirePackage{expl3,xparse,l3keys2e,xtemplate} \ProvidesExplPackage {acro} - {2013/04/04} - {1.2a} + {2013/05/06} + {1.3} {Typeset Acronyms} +% -------------------------------------------------------------------------- +% check expl3 version: +\@ifpackagelater { expl3 } { 2012/11/21 } + { } + { + \PackageError { acro } { Support~package~expl3~too~old } + { + You~need~to~update~your~installation~of~the~bundles~'l3kernel'~and~ + 'l3packages'.\MessageBreak + Loading~acro~will~abort! + } + \tex_endinput:D + } + +% -------------------------------------------------------------------------- % warning and error messages: \msg_new:nnnn { acro } { undefined } { You've~requested~acronym~`#1'~but~it~seems~that~it~was~never~defined! } @@ -50,6 +65,46 @@ I'm~using~option~`#2'~instead. } +\msg_new:nnnn { acro } { replaced } + { The~#1~`#2'~is~deprecated.~Use~`#3'~instead~\msg_line_context:. } + { + The~#1~`#2'~you~used~\msg_line_context: \c_space_tl is~deprecated~and~has~ + been~replaced~by~`#3'.~Since~I~will~not~guarantee~that~#1~will~be~kept~ + forever~I~encourage~you~to~switch. + } + +\msg_new:nnnn { acro } { deprecated } + { The~#1~`#2'~is~deprecated.~\msg_line_context:. } + { + The~#1~`#2'~you~used~\msg_line_context: \c_space_tl is~deprecated~and~there~ + is~no~replacement.~Since~I~will~not~guarantee~that~#1~will~be~kept~forever~ + I~encourage~you~to~remove~it~from~your~document. + } + +\cs_new:Npn \acro_option_deprecated:nn #1#2 + { + \tl_if_blank:nTF { #2 } + { \msg_warning:nnnn { acro } { deprecated } { option } { #1 } } + { \msg_warning:nnnnn { acro } { replaced } { option } { #1 } { #2 } } + } + +\cs_new:Npn \acro_command_deprecated:NN #1#2 + { + \tl_if_blank:nTF { #2 } + { + \msg_warning:nnnnn { acro } { deprecated } + { command } + { \token_to_str:N #1 } + } + { + \msg_warning:nnnnn { acro } { replaced } + { command } + { \token_to_str:N #1 } + { \token_to_str:N #2 } + } + } + +% -------------------------------------------------------------------------- % temporary variables \tl_new:N \l__acro_tmpa_tl \tl_new:N \l__acro_tmpb_tl @@ -58,39 +113,67 @@ \prop_new:N \l__acro_tmpb_prop \seq_new:N \l__acro_tmpa_seq \seq_new:N \l__acro_tmpb_seq +\int_new:N \l__acro_tmpa_int +\int_new:N \l__acro_tmpb_int +\int_new:N \l__acro_tmpc_int +\int_new:N \l__acro_tmpd_int -\tl_new:N \l__acro_ignore_tl +% -------------------------------------------------------------------------- +% variants of kernel commands +\cs_generate_variant:Nn \quark_if_no_value:nTF { V } +\cs_generate_variant:Nn \tl_put_right:Nn { NV } +\cs_generate_variant:Nn \tl_if_eq:nnT { V } +\cs_generate_variant:Nn \tl_if_eq:nnF { V } +\cs_generate_variant:Nn \seq_use:Nnnn { c } +\cs_generate_variant:Nn \seq_gset_split:Nnn { c } +% -------------------------------------------------------------------------- % boolean variables: -\bool_new:N \l__acro_mark_as_used_bool -\bool_new:N \l__acro_mark_first_as_used_bool -\bool_new:N \l__acro_use_single_bool -\bool_new:N \l__acro_print_only_used_bool +\bool_new:N \l__acro_mark_as_used_bool +\bool_new:N \l__acro_mark_first_as_used_bool +\bool_new:N \l__acro_use_single_bool +\bool_new:N \l__acro_print_only_used_bool \bool_set_true:N \l__acro_print_only_used_bool -\bool_new:N \l__acro_use_plural_bool -\bool_new:N \l__acro_hyperref_loaded_bool -\bool_new:N \l__acro_use_hyperref_bool -\bool_new:N \l__acro_custom_format_bool -\bool_new:N \l__acro_strict_bool -\bool_new:N \l__acro_create_macros_bool -\bool_new:N \l__acro_xspace_bool -\bool_new:N \l__acro_first_upper_bool -\bool_new:N \l__acro_indefinite_bool -\bool_new:N \l__acro_upper_indefinite_bool -\bool_new:N \l__acro_sort_bool +\bool_new:N \l__acro_use_plural_bool +\bool_new:N \l__acro_hyperref_loaded_bool +\bool_new:N \l__acro_use_hyperref_bool +\bool_new:N \l__acro_custom_format_bool +\bool_new:N \l__acro_strict_bool +\bool_new:N \l__acro_create_macros_bool +\bool_new:N \l__acro_xspace_bool +\bool_new:N \l__acro_first_upper_bool +\bool_new:N \l__acro_indefinite_bool +\bool_new:N \l__acro_upper_indefinite_bool +\bool_new:N \l__acro_foreign_bool +\bool_set_true:N \l__acro_foreign_bool +\bool_new:N \l__acro_sort_bool \bool_set_true:N \l__acro_sort_bool -\bool_new:N \l__acro_capitalize_list_bool -\bool_new:N \l__acro_citation_all_bool -\bool_new:N \l__acro_citation_first_bool +\bool_new:N \l__acro_capitalize_list_bool +\bool_new:N \l__acro_citation_all_bool +\bool_new:N \l__acro_citation_first_bool \bool_set_true:N \l__acro_citation_first_bool -\bool_new:N \l__acro_acc_supp_bool -\bool_new:N \l__acro_page_ranges_bool -\bool_set_true:N \l__acro_page_ranges_bool -\bool_new:N \l__acro_record_pages_bool +\bool_new:N \l__acro_acc_supp_bool +\bool_new:N \l__acro_following_page_bool +\bool_new:N \l__acro_following_pages_bool +\bool_new:N \l__acro_record_pages_bool \bool_set_true:N \l__acro_record_pages_bool -\bool_new:N \l__acro_addto_index_bool +\bool_new:N \l__acro_addto_index_bool +\bool_new:N \l__acro_version_selected_bool +\bool_new:N \l__acro_is_excluded_bool +\bool_new:N \l__acro_page_punct_bool +\bool_new:N \l__acro_page_brackets_bool +\bool_new:N \l__acro_page_display_bool +\bool_new:N \l__acro_new_page_numbering_bool +\bool_new:N \l__acro_first_use_brackets_bool +\bool_new:N \l__acro_first_only_short_bool +\bool_new:N \l__acro_first_reversed_bool +\bool_new:N \l__acro_use_note_bool +\bool_new:N \l__acro_extra_punct_bool +\bool_new:N \l__acro_extra_use_brackets_bool -% tokenlist variables: +% -------------------------------------------------------------------------- +% token list variables: +\tl_new:N \l__acro_ignore_tl \tl_new:N \l__acro_short_format_tl \tl_new:N \l__acro_list_short_format_tl \tl_new:N \l__acro_long_format_tl @@ -99,6 +182,11 @@ \tl_new:N \l__acro_default_indefinite_tl \tl_set:Nn \l__acro_default_indefinite_tl { a } \tl_new:N \l__acro_extra_format_tl +\tl_new:N \l__acro_foreign_tl +\tl_new:N \l__acro_foreign_sep_tl +\tl_new:N \l__acro_foreign_format_tl +\tl_new:N \l__acro_foreign_list_format_tl +\tl_set:Nn \l__acro_foreign_list_format_tl { \acroenparen } \tl_new:N \l__acro_first_instance_tl \tl_set:Nn \l__acro_first_instance_tl { default } \tl_new:N \l__acro_extra_instance_tl @@ -133,7 +221,27 @@ \tl_new:N \l__acro_first_between_tl \tl_new:N \l__acro_citation_space_tl \tl_set:Nn \l__acro_citation_space_tl { \nobreakspace } +\tl_new:N \l__acro_active_version_tl +\tl_new:N \l__acro_version_zero_tl +\tl_set:Nn \l__acro_version_zero_tl { 0 } +\tl_new:N \l__acro_extra_brackets_tl +\tl_new:N \l__acro_extra_punct_tl +\tl_new:N \l__acro_first_brackets_tl +\tl_new:N \l__acro_page_punct_tl +\tl_new:N \l__acro_page_brackets_tl +\tl_new:N \l__acro_last_page_tl +\tl_new:N \l__acro_current_page_tl +\tl_new:N \l__acro_list_table_tl +\tl_new:N \l__acro_list_table_spec_tl +\tl_new:N \l__acro_index_short_tl +\tl_new:N \l__acro_index_format_tl +\tl_new:N \l__acro_acc_supp_tl + +% -------------------------------------------------------------------------- +% comma list variables +\clist_new:N \l__acro_versions_clist +% -------------------------------------------------------------------------- % property list variables: \prop_new:N \l__acro_short_prop \prop_new:N \l__acro_alt_prop @@ -149,6 +257,7 @@ \prop_new:N \l__acro_long_pre_prop \prop_new:N \l__acro_long_post_prop \prop_new:N \l__acro_extra_prop +\prop_new:N \l__acro_foreign_prop \prop_new:N \l__acro_format_prop \prop_new:N \l__acro_long_format_prop \prop_new:N \l__acro_first_long_format_prop @@ -162,13 +271,15 @@ \prop_new:N \l__acro_index_sort_prop \prop_new:N \l__acro_index_cmd_prop +% -------------------------------------------------------------------------- % length variables: \dim_new:N \l__acro_table_width_dim \dim_set:Nn \l__acro_table_width_dim { .7\linewidth } +\dim_new:N \l__acro_page_space_dim -\cs_new:Npn \__acro_citation_cmd:w { \cite } -\cs_new:Npn \__acro_no_break: { \tex_penalty:D \c_ten_thousand } -\cs_new:Npn \__acro_index_cmd:n { \index } +% -------------------------------------------------------------------------- +% small commands for use at various places +\cs_new:Npn \acro_no_break: { \tex_penalty:D \c_ten_thousand } \cs_new:Npn \__acro_first_upper_case:n #1 { \tl_expandable_uppercase:n { \tl_head:n { #1 } } \tl_tail:n { #1 } } @@ -178,17 +289,10 @@ % -------------------------------------------------------------------------- % versioning: -\tl_new:N \l__acro_active_version_tl -\tl_new:N \l__acro_version_zero_tl -\tl_set:Nn \l__acro_version_zero_tl { 0 } - -\clist_new:N \l__acro_versions_clist \clist_put_right:Nn \l__acro_versions_clist { 0 } \clist_put_right:Nn \l__acro_versions_clist { 1 } -\bool_new:N \l__acro_version_selected_bool - -\cs_new:Npn \__acro_select_version:n #1 +\cs_new_protected:Npn \__acro_select_version:n #1 { \clist_if_in:NnTF \l__acro_versions_clist { #1 } { @@ -203,7 +307,7 @@ \bool_set_true:N \l__acro_version_selected_bool } - +% -------------------------------------------------------------------------- % options: \keys_define:nn { acro } { @@ -222,8 +326,11 @@ \tl_set:Nn \l__acro_list_long_format_tl { #1 } , first-long-format .code:n = \tl_set:Nn \l__acro_first_long_format_tl { #1 } , + display-foreign .bool_set:N = \l__acro_foreign_bool , + foreign-format .tl_set:N = \l__acro_foreign_format_tl , list-short-format .tl_set:N = \l__acro_list_short_format_tl , list-long-format .tl_set:N = \l__acro_list_long_format_tl , + list-foreign-format .tl_set:N = \l__acro_foreign_list_format_tl , extra-format .tl_set:N = \l__acro_extra_format_tl , single .bool_set:N = \l__acro_use_single_bool , first-style .tl_set:N = \l__acro_first_instance_tl , @@ -231,13 +338,22 @@ page-ref .tl_set:N = \l__acro_page_instance_tl , page-name .tl_set:N = \l__acro_page_name_tl , pages-name .tl_set:N = \l__acro_pages_name_tl , - page-ranges .bool_set:N = \l__acro_page_ranges_bool , - record-pages .bool_set:N = \l__acro_record_pages_bool , + page-ranges .code:n = + \bool_set_false:N \l__acro_following_page_bool + \bool_set_false:N \l__acro_following_pages_bool + \acro_option_deprecated:nn { pages-ranges } { } , + following-page .bool_set:N = \l__acro_following_page_bool , + following-pages .bool_set:N = \l__acro_following_pages_bool , + record-pages .code:n = + \acro_option_deprecated:nn { record-pages } { } , next-page .tl_set:N = \l__acro_next_page_tl , next-pages .tl_set:N = \l__acro_next_pages_tl , list-style .tl_set:N = \l__acro_list_instance_tl , list-type .tl_set:N = \l__acro_list_type_tl , - list-header .tl_set:N = \l__acro_list_title_tl , + list-header .code:n = + \acro_option_deprecated:nn { list-header } { list-heading } + \tl_set:Nn \l__acro_list_title_tl { #1 } , + list-heading .tl_set:N = \l__acro_list_title_tl , list-name .tl_set:N = \l__acro_list_name_tl , list-table-width .dim_set:N = \l__acro_table_width_dim , hyperref .bool_set:N = \l__acro_use_hyperref_bool , @@ -284,10 +400,12 @@ { \cs_set_eq:NN \acro_record_page_number:n \use_none:n } } +% -------------------------------------------------------------------------- % setup command: \NewDocumentCommand \acsetup { m } { \keys_set:nn { acro } { #1 } \ignorespaces } +% -------------------------------------------------------------------------- % typeset the short form: \cs_new:Npn \__acro_write_short:n #1 { @@ -307,12 +425,13 @@ % TODO: rethink the formatting mechanism % right now a custom format gets applied additionally to the global one % although before it -\cs_new:Npn \__acro_write_long:Nn #1#2 +\cs_new_protected:Npn \__acro_write_long:Nn #1#2 { \mode_if_horizontal:F { \leavevmode } \group_begin: - \bool_if:NT \l__acro_custom_long_format_bool + \bool_if:NTF \l__acro_custom_long_format_bool { \l__acro_custom_long_format_tl } + { \use:n } { \exp_args:Nx #1 { @@ -328,9 +447,9 @@ % -------------------------------------------------------------------------- % hyperref support \cs_new_eq:NN \acro_hyper_target:nn \use_ii:nn -\cs_new_eq:NN \acro_hyper_link:nn \use_ii:nn +\cs_new_eq:NN \acro_hyper_link:nn \use_ii:nn -\cs_new:Npn \__acro_activate_hyperref_support: +\cs_new_protected:Npn \__acro_activate_hyperref_support: { \bool_if:nT { \l__acro_hyperref_loaded_bool && \l__acro_use_hyperref_bool } { @@ -340,7 +459,7 @@ } } -\cs_new:Npn \__acro_make_link:nNN #1#2#3 +\cs_new_protected:Npn \__acro_make_link:nNN #1#2#3 { \tl_set:Nn #2 { @@ -374,19 +493,11 @@ } \AtBeginDocument{ - \cs_if_exist:NF \textcolor - { \cs_new_eq:NN \textcolor \use_ii:nn } + \cs_if_exist:NF \textcolor { \cs_new_eq:NN \textcolor \use_ii:nn } } % -------------------------------------------------------------------------- % output style of the first time an acronym is used -\bool_new:N \l__acro_first_use_brackets_bool -\bool_new:N \l__acro_first_only_short_bool -\bool_new:N \l__acro_first_reversed_bool -\bool_new:N \l__acro_use_note_bool - -\tl_new:N \l__acro_first_brackets_tl - \cs_new:Npn \__acro_note_command:n #1 { #1 } % #1: id @@ -402,6 +513,7 @@ only-short : boolean = false , reversed : boolean = false , between : tokenlist , + foreign-sep : tokenlist = { , ~ } } \DeclareTemplateCode { acro-first } { inline } { 3 } { @@ -410,6 +522,7 @@ only-short = \l__acro_first_only_short_bool , reversed = \l__acro_first_reversed_bool , between = \l__acro_first_between_tl , + foreign-sep = \l__acro_foreign_sep_tl } { \AssignTemplateKeys @@ -428,6 +541,22 @@ { \l__acro_first_use_brackets_bool && !\l__acro_first_reversed_bool } { \tl_head:N \l__acro_first_brackets_tl } \bool_if:nT + { + \l__acro_foreign_bool && + !\l__acro_first_reversed_bool && + !\l__acro_first_only_short_bool + } + { + \prop_get:NnNT \l__acro_foreign_prop { #1 } \l__acro_foreign_tl + { + \group_begin: + \tl_use:N \l__acro_foreign_format_tl + \tl_use:N \l__acro_foreign_tl + \group_end: + \tl_use:N \l__acro_foreign_sep_tl + } + } + \bool_if:nT { \l__acro_first_reversed_bool || \l__acro_first_only_short_bool } { \__acro_indefinite:nn { #1 } { short } } \__acro_acc_supp:nn { #1 } { \__acro_write_short:n { #2 } } @@ -447,6 +576,17 @@ { \l__acro_first_use_brackets_bool && \l__acro_first_reversed_bool } { \tl_head:N \l__acro_first_brackets_tl } \__acro_write_long:No \l__acro_first_long_format_tl { #3 } + \bool_if:nT { \l__acro_foreign_bool && \l__acro_first_reversed_bool } + { + \prop_get:NnNT \l__acro_foreign_prop { #1 } \l__acro_foreign_tl + { + \tl_use:N \l__acro_foreign_sep_tl + \group_begin: + \tl_use:N \l__acro_foreign_format_tl + \tl_use:N \l__acro_foreign_tl + \group_end: + } + } \bool_if:nT { \l__acro_first_use_brackets_bool && \l__acro_first_reversed_bool } { \tl_tail:N \l__acro_first_brackets_tl } @@ -459,13 +599,15 @@ \DeclareTemplateInterface { acro-first } { note } { 3 } { use-note : boolean = true , - note-command : function 1 = \footnote { #1 } + note-command : function 1 = \footnote { #1 } , + foreign-sep : tokenlist = ~ } \DeclareTemplateCode { acro-first } { note } { 3 } { use-note = \l__acro_use_note_bool , - note-command = \__acro_note_command:n + note-command = \__acro_note_command:n , + foreign-sep = \l__acro_foreign_sep_tl } { \AssignTemplateKeys @@ -476,6 +618,19 @@ \__acro_note_command:n { \__acro_write_long:No \l__acro_first_long_format_tl { #3 } + \bool_if:NT \l__acro_foreign_bool + { + \prop_get:NnNT \l__acro_foreign_prop { #1 } \l__acro_foreign_tl + { + \tl_use:N \l__acro_foreign_sep_tl + ( + \group_begin: + \tl_use:N \l__acro_foreign_format_tl + \tl_use:N \l__acro_foreign_tl + \group_end: + ) + } + } \__acro_cite_if:Nn \l__acro_citation_first_bool { #1 } \__acro_index_if:Nn \l__acro_addto_index_bool { #1 } } @@ -532,11 +687,6 @@ % -------------------------------------------------------------------------- % formatting the extras information: -\bool_new:N \l__acro_extra_punct_bool -\bool_new:N \l__acro_extra_use_brackets_bool -\tl_new:N \l__acro_extra_brackets_tl -\tl_new:N \l__acro_extra_punct_tl - \DeclareObjectType { acro-extra } { 1 } \DeclareTemplateInterface { acro-extra } { default } { 1 } @@ -570,272 +720,177 @@ { brackets = false , punct = true , punct-symbol = . } \DeclareInstance { acro-extra } { plain } { default } { brackets = false , punct = false } -\DeclareInstance { acro-extra } { paren } { default } { } -\DeclareInstance { acro-extra } { bracket } { default } { brackets-type=[] } +\DeclareInstance { acro-extra } { paren } { default } + { punct = true , punct-symbol = } +\DeclareInstance { acro-extra } { bracket } { default } + { punct = true , punct-symbol = , brackets-type=[] } \DeclareInstance { acro-extra } { comma } { default } { punct = true, brackets = false } % -------------------------------------------------------------------------- -% outputting the page numbers: (experimental, needs lots of improvements) -\bool_new:N \l__acro_page_punct_bool -\bool_new:N \l__acro_page_brackets_bool -\bool_new:N \l__acro_page_display_bool -\tl_new:N \l__acro_page_punct_tl -\tl_new:N \l__acro_page_brackets_tl -\dim_new:N \l__acro_page_space_dim +% outputting the page numbers: +\RequirePackage { zref-abspage } -\cs_new:Npn \acro_create_page_records:n #1 +\cs_new_protected:Npn \acro_create_page_records:n #1 { - \seq_new:c { g__acro_#1_tmp_seq } \seq_new:c { g__acro_#1_pages_seq } + \tl_new:c { g__acro_#1_recorded_pages_tl } } -\cs_new:Npn \ac@hp #1 - { - \tl_if_in:nnTF { #1 } { \ac@no@hp } - { #1 } - { \acro_hyper_page:n { #1 } } - } - -\cs_new_protected:Npn \ac@no@hp {} - -\cs_new:Npn \__acro_safe_pages_aux:n #1 - { \noexpand \ac@hp {#1}| } - -\cs_new_eq:NN \acro_hyper_page:n \use:n - -\cs_new:Npn \acro_safe_pages:n #1 - { - \iow_now:Nx \@auxout - { - \exp_not:n { \global \@namedef } { acro@#1@pages } - { \seq_map_function:cN { g__acro_#1_pages_seq } \__acro_safe_pages_aux:n } - } - } - -\AtEndDocument - { - \prop_map_inline:Nn \l__acro_short_prop - { - \acro_finalize_page_numbers:n { #1 } - \acro_safe_pages:n { #1 } - } - } - -\tl_new:N \l__acro_tmp_page_tl -\tl_new:N \l__acro_last_page_tl -\tl_new:N \g__acro_current_page_style_tl -\tl_new:N \g__acro_last_page_style_tl - -\bool_new:N \g__acro_know_page_style_bool +\cs_new_protected:Npn \acro_hyper_page:n #1 { \use:n { #1 } } -%TODO: this should be translated into expl3 syntax -\cs_new:Npn \__acro_if_is_number:nTF #1 - { - \if!\ifnum9<1#1!\expandafter\expandafter\expandafter\@firstoftwo\fi - \else - \expandafter\@secondoftwo - \fi - } +\cs_new:Npn \acro_get_thepage:nnn #1#2#3 { \acro_hyper_page:n { #1 } } +\cs_new:Npn \acro_get_thepage_from:N #1 + { \exp_after:wN \acro_get_thepage:nnn #1 } -\cs_new:Npn \__acro_convert_to_arabic:n #1 - { - \__acro_if_is_number:nTF { #1 } - { #1 } - { \exp_args:Nf \int_from_roman:n { \tl_expandable_lowercase:n { #1 } } } - } -\cs_generate_variant:Nn \__acro_convert_to_arabic:n { V } +\cs_new:Npn \acro_get_page_number:nnn #1#2#3 { #2 } +\cs_new:Npn \acro_get_page_number_from:N #1 + { \exp_after:wN \acro_get_page_number:nnn #1 } -\cs_new:Npn \__acro_check_for_style:n #1 - { - \tl_if_in:xxT { \tl_to_str:V { \thepage } } { \tl_to_str:n { #1 } } - { - \tl_gset:Nn \g__acro_current_page_style_tl { #1 } - \bool_gset_true:N \g__acro_know_page_style_bool - } - } -\cs_generate_variant:Nn \tl_if_in:nnT { xx } -\cs_generate_variant:Nn \tl_to_str:n { V } +\cs_new:Npn \acro_get_abspage:nnn #1#2#3 { #3 } +\cs_new:Npn \acro_get_abspage_from:N #1 + { \exp_after:wN \acro_get_abspage:nnn #1 } -\cs_new:Npn \acro_check_page_style: - { - \tl_gset:Nn \g__acro_current_page_style_tl { unknown } - \bool_gset_false:N \g__acro_know_page_style_bool - \__acro_check_for_style:n { roman } - \__acro_check_for_style:n { Roman } - \__acro_check_for_style:n { arabic } - } +\cs_new:Npn \acro_page_range_comma: {} -\cs_new:Npn \acro_record_page_number:n #1 +\cs_new_protected:Npn \acro_print_page_numbers:n #1 { - \tl_gset_eq:NN \g__acro_last_page_style_tl \g__acro_current_page_style_tl - \acro_check_page_style: - \bool_if:NT \g__acro_know_page_style_bool + \seq_if_empty:cF { g__acro_#1_pages_seq } { - \seq_if_empty:cTF { g__acro_#1_pages_seq } - {% no pages recorded, yet - \seq_gput_right:cx { g__acro_#1_pages_seq } - { \use:c { \g__acro_current_page_style_tl } { page } } - \seq_gput_right:cx { g__acro_#1_tmp_seq } - { \use:c { \g__acro_current_page_style_tl } { page } } + % have the numbers changed? + \tl_set:Nx \l__acro_tmpa_tl + { \seq_use:cnnn { g__acro_#1_pages_seq } { | } { | } { | } } + \tl_if_eq:cNF { g__acro_#1_recorded_pages_tl } \l__acro_tmpa_tl + { + \@latex@warning@no@line + {Rerun~to~get~page~numbers~of~acronym~#1~in~acronym~list~right} } + \tl_clear:N \l__acro_write_pages_tl + \tl_clear:N \l__acro_last_page_tl + \tl_clear:N \l__acro_current_page_tl + \seq_set_eq:Nc \l__acro_tmpb_seq { g__acro_#1_pages_seq } + \seq_remove_duplicates:N \l__acro_tmpb_seq + \seq_clear:N \l__acro_tmpa_seq + \cs_set_protected:Npn \acro_page_range_comma: + { \cs_set:Npn \acro_page_range_comma: { ,~ } } + % get the numbers: + \int_compare:nNnTF { \seq_count:N \l__acro_tmpb_seq } = { 1 } { - \seq_get_right:cN { g__acro_#1_tmp_seq } \l__acro_tmp_page_tl - \seq_get_right:cN { g__acro_#1_pages_seq } \l__acro_last_page_tl - \tl_if_eq:NNTF \l__acro_tmp_page_tl \l__acro_last_page_tl - {% range may have started - \bool_if:nF - { - \int_compare_p:n - { \value{page} = \__acro_convert_to_arabic:V \l__acro_tmp_page_tl } - && - \tl_if_eq_p:NN - \g__acro_last_page_style_tl - \g__acro_current_page_style_tl + \l__acro_page_name_tl + \seq_get_right:cN { g__acro_#1_pages_seq } \l__acro_tmpa_tl + \acro_get_thepage_from:N \l__acro_tmpa_tl + } + { \l__acro_pages_name_tl + \seq_map_inline:cn { g__acro_#1_pages_seq } + { + \tl_if_blank:VTF \l__acro_last_page_tl + {% we're at the beginning + \seq_put_right:Nn \l__acro_tmpa_seq { ##1 } + \tl_set:Nn \l__acro_last_page_tl { ##1 } } - { - \int_compare:nNnTF - { \value{page} } - = - { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl + 1 } - {% range continues - \seq_gput_right:cx { g__acro_#1_tmp_seq } - { \use:c { \g__acro_current_page_style_tl } { page } } - } - {% no range (any more) - \seq_gput_right:cx { g__acro_#1_pages_seq } { \ac@no@hp,~ } - \seq_gclear:c { g__acro_#1_tmp_seq } - \seq_gput_right:cx { g__acro_#1_tmp_seq } - { \use:c { \g__acro_current_page_style_tl } { page } } - \seq_gput_right:cx { g__acro_#1_pages_seq } - { \use:c { \g__acro_current_page_style_tl } { page } } - } + {% we'at least at the second page + % current page: + \tl_set:Nn \l__acro_current_page_tl { ##1 } + % last page: + \seq_get_right:NN \l__acro_tmpa_seq \l__acro_last_page_tl + \tl_if_eq:NNTF \l__acro_current_page_tl \l__acro_last_page_tl + {% there were more than one appearance on the current page + \seq_put_right:Nn \l__acro_tmpa_seq { ##1 } + } + {% new page + \acro_determine_page_ranges:NNn + \l__acro_tmpa_seq + \l__acro_write_pages_tl + { ##1 } + } } } - {% we're in a range - \int_compare:nNnF - { \value{page} } - = - { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl } - { - \int_compare:nNnTF - { \value{page} } - = - { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl + 1 } - {% range continues - \seq_gput_right:cx { g__acro_#1_tmp_seq } - { \use:c { \g__acro_current_page_style_tl } { page } } - } - {% no range (any more) - \int_compare:nNnTF - { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl } - = - { \__acro_convert_to_arabic:V \l__acro_last_page_tl +1 } - { - \bool_if:NTF \l__acro_page_ranges_bool - { - \seq_gput_right:cn { g__acro_#1_pages_seq } - { \ac@no@hp,~ } - \seq_gput_right:cx { g__acro_#1_pages_seq } - { \l__acro_tmp_page_tl } - } - { - \seq_gput_right:cn { g__acro_#1_pages_seq } - { \ac@no@hp\l__acro_next_page_tl } - } - } - { - \bool_if:NTF \l__acro_page_ranges_bool - { - \seq_gput_right:cn { g__acro_#1_pages_seq } - { \ac@no@hp-- } - \seq_gput_right:cx { g__acro_#1_pages_seq } - { \l__acro_tmp_page_tl } - } - { - \seq_gput_right:cn { g__acro_#1_pages_seq } - { \ac@no@hp\l__acro_next_pages_tl } - } - } - \seq_gclear:c { g__acro_#1_tmp_seq } - \seq_gput_right:cx { g__acro_#1_tmp_seq } - { \use:c { \g__acro_current_page_style_tl } { page } } - \seq_gput_right:cn { g__acro_#1_pages_seq } { \ac@no@hp,~ } - \seq_gput_right:cx { g__acro_#1_pages_seq } - { \use:c { \g__acro_current_page_style_tl } { page } } - } - } + \seq_if_empty:NF \l__acro_tmpa_seq + { + \acro_determine_page_ranges:NNV + \l__acro_tmpa_seq + \l__acro_write_pages_tl + \l__acro_current_page_tl } + \tl_use:N \l__acro_write_pages_tl + \tl_clear:N \l__acro_write_pages_tl } } - } - -\cs_new:Npn \acro_finalize_page_numbers:n #1 - { - \seq_get_right:cN { g__acro_#1_tmp_seq } \l__acro_tmp_page_tl - \seq_get_right:cN { g__acro_#1_pages_seq } \l__acro_last_page_tl - \tl_if_eq:NNF \l__acro_tmp_page_tl \l__acro_last_page_tl + \seq_clear:N \l__acro_tmpa_seq + \seq_clear:N \l__acro_tmpb_seq + } + +\cs_new:Npn \acro_determine_page_ranges:NNn #1#2#3 + { + \seq_remove_duplicates:N #1 + % current page: + \int_set:Nn \l__acro_tmpa_int { \acro_get_abspage:nnn #3 } + \int_set:Nn \l__acro_tmpb_int { \acro_get_page_number:nnn #3 } + % last page: + \seq_get_right:NN #1 \l__acro_last_page_tl + \int_set:Nn \l__acro_tmpc_int + { \acro_get_abspage_from:N \l__acro_last_page_tl } + \int_set:Nn \l__acro_tmpd_int + { \acro_get_page_number_from:N \l__acro_last_page_tl } + \bool_if:nTF { + \int_compare_p:nNn + { \l__acro_tmpa_int - \l__acro_tmpc_int } + = + { \l__acro_tmpb_int - \l__acro_tmpd_int } + && + \int_compare_p:nNn + { \l__acro_tmpb_int - \l__acro_tmpd_int } = {1} + } + {% same kind of page numbering, one page ahead + % => possible range + \seq_put_right:Nn #1 { #3 } + } + {% any possible range ended + \tl_put_right:Nn #2 { \acro_page_range_comma: } \int_compare:nNnTF - { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl } - = - { \__acro_convert_to_arabic:V \l__acro_last_page_tl +1 } - { - \bool_if:NTF \l__acro_page_ranges_bool + { \seq_count:N #1 } > {2} + {% real range + \seq_get_left:NN #1 \l__acro_tmpa_tl + \tl_put_right:Nx #2 { \acro_get_thepage_from:N \l__acro_tmpa_tl } + \bool_if:NTF \l__acro_following_pages_bool + { \tl_put_right:Nn #2 { \l__acro_next_pages_tl } } { - \seq_gput_right:cn { g__acro_#1_pages_seq } - { \ac@no@hp,~ } - \seq_gput_right:cx { g__acro_#1_pages_seq } - { \l__acro_tmp_page_tl } - } - { - \seq_gput_right:cn { g__acro_#1_pages_seq } - { \ac@no@hp\l__acro_next_page_tl } + \tl_put_right:Nn #2 { -- } + \seq_get_right:NN #1 \l__acro_tmpa_tl + \tl_put_right:Nx #2 { \acro_get_thepage_from:N \l__acro_tmpa_tl } } } { - \bool_if:NTF \l__acro_page_ranges_bool - { - \seq_gput_right:cn { g__acro_#1_pages_seq } - { \ac@no@hp-- } - \seq_gput_right:cx { g__acro_#1_pages_seq } - { \l__acro_tmp_page_tl } + \int_compare:nNnTF + { \seq_count:N #1 } = {2} + {% range of two pages + \seq_get_left:NN #1 \l__acro_tmpa_tl + \tl_put_right:Nx #2 { \acro_get_thepage_from:N \l__acro_tmpa_tl } + \bool_if:NTF \l__acro_following_page_bool + { \tl_put_right:Nn #2 { \l__acro_next_page_tl } } + { + \tl_put_right:Nn #2 { ,~ } + \seq_get_right:NN #1 \l__acro_tmpa_tl + \tl_put_right:Nx #2 { \acro_get_thepage_from:N \l__acro_tmpa_tl } + } } - { - \seq_gput_right:cn { g__acro_#1_pages_seq } - { \ac@no@hp\l__acro_next_pages_tl } + {% no range at all + \seq_get_right:NN #1 \l__acro_tmpa_tl + \tl_put_right:Nx #2 { \acro_get_thepage_from:N \l__acro_tmpa_tl } } } + \seq_clear:N #1 + \seq_put_right:Nn #1 { #3 } } } - -\cs_new:Npn \acro_print_page_numbers:n #1 - { - \cs_if_exist:cTF { acro@#1@pages } - { - \tl_set_eq:Nc \l__acro_tmpa_tl { acro@#1@pages } - \__acro_print_page_numbers:n { #1 } - } - { ?? } - } - -\cs_new:Npn \__acro_print_page_numbers:n #1 - { - \seq_set_split:NnV \l__acro_tmpb_seq { | } \l__acro_tmpa_tl - \seq_pop_right:NN \l__acro_tmpb_seq \l__acro_ignore_tl - \int_compare:nNnTF { \seq_count:N \l__acro_tmpb_seq } = { 1 } - { \l__acro_page_name_tl } { \l__acro_pages_name_tl } - \acro_no_break: - \skip_horizontal:N \l__acro_page_space_dim - \acro_no_break: - \seq_map_inline:Nn \l__acro_tmpb_seq { ##1 } - } +\cs_generate_variant:Nn \acro_determine_page_ranges:NNn { NNV } \AtBeginDocument { \tl_if_eq:NNT \l__acro_active_version_tl \l__acro_version_zero_tl { - \cs_set:Npn \__acro_print_page_numbers:n #1 + \cs_set:Npn \acro_print_page_numbers:n #1 { \acro_no_break: \skip_horizontal:N \l__acro_page_space_dim @@ -846,8 +901,7 @@ } } -\cs_new:Npn \acro_no_break: { \tex_penalty:D \c_ten_thousand } - +% -------------------------------------------------------------------------- \DeclareObjectType { acro-page-number } { 1 } \DeclareTemplateInterface { acro-page-number } { default } { 1 } @@ -937,13 +991,10 @@ % outputting the whole list \DeclareObjectType { acro-list } { 3 } -% excluded items: -\bool_new:N \l__acro_is_excluded_bool -\cs_generate_variant:Nn \tl_if_eq:nnT { nV } % #1: id % #2: excluded classes % #3: continue if not excluded -\cs_new:Npn \acro_is_excluded:nnF #1#2#3 +\cs_new_protected:Npn \acro_is_excluded:nnF #1#2#3 { \bool_set_false:N \l__acro_is_excluded_bool \tl_if_empty:nTF { #2 } @@ -952,7 +1003,7 @@ \clist_map_inline:nn { #2 } { \prop_get:NnNF \l__acro_class_prop { #1 } \l__acro_tmpa_tl {} - \tl_if_eq:nVT { ##1 } \l__acro_tmpa_tl + \tl_if_eq:VnT \l__acro_tmpa_tl { ##1 } { \bool_set_true:N \l__acro_is_excluded_bool } } \bool_if:NF \l__acro_is_excluded_bool { #3 } @@ -965,9 +1016,23 @@ \cs_new:Npn \acro_print_list_extra:n #1 { } \cs_new:Npn \acro_print_list_page:n #1 { } +\cs_new:Npn \acroenparen #1 { ( #1 ) } + +\cs_new_protected:Npn \acro_get_foreign:n #1 + { + \prop_get:NnNT \l__acro_foreign_prop { #1 } \l__acro_foreign_tl + { + \tl_use:N \l__acro_foreign_sep_tl + \group_begin: + \tl_use:N \l__acro_foreign_list_format_tl + { \tl_use:N \l__acro_foreign_tl } + \group_end: + } + } + % Test, if acronyms should be printed or not; needs testing for in/excluded % classes and options `only-used' and `single': -\cs_new:Npn \acro_list_allow_items:nn #1#2 +\cs_new_protected:Npn \acro_list_allow_items:nn #1#2 { \prop_map_inline:Nn \l__acro_short_prop { @@ -988,6 +1053,8 @@ { \bool_set_true:N \l__acro_first_upper_bool } \acro_print_list_long:n { ##1 } \bool_set_false:N \l__acro_first_upper_bool + \bool_if:NT \l__acro_foreign_bool + { \acro_get_foreign:n { ##1 } } \acro_print_list_extra:n { ##1 } \acro_print_list_page:n { ##1 } } @@ -1006,6 +1073,8 @@ { \bool_set_true:N \l__acro_first_upper_bool } \acro_print_list_long:n { ##1 } \bool_set_false:N \l__acro_first_upper_bool + \bool_if:NT \l__acro_foreign_bool + { \acro_get_foreign:n { ##1 } } \acro_print_list_extra:n { ##1 } \acro_print_list_page:n { ##1 } } @@ -1019,10 +1088,10 @@ % list template: \DeclareTemplateInterface { acro-list } { list } { 3 } - { } + { foreign-sep : tokenlist = { ~ } } \DeclareTemplateCode { acro-list } { list } { 3 } - { } + { foreign-sep = \l__acro_foreign_sep_tl } { \AssignTemplateKeys \__acro_activate_hyperref_support: @@ -1045,7 +1114,7 @@ { \prop_get:Nn \l__acro_long_prop { ##1 } } \__acro_cite_if:Nn \l__acro_citation_all_bool { ##1 } } - \cs_set:Npn \acro_print_list_extra:n ##1 + \cs_set_protected:Npn \acro_print_list_extra:n ##1 { \prop_get:NnNT \l__acro_extra_prop { ##1 } \l__acro_tmpa_tl { @@ -1064,19 +1133,18 @@ } % table template: -\tl_new:N \l__acro_list_table_tl -\tl_new:N \l__acro_list_table_spec_tl - \DeclareTemplateInterface { acro-list } { table } { 3 } { - table : tokenlist = longtable , - table-spec : tokenlist = lp{\l__acro_table_width_dim} + table : tokenlist = longtable , + table-spec : tokenlist = lp{\l__acro_table_width_dim} , + foreign-sep : tokenlist = { ~ } } \DeclareTemplateCode { acro-list } { table } { 3 } { - table = \l__acro_list_table_tl , - table-spec = \l__acro_list_table_spec_tl + table = \l__acro_list_table_tl , + table-spec = \l__acro_list_table_spec_tl , + foreign-sep = \l__acro_foreign_sep_tl } { \AssignTemplateKeys @@ -1098,7 +1166,7 @@ { \prop_get:Nn \l__acro_long_prop { ##1 } } \__acro_cite_if:Nn \l__acro_citation_all_bool { ##1 } } - \cs_set:Npn \acro_print_list_extra:n ##1 + \cs_set_protected:Npn \acro_print_list_extra:n ##1 { \prop_get:NnNT \l__acro_extra_prop { ##1 } \l__acro_tmpa_tl { @@ -1150,7 +1218,7 @@ \__acro_cite_if:Nn \l__acro_citation_all_bool { ##1 } & } - \cs_set:Npn \acro_print_list_extra:n ##1 + \cs_set_protected:Npn \acro_print_list_extra:n ##1 { \prop_get:NnNT \l__acro_extra_prop { ##1 } \l__acro_tmpa_tl { @@ -1192,7 +1260,7 @@ { \__acro_acc_supp:nn { ##1 } { \__acro_write_short:n { ##2 } } } & } - \cs_set:Npn \acro_print_list_extra:n ##1 + \cs_set_protected:Npn \acro_print_list_extra:n ##1 { \bool_if:NT \l__acro_capitalize_list_bool { \bool_set_true:N \l__acro_first_upper_bool } @@ -1201,7 +1269,7 @@ \__acro_cite_if:Nn \l__acro_citation_all_bool { ##1 } & } - \cs_set:Npn \acro_print_list_long:n ##1 + \cs_set_protected:Npn \acro_print_list_long:n ##1 { \prop_get:NnNT \l__acro_extra_prop { ##1 } \l__acro_tmpa_tl { @@ -1222,24 +1290,32 @@ } % the different styles: -\DeclareInstance { acro-list } { list } { list } { } -\DeclareInstance { acro-list } { tabular } { table } +\DeclareInstance { acro-list } { list } + { list } + { } +\DeclareInstance { acro-list } { tabular } + { table } + { table = tabular } +\DeclareInstance { acro-list } { longtable } + { table } + { table = longtable } +\DeclareInstance { acro-list } { extra-longtable } + { extra-table } + { table = longtable } +\DeclareInstance { acro-list } { extra-tabular } + { extra-table } { table = tabular } -\DeclareInstance { acro-list } { longtable } { table } +\DeclareInstance { acro-list } { extra-longtable-rev } + { extra-table-rev } { table = longtable } -\DeclareInstance { acro-list } { extra-longtable } { extra-table } - { table = longtable } -\DeclareInstance { acro-list } { extra-tabular } { extra-table } - { table = tabular } -\DeclareInstance { acro-list } { extra-longtable-rev } { extra-table-rev } - { table = longtable } -\DeclareInstance { acro-list } { extra-tabular-rev } { extra-table-rev } - { table = tabular } +\DeclareInstance { acro-list } { extra-tabular-rev } + { extra-table-rev } + { table = tabular } % -------------------------------------------------------------------------- % automatic typesetting, the internals of \ac: % #1: id -\cs_new:Npn \acro_use:n #1 +\cs_new_protected:Npn \acro_use:n #1 { % get the acronym and the plural settings: \acro_get:n { #1 } @@ -1269,27 +1345,28 @@ } } -\cs_new:Npn \__acro_is_single:nTF #1#2#3 +\prg_new_conditional:Npnn \__acro_is_single:n #1 { T,TF } { \bool_if:nTF { !\l__acro_use_single_bool || \cs_if_exist_p:c { acro@#1@twice } } - { #3 } { #2 } + { \prg_return_false: } { \prg_return_true: } } -\cs_new:Npn \__acro_is_single:nT #1#2 +\cs_new_protected:Npn \acro_use_if:n #1 { - \bool_if:nF { !\l__acro_use_single_bool || \cs_if_exist_p:c { acro@#1@twice } } - { #2 } + \tl_if_blank:nTF { #1 } + { \bool_set_true:N \l__acro_mark_as_used_bool } + { \bool_set_false:N \l__acro_mark_as_used_bool } } % -------------------------------------------------------------------------- % some helpers we'll need more often: -\cs_new:Npn \acro_defined:n #1 +\cs_new_protected:Npn \acro_defined:n #1 { \prop_if_in:NnF \l__acro_short_prop { #1 } { \msg_error:nnx { acro } { undefined } { #1 } } } -\cs_new:Npn \acro_get:n #1 +\cs_new_protected:Npn \acro_get:n #1 { \acro_defined:n { #1 } \__acro_activate_hyperref_support: @@ -1316,9 +1393,7 @@ { \tl_put_right:NV \l__acro_long_tl \l__acro_long_post_tl } } -\cs_generate_variant:Nn \tl_put_right:Nn { NV } - -\cs_new:Npn \__acro_set_plural:n #1 +\cs_new_protected:Npn \__acro_set_plural:n #1 { \bool_if:NT \l__acro_use_plural_bool { @@ -1334,7 +1409,7 @@ % -------------------------------------------------------------------------- % enable us to know if the acronym is used only once and provide a different % style for that: -\cs_new:Npn \acro_is_used:nTF #1#2#3 +\prg_new_protected_conditional:Npnn \acro_is_used:n #1 { TF } { \bool_if:nTF { @@ -1348,11 +1423,33 @@ ! \l__acro_mark_first_as_used_bool ) } - { \iow_now:Nx \@auxout { \string \acro@used@twice { #1 } } #2 } { - \iow_now:Nx \@auxout { \string \acro@used@once { #1 } } - \bool_if:NT \l__acro_mark_as_used_bool + \bool_if:NTF \l__acro_mark_as_used_bool + { + \iow_shipout_x:Nn \@auxout + { + \token_to_str:N \acro@used@twice { #1 } + { \thepage } + { \arabic{page} } + { \arabic{abspage} } + } + } { + \iow_shipout_x:Nn \@auxout + { \token_to_str:N \acro@used@twice { #1 } {} {} {} } + } + \prg_return_true: + } + { + \bool_if:NTF \l__acro_mark_as_used_bool + { + \iow_shipout_x:Nn \@auxout + { + \token_to_str:N \acro@used@once { #1 } + { \thepage } + { \arabic{page} } + { \arabic{abspage} } + } \bool_if:nT { !\bool_if_p:c { g__acro_#1_label_bool } && @@ -1364,25 +1461,64 @@ } \bool_gset_true:c { g__acro_#1_used_bool } } - #3 + { + \iow_shipout_x:Nn \@auxout + { \token_to_str:N \acro@used@once { #1 } {} {} {} } + } + \prg_return_false: } } \cs_new:Npn \acro_is_used:n #1 { \acro_is_used:nTF { #1 } { } { } } -\cs_new:Npn \acro@used@once #1 - { \expandafter\xdef\csname acro@#1@once \endcsname { #1 } } -\cs_new:Npn \acro@used@twice #1 - { \expandafter\xdef\csname acro@#1@twice \endcsname { #1 } } +% -------------------------------------------------------------------------- +% the commands for the auxiliary file: +\cs_new_protected:Npn \acro@used@once #1#2#3#4 + { + \expandafter\xdef\csname acro@#1@once \endcsname { #1 } + \tl_if_empty:nF { #2#3#4 } + { \seq_gput_right:cn { g__acro_#1_pages_seq } { {#2}{#3}{#4} } } + } +\cs_new_protected:Npn \acro@used@twice #1#2#3#4 + { + \expandafter\xdef\csname acro@#1@twice \endcsname { #1 } + \tl_if_empty:nF { #2#3#4 } + { \seq_gput_right:cn { g__acro_#1_pages_seq } { {#2}{#3}{#4} } } + } + +\cs_new_protected:Npn \acro@pages #1#2 + { \tl_gset:cn { g__acro_#1_recorded_pages_tl } { #2 } } \AtEndDocument { - \cs_set:Npn \acro@used@twice #1 + \cs_set_protected:Npn \acro@used@twice #1#2#3#4 + { + \tl_set:Nn \l__acro_tmpa_tl { #1 } + \tl_if_eq:cNF { acro@#1@twice } \l__acro_tmpa_tl + { \@tempswatrue } + } + \prop_map_inline:Nn \l__acro_short_prop { - \def\reserved@a{#1}% - \expandafter\ifx\csname acro@#1@twice \endcsname\reserved@a\else - \@tempswatrue\fi + \seq_if_empty:cF { g__acro_#1_pages_seq } + { + \iow_shipout_x:Nn \@auxout + { + \token_to_str:N \acro@pages { #1 } + { \seq_use:cnnn { g__acro_#1_pages_seq } { | } { | } { | } } + } + } + } + } + +% if `acro' is deactivated prevent unnecessary errors from aux file: +\AtBeginDocument + { + \iow_now:Nx \@auxout + { + \token_to_str:N \providecommand \token_to_str:N \acro@used@once [4] {} ^^J + \token_to_str:N \providecommand \token_to_str:N \acro@used@twice [4] {} ^^J + \token_to_str:N \providecommand \token_to_str:N \acro@pages [2] {} } } @@ -1394,7 +1530,7 @@ } % the standard internals: -\cs_new:Npn \acro_short:n #1 +\cs_new_protected:Npn \acro_short:n #1 { \acro_get:n { #1 } \acro_is_used:n { #1 } @@ -1408,7 +1544,7 @@ } % get alternative entry: -\cs_new:Npn \acro_alt:n #1 +\cs_new_protected:Npn \acro_alt:n #1 { \acro_get:n { #1 } \acro_is_used:n { #1 } @@ -1422,7 +1558,7 @@ } % get long entry: -\cs_new:Npn \acro_long:n #1 +\cs_new_protected:Npn \acro_long:n #1 { \acro_get:n { #1 } \acro_is_used:n { #1 } @@ -1434,7 +1570,7 @@ } % output like the first time: -\cs_new:Npn \acro_first:n #1 +\cs_new_protected:Npn \acro_first:n #1 { \bool_gset_true:c { g__acro_#1_first_use_bool } \acro_get:n { #1 } @@ -1448,7 +1584,7 @@ } % output like the first time with own long version: -\cs_new:Npn \acro_first_like:nn #1#2 +\cs_new_protected:Npn \acro_first_like:nn #1#2 { \bool_gset_true:c { g__acro_#1_first_use_bool } \acro_get:n { #1 } @@ -1463,6 +1599,8 @@ % ---------------------------------------------------------------------------- % citations: +\cs_new:Npn \__acro_citation_cmd:w { \cite } %{} + % #1 pre % #2 post % #3 key @@ -1478,7 +1616,7 @@ } \cs_generate_variant:Nn \__acro_cite:nnn { VVV } -\cs_new:Npn \__acro_cite_if:Nn #1#2 +\cs_new_protected:Npn \__acro_cite_if:Nn #1#2 { \bool_if:NT #1 { @@ -1486,7 +1624,7 @@ { \prop_get:NnN \l__acro_citation_pre_prop { #2 } \l__acro_tmpb_tl \prop_get:NnN \l__acro_citation_post_prop { #2 } \l__acro_tmpc_tl - \__acro_no_break: + \acro_no_break: \tl_use:N \l__acro_citation_space_tl \__acro_cite:VVV \l__acro_tmpb_tl @@ -1498,7 +1636,7 @@ % ---------------------------------------------------------------------------- % indexing: -\cs_new:Npn \__acro_index_if:Nn #1#2 +\cs_new_protected:Npn \__acro_index_if:Nn #1#2 { \bool_if:nT { #1 && \l__acro_mark_as_used_bool } { @@ -1513,33 +1651,33 @@ } } +\cs_new:Npn \__acro_index_cmd:n { \index } + % #1: cmd % #2: key % #3: sort % #4: replace -\cs_new:Npn \__acro_index:nnnn #1#2#3#4 +\cs_new_protected:Npn \__acro_index:nnnn #1#2#3#4 { - \prop_get:NnNF \l__acro_short_prop { #2 } \l__acro_tmpa_tl {} - \prop_get:NnNF \l__acro_format_prop { #2 } \l__acro_tmpb_tl {} - \quark_if_no_value:VTF \l__acro_tmpb_tl - { \tl_set:Nn \l__acro_tmpc_tl { \l__acro_short_format_tl \l__acro_tmpa_tl } } - { \tl_set:Nn \l__acro_tmpc_tl { \l__acro_tmpb_tl \l__acro_tmpa_tl } } + \prop_get:NnNF \l__acro_short_prop { #2 } \l__acro_index_short_tl {} + \prop_get:NnNF \l__acro_format_prop { #2 } \l__acro_index_format_tl {} + \quark_if_no_value:VTF \l__acro_index_format_tl + { \tl_set:Nn \l__acro_tmpa_tl { \l__acro_short_format_tl \l__acro_index_short_tl } } + { \tl_set:Nn \l__acro_tmpa_tl { \l__acro_index_format_tl \l__acro_index_short_tl } } \quark_if_no_value:nF { #1 } { \cs_set:Npn \__acro_index_cmd:n { #1 } } \quark_if_no_value:nTF { #4 } { \quark_if_no_value:nTF { #3 } - { \__acro_index_cmd:n { #2 @ { \l__acro_tmpc_tl } } } - { \__acro_index_cmd:n { #3 @ { \l__acro_tmpc_tl } } } + { \__acro_index_cmd:n { #2 @ { \l__acro_tmpa_tl } } } + { \__acro_index_cmd:n { #3 @ { \l__acro_tmpa_tl } } } } { \__acro_index_cmd:n { #4 } } } \cs_generate_variant:Nn \__acro_index:nnnn { VnVV } -\cs_generate_variant:Nn \quark_if_no_value:nTF { V } % ---------------------------------------------------------------------------- % accessability support -\tl_new:N \l__acro_acc_supp_tl \cs_new_eq:NN \__acro_acc_supp:nn \use_ii:nn \cs_new:Npn \__acro_acc_supp_aux:nn #1#2 @@ -1555,7 +1693,7 @@ \bool_if:NT \l__acro_acc_supp_bool { \RequirePackage { accsupp } - \cs_set:Npn \__acro_acc_supp:nn #1#2 + \cs_set_protected:Npn \__acro_acc_supp:nn #1#2 { \prop_get:NnNF \l__acro_acc_supp_prop { #1 } \l__acro_acc_supp_tl { \prop_get:NnNF \l__acro_short_prop { #1 } \l__acro_acc_supp_tl {} } @@ -1586,7 +1724,7 @@ \bool_if:NT \l__acro_sort_bool { \RequirePackage { l3sort } - \cs_new:Npn \acro_sort_prop:N #1 + \cs_new_protected:Npn \acro_sort_prop:N #1 { \seq_clear:N \l__acro_tmpa_seq \prop_clear:N \l__acro_tmpa_prop @@ -1623,18 +1761,12 @@ % -------------------------------------------------------------------------- % regarding list printing: -\cs_new:Npn \acro@print@list - { \cs_if_exist:NF \acro@printed@list { \cs_new:Npn \acro@printed@list {} } } - -\cs_new:Npn \acro_use_if:nn #1#2 - { - \IfBooleanTF { #1 } - { \bool_set_false:N \l__acro_mark_as_used_bool } - { - \acro_record_page_number:n { #2 } - \bool_set_true:N \l__acro_mark_as_used_bool - } - } +% this command ensures that a rerun warning is given when \printacronyms +% is set the first time. This mechanism doesn't make very much sense, +% should be replaced by a different and more efficient one +% +\cs_new_protected:Npn \acro@print@list + { \cs_if_exist:NF \acro@printed@list { \cs_new:Npn \acro@printed@list { printed } } } % -------------------------------------------------------------------------- % the user commands: @@ -1643,7 +1775,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \acro_use:n { #2 } \group_end: } @@ -1652,7 +1786,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_indefinite_bool \acro_use:n { #2 } \group_end: @@ -1662,7 +1798,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_upper_indefinite_bool \acro_use:n { #2 } \group_end: @@ -1682,7 +1820,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_use_plural_bool \acro_use:n { #2 } \group_end: @@ -1692,7 +1832,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_use_plural_bool \bool_set_true:N \l__acro_first_upper_bool \acro_use:n { #2 } @@ -1704,7 +1846,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \acro_short:n { #2 } \group_end: } @@ -1713,7 +1857,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_indefinite_bool \acro_short:n { #2 } \group_end: @@ -1723,7 +1869,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_upper_indefinite_bool \acro_short:n { #2 } \group_end: @@ -1733,7 +1881,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_use_plural_bool \acro_short:n { #2 } \group_end: @@ -1744,7 +1894,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \acro_alt:n { #2 } \group_end: } @@ -1753,7 +1905,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_indefinite_bool \acro_alt:n { #2 } \group_end: @@ -1763,7 +1917,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_upper_indefinite_bool \acro_alt:n { #2 } \group_end: @@ -1773,7 +1929,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_use_plural_bool \acro_alt:n { #2 } \group_end: @@ -1784,7 +1942,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \acro_long:n { #2 } \group_end: } @@ -1793,7 +1953,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_indefinite_bool \acro_long:n { #2 } \group_end: @@ -1803,7 +1965,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_upper_indefinite_bool \acro_long:n { #2 } \group_end: @@ -1813,7 +1977,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_first_upper_bool \acro_long:n { #2 } \group_end: @@ -1823,7 +1989,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_use_plural_bool \acro_long:n { #2 } \group_end: @@ -1833,7 +2001,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_use_plural_bool \bool_set_true:N \l__acro_first_upper_bool \acro_long:n { #2 } @@ -1845,7 +2015,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \acro_first:n { #2 } \group_end: } @@ -1854,7 +2026,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_indefinite_bool \acro_first:n { #2 } \group_end: @@ -1864,7 +2038,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_upper_indefinite_bool \acro_first:n { #2 } \group_end: @@ -1874,7 +2050,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_first_upper_bool \acro_first:n { #2 } \group_end: @@ -1884,7 +2062,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_use_plural_bool \acro_first:n { #2 } \group_end: @@ -1894,7 +2074,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_use_plural_bool \bool_set_true:N \l__acro_first_upper_bool \acro_first:n { #2 } @@ -1906,7 +2088,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \acro_first_like:nn { #2 } { #3 } \group_end: } @@ -1915,7 +2099,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_indefinite_bool \acro_first_like:nn { #2 } { #3 } \group_end: @@ -1925,7 +2111,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_upper_indefinite_bool \acro_first_like:nn { #2 } { #3 } \group_end: @@ -1935,7 +2123,9 @@ { \group_begin: \acro_defined:n { #2 } - \acro_use_if:nn { #1 } { #2 } + \IfBooleanTF { #1 } + { \acro_use_if:n { * } } + { \acro_use_if:n { } } \bool_set_true:N \l__acro_use_plural_bool \acro_first_like:nn { #2 } { #3 } \group_end: @@ -1943,23 +2133,25 @@ % reset outputs, they'll behave like the first time again (!not like the _only_ % time!): -\cs_new:Npn \acro_reset:n #1 +\cs_new_protected:Npn \acro_reset:n #1 { \bool_gset_false:c { g__acro_#1_used_bool } \bool_gset_false:c { g__acro_#1_first_use_bool } } -\cs_new:Npn \acro_mark_as_used:n #1 +\cs_new_protected:Npn \acro_mark_as_used:n #1 { \bool_gset_true:c { g__acro_#1_used_bool } \bool_gset_true:c { g__acro_#1_first_use_bool } - \acro@used@once { #1 } + \cs_if_exist:cTF { acro@#1@once } + { \cs_gset:cpn { acro@#1@twice } { #1 } } + { \cs_gset:cpn { acro@#1@once } { #1 } } } -\cs_new:Npn \acro_reset_all: +\cs_new_protected:Npn \acro_reset_all: { \prop_map_inline:Nn \l__acro_short_prop { \acro_reset:n { ##1 } } } -\cs_new:Npn \acro_mark_all_as_used: +\cs_new_protected:Npn \acro_mark_all_as_used: { \prop_map_inline:Nn \l__acro_short_prop { \acro_mark_as_used:n { ##1 } } } \NewDocumentCommand \acresetall {} @@ -1986,6 +2178,7 @@ \cs_new:Npn \acpdfstringplural { \acro_pdf_string_plural:n } +% TODO: why did I do this instead of \tl_if_eq:nnTF ? \cs_new:Npn \acro_tl_if_eq:nnTF #1#2 { \ifx#1#2\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi } @@ -2027,7 +2220,7 @@ \cs_set_eq:NN \Acfp \acpdfstringplural \cs_set_eq:NN \acap \acpdfstringplural } - \cs_set_eq:NN \acro_hyper_page:n \hyperpage + \cs_set_protected:Npn \acro_hyper_page:n #1 { \hyperpage { #1 } } } {} } @@ -2141,6 +2334,22 @@ - new commands: \iac, \Iac, \iacs, \Iacs, \iaca, \Iaca, \iacl, \Iacl, \iacf, \Iacf, \iacflike and \Iacflike 2013/04/04 v1.2a - added Portuguese translations +2013/05/06 v1.3 - protected internal commands where appropriate + - new option `sort' to \printacronyms + - renamed options `print-acronyms/header' and `list-header' + into `print-acronyms/heading' and `list-heading' + - fix: added missing group to \printacronyms + - add key `foreign' + - rewritten page-recording: + * most importantly: record them at shipout; this is done + when \acro@used@once or \acro@used@twice are written to + the aux file + * no restrictions regarding \pagenumbering + * options `page-ranges' and `record-pages' are deprecated + * new options `following-page' and `following-pages' + - disable \@noitemerr in the list of acronyms: we don't need + it there but there are occasions when it is annoying + - cleaned the sty file, added a few more comments % -------------------------------------------------------------------------- % TODO: @@ -2148,6 +2357,5 @@ - revise list styles to allow _full_ customization by creating own instances! this probably needs a handfull of macros that give access to the entries without worrying about internals -- record and list _all_ pagenumbers where an acronym occurs - add \ACF, \ACFP, \ACL and \ACLP that will print all words of the long form capitalized
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/acro/acro1.def b/Master/texmf-dist/tex/latex/acro/acro1.def index bbb7d992daf..925db9a97e2 100644 --- a/Master/texmf-dist/tex/latex/acro/acro1.def +++ b/Master/texmf-dist/tex/latex/acro/acro1.def @@ -58,7 +58,7 @@ something~different~wrong~and~I'm~lost.~You~'re~on~your~own~now. } -\cs_new:Npn \__acro_key_check:nn #1#2 +\cs_new_protected:Npn \__acro_key_check:nn #1#2 { \tl_if_blank:VT \l__acro_current_key_tl { \msg_error:nn { acro } { no-id } } @@ -68,7 +68,7 @@ \bool_set_true:c { l__acro_#1_#2_set_bool } } -\cs_new:Npn \__acro_first_key_check:n #1 +\cs_new_protected:Npn \__acro_first_key_check:n #1 { \cs_if_exist:cTF { l__acro_#1_short_set_bool } { @@ -84,7 +84,7 @@ % -------------------------------------------------------------------------- % the internal selection functions: % short: -\cs_new:Npn \__acro_declare_short:nn #1#2 +\cs_new_protected:Npn \__acro_declare_short:nn #1#2 { \__acro_first_key_check:n { #1 } \prop_put:Nnn \l__acro_short_prop { #1 } { #2 } @@ -103,7 +103,7 @@ } \cs_generate_variant:Nn \__acro_declare_short:nn { V } -\cs_new:Npn \__acro_declare_short_plural:nn #1#2 +\cs_new_protected:Npn \__acro_declare_short_plural:nn #1#2 { \__acro_key_check:nn { #1 } { short-plural } \prop_put:Nnn \l__acro_short_plural_prop { #1 } { #2 } @@ -111,7 +111,7 @@ \cs_generate_variant:Nn \__acro_declare_short_plural:nn { V } % long: -\cs_new:Npn \__acro_declare_long:nn #1#2 +\cs_new_protected:Npn \__acro_declare_long:nn #1#2 { \__acro_key_check:nn { #1 } { long } \prop_put:Nnn \l__acro_replace_plural_prop { #1 } { \c_false_bool } @@ -127,7 +127,7 @@ \cs_generate_variant:Nn \__acro_declare_long:nn { V } % long plural: -\cs_new:Npn \__acro_declare_long_plural:nn #1#2 +\cs_new_protected:Npn \__acro_declare_long_plural:nn #1#2 { \__acro_key_check:nn { #1 } { long-plural } \prop_put:Nnn \l__acro_replace_plural_prop { #1 } { \c_false_bool } @@ -136,7 +136,7 @@ \cs_generate_variant:Nn \__acro_declare_long_plural:nn { V } % long plural form: -\cs_new:Npn \__acro_declare_long_plural_form:nn #1#2 +\cs_new_protected:Npn \__acro_declare_long_plural_form:nn #1#2 { \__acro_key_check:nn { #1 } { long-plural-form } \prop_put:Nnn \l__acro_replace_plural_prop { #1 } { \c_true_bool } @@ -145,7 +145,7 @@ \cs_generate_variant:Nn \__acro_declare_long_plural_form:nn { V } % short indefinite article: -\cs_new:Npn \__acro_declare_short_indefinite:nn #1#2 +\cs_new_protected:Npn \__acro_declare_short_indefinite:nn #1#2 { \__acro_key_check:nn { #1 } { short-indefinite } \prop_put:Nnn \l__acro_short_indefinite_prop { #1 } { #2 } @@ -153,7 +153,7 @@ \cs_generate_variant:Nn \__acro_declare_short_indefinite:nn { V } % long indefinite article: -\cs_new:Npn \__acro_declare_long_indefinite:nn #1#2 +\cs_new_protected:Npn \__acro_declare_long_indefinite:nn #1#2 { \__acro_key_check:nn { #1 } { long-indefinite } \prop_put:Nnn \l__acro_long_indefinite_prop { #1 } { #2 } @@ -161,7 +161,7 @@ \cs_generate_variant:Nn \__acro_declare_long_indefinite:nn { V } % pre long: -\cs_new:Npn \__acro_declare_long_pre:nn #1#2 +\cs_new_protected:Npn \__acro_declare_long_pre:nn #1#2 { \__acro_key_check:nn { #1 } { long-pre } \prop_put:Nnn \l__acro_long_pre_prop { #1 } { #2 } @@ -169,7 +169,7 @@ \cs_generate_variant:Nn \__acro_declare_long_pre:nn { V } % post long: -\cs_new:Npn \__acro_declare_long_post:nn #1#2 +\cs_new_protected:Npn \__acro_declare_long_post:nn #1#2 { \__acro_key_check:nn { #1 } { long-post } \prop_put:Nnn \l__acro_long_post_prop { #1 } { #2 } @@ -177,7 +177,7 @@ \cs_generate_variant:Nn \__acro_declare_long_post:nn { V } % sort: -\cs_new:Npn \__acro_declare_sort:nn #1#2 +\cs_new_protected:Npn \__acro_declare_sort:nn #1#2 { \__acro_key_check:nn { #1 } { sort } \prop_put:Nnn \l__acro_sort_prop { #1 } { #2 } @@ -187,7 +187,7 @@ \cs_generate_variant:Nn \__acro_declare_sort:nn { V } % alternative: -\cs_new:Npn \__acro_declare_alt:nn #1#2 +\cs_new_protected:Npn \__acro_declare_alt:nn #1#2 { \__acro_key_check:nn { #1 } { alt } \prop_put:Nnn \l__acro_alt_prop { #1 } { #2 } @@ -197,15 +197,23 @@ \cs_generate_variant:Nn \__acro_declare_alt:nn { V } % alt. indefinite article: -\cs_new:Npn \__acro_declare_alt_indefinite:nn #1#2 +\cs_new_protected:Npn \__acro_declare_alt_indefinite:nn #1#2 { \__acro_key_check:nn { #1 } { alt-indefinite } \prop_put:Nnn \l__acro_alt_indefinite_prop { #1 } { #2 } } \cs_generate_variant:Nn \__acro_declare_alt_indefinite:nn { V } +% foreign: +\cs_new_protected:Npn \__acro_declare_foreign:nn #1#2 + { + \__acro_key_check:nn { #1 } { alt } + \prop_put:Nnn \l__acro_foreign_prop { #1 } { #2 } + } +\cs_generate_variant:Nn \__acro_declare_foreign:nn { V } + % format: -\cs_new:Npn \__acro_declare_format:nn #1#2 +\cs_new_protected:Npn \__acro_declare_format:nn #1#2 { \__acro_key_check:nn { #1 } { format } \prop_put:Nnn \l__acro_format_prop { #1 } { #2 } @@ -213,7 +221,7 @@ \cs_generate_variant:Nn \__acro_declare_format:nn { V } % long format: -\cs_new:Npn \__acro_declare_long_format:nn #1#2 +\cs_new_protected:Npn \__acro_declare_long_format:nn #1#2 { \__acro_key_check:nn { #1 } { long-format } \prop_put:Nnn \l__acro_long_format_prop { #1 } { #2 } @@ -221,7 +229,7 @@ \cs_generate_variant:Nn \__acro_declare_long_format:nn { V } % first long format: -\cs_new:Npn \__acro_declare_first_long_format:nn #1#2 +\cs_new_protected:Npn \__acro_declare_first_long_format:nn #1#2 { \__acro_key_check:nn { #1 } { first-long-format } \prop_put:Nnn \l__acro_first_long_format_prop { #1 } { #2 } @@ -229,7 +237,7 @@ \cs_generate_variant:Nn \__acro_declare_first_long_format:nn { V } % pdfstring: -\cs_new:Npn \__acro_declare_pdfstring:nw #1#2/#3/#4 \acro_stop: +\cs_new_protected:Npn \__acro_declare_pdfstring:nw #1#2/#3/#4 \acro_stop: { \__acro_key_check:nn { #1 } { pdfstring } \prop_put:Nnx \l__acro_pdfstring_prop { #1 } { #2 } @@ -246,7 +254,7 @@ \cs_generate_variant:Nn \__acro_declare_pdfstring:nw { V } % class: -\cs_new:Npn \__acro_declare_class:nn #1#2 +\cs_new_protected:Npn \__acro_declare_class:nn #1#2 { \__acro_key_check:nn { #1 } { class } \prop_put:Nnn \l__acro_class_prop { #1 } { #2 } @@ -254,7 +262,7 @@ \cs_generate_variant:Nn \__acro_declare_class:nn { V } % extra information: -\cs_new:Npn \__acro_declare_extra:nn #1#2 +\cs_new_protected:Npn \__acro_declare_extra:nn #1#2 { \__acro_key_check:nn { #1 } { extra } \prop_put:Nnn \l__acro_extra_prop { #1 } { #2 } @@ -262,7 +270,7 @@ \cs_generate_variant:Nn \__acro_declare_extra:nn { V } % acc supp: -\cs_new:Npn \__acro_declare_acc_supp:nn #1#2 +\cs_new_protected:Npn \__acro_declare_acc_supp:nn #1#2 { \__acro_key_check:nn { #1 } { accsupp } \prop_put:Nnn \l__acro_acc_supp_prop { #1 } { #2 } @@ -270,7 +278,7 @@ \cs_generate_variant:Nn \__acro_declare_acc_supp:nn { V } % citation: -\cs_new:Npn \__acro_declare_citation:nw #1#2[#3]#4[#5]#6#7 \acro_stop: +\cs_new_protected:Npn \__acro_declare_citation:nw #1#2[#3]#4[#5]#6#7 \acro_stop: { % no options: #1: ID, #2: key, #3 is blank % 1 option: #1: ID, #4: key, #3: option, #5 is blank @@ -288,7 +296,7 @@ } \cs_generate_variant:Nn \__acro_declare_citation:nw { V } -\cs_new:Npn \__acro_declare_citation_aux:nnnn #1#2#3#4 +\cs_new_protected:Npn \__acro_declare_citation_aux:nnnn #1#2#3#4 { \__acro_key_check:nn { #1 } { cite } \prop_put:Nnn \l__acro_citation_prop { #1 } { #4 } @@ -311,7 +319,7 @@ % TeX code after an acronym is typeset % index: -\cs_new:Npn \__acro_declare_index:nn #1#2 +\cs_new_protected:Npn \__acro_declare_index:nn #1#2 { \__acro_key_check:nn { #1 } { index } \prop_put:Nnn \l__acro_index_prop { #1 } { #2 } @@ -319,7 +327,7 @@ \cs_generate_variant:Nn \__acro_declare_index:nn { V } % index-sort: -\cs_new:Npn \__acro_declare_index_sort:nn #1#2 +\cs_new_protected:Npn \__acro_declare_index_sort:nn #1#2 { \__acro_key_check:nn { #1 } { index-sort } \prop_put:Nnn \l__acro_index_sort_prop { #1 } { #2 } @@ -327,7 +335,7 @@ \cs_generate_variant:Nn \__acro_declare_index_sort:nn { V } % index-cmd: -\cs_new:Npn \__acro_declare_index_cmd:nn #1#2 +\cs_new_protected:Npn \__acro_declare_index_cmd:nn #1#2 { \__acro_key_check:nn { #1 } { index-cmd } \prop_put:Nnn \l__acro_index_cmd_prop { #1 } { #2 } @@ -364,6 +372,8 @@ \__acro_declare_sort:Vn \l__acro_current_key_tl { #1 } , extra .code:n = \__acro_declare_extra:Vn \l__acro_current_key_tl { #1 } , + foreign .code:n = + \__acro_declare_foreign:Vn \l__acro_current_key_tl { #1 } , format .code:n = \__acro_declare_format:Vn \l__acro_current_key_tl { #1 } , short-format .code:n = @@ -388,7 +398,7 @@ \__acro_declare_index_cmd:Vn \l__acro_current_key_tl { #1 } } -\cs_new:Npn \acro_define_acronym_macro:n #1 +\cs_new_protected:Npn \acro_define_acronym_macro:n #1 { \bool_if:NT \l__acro_create_macros_bool { @@ -403,7 +413,7 @@ % -------------------------------------------------------------------------- % internal acronym declaring function: -\cs_new:Npn \acro_declare_acronym:nn #1#2 +\cs_new_protected:Npn \acro_declare_acronym:nn #1#2 { \tl_set:Nn \l__acro_current_key_tl { #1 } \keys_set:nn { acro / declare-acronym } { #2 } @@ -432,7 +442,7 @@ \tl_new:N \l__acro_included_classes_tl \tl_new:N \l__acro_excluded_classes_tl -\cs_new:Npn \acro_use_list_instance:nn #1#2 +\cs_new_protected:Npn \acro_use_list_instance:nn #1#2 { \UseInstance { acro-list } { \l__acro_list_instance_tl } { \l__acro_list_type_tl } { #1 } { #2 } @@ -441,29 +451,39 @@ \keys_define:nn { acro / print-acronyms } { - include-classes .tl_set:N = \l__acro_included_classes_tl , - exclude-classes .tl_set:N = \l__acro_excluded_classes_tl , - name .tl_set:N = \l__acro_list_name_tl , - header .tl_set:N = \l__acro_list_title_tl - } - -\cs_new:Npn \acro_print_acronyms:n #1 - { - \tl_clear:N \l__acro_included_classes_tl - \tl_clear:N \l__acro_excluded_classes_tl - \keys_set:nn { acro / print-acronyms } { #1 } - \iow_now:Nx \@auxout { \string \acro@print@list } - \bool_if:NT \l__acro_sort_bool - { \acro_sort_prop:N \l__acro_short_prop } - \UseInstance { acro-title } { \l__acro_list_title_tl } - { \l__acro_list_name_tl } - \cs_if_exist:NTF \acro@printed@list - { - \acro_use_list_instance:VV - \l__acro_included_classes_tl - \l__acro_excluded_classes_tl - } - { \@latex@warning@no@line {Rerun~to~get~acronym~list~right} } + include-classes .tl_set:N = \l__acro_included_classes_tl , + exclude-classes .tl_set:N = \l__acro_excluded_classes_tl , + name .tl_set:N = \l__acro_list_name_tl , + header .code:n = + \acro_option_deprecated:nn { header } { heading } + \tl_set:Nn \l__acro_list_title_tl { #1 } , + heading .tl_set:N = \l__acro_list_title_tl , + sort .bool_set:N = \l__acro_sort_bool + } + +\cs_new_protected:Npn \acro_print_acronyms:n #1 + { + \group_begin: + % this is a cheap trick to prevent the \@noitemerr + % if one forgot to delete either the aux file or + % remove \printacronyms -- but it's local: + \cs_set:Npn \@noitemerr {} + \tl_clear:N \l__acro_included_classes_tl + \tl_clear:N \l__acro_excluded_classes_tl + \keys_set:nn { acro / print-acronyms } { #1 } + \iow_now:Nx \@auxout { \string \acro@print@list } + \bool_if:NT \l__acro_sort_bool + { \acro_sort_prop:N \l__acro_short_prop } + \UseInstance { acro-title } { \l__acro_list_title_tl } + { \l__acro_list_name_tl } + \cs_if_exist:NTF \acro@printed@list + { + \acro_use_list_instance:VV + \l__acro_included_classes_tl + \l__acro_excluded_classes_tl + } + { \@latex@warning@no@line {Rerun~to~get~acronym~list~right} } + \group_end: } \NewDocumentCommand \printacronyms { O{} } |